Verilog中wire和reg的区别

1.wire和reg的本质是什么


wire的本质是一条没有逻辑的连线,也就是说输入时什么输出也就是什么。wire型数据常用来表示以assign关键字指定的组合逻辑信号,模块的输入输出端口类型都默认为wire型,wire相当于物理连线,默认初始值是z(高组态)。
如果你把wire定义的变量用在有逻辑性的语句中就会出现综合错误:
例如:
在always语句中使用wire型定义的变量赋值,综合器就会报错。

reg型表示的寄存器类型,用于always模块内被赋值的信号,必须定义为reg型,代表触发器,常用于时序逻辑电路,reg相当于存储单元,默认初始值是x(未知状态)。reg型相对复杂些,其综合后的输出主要还看具体使用的场景:当在组合电路中使用reg,合成后的仍然是net网络;当在时序电路中使用reg合成后的才是register。

2.wire和reg在硬件描述语言中的释义


关于wire和reg在硬件描述语言中的释义一般需要分为以下两个部分来分析:
从电路综合角度来说
(1)wire型变量综合出来是一根导线
(2)reg型在always语句模块中又分为两种情况
(a) always后的敏感表中是(a or b or c)形式的,也就是不带时钟边沿的,综合出来还是组合逻辑
(b) always后的敏感表中是(posedge clk)形式的,也就是带边沿的,综合出来一般是时序逻辑,会包含触发器(Flip-Flop)

在设计中,输入信号一般来说你是不知道上一级是寄存器输出还是组合逻辑输出,那么对于本级来说就是一根导线,也就是wire型。而输出信号则由你自己来决定是组合逻辑输出还是寄存器输出,wire型、reg型都可以。但一般的,整个设计的外部输出(即最顶层模块的输出),要求是寄存器输出,较稳定、扇出能力也较好。

从仿真分析角度来说
wire对应于连续赋值,如assign
reg对应于过程赋值,如always,initial

3.什么情况下使用wire型变量


(1)assign 语句中变量需要定义成wire型,使用wire必须搭配assign
例如:

reg a,b;
wire result;
…
assign result =a&&b;


你可以试试把wire定义成reg,综合器会报错。(2)元件例化时候的输出必须用wire
例如:

wire dout;

ram u_ram
(
…
.out(dout)
…
);

(3)input、output和inout的预设值都是wire

4.什么情况下使用reg型变量
(1)变量放在begin……end之内必须使用reg变量
(2)在initial语句中使用

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值