阻塞與非阻塞賦值的區別

https://blog.csdn.net/fzr_en/article/details/89552323 侵刪

阻塞賦值:前面語句執行完,纔可執行下一條語句;即:前面語句的執行(b=a)阻塞了後面語句的執行(c=b)。即:always塊內,2條語句順序執行。

always @(posedge i_clk)

begin

         b = a;

         c = b;

end

注意:a的值賦給b,b的值賦給c,是在同一個時鐘上升沿完成,如下圖仿真結果。

非阻塞賦值:always塊內,2條語句同時執行。即:前面語句的執行(b=a)不會阻塞後面語句的執行(c=b)。

always @(posedge i_clk)

begin

         b <= a;

         c <= b;

end

注意:第1個clk上升沿a的值賦給b,此時b的值還沒有更新;第2個clk上升沿,b的值賦給c,此時c才能獲得b更新後的值。所以c獲得a的值,需要2個clk完成。如下圖仿真結果。

總結:

1:組合邏輯,使用 “阻塞賦值”。

2:時序邏輯,使用“非阻塞賦值”。
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章