1. 程式人生 > >阻塞賦值和非阻塞賦值

阻塞賦值和非阻塞賦值

under ati always tex ilog 進程 成才 含義 initial

2017-12-01

在Verilog語言中,賦值語句經常使用,阻塞賦值和非阻塞賦值經常帶給我們很多困擾。在此討論兩種賦值方式的差異性。

首先根據表面含義深刻理解阻塞和非阻塞:

阻塞:在進程語句塊中(initial或者always或者其他),當前賦值語句的執行阻塞了後面語句的執行。即後面語句的賦值需要等到當前賦值過程完成才能得以執行,即可認為執行過程是順序執行(我們要明白Verilog中,大多數情況模塊都是並發執行的)。

非阻塞:當前賦值語句的執行不會阻塞後續語句的執行,即可以認為當前賦值語句的完成和後續的執行過程是並發執行的

下面通過一個例子說明:

initial                       initial
begin                          begin
b=a;                            b<=a;
c=b;                            c<=b;
end                             end             

上述左側為阻塞賦值,右側為非阻塞賦值;

左側代碼中,當b=a執行完之後,即b的值已經變成了a;此時,c的值被賦給b的值,實際上,c的值就是a的值了,即c=b=a;

而右側代碼,b被賦給a的值,c被賦給b的值同時發生,即c得到得到的b的值,並非是改變後的b的值,而是b沒有改變之前的原來的值。

阻塞賦值和非阻塞賦值