Verilog中的延時模型


                             Verilog中的延時模型

 

一、專業術語定義

  • 模塊路徑(module path): 穿過模塊,連接模塊輸入(input端口或inout端口)到模塊輸出(output端口或inout端口)的路徑。
  • 路徑延時(path delay):與特定路徑相關的延時
  • PLI:編程語言接口,提供 Verilog數據結構的過程訪問。
  • 時序檢查(timing check):監視兩個輸入信號的關系並檢查的系統任務,以保證電路能正確工作。
  • 時序驅動設計(timing driven design):從前端到后端的完整設計流程中,用時序信息連接不同的設計階段

 

二、延時模型類型(Delay Modeling Types) 

         

 

 2.1、塊延時(Lumped Delay)

  • 塊延時方法是將全部延時集中到最后一個門上。這種模型簡單但不夠精確,只適用於簡單電路。因為當到輸出端有多個路徑時不能描述不同路徑的不同延時。
  • 可以用這種方法描述器件的傳輸延時,並且使用最壞情況下的延時(最大延時)。
  1.  
    `timescale 1ns/ 1ns
  2.  
     
  3.  
    module noror( Out, A, B, C);
  4.  
    output Out;
  5.  
    input A, B, C;
  6.  
     
  7.  
    nor n1 (net1, A, B);
  8.  
    or #3 o1 (Out, C, net1);
  9.  
     
  10.  
    endmodule

         

 

 2.2、分布延時(Distributed Delays)

  • 分布延時方法是將延時分散到每一個門。在相同的輸出端上,不同的路徑有不同的延時。分布延時有兩個缺點:
– 在結構描述中隨規模的增大而變得異常復雜。
– 仍然不能描述基本單元 (primitive) 中不同引腳上的不同延時。

 

  1.  
    `timescale 1ns/ 1ns
  2.  
     
  3.  
    module noror( Out, A, B, C);
  4.  
    output Out;
  5.  
    input A, B, C;
  6.  
     
  7.  
    nor #2 n1 (net1, A, B);
  8.  
    or #1 o1 (Out, C, net1);
  9.  
     
  10.  
    endmodule

        

 

 2.3、模塊路徑延時(Module Path Delays)

  • 在專用的specify塊描述模塊從輸入端到輸出端的路徑延時。
– 精確性:所有路徑延時都能精確說明。
– 模塊性:時序與功能分開說明

        

 2.4、結構描述的零延時反饋(Loop)

• 當事件隊列中所有事件結束時仿真前進一個時片。在某種零延時反饋情況下,新事件在同一時片不斷的加入,致使仿真停滯在那個時片。
• 若在結構描述中出現從輸出到輸入的零反饋情況,多數仿真器會檢測到這個反饋並產生錯誤信息。 Verilog 的lint checker 對這種情況會提出警告。
• 解決這個問題的方法是在電路中加入分布延時。路徑延時不能解決零延時振盪問題,因為輸出信號在反饋前不會離開模塊。

        

 

 2.5、精確延時控制

2.5.1、Verilog中,可以:

  • 說明門和模塊路徑的上升(rise)、下降(fall)和關斷(turn-off)延時
  1.  
    and #(2,3) (out, in1, in2, in3); // rise, fall
  2.  
     
  3.  
    bufif0 #( 3,3,7) (out, in, ctrl); // rise, fall, turn- off
  4.  
     
  5.  
    (in => out) = (1, 2); // rise, fall
  6.  
     
  7.  
    (a => b) =  (5, 4, 7); // rise, fall, turn- off
  • 在路徑延時中可以說明六個延時值(0 ®1, 1 ®0, 0 ®Z, Z ®1, 1 ®Z, Z ®0)

        (C => Q) = (5, 12, 17, 10, 6, 22);

  • 在路徑延時中說明所有12個延時值(0 ®1, 1 ®0, 0 ®Z, Z ®1, 1 ®Z, Z ®0, 0 ®X, X ®1, 1 ®X, X ®0, X ®Z, Z ®X)

        (C => Q) = (5, 12, 17, 10, 6, 22, 11, 8, 9, 17, 12, 16);

  • 上面所說明的每一個延時還可細分為最好、典型、最壞延時。

        or #( 3.2:4.0:6.3) o1( out, in1, in2);  // min: typ: max

        not #( 1:2:3, 2:3:5) (o, in);   // min: typ: max for rise, fall

        user_module  #(1:2:3, 2:3:4) ( ……;Cadence Verilog中還不支持

        (b => y) = (2: 3: 4, 3: 4: 6, 4: 5: 8);  // min: typ: max for rise, fall, and turnoff

       延時說明定義的是門或模塊的固有延時。輸入上的任何變化要經過說明的延時才能在輸出端反映出來。如果沒有延時說明,則基本單元的延時為0。分布關斷延時只對三態基本單元有效。

  • 上升延時是輸出轉換為1時的延時
  • 下降延時是輸出轉換為0時的延時
  • 關斷延時輸出轉換為三態時的延時
  • 到X的轉換延時是最小延時,而從X到其它值的轉換使用最壞延時
– 如果說明了上升、下降和關斷延時,則 1->X 的轉換延時使用上升和關斷延時的最小值。 X->0的延時為下降延時; X->Z 的轉換為關斷延時。
– 如果只說明了上升和下降延時,則 1->X 和 X->0 使用下降延時, X->Z 使用上升和下降延時的最小延時
– 如果只說明了一個延時,則所有轉換使用這個延時。
– 如果說明了六個延時,則 1->X 使用 1->X 和 1->Z 中最小延時; X->0 使用 1->0 和 X->0 的最大延時; X->Z 使用 1->Z 和 0->Z 中的最大延時。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM