下面給出一個基于阻塞賦值和非阻塞賦值的多級觸發(fā)器級聯(lián)實例,要求將輸入數(shù)據(jù)延遲 3 個時鐘周期再輸出,并給出對應(yīng)的 RTL 級結(jié)構(gòu)圖和仿真結(jié)果。
(1)基于 D觸發(fā)器的阻塞賦值語句代碼如下:
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
上述代碼綜合后能得到所期望的邏輯電路嗎? 答案是否定的, 根據(jù)阻塞賦值語句的執(zhí)行過程可以得到執(zhí)行后的結(jié)果是 q1 = d;q2 = d。實際只會綜合出一個寄存器,如圖 8-33 所示,并列出下面的警告信息,而不是所期望的三個。其中的主要原因就是采用了阻塞賦值,首先將 d 的值賦給 q1,再將q1 的值賦給q2,依次到q3,但是 q1、q2、q3 的值在賦值前其數(shù)值已經(jīng)全部被修改為當前時刻的 d 值,因此上述語句等效于 q3=d,這和圖 8-33 所示的 RTL 結(jié)構(gòu)是一致的。

(2) 如何才能得到所需要的電路呢?如果把 always 塊中的兩個賦值語句的次序顛倒后再進行分析:先把 q2 的值賦于 q3、再把 q1 的值賦于 q2,最后把 d 賦于q1。這樣在先賦值再修改,可以使得 q2,q3 的值都不再是 d 的當前值。修改后的代碼如下所列。
module pipeb2 (q3, d, clk);
output [7:0] q3;
input [7:0] d;
input clk;
reg [7:0] q3, q2, q1;
always @(posedge clk)
begin
q3 = q2;
q2 = q1;
q1 = d;
end
endmodule
文章出處:【微信公眾號:FPGA設(shè)計論壇】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
責任編輯:haq
-
FPGA
+關(guān)注
關(guān)注
1660文章
22415瀏覽量
636517 -
電路圖
+關(guān)注
關(guān)注
10479文章
10755瀏覽量
555293 -
Verilog
+關(guān)注
關(guān)注
30文章
1374瀏覽量
114534
原文標題:FPGA學習:verilog中阻塞的理解與例子
文章出處:【微信號:gh_9d70b445f494,微信公眾號:FPGA設(shè)計論壇】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
解析SN65LVDS125A和SN65LVDT125A:4x4非阻塞交叉點開關(guān)的卓越性能
探索SN65LVDS125A和SN65LVDT125A:4x4非阻塞交叉點開關(guān)的卓越性能
飛凌嵌入式ElfBoard-文件I/O的深入學習之阻塞I/O與非阻塞I/O
matlab appdesigner 表格組件賦值問題,求助
高速施密特觸發(fā)器密封光耦合器 skyworksinc
密封表面貼裝、高速施密特觸發(fā)器光耦合器 skyworksinc
用于混合組裝的微型高速施密特觸發(fā)器光耦合器 skyworksinc
Texas Instruments SN74HC112雙路J-K觸發(fā)器數(shù)據(jù)手冊
施密特觸發(fā)器光耦特性
在testbench中如何使用阻塞賦值和非阻塞賦值
基于阻塞賦值和非阻塞賦值的多級觸發(fā)器級聯(lián)實例
評論