查看: 1852|回复: 4

每日一练6.11#verilog中阻塞赋值和非阻塞赋值的区别

[复制链接]

该用户从未签到

发表于 2020-6-11 10:58:55 | 显示全部楼层 |阅读模式
分享到:
       为鼓励大家动手动脑,早日成为技术大牛。电路城论坛现在推出#每日一练#栏目,由版块版主出题及提供答案,内容涉及电源,射频,单片机等各种技术话题。我们会在周一至周五的早上10:30更新问题和前天问题的解题思路及答案。欢迎大家参与。

本期内容来源于:


       Casper.T,电子与通信工程专业,在读硕士,对模拟通信,智能电子设计以及FPGA图像处理和加速器有丰富的设计经验。现主要从事电子信息技术运营方面的工作。


阻塞赋值对应的电路往往与触发沿没有关系,只与输入电平的变化有关系。
非阻塞赋值对应的电路结构往往与触发沿有关系,只有在触发沿时才有可能发生赋值的情况。

1、阻塞赋值操作符用等号(即 = )表示。“阻塞”是指在进程语句(initial和always)中,当前的赋值语句阻断了其后的语句,也就是说后面的语句必须等到当前的赋值语句执行完毕才能执行。而且阻塞赋值可以看成是一步完成的,即:计算等号右边的值并同时赋给左边变量。例如:
微信图片_20200611104132.jpg
当执行“x=next_x;”时,x会立即的到next_x的值。而下一句“y=x;”必须等到“x=next_x;”执行完毕才能被执行。由于这两条语句都没有延迟(相当于导线),导致他们的等价语句为“y=next_x;”。
赋值是实时的,计算完右面的马上赋值给左边的,然后再执行下一句,操作时串行的,且在一个alway内完成。

2、非阻塞赋值操作符用小于等于号 (即 <= )表示。“非阻塞”是指在进程语句(initial和always)中,当前的赋值语句不会阻断其后的语句。非阻塞语句可以认为是分为两个步骤进行的:
①计算等号右边的表达式的值,(我的理解是:在进入进程后,所有的非阻塞语句的右端表达式同时计算,赋值动作只发生在顺序执行到当前非阻塞语句那一刻)。
②在本条赋值语句结束时,将等号右边的值赋给等号左边的变量。
例如:
当执行“x<=next_x;”时,并不会阻断语句“y<=x;”的执行。因此,语句“y<=x;”中的x的值与语句“x<=next_x;”中的x的值不同:语句“y<=x;”中的x是第一个D触发器的初值(Q0)。而语句“x<=next_x;”中的x的值是D触发器经过一个同步脉冲后的输出值(Q1)。基于此这个进程产生了与阻塞赋值进程截然不同的结果,即:产生了移位寄存器的效果。
简单理解就是,阻塞赋值是按需执行,非阻塞赋值是并行执行。

       为了更好地理解上述要点,我们需要对Verilog 语言中的阻塞赋值和非阻塞赋值的功能和执行时间上的差别有深入的了解。为了解释问题方便下面定义两个缩写字:
RHS – 方程式右手方向的表达式或变量可分别缩写为:RHS表达式或RHS变量。LHS – 方程式左手方向的表达式或变量可分别缩写为:LHS表达式或LHS变量。
       IEEE Verilog标准定义了有些语句有确定的执行时间,有些语句没有确定的执行时间。若有两条或两条以上语句准备在同一时刻执行,但由于语句的排列次序不同(而这种排列次序的不同是IEEE Verilog标准所允许的), 却产生了不同的输出结果。这就是造成Verilog模块冒险和竞争现象的原因。为了避免产生竞争,理解阻塞和非阻塞赋值在执行时间上的差别是至关重要的。
微信图片_20200611104147.jpg 微信图片_20200611104155.jpg
微信图片_20200611104201.jpg 微信图片_20200611104205.jpg


问:阻塞赋值与非阻塞赋值的区别,以及该两种赋值方法是为了解决什么问题?


答:
游客,如果您要查看本帖隐藏内容请回复



参与讨论,即可快速获取以下几本电源书籍(电子版)

想成为论坛版主?想在#每日一练#展现你的技术才华?请联系工程师小助手Q:2740521371或邮箱:yanfen.mo@supplyframe.cncaihong.xiao@supplyframe.cn



回复

使用道具 举报

该用户从未签到

发表于 2020-6-12 13:09:17 来自手机 | 显示全部楼层
阻塞赋值用于组合逻辑电路,非阻塞赋值用于时序逻辑电路,可以很好的避免仿真时出现冒险竞争
回复 支持 反对

使用道具 举报

  • TA的每日心情

    2020-7-24 03:31
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]初来乍到

    发表于 2020-8-14 17:29:48 | 显示全部楼层
    两者的区别主要是解决仿真出现的竞争问题,对于综合电路没啥影响
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2020-11-29 16:59:22 | 显示全部楼层
    hello  world
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2021-7-7 20:21:45 | 显示全部楼层
    阻塞赋值用于组合逻辑,非阻塞赋值用于时序逻辑
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条



    手机版|小黑屋|与非网

    GMT+8, 2024-5-15 10:54 , Processed in 0.162813 second(s), 24 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.