购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.4 阻塞与非阻塞赋值的区别

时序逻辑用的都是非阻塞赋值“ =”,它与阻塞赋值“=”的区别表现在于:非阻塞赋值的意思是该句表达不会阻塞后续表达的执行,如下例中,X =0的执行,不会阻碍到Y =0的执行,它们是同时发生的。

而阻塞赋值,意思是如果前一句不执行,后一句就无法执行,前一句会阻塞后一句。如下例中C语言的表达就是阻塞赋值, c a b 如果不执行, d =3* c 也不执行。

     int abc(int a, int b)
     {
          int      c, d;
         c = a + b;
         d = 3 * c;
         return(d);
     }

对于可综合的Verilog来讲,其实并不会阻塞。在下例中,always块的目的是创造 z k 两个信号。 k =3* z z a & b 是两个不同的电路, k =3* z 电路不会被 z a & b 阻塞。本例对应的原理图如图2—7所示。可见,对于电路描述来讲,语法只是表示一种连接关系,并没有执行先后顺序的说法,但如果本例使用非阻塞赋值,语法检查会报错,因此,这是一种惯用方法。阻塞赋值在Verilog中真正体现阻塞,是在仿真使用的不可综合语法中,到第3章再做解释。

图2—7 本例对应的原理图 ZmzLTSM/y0xIKExmH0J7h1yAyg0KRdKba6Od+GkHKYtDuMlAOnvXtei5zaHD0ddg

点击中间区域
呼出菜单
上一章
目录
下一章
×