當前位置:首頁 > 教育 > 正文

為什麼時鐘樹上要用clock inverter(min pulse width check)

Min pulse width定義

最小脈沖寬度檢查可确保時鐘信号的寬度足夠寬,以便采集到正确的數據,保證設計功能。即為了獲得穩定的輸出,需要确保時鐘信号寬度至少達到某個“最小寬度”。比如lib中就對寄存器Flipflop的CLK pin有min pulse width的check。

  • High pulse width

If you need a formal definition of the term, it is the interval between the rising edge of the signal crossing 50% of VDD and the falling edge of the signal crossing 50% of VDD.

  • Low pulse width

If talking in terms of low signals, it is the the interval between falling edge of the signal crossing 50% of VDD and the rising edge of signal crossing 50% of VDD.

以下圖為例,一個時鐘信号CLK,經過六級普通buffer(各自的rise time和fall time是不相同的)到達一個寄存器的CK 端。我們來計算下high pulse width,low pulse width以及判斷是否存在min pulse width違例(uncertainty:80ps Reg ck pin requirement min pulse width:0.420ns)。

為什麼時鐘樹上要用clock inverter(min pulse width check)

High pulse width = 0.5 (0.049-0.056) (0.034 -0.039) (0.023-0.026) (0.042-0.046) (0.061 – 0.061) (0.051-0.054) = 0.478ns

Low Pulse width = 0.5 (0.056 – 0.049) (0.038 – 0.034) (0.026 – 0.023) (0.046 – 0.042) (0.061 – 0.061) (0.054 – 0.051) = 0.522ns

high pulse width = 0.478-0.080 = 0.398ns (小于0.420ns)

因此,存在min pulse width violation

Min pulse width檢查方式

  • Liberty文件

Liberty文件中對寄存器的CLK pin和reset pin均有一個默認的min pulse width check值。在STA分析時工具會自動載入進行check。如圖1所示,index_1為input transition。

為什麼時鐘樹上要用clock inverter(min pulse width check)

圖1 lib中min_pulse_width屬性定義

  • SDC約束

除了采用lib文件中默認的min pulse width值check外,我們還可以通過如下SDC命令來設置特殊的約束條件。

set_min_pulse_width -high 2 [get_clocks clk]

set_min_pulse_width -low 1 [get_clocks clk]

理想clock buffer/inverter的特性

  • Equal rise and fall times

  • Less delay variations with PVT and OCV

  • Clock buffer能夠驅動較長的net以及更多的fanout

普通buffer如何導緻pulse width violation?

圖2顯示了Wp = 100nm&Wn = 100nm的Buffer電路的示意圖。β比率(PMOS的寬度與NMOS的寬度的比率)由于NMOS的遷移率高于PMOS,因此上升時間大于下降時間。這個結論是根據電流公式得出的,不懂的請移步模拟電路查閱。

為什麼時鐘樹上要用clock inverter(min pulse width check)

圖2 Unbalanced Buffer電路原理圖

這裡的每個buffer都需要更多的時間來充電(相比放電過程)。輸入為占空比為50%的周期為4ns的脈沖信号。當時鐘信号通過buffer chain傳播時,脈沖寬度如下圖4所示減少相當多。最後一個buffer的輸出具有相同的周期,但占空比發生了變化。在最壞的情況下,這種情況可能會小于設計所需的脈沖寬度(最小脈沖寬度)。

為什麼時鐘樹上要用clock inverter(min pulse width check)

圖3 Unbalanced Buffer Chain

為什麼時鐘樹上要用clock inverter(min pulse width check)

圖4 pulse width reduction

Balanced buffers have equal rise and fall time

為了使得buffer的上升和下降時間一緻,PMOS的寬度應該約為NMOS的兩倍(具體倍數關系取決于工藝)。Balance buffer電路結構圖如圖5所示。圖6為一堆balanced buffer級聯的buffer chain的輸出波形。從輸出波形看到,當我們在clock path上使用這種balanced buffer,輸出時鐘信号周期未發生變化且占空比仍然為1:1,即不會出現pulse width violation。

為什麼時鐘樹上要用clock inverter(min pulse width check)

圖5 balance buffer電路結構圖

為什麼時鐘樹上要用clock inverter(min pulse width check)

圖6 Balanced Buffer Chain 輸出波形

unbalanced inverter有沒有min pulse width問題?

如果在時鐘路徑中使用偶數個反相器,一對反相器上升和下降時間會相互補償,所以脈沖寬度并不會改變。所以反相器輸出不會導緻脈沖寬度違規。

圖7所示為一個反相器的電路結構圖。其中Wp = 100nm,Wn = 300nm。根據P管和N管的尺寸,我們得知上升時間比下降時間小得多。

為什麼時鐘樹上要用clock inverter(min pulse width check)

圖7 Unbalanced 反相器原理圖

圖8所示為一個十級反相器級聯的電路圖。圖9為第九級和第十級反相器輸出波形圖。從圖中可以得知,unbalance inverter同樣也不會導緻min pulse width問題。

為什麼時鐘樹上要用clock inverter(min pulse width check)

圖8 unbalanced inverter chain

為什麼時鐘樹上要用clock inverter(min pulse width check)

圖9 第九級,第十級反相器輸出波形圖

所以,在做時鐘樹綜合時,我們往往選用clock inverter來長clock tree。

數字後端設計實現之時鐘樹綜合實踐篇

一網打盡時鐘樹綜合Clock Skew

時鐘樹綜合(clock tree synthesis)基礎篇

思考題:

如果用clock buffer來長clock tree呢?各自的優缺點分别是什麼?clock buffer和普通buffer的優缺點各是什麼?(答案均在本文中)

小編知識星球簡介:

在這裡,目前已經規劃并正着手做的事情:

  • ICC/ICC2 lab的編寫

  • 基于ARM CPU的後端實現流程

  • 利用ICC中CCD(Concurrent Clock Data)實現高性能模塊的設計實現

  • 其他内容待定

在這裡,各位可以提問(支持匿名提問,提問從此不再害羞),小編會在24小時内給予解答(也可以發表你對某個知識點的看法,項目中遇到的難點,困惑或者職業發展規劃等)。

你可能想看:

有話要說...

取消
掃碼支持 支付碼