在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 1652|回复: 0

[原创] 浅析Verilog阻塞赋值与非阻塞赋值的区别

[复制链接]
发表于 2021-3-26 10:39:04 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
为了解释清楚阻塞赋值与非阻塞赋值的区别,下面从仿真和综合两个角度讲解,然后举例说明。

1. 仿真角度

从仿真角度出发,就是要看仿真器是如何一步一步执行verilog代码的。Verilog仿真器是事件驱动的,每发生一个事件(例如时钟上升沿),就要执行一系列语句,其中包含赋值语句。为了说明阻塞赋值与非阻塞赋值的区别,把赋值拆分成两个步骤:(1)计算赋值运算符右边的表达式;(2)用计算结果更新赋值运算符左边变量的值。执行阻塞赋值语句时,首先执行步骤(1),然后执行步骤(2),所以执行阻塞赋值语句时变量的值立即更新。执行非阻塞赋值语句时,只执行步骤(1),待执行完该事件触发的所有语句之后,再执行该事件触发的所有非阻塞赋值的变量更新操作,即步骤(2)。所以执行非阻塞赋值语句时变量的值延后更新。

2. 综合角度

从综合角度出发,就是要看阻塞赋值与非阻塞赋值分别综合出什么样的电路。如果是描述组合逻辑,用阻塞赋值还是非阻塞赋值综合出的电路一般是相同的。如果是描述时序逻辑,用阻塞赋值综合出的电路是顺序数据流的,用非阻塞赋值综合出的电路是并行数据流的。并行数据流很容易理解,通常是用并行的多个DFF实现的。顺序数据流则是在一个时钟周期内,数据按赋值语句顺序在若干信号间传递,可能用并行的多个DFF实现,也可能用一个DFF和一些组合逻辑,或者其他情况。

3. 若干例子

例1:非阻塞赋值
always @(posedge clk)
  begin
    q1 <= d;
    q2 <= q1;
    q3 <= q2;
  end

从仿真角度讲,发生clk上升沿事件后,仿真器顺序执行三条非阻塞赋值语句,即顺序计算d(第一条赋值语句中右边表达式),q1(第二条赋值语句中右边表达式),q2(第三条赋值语句中右边表达式),最后分别用上述三个表达式的计算结果更新q1,q2,q3的值。

从综合角度讲,综合出的电路存在3条并行数据流,用3个DFF实现。写出逻辑表达式,如下:
q1(n+1)=d(n)
q2(n+1)=q1(n)
q3(n+1)=q2(n)
其中,x(n)表示信号x在第n周期的值。

例2:阻塞赋值
always @(posedge clk)
  begin
    q1 = d;
    q2 = q1;
    q3 = q2;
  end

从仿真角度讲,发生clk上升沿事件后,仿真器顺序执行三条阻塞赋值语句,即先计算d(第一条赋值语句中右边表达式),然后用该计算结果更新q1的值,再计算q1(第二条赋值语句中右边表达式),然后用该计算结果更新q2的值,最后计算q2(第三条赋值语句中右边表达式),然后用该计算结果更新q3的值。由此可以看出,最终q1,q2,q3都被更新为d的值。

从综合角度讲,综合出的电路存在顺序数据流,d->q1->q2->q3,在clk上升沿之后信号 q1,q2,q3都变为d的值,实际综合出的电路中q1,q2,q3由同一个DFF驱动。写出逻辑表达式,如下:
q1(n+1)=d(n)
q2(n+1)=q1(n+1)=d(n)
q3(n+1)=q2(n+1)=d(n)
其中,x(n)表示信号x在第n周期的值。

例3:非阻塞赋值
always @(posedge clk)
  begin   
    q3 <= q2;
    q2 <= q1;
    q1 <= d;
  end

例4:阻塞赋值
always @(posedge clk)
  begin   
    q3 = q2;
    q2 = q1;
    q1 = d;
  end

例3与例4的仿真与综合结果与例1相同,都是3个DFF。

4. 最后的说明

比较上述例子,虽然用阻塞赋值也能得到相同的结果(例1与例4),但是阻塞赋值仅仅是顺序不同就会得到不同的结果(例2与例4),而非阻塞赋值则不受语句顺序的影响(例1与例3)。

非阻塞赋值本身就带有并行的语义,很适合用来描述带有并行性质的数字逻辑电路。

P.S.: 以上是本人的一点粗浅理解,希望对困惑于阻塞赋值与非阻塞赋值的区别的初学者能有些许帮助,如有错误与欠缺感谢指正。


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

本版积分规则

关闭

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

×

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-4-28 12:57 , Processed in 0.014234 second(s), 6 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表