变量类型
verilog中有两种变量类型。
-
线网型:表示电路间的连线。
-
寄存器型:verilog中一个抽象的存储数据单元。
凡是在always或initial语句中赋值的变量,一定是寄存器变量;凡是在assign语句中赋值的变量,一定是线网变量。
线网类型
线网类型下又包括几种子类型,它们具有线网的共性。
-
wire、tri:表示电路间的物理连线,tri主要用于多驱动源建模。
-
wor、trior:表示该连线具有“线或”功能。
-
wand、triand:表示该连线具有“线与”功能。
-
trireg:表示该连线具有总线保持功能。
-
tri1、tri0:表示当无驱动时,连线状态为1(tri1)和0(tri0)。
-
supply1、supply0:分别表示电源和地信号。
在以上描述的线网类型中,除了trieg末初始化时的值为“X”以外,其余子类型未初始化时的值均为“Z”。
"X"与“Z”
我们都知道,数字电路中,只有0和1,而在verilog中,增加了“x”和“Z”。
- 当"X" 用作信号状态时表示未知,当用作条件判断时(在casex 或casez中)表示不关心;
- "Z" 表示高阻状态,也就是没有任何驱动,通常用来对三态总线进行建模。
- 但是在综合工具中,或者说在实际实现的电路中,并没有什么X值,只存在0、1和Z三种状态。在实际电路中还可能出现亚稳态,它既不是0,也不是1,而是一种不稳定状态,这种是要极力避免的。
线网类型主要用在连续赋值语句中,并可以作为模块之间的互连信号。
寄存器类型
寄存器类型的变量在Verilog 语言中通常表示一个存储数据的空间,在Verilog 仿真器中,寄存器类型的变量通常要占据一个仿真内存空间。
-
reg:是最常用的寄存器类型数据,可以是一位、多位或二维数组(存储器)。
-
integer:整数型数据,存储一个至少32 位的整数。
-
time: 时间类型,存储一个至少64 位的时间值。
-
real 、realtime:实数和实数时间寄存器。
驱动和赋值
-
线网是被驱动的,该值不被存储,在任意一个仿真步进上都需要重新计算。
-
寄存器是被赋值的,且该值将在仿真过程中被保存,直到再次对该变量进行赋值。
-
在叙述时为了简单起见,常将"驱动"和"赋值"统一说成赋值,但是我们一定要清楚
其本质。
Question
这里提一个问题,verilog中的寄存器型一定对应电路中的寄存器吗?