变量是数据存储单元的抽象。变量具有如下特性。
变量将保持每次赋给它的值,直到下一次赋值给它。当过程块被触发时,过程块中的赋值就会改变变量的值。
reg、time和integer的初始化值是x,real和realtime的初始化值是0.0。如果使用变量声明赋值(variable declaration assignment,例如reg abc = 1'b0;),那么就相当于在initial块中使用阻塞赋值。
对reg的赋值是过程赋值,因为reg能够保持每次赋的值,所以它能用于模型硬件寄存器(例如,边沿敏感的触发器或电平敏感的锁存器)。但是reg不只用于模型硬件寄存器,它也用于模型组合逻辑。
除了用于模型硬件,变量也有其他的用途。虽然reg很通用,但是integer和time可以提供更大的方便性和可读性。time变量常和$time函数一起使用。
注意:可以把负值赋给线网和变量,只有integer、real、realtime、reg signed和net signed才能保持符号标志,而time、reg unsigned和net unsigned则把赋给它们的数值都当做无符号数处理。
注意:interger等价于reg signed[31:0],time等价于reg unsigned[63:0]。
注意:real和realtime是等价的,都是64-bit双精度浮点数,只不过realtime变量常和$realtime函数一起使用。
注意:不能对real和realtime使用位索引(bit-select)和部分索引(part-select)。
例子:
integer i = 32'h1234_5678;
time t = 64'habcd_efab_1234_5678;
$display ("%x, %x", i[15:0], t[63:60]);