罗成:Verilog语法之六:阻塞赋值与非阻塞赋值zhuanlan.zhihu.com
阻塞
非阻塞
通过上面的文章先了解下,阻塞赋值和非阻塞赋值的区别。
b<=a;
c<=b;
非阻塞赋值
b=a;
c=b;
阻塞赋值
阻塞赋值中阻塞的意思是要等一会儿,阻塞了,先让赋值变量得到一个新值,然后阻塞赋值得到的是赋值变量刚刚得到的新值。
非阻塞赋值中非阻塞的意思是要直接传输,不等。非阻塞赋值得到的是赋值变量的旧值,原来的那个值。
现在有一个问题,对于上面的两种代码,那个电路容易实现呢。
我们可能会想,阻塞赋值,有阻塞应该会比较难实现,答案不对。阻塞赋值赋予的是变量新值,所以其得到的值应该是和原变量的值一模一样,随着原变量变化而变化,所以阻塞赋值的实现等于一根导线。b 和 c相对于一根导线。
![fb678940416f726995a6b67f404b2e24.png](https://i-blog.csdnimg.cn/blog_migrate/ed1f9c32ead62d4a05713d46f436bfc0.jpeg)
对于非阻塞赋值,其虽然是非阻塞的,但是其代码要去实现非阻塞的效果确实难的,需要中间加个寄存器,隔开两个变量,才能实现非阻塞赋值得到的是赋值变量的旧值。
![9e8af962c83b2959a9af4eca7ef82e33.png](https://i-blog.csdnimg.cn/blog_migrate/83086d442598f6462fb48ae5fce455dd.jpeg)
这里的b和c之间加了一个寄存器。
到这里你大概就明白了为什么时序电路需要非阻塞赋值,而组合电路是阻塞赋值。
记忆:
= 阻塞赋值
<= 非阻塞赋值
你可以把<想象成一个寄存器,=想象成一根导线。
在你写代码的时候,就不要从文字上理解,直接对于电路,管他什么阻塞不阻塞的文绉绉的表达。(为什么呢?因为这里似乎存在一个否定否定的逻辑(阻塞和非),人脑在理解这种双重否定的时候就比较困难,所以不能从复杂的文字去理解一个本来就很简单的东西)