• 接着上回的分解,即在上一文的《Verilog基础知识(二)》里,已经对Verilog的两大类数据类型的线网类型进行了总结,这回主要讲解变量类型。

变量类型(Variable Type)表示一个抽象的数据存储单元,它只能在always语句和initial语句中被赋值。从一次赋值到下一次赋值之前,变量的值保持一个值不变。注意变量类型的缺省值为x,线网类型的缺省值是z。

变量类型有5种不同的类型。它们分别是reg、integer、time、real、realtime。

1. reg变量类型

这是最常用到的数据类型。她使用保留关键字reg给予声明变量,语法形式如下:

reg [signed] [[msb:lsb]] reg1,reg2,…,regN;

这个语句中的各个内容含义跟线网类型声明中各部分含义几乎一样。若没有signed的声明,reg变量中值被解释为无符号数。下面举几个例子:

reg [7:0] abus; //abus为8位的变量

reg t_count; //t_count为一位变量

reg signed [3:0] u_test; //u_test为有符号4位变量

2. 整型变量(integer)类型

该类型的声明语法格式如下:

integer integer1,integer2,…,integerN [[msb:lsb]];

注意这里的[[msb:lsb]]跟前面的不同,这是数组范围的定义,是可选的,不定义的整型数组的范围是允许的。一个整型数至少有32位。举例如下:

integer a,b,c; //3个整型变量

integer foot_io [1:4]; //由4个整型数组成的数组

整型变量可存储有符号数。整型数能被当作位向量存取。整型变量被当作有符号的reg变量,其最小位的索引为0。如,对上面的b变量,b[3]和b[20:10]是合法的。又如下面的例子:

reg [31:0] a_reg;

integer a_int;

a_reg=a_int;

3. 时间(time)变量

时间变量用于存储和处理时间值。其声明格式如下:

time time_id1,time_id1,…,time_idN [msb:lsb];

若没有定义数的位宽,则每个标识符存储的时间值至少为64位。时间变量只能存储无符号数。

4. 实型(real)和实型时间(realtime)变量

它们的声明格式如下:

real(realtime)real_1(realtime_1),real_2(realtime_2),…,real_N(realtime_N);

实型变量不允许对位宽做任何指定。若将x和z赋予实型变量,这些值将被当作0来处理。

本次总结到此为止。