門延遲類型
前兩節(jié)中所介紹的門級(jí)電路都是沒有延遲的,實(shí)際門級(jí)電路都是有延遲的。
Verilog 中允許用戶使用門延遲,來定義輸入到其輸出信號(hào)的傳輸延遲。
門延遲類型主要有以下 3 種。
上升延遲
在門的輸入發(fā)生變化時(shí),門的輸出從 0,x,z 變化為 1 所需要的轉(zhuǎn)變時(shí)間,稱為上升延遲。
下降延遲
在門的輸入發(fā)生變化時(shí),門的輸出從 1,x,z 變化為 0 所需要的轉(zhuǎn)變時(shí)間,稱為下降延遲。
關(guān)斷延遲
關(guān)斷延遲是指門的輸出從 0,1,x 變化為高阻態(tài) z 所需要的轉(zhuǎn)變時(shí)間。
門輸出從 0,1,z 變化到 x 所需要的轉(zhuǎn)變時(shí)間并沒有被明確的定義,但是它所需要的時(shí)間可以由其他延遲類型確定,即為以上 3 種延遲值中最小的那個(gè)延遲。
門延遲可以在門單元例化時(shí)定義,定義格式如下:
gate_type [delay] [instance_name] (signal_list) ;
其中,delay 的個(gè)數(shù)可以為 0 個(gè)、1 個(gè)、2 個(gè)或 3個(gè) 。
下表為不同延遲個(gè)數(shù)時(shí),各種類型延遲的取值情況說明。
延遲類型 | 無延遲 | 1 個(gè)延遲 (d) | 2 個(gè)延遲 (d1, d2) | 3 個(gè)延遲 (d1, d2, d3) |
---|---|---|---|---|
上升 | 0 | d | D1 | D1 |
下降 | 0 | d | D2 | D2 |
關(guān)斷 | 0 | d | 最小(D1, D2) | D3 |
to_x | 0 | d | 最?。―1, D2) | 最?。―1, D2, D3) |
如果用戶沒有指定延遲值,則默認(rèn)延遲為 0 。
如果用戶指定了 1 個(gè)延遲值,則所有類型的延遲值大小均為此值。
如果用戶指定了 2 個(gè)延遲值,則他們分別代表上升延遲和下降延遲,關(guān)斷和“to_x”延遲均為這 2 種延遲值中最小的那個(gè)。
如果用戶指定了 3 個(gè)延遲值,則他們分別代表上升延遲、下降延遲和關(guān)斷延遲,“to_x”延遲為這 3 種延遲值中最小的那個(gè)。
帶有延遲值的門級(jí)單元例化如下:
//rise, fall and turn-off delay are all 1
and #(1) (OUT1, IN1, IN2) ;
//rise delay = 2.1, fall dalay = 2, trun-off delay = 2
or #(2.1, 2) (OUT2, IN1, IN2) ;
//rise delay = 2, fall dalay = 1, trun-off delay = 1.3
bufif0 #(2, 1, 1.3) (OUT3, IN1, CTRL) ;
需要說明的是,多輸入門(如與門)和多輸出門(如非門)最多只能定義 2 個(gè)延遲,因?yàn)檩敵霾粫?huì)是 z 。
三態(tài)門和單向開關(guān)單路(MOS 管、CMOS 管等)可以定義 3 個(gè)延遲。
上下拉門級(jí)電路不會(huì)有任何的延遲,因?yàn)樗硎镜氖且环N硬件屬性,上下拉狀態(tài)不會(huì)發(fā)生變化,且沒有輸出值。
雙向開關(guān)(tran)在傳輸信號(hào)時(shí)沒有延遲,不允許添加延遲定義。
帶有控制端的雙向開關(guān)(tranif1, tranif0)在開關(guān)切換的時(shí)候,會(huì)有開或關(guān)的延遲,可以給此類雙向開關(guān)指定 0 個(gè)、1 個(gè)或 2 個(gè)的延遲,例如:
//turn-on and turn-off delay are all 1
tranif0 #(1) (inout1, inout2, CTRL);
//turn-on delay = 1, turn-off delay = 1.2
tranif1 #(1, 1.2) (inout3, inout4, CTRL);
最小/典型/最大延遲
由于集成電路制造工藝的差異,實(shí)際電路中器件的延遲總會(huì)在一定范圍內(nèi)波動(dòng)。 Verilog 中,用戶不僅可以指定 3 種類型的門延遲,還可以對(duì)每種類型的門延遲指定其最小值、典型值和最大值。 在編譯或仿真階段,來選擇使用哪一種延遲值,為更切實(shí)際的仿真提供了支持。
最小值:門單元所具有的最小延遲。
典型值:門單元所具有的典型延遲。
最大值:門單元所具有的最大延遲。
下面通過例化實(shí)例,來說明最小、典型、最大延遲的用法。
//所有的延遲類型:最小延遲 1, 典型延遲 2, 最大延遲 3
and #(1:2:3) (OUT1, IN1, IN2) ;
//上升延遲:最小延遲 1, 典型延遲 2, 最大延遲 3
//下降延遲:最小延遲 3, 典型延遲 4, 最大延遲 5
//關(guān)斷延遲:最小延遲 min(1,3), 典型延遲 min(2,4), 最大延遲 min(3,5)
or #(1:2:3, 3:4:5) (OUT2, IN1, IN2) ;
//上升延遲:最小延遲 1, 典型延遲 2, 最大延遲 3
//下降延遲:最小延遲 3, 典型延遲 4, 最大延遲 5
//關(guān)斷延遲:最小延遲 2, 典型延遲 3, 最大延遲 4
bufif0 #(1:2:3, 3:4:5, 2:3:4) (OUT3, IN1, CTRL) ;
D 觸發(fā)器
下面從門級(jí)建模的角度,對(duì) D 觸發(fā)器進(jìn)行設(shè)計(jì)。
SR 觸發(fā)器
SR 觸發(fā)器結(jié)構(gòu)圖及真值表如下所示。
1> 當(dāng) S 為低電平,G1 輸出端 Q 為高電平,并反饋到 G2 輸入端。 如果此時(shí) R 為高電平,則 G2 輸出端 Q' 為低電平。
2> R 為低電平 S 為高電平時(shí),分析同理。
3> S 與 R 均為高電平時(shí),如果 Q = 1 (Q' = 0) , 則 Q 反饋到 G2 輸入端后輸出 Q' 仍然為 0, Q' 反饋到 G1 輸入端后輸出 Q 仍然是 1,呈現(xiàn)穩(wěn)態(tài)。 如果 Q =0 (Q' = 1) 同理,Q 與 Q' 的值仍然會(huì)保持不變。 即 S 與 R 均為高電平時(shí)該電路具有保持的功能。
4> 如果 S 與 R 均為低電平,則輸出 Q 與 Q' 均為高電平,不再成互補(bǔ)的關(guān)系。 所以此種情況是禁止出現(xiàn)的。
SR 鎖存器
在基本的 SR 觸發(fā)器前面增加 2 個(gè)與非門,可構(gòu)成帶有控制端 SR 鎖存器。
SR 鎖存器及其真值表如下所示。
當(dāng) EN=0 時(shí),G3、G4 截止,SR 鎖存器保持輸出狀態(tài)不變。
當(dāng) EN=1 時(shí),與基本的 SR 觸發(fā)器工作原理完全相同。
D 鎖存器
基本的 SR 觸發(fā)器輸入端不能同時(shí)為 0, 帶有控制端的 SR 鎖存器輸入端不能同時(shí)為 1,否則會(huì)導(dǎo)致輸出端 Q 與 Q' 的非互補(bǔ)性矛盾。
為消除此種不允許的狀態(tài),在帶有控制端的 SR 鎖存器結(jié)構(gòu)中加入取反模塊,保證 2 個(gè)輸入端均為相反邏輯,則形成了 D 鎖存器。
其結(jié)構(gòu)圖和真值表如下所示。
1> 當(dāng) EN=1 時(shí),輸出狀態(tài)隨輸入狀態(tài)的改變而改變。
2> 當(dāng) EN=0 時(shí),輸出狀態(tài)保持不變。
D 鎖存器是一種電平觸發(fā)。
如果在 EN=1 的有效時(shí)間內(nèi),D 端信號(hào)發(fā)生多次翻轉(zhuǎn),則輸出端 Q 也會(huì)發(fā)生多次翻轉(zhuǎn)。 這降低了電路的抗干擾能力,不是實(shí)際所需求的安全電路。
為提高觸發(fā)器的可靠性,增強(qiáng)電路抗干擾能力,發(fā)明了在特定時(shí)刻鎖存信號(hào)的 D 觸發(fā)器。
D 觸發(fā)器
將兩個(gè) D 鎖存器進(jìn)行級(jí)聯(lián),時(shí)鐘取反,便構(gòu)成了一種簡(jiǎn)單的 D 觸發(fā)器,又名 Flip-flop。
其結(jié)構(gòu)圖和真值表如下所示。
第一級(jí) D 鎖存器又稱為主鎖存器,在 CP 為低電平時(shí)鎖存。 第二級(jí) D 鎖存器又稱為從鎖存器,時(shí)鐘較主鎖存器相反,在 CP 為高電平時(shí)鎖存。
1> CP=1 時(shí),主鎖存器輸出端 Qm 會(huì)和 D 端信號(hào)的變化保持一致,而從鎖存器處于保持狀態(tài),輸出 Qs 保持不變。
2> CP由高電平變?yōu)榈碗娖綍r(shí),主鎖存器鎖存當(dāng)前 D 的狀態(tài),傳遞到輸出端 Qm 并保持不變。 而從鎖存器輸出端 Qs 會(huì)和 Qm 的變化保持一致。 此時(shí)處于鎖存狀態(tài)下的主鎖存器輸出端 Qm 會(huì)保持不變,所以 D 觸發(fā)器輸出端 Qs 端得到新的 Qm 值后, 也會(huì)保持不變。
綜上所述,D 觸發(fā)器輸出端 Qs 只會(huì)在時(shí)鐘 CP 下降沿對(duì) D 端進(jìn)行信號(hào)的鎖存,其余時(shí)間輸出端信號(hào)具有保持的功能。
將雙級(jí) D 鎖存器展開為門級(jí)結(jié)構(gòu),如下圖所示。
對(duì) D 觸發(fā)進(jìn)行門級(jí)建模,并加入門級(jí)延時(shí),verilog 模型如下:
module D_TRI(
input D, CP,
output Q, QR);
parameter RISE_TIME = 0.11 ;
parameter FALL_TIME = 0.07 ;
//part1, not gate
wire CPN, DN ;
not #(RISE_TIME, FALL_TIME) (CPN, CP);
not #(RISE_TIME, FALL_TIME) (DN, D);
//part2, master trigger
wire G3O, G4O ;
nand #(RISE_TIME, FALL_TIME) (G3O, D, CP);
nand #(RISE_TIME, FALL_TIME) (G4O, DN, CP);
wire #(RISE_TIME, FALL_TIME) G1O, G2O ;
nand #(RISE_TIME, FALL_TIME) (G1O, G3O, G2O);
nand #(RISE_TIME, FALL_TIME) (G2O, G4O, G1O);
//part3, slave trigger
wire G7O, G8O ;
nand #(RISE_TIME, FALL_TIME) (G7O, G1O, CPN);
nand #(RISE_TIME, FALL_TIME) (G8O, G2O, CPN);
wire G5O, G6O ;
nand #(RISE_TIME, FALL_TIME) (G5O, G7O, G6O);
nand #(RISE_TIME, FALL_TIME) (G6O, G8O, G5O);
assign Q = G5O ;
assign QR = G6O ;
endmodule
testbench 編寫如下:
`timescale 1ns/1ps
module test ;
reg D, CP = 0 ;
wire Q, QR ;
always #5 CP = ~CP ;
initial begin
D = 0 ;
#12 D = 1 ;
#10 D = 0 ;
#14 D = 1 ;
#3 D = 0 ;
#18 D = 0 ;
end
D_TRI u_d_trigger(
.D (D),
.CP (CP),
.Q (Q),
.QR (QR));
initial begin
forever begin
#100;
//$display("---gyc---%d", $time);
if ($time >= 1000) begin
$finish ;
end
end
end
endmodule
仿真結(jié)果如下。
由圖可知,Q/QR 信號(hào)均在時(shí)鐘 CP 下降沿采集到了 D 端信號(hào),并在單周期內(nèi)保持不變,且輸出有延遲。
對(duì) cap3 時(shí)刻進(jìn)行放大,對(duì)延時(shí)進(jìn)行追蹤,如下圖所示。
CP 端到 CPN 端有上升延遲,時(shí)間為 110ps;
CPN 端到 G8O 端有下降延遲,時(shí)間為 70ps;
G8O 端到 G6O 端有上升延遲,時(shí)間為 110ps;
G6O 端到 Q 端有下降延遲,時(shí)間為 70ps;
共 360ps,符合設(shè)置的門延遲。
-
仿真
+關(guān)注
關(guān)注
50文章
4070瀏覽量
133552 -
信號(hào)
+關(guān)注
關(guān)注
11文章
2789瀏覽量
76730 -
Verilog
+關(guān)注
關(guān)注
28文章
1351瀏覽量
110077 -
時(shí)鐘
+關(guān)注
關(guān)注
10文章
1733瀏覽量
131451 -
門級(jí)電路
+關(guān)注
關(guān)注
0文章
15瀏覽量
1957
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論