下面給出乙個基於阻塞賦值和非阻塞賦值的多級觸發器級聯例項,要求將輸
入資料延遲 3 個時鐘週期再輸出,並給出對應的 rtl 級結構圖和**結果。
(1)基於 d觸發器的阻塞賦值語句**如下:
module pipeb1 (q3, d, clk);
output [7:0] q3;
input [7:0] d;
input clk;
reg [7:0] q3, q2, q1;
always @(posedge clk) begin
q1 = d;
q2 = q1;
q3 = q2;
end
endmodule
上述**綜合後能得到所期望的邏輯電路嗎? 答案是否定的, 根據阻塞賦值語句的執行
過程可以得到執行後的結果是 q1 = d;q2 = d。實際只會綜合出乙個暫存器,如圖 8-33 所示,
並列出下面的警告資訊,而不是所期望的三個。其中的主要原因就是採用了阻塞賦值,首先
將 d 的值賦給 q1,再將q1 的值賦給q2,依次到q3,但是 q1、q2、q3 的值在賦值前其數值
已經全部被修改為當前時刻的 d 值,因此上述語句等效於 q3=d,這和圖 8-33 所示的 rtl 結
構是一致的。
(2) 如何才能得到所需要的電路呢?如果把 always 塊中的兩個賦值語句的次序顛倒後
再進行分析:先把 q2 的值賦於 q3、再把 q1 的值賦於 q2,最後把 d 賦於q1。這樣在先賦值
再修改,可以使得 q2,q3 的值都不再是 d 的當前值。修改後的**如下所列。
verilog中的阻塞與非阻塞
初學verilog的同學容易搞混淆阻塞與非阻塞賦值操作。要區分的話,其實也有辦法。學過數位電路的都知道時序的概念,比暫存器的操作,把d端輸入用clk打入暫存器,在clk時鐘上公升沿取樣d值,只有在時鐘上公升沿的下一週期的上公升沿,d值才會在輸出端q上輸出出來。符合這個特徵的就是非阻塞賦值 alway...
verilog阻塞與非阻塞的綜合
關於阻塞和非阻塞語句的5大原則 原則1 時序電路建模時,用非阻塞賦值。原則2 用always塊寫組合邏輯時,採用阻塞賦值。原則3 在同乙個always塊中不要同時使用非阻塞賦值和阻塞賦值。原則4 鎖存器電路建模時,用非阻塞賦值。原則5 在同乙個always塊中同時建立時序和組合邏輯電路時,用非阻塞賦...
verilog中的阻塞賦值與非阻塞賦值詳解
網上看到的覺得不錯分享下 組合邏輯的always模組中使用阻塞賦值 時序邏輯的always模組中使用非阻塞賦值 可以這樣理解,組合中計算馬上賦值,時序邏輯中上公升沿計算,下降沿賦值關鍵是組合邏輯中是實時變化的,而時序邏輯中乙個cycle才變化一次 比如 always a or b begin c a...