阻塞赋值和非阻塞赋值 多方资料汇总 醍醐灌顶

本文汇总了《Verilog数字系统设计教程》和《Verilog HDL高级数字设计》等资料,深入探讨了Verilog中的阻塞赋值(b = a;)和非阻塞赋值(b <= a;)的差异。阻塞赋值在语句执行完后立即改变变量值,适用于组合逻辑;非阻塞赋值则在块结束后执行,适用于时序逻辑,能避免意想不到的结果。设计者应遵循时序电路用非阻塞赋值、组合逻辑用阻塞赋值等编程要点。
摘要由CSDN通过智能技术生成


时隔一年,再次学习阻塞赋值和非阻塞赋值,温故知新,醍醐灌顶。搜集多方资料,汇总于此,共同学习。希望对大家有所帮助。

《Verilog数字系统设计教程》第3版 夏宇闻

4.9 赋值语句和块语句

4.9.1 赋值语句

在Verilog HDL语言中,信号有两种赋值方式:

  1. 非阻塞(Non_Blocking)赋值方式(如b <= a;)
    (1)在语句块中,上面语句所赋的变量值不能立即就为下面的语句所用;
    (2)块结束后才能完成这次赋值操作,而所赋的变量值是上一次赋值得到的;
    (3)在编写可综合的时序逻辑模块时,这是最常用的赋值方法。
  2. 阻塞(Blocking)赋值方式(如b = a;)
    (1)赋值语句执行完后,块才结束;
    (2)b的值在赋值语句执行完后立刻就改变的;
    (3)在时序逻辑中使用时,可能会产生意想不到的结果。

非阻塞赋值方式和阻塞赋值方式的区别常给设计人员带来问题。问题主要是对“always”块内的reg型信号的赋值方式不易把握。到目前为止,前面所举的例子中的“always”模块内的reg型信号都是采用下面的这种赋值方式:

b <= a;

这种方式的赋值并不是马上执行的,也就是说,“always”块内的下一条语句执行后,b并不等于a,而是保持原来的值,“always”块结束后,才进行赋值。而阻塞赋值方式,如下所示:

b = a;

这种赋值方式是马上执行的,也就是说执行下

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值