当前位置:   article > 正文

Verilog 基础语法合集_verilog 语法

verilog 语法

模块定义:

  1. module 模块名 (输入, 输出) 
  2. endmodule;

信号声明:

wire/reg 信号名;

输入声明:

input 信号名;

输出声明:

output 信号名;

内部寄存器声明:

reg 信号名;

连接声明:

assign 信号名 = 表达式;

注释:

// 注释内容

多行注释:

/* 注释内容 */

位宽指定:

[位宽-1:0] 信号名;

立即赋值:

信号名 = 值;

常量定义:

parameter 常量名 = 值;

时钟信号:

always @(posedge 时钟信号)

信号延迟:

#时间单位 延迟时间;

选择结构:

  1. if (条件)
  2. begin ... end

选择结构(多条件):

  1. if (条件1)
  2. begin ... end
  3. else if (条件2)
  4. begin ... end

分支结构:

  1. case (信号)
  2. ...
  3. endcase

循环结构:

  1. for (变量声明; 条件; 迭代)
  2. begin
  3. ...
  4. end

延迟循环:

  1. repeat (次数)
  2. begin
  3. ...
  4. end

条件循环:

  1. while (条件)
  2. begin
  3. ...
  4. end

无限循环:

  1. forever
  2. begin
  3. ...
  4. end

运算符:

  1. 算术运算符:
  2. +:加法运算或者正值运算,a+b、+a
  3. — :减法运算或者负值运算:a—b、—a
  4. * :乘法运算:a*b
  5. / :除法运算:a/b
  6. % :求余运算:a%b,%两侧的数据必须为整型数据;
  7. 位运算符:
  8. ~ :按位取反 a=1001 ~a=0110
  9. & :按位与 a=1001 b=0001 a&b=0001
  10. | :按位或 a=1001 b=0001 a|b=1001
  11. ^ :按位异或 a=1001 b=0001 a^b=1000
  12. ^~ :按位同或(异或非) a=1001 b=0001 a^~b=0111
  13. 逻辑运算符:
  14. &&:逻辑与:a&&b,a和b同时为真时才为真,否则为假
  15. ||:逻辑或:a||b,a和b同时为假时才为假,否则为真
  16. ! :a为真时,!a为假
  17. 条件运算符:
  18. assign a = (b)?4'b1:4'b0; 如果b为真,那么a = 4'b1,否则a = 4'b0
  19. 关系运算符:
  20. a < b :a小于b
  21. a > b :a大于b
  22. a == b :a等于b
  23. a != b :a不等于b
  24. a <= b :a小于或等于b
  25. a >= b :a大于或等于b
  26. 移位运算符:
  27. reg [3:0] a,c;
  28. reg [5:0] b;
  29. a = 4'h1001;
  30. b = a<<2; 此时b=6'h100100
  31. c = a>>2; 此时c=4'h0010
  32. 左移位数增加,右移位数不变
  33. 位拼接运算符:
  34. a = 4'h1101;
  35. b = 6'h111000;
  36. c = 2'h11;
  37. d = {a[3],b[2:0],c};此时d = 100011
  38. e = {2{b}}; 此时e = {b,b} = 111000111000
  39. f = {a,b,2{a,c}} 此时f = {a,b,a,c,a,c} = 111111000110111110111

数字赋值:

  1. 'b 二进制值
  2. 'h 十六进制值
  3. 'd 十进制值

高阻态:

tri/wire 信号名;

模块实例化:

模块名 实例名 (.端口(信号));

延迟控制:

#时间单位 延迟时间 语句;

延迟设定:

`timescale 时间单位/时间精度

初始块:

  1. initial
  2. begin
  3. ...
  4. end

模块实例输入连接:

.端口名(信号名)

模块实例输出连接:

.端口名(信号名)

阻塞赋值:

信号名 = #时间单位 延迟时间 表达式;

非阻塞赋值:

信号名 <= 表达式;

初始化赋值:

reg 信号名 = 值;

分隔符:

\n ;

局部参数:

localparam 参数名 = 值;

模块实例数组:

模块名 #(参数值) 实例名 (端口连接);

模块端口声明:

(.端口名(信号名))

模块实例化数组:

模块名 #(参数值) 实例名 [数组大小] (.端口(信号));

任务声明:

task 任务名 (输入);

任务调用:

任务名 (参数);

函数声明:

function 返回类型 函数名 (输入);

函数调用:

函数名 (参数);

阻塞延迟:

#时间单位 延迟时间;

非阻塞延迟:

#时间单位 延迟时间;

拉高信号:

force 信号名 = 值;

拉低信号:

release 信号名;

引用库:

`include "文件名"

阻塞语句:

@(敏感信号) 语句;

无条件停止:

$stop;

显示变量值:

$display("文本 %d", 变量);

模块输入输出声明:

input/output/wire/reg [位宽-1:0] 信号名;

延迟块:

  1. #时间单位
  2. begin
  3. ...
  4. end

分号运算符:

表达式1; 表达式2;

空操作符:

;

等待信号改变:

wait (信号);

强制停止:

$finish;

阻塞式循环:

  1. for (变量声明; 条件; 迭代)
  2. begin
  3. ...
  4. end

随机数生成:

$random;

选择结构(优先级):

  1. unique case (信号)
  2. ...
  3. endcase

分支结构(不完全):

  1. casex (信号)
  2. ...
  3. endcase

分支结构(完全):

  1. casez (信号)
  2. ...
  3. endcase

常量宏定义:

`define 常量名 值

条件编译:

ifdef 宏名 ... endif

整数类型:

integer

实数类型:

real

字符类型:

byte

字符串类型:

string

扩展系统函数库:

`include "svlib.sv"

不可变信号:

input wire 信号名;

强制块:

force -drive/-load 信号名 = 值;

解除块:

release -drive/ -load 信号名;

分层模块实例:

模块名 模块实例名 (.端口名(模块实例名.端口名));

信号维持:

always @* 信号名 = 表达式;

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/空白诗007/article/detail/784437
推荐阅读
相关标签
  

闽ICP备14008679号