这篇博客,通过举例说明:非阻塞赋值和阻塞赋值的区别?
一般非阻塞赋值用于时序逻辑,而阻塞赋值用于组合逻辑;
非阻塞赋值语句是并行执行的,等到一个时钟完成后才完成赋值,而阻塞赋值是顺序执行的,下一条赋值语句要等到上一条赋值语句完成后才能赋值,并且阻塞赋值是立即完成的;
例如:
always@(posedge clk) begin
b <= a;
c <= b;
end
可见,在时序逻辑中使用非阻塞赋值会生成触发器。(有几条赋值语句就会生成几个触发器)
如果使用阻塞赋值呢?
如:
always@(posedge clk) begin
b = a;
c = b;
end
可以看到区别,第一条语句生成了一个触发器,第二条语句会综合成一个连线,这就是阻塞赋值与非阻塞赋值的区别。
为了更有说服力,再举一个例子:<