Verilog基本概念
了解Verilog HDL程序的框架
刷题推荐
链接: Verilog刷题
常用Verilog语法(1)
模块的结构
module block(a,b,c,d);
input a,b;
output c,d;
assign c = a|b;
assign d = a&b;
endmodule
从这个例子中可以看出Verilog结构位于在module和endmodule声明语句之间,包括四个主要部分:端口定义、I/O说明、内部信号声明和功能定义。
模块的端口定义
模块的端口声明了模块的输入输出口
module 模块名(口1,口2,口3...);
模块内容
内容包括I/O说明、内部信号声明和功能定义
1,I/O说明的格式
输入口: input [信号位宽-1:0] 端口名1;
input [信号位宽-1:0] 端口名2;
输出口: output [信号位宽-1:0] 端口名1;
output [信号位宽-1:0] 端口名2;
输入/输出口:
inout [信号位宽-1:0] 端口名1;
inout [信号位宽-1:0] 端口名2;
2,内部信号说明
在模块内使用到与端口有关的wire和reg类型变量的声明。
reg [width-1:0] R变量1,R变量2...;
wire[width-1:0] R变量1,R变量2...;
3,功能定义
模块中最重要的逻辑功能定义部分,有三种方法可以在模块中产生逻辑。
1)用“assign”声明语句
2)用实例元件
如:and #2 u1(q,a,b);
设计中用到一个跟与门(and)一样的名为u1的与门,输入端为a,b,输出端为q,输出延迟为2个单位时间,注意每个具体化后的实例元件的名字必须是唯一的。
3)用“always”块
如:always @(posedge clk or posedge clr)
begin
if(clr) q <= 0;
else if(en) q <= d;
end
用“always”块既可用于描述组合逻辑也可描述时序逻辑。注意 ‘<=’不是小于等于,而是一种赋值运算符,这里只当做‘=’来思考
数据类型及其常量和变量
Verilog HDL总共有19种数据类型。分别是reg型、wire型、integer型、parameter型、large型、medium型、scalared型、time型、small型、tri型、trio型、tril型、triand型、trior型、trieg型、vectored型、wand型和wor型
1,数字
A、整型常量有4种进制表示形式:
1)二进制整数(b或B);
2)十进制整数(d或D);
3)十六进制整数(h或H);
4)八进制整数(o或O);
B、数字表达式:
8'b10101100 //位宽为8的二进制表示,'b表示二进制
8'ha2 //位宽为8的十六进制表示,'h表示二进制
C、x 和 z 在数字电路中分别表示不定值和高阻值,x可以定义十六进制的4位二进制数状态,八进制数的3位,二进制数的1位。z还有一种表达方式可以写字‘?’,
4'b10x0 //位宽为4的二进制数,从低位数起,第2位为不定值
4'b101z //位宽为4的二进制数,从低位数起,第1位为高阻值
12'dz //位宽为12的十进制数,其值为高阻值(第一种表达方式)
12'd? //位宽为12的十进制数,其值为高阻值(第二种表达方式)
8'h4x //位宽为8的十六进制数,其低4位值为不定值
D、负数
-8'b10101100 //代表5的补数(用八位二进制数表示)
8'h-a2 //非法格式
E、下划线
16'b1010_1011_1111_1010 //合法格式
8'b_0010_1010 //非法格式
当常量不说明位数时,默认是32位,每个字母用8位ASCLL值表示
10 = 32'd10 = 32'b1010
"AB" = 16'B01000001_010000010
2,参数(parameter)型
用parameter来定义常量,参数型数据经常用于定义延迟时间和变量宽度。
parameter size = 8;
3,变量
A、wire型
wire型数据常用来表示以assign关键字指定的组合逻辑信号,可以用作任何方程式的输入,也可用作“assign”语句或实例元件的输出
wire a; //定义了一个1位的wire型数据
wire [7:0] b; //定义了一个8位的wire型数据
wire [4:1] c,d; //定义了两个4位的wire型数据
B、reg型
寄存器数据类型的关键字是reg。reg型数据常用来表示“always”模块内指定信号,常代表触发器。在“always”块内被赋值的每一个信号都必须定义成reg型。
reg a; //定义了一个1位的reg型数据
reg[7:0] b; //定义了一个8位的reg型数据
reg[4:1] c,d; //定义了两个4位的reg型数据
运算符
1)算术运算符(+,-,*,/,%)
2)赋值运算符(=,<=)
3)关系运算符(>,<,>=,<=)
4)逻辑运算符(&&,||,!)
5)条件运算符(?:)
6)位运算符 (~,|,^,&)
7)移位运算符(<<,>>)
8)拼接运算符({})
9)其他
自学Verilog(三)链接: 常用Verilog语法(2)
这里是引用《Verilog数字系统设计教程》——夏宇闻