一、reg型
reg主要用于定义特定类型的变量,即寄存器变量或寄存器型数据类型的变量。
寄存器变量的定义格式如下:
reg 变量名1,变量名2,...;
reg [msb : lsb] 变量名1,变量名2, ...;
例如:定义输出端口seg一个寄存器数据类型的7位总线
output reg [6 : 0] seg;
二、wire型
对于模块中功能描述设计的所有信号都必须定义相应的变量类型。如果没有在模块中显示地定义信号的类型,Verilog 综合器都将其默认定义为wire型。
如果assign语句中需要有端口以外的信号或连接线性质的变量(由于端口都已默认为网线型变量),特别是考虑到assign语句中的输出信号变量必须是wire网线型变量,则必须用网线型变量定义语句事先给出显示定义。
wire是定义网线型变量的关键词
wire的具体定义格式如下:
wire 变量名1,变量名2,...;
wire [msb : lsb] 变量名1,变量名2, ...;
例如:定义矢量位a[7 : 0]为网线型变量的表达式是:
wire [7 : 0] a;
三、integer型
integer类型与前面已介绍过的reg类型都属于同类的寄存器类型,或称变量类型。定义为integer类型的变量多数被用于表达循环变量,用于指示循环的次数。
integer的一般定义格式如下:
integer 标识符1,标识符2,... ,标识符n [msb : lsb];
例如:
integer A, B[3 : 0]; //定义5个整数型:A、B[0]、B[1]、B[2]、B[3],都是32位。
integer与reg类型的定义不同,reg类型必须明确定义其位数。然而integer类型的定义则不必特指位数,因为它们都默认为32位宽的二进制数寄存器类型。
四、常量
在程序运行时,其值不能被改变的量叫常量。
两类最基本的常量:数字型常量和参数型(parameter)
1、数字型常量:整数型可按如下两种方式书写
1)基数表示法
格式:
[位宽]'进制 值
定义的为无符号数,位宽是按照二进制来计算的。进制可以为B(二进制)、O(八进制)、D(十进制)、H(十六进制)。
例如:
3'b001, 3'B110 三位二进制
6'o12, 6'O12 六位八进制
4'd9, 4'D9 四位十进制
8'hBF 8'HBF 八位十六进制
2)简单的十进制格式
这种形式的整数定义为带有一个可选的“+”(一元)或“-”(一元)运算符的数字序列。
这种形式的整数值代表一个有符号的数。负数使用补码形式表示。
15 相当于二进制01111
-15 相当于二进制10001
x(或z)在十六进制值中代表4位x(或z),在八进制中代表3位x(或z),在二进制中代表1位x(或z)
当常量不说明位数时候默认是32位,每个字母用8位ASCII码来表示
10 =32'd10 =32'b1010
1=32'd1 =32'b1
-1 = -32'd1 =32'hFFFF_FFFF
'BX=32'BX=32'BXXXXXXXXXX...
“AB”=16'B 010000001_01000010
A的ASCII值是85,B的值是86
2、 参数型(parameter)
参数是一个特殊常量,parameter就是定义参数的关键词。用parameter定义一个标识符来代表一个常量。参数经常用于定义时延和变量的宽度。
parameter的一般定义格式如下:
parameter 标识符名1 = 表达式或数值1, 标识符名2 = 表达式或数值2, ... ;
例如:
parameter Delay = 1;
parameter A = 32,B=4'b0001;
parameter string = “exec_command”;