线网类与寄存器型区别

变量类型

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中的寄存器型一定对应电路中的寄存器吗?

原文地址:https://www.cnblogs.com/kefu/p/13760298.html