wire和reg的区别

一、本质

1.wire和reg的本质是什么

wire的本质是一条没有逻辑的连线,也就是说输入时什么输出也就是什么。wire型数据常用来表示以assign关键字指定的组合逻辑。输入输出端口类型都默认为wire型,wire相当于物理连线,默认初始值是z(高组态)。

如果你把wire定义的变量用在时序逻辑的语句中就会出现综合错误:

例如:

在always语句中使用wire型定义的变量赋值综合器就会报错。

reg型表示的寄存器类型,用于always模块内被赋值的信号,必须定义为reg型。

reg表示一定要有触发,输出才会反映输入的状态。根据触发条件的不同,模块可以建模不同的硬件结构:如果这个条件是时钟的上升沿或下降沿,那么这个硬件模型就是一个触发器(时序逻辑);如果这个条件是某一信号的高电平或低电平,那么这个硬件模型就是一个锁存器(组合逻辑);如果这个条件是赋值语句右侧任意操作数的变化,那么这个硬件模型就是一个组合逻辑。

reg型相对复杂些,其综合后的输出主要还看具体使用的场景:当在组合电路中使用reg,合成后的仍然是net网络;当在时序电路中使用reg合成后的才是register。

二、从仿真来看

从仿真分析角度来说

wire对应于连续赋值,如assign

reg对应于过程赋值,如always,initial

三、什么时候使用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

四、什么时候用reg型

(1)变量放在begin……end之内必须使用reg变量

(2)在initial语句中使用

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值