verilog语言中,reg型与wire型的区别

对于初学者来说,首先一个大问题就是在读程序时候,变量类型reg型wire型的区分。

最近做了点仿真工作,对两种类型的变量有一些自己的见解,写一写,交流学习。

自己的理解:

wire型相当于是一根连线

reg型相当于是储存器

在wire型相当于连线的基础上我们很容易就可以理解,当连线的来源端发生改变时,wire变量立即随之发生改变。

由此:wire型变量存在于begin...end语句之外。只能用assign语句进行赋值。(assign语句和时钟无关,只要等号右侧变量改变,左侧变量就会随之发生改变)

reg型相当于储存器的基础上,可以看做是一个一个的寄存器,当触发条件达成时,寄存器的内容才发生改变,否则一直保持上一个状态。

由此:reg型变量存在于begin...end语句之中。一般在always,initial语句中。

如果变量类型使用错误或者位置错误,vivado会提示错误,所以也不用担心。

接下来是我在仿真中遇到的一点总结:

模块的输入端口可以由wire/reg型驱动,但是输入端口只能是wire型。

模块的输出端口只能驱动wire型,输出端口可以是wire/reg型。

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

手机打字,就不贴图了。大家可以自己尝试一下。

//========================================================//

另,通过看相关的帖子,还有在综合上的考虑。

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

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值