集成电路技术分享

 找回密码
 我要注册

QQ登录

只需一步,快速开始

搜索
查看: 4132|回复: 2

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

[复制链接]
d643189658 发表于 2017-8-11 19:43:38 | 显示全部楼层 |阅读模式
在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型都可以,但通常整个设计的外部输出(即最顶层模块的输出)是寄存器输出,这样电路比较稳定。
 楼主| d643189658 发表于 2017-8-11 20:47:44 | 显示全部楼层
您需要登录后才可以回帖 登录 | 我要注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

QQ|小黑屋|手机版|Archiver|fpga论坛|fpga设计论坛 ( 京ICP备20003123号-1 )

GMT+8, 2024-12-23 23:40 , Processed in 0.061354 second(s), 19 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表