阻塞賦值和非阻塞賦值

2022-05-02 17:45:07 字數 665 閱讀 8608

2017-12-01

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

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

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

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

下面通過乙個例子說明:

initial

initial

begin

begin

b=a; b<=a;

c=b; c<=b;

endend

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

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

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

阻塞賦值和非阻塞賦值

阻塞賦值 阻塞賦值操作符用等號 即 表示。為什麼稱這種賦值為阻塞賦值呢?這是因為在賦值時先計算等號右手方向 rhs 部分的值,這時賦值語句不允許任何別的verilog 語句的干擾,直到現行的賦值完成時刻,即把rhs 賦值給 lhs 的時刻,它才允許別的賦值語句的執行。一般可綜合的阻塞賦值操作在rhs...

阻塞與非阻塞賦值

李秋鳳,華清遠見嵌入式學院 講師。稍微接觸過verilog hdl的都對阻塞與非阻塞賦值略知一二,也是我們經常強調的重點之一,在課堂上還是有學員問什麼不一樣呢,為什麼我用阻塞賦值也能得出正確的結果呢?在編寫可綜合 的時候,建議大家不要忘了開啟rtl網表檢視器看看我們自己綜合出來的電路是不是自己想要的...

Verilog中的阻塞賦值和非阻塞賦值

verilog中阻塞賦值和非阻塞賦值的異同 一 阻塞賦值 操作符 把賦值運算看做 lhs rhs 在阻塞賦值時,先計算等號右手方向 rhs 的值,這時候賦值語句不允許別的verilog語句的干擾,直到現行的賦值過程完成,即將rhs計算得到的值賦給lhs 左手方向 然後才允許別的語句執行。從理論上來說...