Verilog中wire和reg数据类型的区别

http://blog.csdn.net/l_y_h_89/article/details/9722201


Verilog中wire和reg数据类型的区别

标签: Verilog wire regtestbench
  1374人阅读  评论(0)  收藏  举报
  分类:

对模块中所用到的所有信号(包括端口信号、节点信号等)都必须进行数据类型的定义。如果信号的数据类型没有定义,综合器将其默认为wire型。

wire表示直通,即只要输入有变化,输出马上无条件地反映;reg表示一定要有触发,输出才会反映输入。

不指定就默认为1位wire类型。专门指定出wire类型,可能是多位或为使程序易读。wire只能被assign连续赋值,reg只能在initial和always中赋值。wire使用在连续赋值语句中,而reg使用在过程赋值语句中。

在连续赋值语句中,表达式右侧的计算结果可以立即更新表达式的左侧。在理解上,相当于一个逻辑之后直接连了一条线,这个逻辑对应于表达式的右侧,而这条线就对应于wire。在过程赋值语句中,表达式右侧的计算结果在某种条件的触发下放到一个变量当中,而这个变量可以声明成reg类型的。根据触发条件的不同,过程赋值语句可以建模不同的硬件结构:如果这个条件是时钟的上升沿或下降沿,那么这个硬件模型就是一个触发器;如果这个条件是某一信号的高电平或低电平,那么这个硬件模型就是一个锁存器;如果这个条件是赋值语句右侧任意操作数的变化,那么这个硬件模型就是一个组合逻辑。

对于模块的输入输出端口要明确说明,其种类有输入端口(input),输出端口(output),输入输出端口(inout)。输入端口可以由wire/reg驱动,但输入端口只能是wire;输出端口可以使wire/reg类型,输出端口只能驱动wire;若输出端口在过程块中赋值则为reg型,若在过程块外赋值则为net型。用关键词inout声明一个双向端口, inout端口不能声明为reg类型,只能是wire类型;输入和双向端口不能声明为寄存器类型。如附图所示(DUT:design under test。wire是net的一种)。

所以如果模块的输出是reg型的,不要误以为写testbench(测试平台)时也要用一个reg型的数据与模块输出相连,事实上恰好相反,应该用wire型与其相接,编写硬件描述语言要时刻与实际硬件联系起来。testbench为测试或仿真一个verilogHDL程序搭建了一个平台,我们给被测模块事假激励信号,通过观察被测模块的输出响应,判断其逻辑功能和时序关系是否正确。testbench无端口列表,其中激励信号(被测模块的输入信号)定义为reg类型,显示信号(被测模块的输出信号)为wire型。


====================================================================================================================

Verilog 中定义信号为什么要区分 wire 和 reg 两种类型?

Verilog 中,过程赋值语句要定义成 reg,连续赋值语句要定义成 wire,而且定义为 reg 不一定真的综合出register(也可能是纯组合逻辑),wire也不一定真的是 wire(也可能是 register)。既然如此,为何 Verilog 语法中要区分 wire 和 reg 呢?至今都没想明白有什么必要(除了制造出一些语法错误)。
默认排序 按时间排序

11 个回答



  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值