d643189658 发表于 2017-8-11 19:43:38

在Verilog中何时用wire,何时用reg?

在Verilog中何时用wire,何时用reg?

Verilog HDL中的变量可以定义为wire型和reg型,这两种类型的变量在定义时要设置位宽,缺省为1位,变量的每一位可以取0、1、x、z,其中x代表未预置初始状态,z代表高阻状态。
reg相当于存储单元,wire型相当于物理连线,即reg型变量保持最后一次的赋值,而wire型变量需要持续的驱动。

那么,在Verilog HDL中何时用wire,何时用reg型变量呢?
wire为连线,本身不带逻辑性,所以输入什么输出就是什么
若变量放在begin…end内,则声明为reg型;否则,声明为wire型
在always块中的变量,只能是reg型
使用wire型变量时,必须搭配assign
input、output、inout声明的变量,默认都是wire型

若wire和reg用错了,编译器会提醒,一般不用太担心,下面再从仿真和综合的角度解释一下。


简单来说,硬件描述语言有两种用途:仿真、综合,对于wire和reg的理解,也可以从这两个角度来考虑。

从仿真的角度来说,HDL语言面对的是编译器,相当于软件思路,这时:
wire对应于连续赋值,如assign
reg对应于过程赋值,如always块、initial块

从综合的角度来说,HDL语言面对的是综合器,要从电路的角度来考虑,这时:
wire型的变量综合出来一般是一根导线。
reg变量在always块中有两种情况:(1) always后的敏感表中是(a orb or c)形式的,也就是不带时钟边沿的,综合出来还是组合逻辑。(2) always后的敏感表中是(posedgeclk)形式的,也就是带边沿的,综合出来一般是时序逻辑,会包含触发器。


在设计中,一般来说我们并不知道输入信号是来自上一级寄存器的输出还是组合逻辑的输出,那么对于本级而言就是一根导线,也就是wire型。而输出信号则由你自己来决定是寄存器输出还是组合逻辑输出,wire型和reg型都可以,但通常整个设计的外部输出(即最顶层模块的输出)是寄存器输出,这样电路比较稳定。

chen 发表于 2017-8-11 20:36:59

:D:D:D:D:D:D:D

d643189658 发表于 2017-8-11 20:47:44

chen 发表于 2017-8-11 20:36


{:3_52:} {:3_52:} {:3_52:}
页: [1]
查看完整版本: 在Verilog中何时用wire,何时用reg?