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)。
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。
圖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,因此上升時間大于下降時間。這個結論是根據電流公式得出的,不懂的請移步模拟電路查閱。
圖2 Unbalanced Buffer電路原理圖
這裡的每個buffer都需要更多的時間來充電(相比放電過程)。輸入為占空比為50%的周期為4ns的脈沖信号。當時鐘信号通過buffer chain傳播時,脈沖寬度如下圖4所示減少相當多。最後一個buffer的輸出具有相同的周期,但占空比發生了變化。在最壞的情況下,這種情況可能會小于設計所需的脈沖寬度(最小脈沖寬度)。
圖3 Unbalanced Buffer Chain
圖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。
圖5 balance buffer電路結構圖
圖6 Balanced Buffer Chain 輸出波形
unbalanced inverter有沒有min pulse width問題?
如果在時鐘路徑中使用偶數個反相器,一對反相器上升和下降時間會相互補償,所以脈沖寬度并不會改變。所以反相器輸出不會導緻脈沖寬度違規。
圖7所示為一個反相器的電路結構圖。其中Wp = 100nm,Wn = 300nm。根據P管和N管的尺寸,我們得知上升時間比下降時間小得多。
圖7 Unbalanced 反相器原理圖
圖8所示為一個十級反相器級聯的電路圖。圖9為第九級和第十級反相器輸出波形圖。從圖中可以得知,unbalance inverter同樣也不會導緻min pulse width問題。
圖8 unbalanced inverter chain
圖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小時内給予解答(也可以發表你對某個知識點的看法,項目中遇到的難點,困惑或者職業發展規劃等)。
有話要說...