有5种不同的寄存器类型。

  • reg
  • integer
  • time
  • real
  • realtime

reg寄存器类型

寄存器数据类型reg是最常见的数据类型。reg类型使用保留字reg加以说明,形式如下:

reg [msb:lsb] reg1,reg2,...,regN;

范围定义是可选的;如果没有定义范围,缺省值为1位寄存器。寄存器可以取任意长度。寄存器中的值通常被解释为无符号数。

存储器

存储器是一个寄存器数组。

reg [msb:lsb] memory1 [upper1:lower1],
              memory2 [upper2:lower2],...;
reg [0:3] MyMem [0:63]//MyMem为64个4位寄存器组

存储器赋值不能在一条赋值语句中完成,但是寄存器可以。因此在存储器被赋值时,需要定义一个索引。下例说明它们之间的不同。

有一种存储器赋值的方法是分别对存储器中的每个字赋值。

reg [0:3] Xrom [1:4]
...
Xrom[1]=4'hA;
Xrom[2]=4'h8;
Xrom[3]=4'hF;
Xrom[4]=4'h2;

为存储器赋值的另一种方法是使用系统任务:

  • $readmemb (加载二进制值)
  • $readmemH (加载十六进制值)
reg [1:4] RomB[7:1];
$ readmemb("ram.patt",RomB);//Romb是存储器。文件“ram.patt”必须包含二进制值。文件也可以包含空白空间和注释。

integer寄存器类型

整数寄存器包含整数值。整数寄存器可以作为普通寄存器使用,典型应用为高层次行为建模。

integer integer1,integer2,...,integerN[msb:lab];//msb和lsb是定义整数数组界限的常量表达式,数组界限的定义是可选的。注意容许无位界限的情况。一个整数最少容纳32位。
integer A,B,C;//三个整型寄存器
integer Hist [3:6];//一个包括四个寄存器的整数数组

一个整数型寄存器可存储有符号数,并且算术操作符提供 2的补码运算结果。整数不能作为位向量访问。

time类型

time类型的寄存器用于存储和处理时间。 time类型的寄存器使用下述方式加以说明。

time time_id1,time_id2,...,time-idN[msb,lsb];
//msb和lsb是表明范围界限的常量表达式。如果未定义界限,每个标识符存储一个至少64位的时间值。时间类型的寄存器只存储无符号数。
time Events [0:31];//时间值数组
time CurrTime;//CurrTime存储一个时间值