Verilog 門延遲

2022-05-20 14:32 更新

關(guān)鍵詞: 門延遲, D 觸發(fā)器

門延遲類型

前兩節(jié)中所介紹的門級電路都是沒有延遲的,實(shí)際門級電路都是有延遲的。

Verilog 中允許用戶使用門延遲,來定義輸入到其輸出信號的傳輸延遲。

門延遲類型主要有以下 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 min(d1, d2) d3
to_x 0 d min(d1, d2) min(d1, d2, d3)

如果用戶沒有指定延遲值,則默認(rèn)延遲為 0 。

如果用戶指定了 1 個(gè)延遲值,則所有類型的延遲值大小均為此值。

如果用戶指定了 2 個(gè)延遲值,則他們分別代表上升延遲和下降延遲,關(guān)斷和"to_x"延遲均為這 2 種延遲值中最小的那個(gè)。

如果用戶指定了 3 個(gè)延遲值,則他們分別代表上升延遲、下降延遲和關(guān)斷延遲,"to_x"延遲為這 3 種延遲值中最小的那個(gè)。

帶有延遲值的門級單元例化如下:

   //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è)延遲。

上下拉門級電路不會(huì)有任何的延遲,因?yàn)樗硎镜氖且环N硬件屬性,上下拉狀態(tài)不會(huì)發(fā)生變化,且沒有輸出值。

雙向開關(guān)(tran)在傳輸信號時(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 種類型的門延遲,還可以對每種類型的門延遲指定其最小值、典型值和最大值。在編譯或仿真階段,來選擇使用哪一種延遲值,為更切實(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ā)器

下面從門級建模的角度,對 D 觸發(fā)器進(jìn)行設(shè)計(jì)。

SR 觸發(fā)器

SR 觸發(fā)器結(jié)構(gòu)圖及真值表如下所示。

  • 當(dāng) S 為低電平,G1 輸出端 Q 為高電平,并反饋到 G2 輸入端。如果此時(shí) R 為高電平,則 G2 輸出端 Q' 為低電平。
  • R 為低電平 S 為高電平時(shí),分析同理。
  • 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í)該電路具有保持的功能。
  • 如果 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)圖和真值表如下所示。

  • 當(dāng) EN=1 時(shí),輸出狀態(tài)隨輸入狀態(tài)的改變而改變。
  • 當(dāng) EN=0 時(shí),輸出狀態(tài)保持不變。



D 鎖存器是一種電平觸發(fā)。

如果在 EN=1 的有效時(shí)間內(nèi),D 端信號發(fā)生多次翻轉(zhuǎn),則輸出端 Q 也會(huì)發(fā)生多次翻轉(zhuǎn)。這降低了電路的抗干擾能力,不是實(shí)際所需求的安全電路。

為提高觸發(fā)器的可靠性,增強(qiáng)電路抗干擾能力,發(fā)明了在特定時(shí)刻鎖存信號的 D 觸發(fā)器。

D 觸發(fā)器

將兩個(gè) D 鎖存器進(jìn)行級聯(lián),時(shí)鐘取反,便構(gòu)成了一種簡單的 D 觸發(fā)器,又名 Flip-flop。

其結(jié)構(gòu)圖和真值表如下所示。

第一級 D 鎖存器又稱為主鎖存器,在 CP 為低電平時(shí)鎖存。第二級 D 鎖存器又稱為從鎖存器,時(shí)鐘較主鎖存器相反,在 CP 為高電平時(shí)鎖存。



  • CP=1 時(shí),主鎖存器輸出端 Qm 會(huì)和 D 端信號的變化保持一致,而從鎖存器處于保持狀態(tài),輸出 Qs 保持不變。
  • 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 下降沿對 D 端進(jìn)行信號的鎖存,其余時(shí)間輸出端信號具有保持的功能。

將雙級 D 鎖存器展開為門級結(jié)構(gòu),如下圖所示。


對 D 觸發(fā)進(jìn)行門級建模,并加入門級延時(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 // test

仿真結(jié)果如下。

由圖可知,Q/QR 信號均在時(shí)鐘 CP 下降沿采集到了 D 端信號,并在單周期內(nèi)保持不變,且輸出有延遲。


對 cap3 時(shí)刻進(jìn)行放大,對延時(shí)進(jìn)行追蹤,如下圖所示。

  • CP 端到 CPN 端有上升延遲,時(shí)間為 110ps;
  • CPN 端到 G8O 端有下降延遲,時(shí)間為 70ps;
  • G8O 端到 G6O 端有上升延遲,時(shí)間為 110ps;
  • G6O 端到 Q 端有下降延遲,時(shí)間為 70ps;
  • 共 360ps,符合設(shè)置的門延遲。


點(diǎn)擊這里下載源碼


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號