DC學習(6)基本時序約束之路徑2時鍾的建模與約束


參考http://www.cnblogs.com/IClearner/p/6440488.html

一:時鍾/時鍾樹的屬性

1:時鍾樹:

  一般的時鍾,我們都指的是全局時鍾,全局時鍾在芯片中的體現形式是時鍾樹。

  時鍾樹,是個由許多緩沖單元(buffer cell)平衡搭建的時鍾網狀結構,如下圖所示:

  

  首先不得不說,實際的時鍾除了周期/頻率、相位、沿、電平屬性外,還有其他的屬性,也就是:不是下面這樣子規規整整的:

   

  為什么呢?那是因為時鍾有下面的屬性(“實際的buff”):

2:時鍾屬性

  ①時鍾的偏移(skew:時鍾分支信號在到達寄存器的時鍾端口過程中,都存在有線網等延時,由於延時,到達寄存器時鍾端口的時鍾信號存在有相位差,也就是不能保證每一個沿都對齊,這種差異稱為時鍾偏移(clock skew),也叫時鍾偏斜。時鍾的偏移如下圖所示:此外,時鍾skew與時鍾頻率並沒有直接關系,skew與時鍾線的長度及被時鍾線驅動的時序單元的負載電容、個數有關。

    

  ②時鍾抖動(jitter):相對於理想時鍾沿實際時鍾存在不隨時間積累的、時而超前、時而滯后的偏移稱為時鍾抖動,簡稱抖動,如下圖所示:

    

  

  時鍾的抖動可以分為隨機抖動(Random Jitter,簡稱Rj)和固有抖動(Deterministic jitter):

  ·隨機抖動的來源為熱噪聲、Shot Noise和Flick Noise,與電子器件和半導體器件的電子和空穴特性有關,比如ECL工藝的PLL比TTL和CMOS工藝的PLL有更小的隨機抖動;

  ·固定抖動的來源為:開關電源噪聲、串擾、電磁干擾等等,與電路的設計有關,可以通過優化設計來改善,比如選擇合適的電源濾波方案、合理的PCB布局和布線。

也就是說:jitter與時鍾頻率無直接關系

  時鍾的偏移和時鍾的抖動都影響着時鍾網絡分枝的延遲差異(相位差異),在Design  Compiler里面,我們用時鍾的不確定性(uncertainty來表示這兩種情況的影響。

  ③時鍾的轉換時間(transition :時鍾的上升沿跳變到下降沿或者時鍾下降沿跳變到上升沿的時間,這個時間並不是如左下圖所示那樣完全沒有跳變時鍾的,而是像右下圖那樣,時鍾沿的跳變時間就是時鍾的轉換時間(后面約束的時候會有相關的解釋)

     

  時鍾的轉換時間與與單元的延時時間(也就是器件特性)還有電容負載有關。

  ④時鍾的延時(latency :時鍾從時鍾源(比如說晶振)出發到達觸發器時鍾端口的延時,稱為時鍾的延時,包含時鍾源延遲(source latency)和時鍾網絡的延遲(network latency),如下圖所示:

   

  時鍾源延遲(clock source latency),也稱為插入延遲(insertion delay),是時鍾信號從其實際時鍾原點到設計中時鍾定義點(時鍾的輸入引腳)的傳輸時間,上圖是3ns。

  時鍾網絡的延遲( clock network latency)是時鍾信號從其定義的點(端口或引腳)到寄存器時鍾引腳的傳輸,經過緩沖器和連線產生的延遲(latency),上圖是1ns。

 二:DC中的時鍾約束 

  我們用下面的命令建立時鍾那幾個屬性模型:

  create_cloclkset_clock_uncertainty、set_clock_latency、set_clock_transition分別進行時鍾的周期、偏移、延時、轉換約束。

1:時鍾偏差的建模

  set_clock_uncertainty:對時鍾的偏移與抖動進行建模,也就是對時鍾的偏差進行建模。

  create_clock -period 10 [get_ports  CLK]

  set_ clock_ uncertainty  -setup  0.5  [get_clocks CLK]

  理想的時鍾

  

  只對建立時間的偏差時鍾建模

  

  對建立時間和保持時間都進行偏差建模

  

  在默認的情況下,"set-clock_uncertainty”命令如果不加開關選項“-setup”或“-hold",那么該命令給時鍾賦予相同的建立和保持偏差值。

  這是一種對偏差建模的方式,也就是對建立時間和保持時間進行建模的方式;除此之外,還可以對時鍾的上升沿和下降沿進行偏差建模,比如上升沿的偏差是0.2ns,下降沿的偏差是0.5ns,則有:

  

  set_ clock_ uncertainty  -rise  0.2 -fall 0.5  [get_clocks CLK]

  一般情況下,我們只約束建立時間,也就是只用第一種方式進行時鍾偏差建模。

  當對建立時間偏差建模之后,這時,時鍾周期、時鍾偏差和建立時間的關系如下圖所示

  

  假設時鍾周期是10ns,建立時間偏差是0.5ns,觸發器的建立時間是0.2ns,這時候從圖中就可以看到,留給寄存器間的路徑的裕量就減少了,也就是說,對寄存器間的約束就變得更加嚴格了,寄存器的翻轉延時、組合邏輯延時與線網延時等這些延時的和必須小於9.3ns,否則就違反了FF2的建立時間。這一點是要注意的。

2:時鍾轉換時間的建模

  由於時鍾並不是理想的方波,用set_ clock_ transition來模擬時鍾的轉換(transition)時間。默認的上升轉換時間為從電壓的20%上升至80%的時間,下降的轉換時間為從電壓的80%下降至20%的時間。如果set_clock_transition命令中不加開關選項“-setup”或“-hold" ,那么該命令給時鍾賦予相同的上升和下降轉換時間。一般情況下,我們只約束最大的轉換時間,如最大轉換時間是0.2ns,那么就加上-max選項:

  set_clock_transition  -max    0.2    [get_clocks  CLK]

3:時鍾延遲的建模

  時鍾從時鍾源(比如說晶振)出發到達觸發器時鍾端口的延時,稱為時鍾的延時,包含時鍾源延遲(source latency)和時鍾網絡的延遲(network latency)。我們使用set_clock_latency進行時鍾延時的建模。一般情況下,我們把時鍾源延遲(source latency)和時鍾網絡的延遲(network latency)分開來,因為時鍾源延時需要建模,是因為DC是真的不知道這延時是多大,但是對於時鍾網絡的延遲,DC在布局布線前不知道,但是在布局布線后就可以計算出來時鍾網絡的延時了,因此在布局布線之后進行綜合時,就沒有必要對時鍾網絡進行延時,因此就要把這兩個延時分開來進行約束。

   先說布局布線之前:時鍾周期為10ns,時鍾源到芯片的時鍾端口時間是3ns,時鍾端口都內部觸發器的時間是1ns,如下圖所示,

   

  那么就用下面的命令進行建模:

  create_clock  -period  10  [get-ports CLK]

  set_clock_latency  -source  3  [get_clocks CLK]

  set_clock_latency 1  [get_clocks CLK]

  布局布線之后:就可以計算實際的線網延時,就要使用

  set_propagated_clock  [ get_clocks CLK] 

  set_clock_latency 1  [get_clocks CLK]這個命令代替上面的命令。

 3:總結

  基本的時鍾建模就OK了,下面進行總結並給出我們這個例子中使用的約束腳本,理想時鍾和實際時鍾的對比,如下圖所示:

   

  因此總結就是,對實際時鍾的建模/約束如下所示:

  

 


免責聲明!

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



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