verilog中的阻塞與非阻塞

2021-08-21 10:39:29 字數 476 閱讀 1480

初學verilog的同學容易搞混淆阻塞與非阻塞賦值操作。要區分的話,其實也有辦法。學過數位電路的都知道時序的概念,比暫存器的操作,把d端輸入用clk打入暫存器,在clk時鐘上公升沿取樣d值,只有在時鐘上公升沿的下一週期的上公升沿,d值才會在輸出端q上輸出出來。符合這個特徵的就是非阻塞賦值:

always @ (posedge clk)

if (!rst)

dout <= 1'b0 ;

else

dout <= d   ;

阻塞賦值是立即被更新的,與非阻塞賦值有非常明顯的差異。如果連續用阻塞賦值方式對乙個變數賦值,那麼最終它就等於最後賦值時的變數值。如下:

always @ (*)

begin

dout = 1'b0 ;

dout = d   ;

end變數dout最後的值是d,dout初始賦值的0被後面所的賦值d覆蓋(阻塞)而沒有了。阻塞賦值的符號也是與非阻塞賦值不一樣的「=」。

verilog阻塞與非阻塞的綜合

關於阻塞和非阻塞語句的5大原則 原則1 時序電路建模時,用非阻塞賦值。原則2 用always塊寫組合邏輯時,採用阻塞賦值。原則3 在同乙個always塊中不要同時使用非阻塞賦值和阻塞賦值。原則4 鎖存器電路建模時,用非阻塞賦值。原則5 在同乙個always塊中同時建立時序和組合邏輯電路時,用非阻塞賦...

verilog中的阻塞賦值與非阻塞賦值詳解

網上看到的覺得不錯分享下 組合邏輯的always模組中使用阻塞賦值 時序邏輯的always模組中使用非阻塞賦值 可以這樣理解,組合中計算馬上賦值,時序邏輯中上公升沿計算,下降沿賦值關鍵是組合邏輯中是實時變化的,而時序邏輯中乙個cycle才變化一次 比如 always a or b begin c a...

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

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