输入引脚时钟约束_最强干货分享 | 时钟树例外(exclude pin、stop pin、non_stop pin、float pin)...
《最強干貨分享
時鐘樹例外(exclude pin、stop pin、
non_stop pin、float pin)》
研究生畢業之前曾發過這篇推文,現在在原來的基礎上進行了修正,又添加了一些內容,幾乎是壓箱底的,現在拿出來分享一下,如果覺得好的話麻煩多多~~點贊~~分享~~喲。
眾所周知,時鐘樹綜合(CTS)是除了Floorplan階段之外手工干預最多的部分,也是數字后端中非常令人頭疼的一個部分,這里講解一下CTS階段的一些時鐘樹例外的Pin(引腳例外)吧。如果時鐘樹綜合階段Skew出現了問題,那么多半是這些引腳沒有指定好,可以看一下下面的內容來debug自己的設計吧。
時鐘樹例外(clock tree exceptions)
ICC中可以用該命令指定時鐘樹例外:
set_clock_tree_exceptions
這里主要講解引腳例外(Pin exceptions),大致分為以下幾種類型:
Pin結點的類型
即:
1、不間斷引腳(-non_stop_pins)
2、排除引腳(-exclude_pins)
3、浮動引腳(-float_pins)
4、停止引腳(-stop_pins)
此外還有一種:
5、勿觸碰子樹(-dont_touch_subtrees)
時鐘樹異常的優先級
如果同一個引腳多次發出set_clock_tree_exceptions命令,
引腳保持最高優先級的異常。該工具按以下順序優先考慮時鐘樹引腳異常:
1、不間斷引腳
2、排除引腳
3、浮動引腳
4、停止引腳
其中5和上面四種是不沖突的,可以重復定義
下面將對1~5分別做以介紹:
1、Nonstop pins(不間斷引腳)
不間斷引腳是通常被認為時鐘樹端點的引腳,但ICC會穿過它們以跟蹤查找真正的時鐘樹端點。驅動生成時鐘的時序單元的時鐘引腳是隱式不間斷引腳。
如果你不知道什么是Implicit nonstop pins(隱式不間斷引腳),可以看前面的推文:
干貨放送 - 時鐘路徑的端點(Stop pins、Exclude pins)
或者看下面的介紹:
如果時序單元的扇出驅動的是生成時鐘(即該時序單元用于分頻之用,用于產生生成時鐘),則ICC將該時序單元的時鐘引腳視為隱式不間斷引腳(implicit nonstop pins),并穿過該時序單元以追蹤定位真正的時鐘樹端點,如下圖所示。另外,ICC認為集成時鐘門控(integrated clock-gating, ICG)單元的時鐘輸入引腳是隱式不間斷引腳,因此不用手動對其進行重復設置。
如果要指定不間斷引腳,可以使用命令:
set_clock_tree_exceptions -non_stop_pins
2、Exclude pins(排除引腳)
排除引腳是從時鐘樹時序計算和優化中排除的時鐘樹端點。ICC僅在計算和優化設計規則約束時使用排除引腳。除了ICC推斷的排除引腳(隱式排除引腳)外,ICC還支持用戶定義(或顯式)排除引腳。例如,您可以定義一個排除引腳來排除從某些組合邏輯引出的時鐘樹的所有分支(如下圖所示),或者排除隱式停止引腳。
在時鐘樹綜合(CTS)期間,ICC通過在排除引腳(隱式和顯式排除引腳)之前插入guide buffer來從時鐘樹中隔離這些引腳。對于排除引腳,ICC不會執行Skew或插入延遲優化,而是執行設計規則修復。
要指定排除引腳,可以使用命令:
set_clock_tree_exceptions -exclude_pins
3、Float pins(浮動引腳)
Float Pins是具有特殊插入延遲要求的時鐘引腳。工具在計算到該Float Pins的插入延時(Insertion delay)時,將把Float Pin延遲(正或負)添加到計算Insertion delay中去。要指定Float Pins及其時序特性,可以使用以下命令:
set_clock_tree_exceptions
選項:set_clock_tree_exceptions選項:
??-float_pins [get_pins?pin_list]
??-float_pin_max_delay_fall?max_delay_fall_value
??-float_pin_max_delay_rise?max_delay_rise_value
??-float_pin_min_delay_fall?min_delay_fall_value
??-float_pin_min_delay_rise?min_delay_rise_value
??-float_pin_logic_level?logic_level_value
注意:
如果使用-float_pins選項,則必須至少指定一個浮動引腳延遲選項否則將發生錯誤。
Float pin實例:
# Specifying anegative float pin
icc_shell>set_clock_tree_exceptions -float_pins U1/CLK \
-float_pin_max_delay_rise -0.5 -float_pin_max_delay_fall -0.5
# Specifying apositive float pin
icc_shell>set_clock_tree_exceptions -float_pins U4/CLK \
-float_pin_max_delay_rise 0.5 -float_pin_max_delay_fall 0.5
浮動引腳延遲值可以是正或負,取決于具體的時序要求:
要增加引腳的insertion delay,需要指定負引腳延遲(如下圖所示的Negative float pin);
要減小引腳的insertion delay,需要指定正引腳延遲(如下圖所示的Positive float pin)。
上述的命令將會生成如下類似結構的時鐘樹:
硬宏單元(Hard Macro)的內部延遲在單元的時序模型中表示。ICC工具使用該時序模型來確定Hard Macro的外部時鐘引腳,并將這些引腳用作時鐘匯點。在時鐘樹綜合期間,ICC會對這些Macro外部時鐘引腳平衡Skew并最小化插入延遲。因此對于硬宏單元不需要額外的指定。
如果沒有硬宏單元的時序模型,或者想要修改硬宏單元的時序特征,需要使用浮動引腳來指定硬宏單元內部時鐘樹的時序特征。可以通過指定從浮動引腳看到宏單元內部的時鐘匯點的最小和最大插入延遲到來定義時序特征。
4、Stop pins(停止引腳)
Stop pins是用于平衡時鐘樹延遲的時鐘樹端點。在時鐘樹綜合期間,ICC在計算和優化設計規則約束(邏輯DRC)和時鐘樹時序(skew和insertion delay)時使用Stop pins。
默認時鐘匯點是隱式停止引腳。此外,ICC支持用戶定義(或顯式)停止引腳。例如,可以定義一個停止引腳來結束在組合單元輸入上的分支,或者使用隱式排除引腳作為時鐘匯點。
ICC為所有停止引腳(隱式和顯式)分配零相位延遲,并在延遲平衡期間使用此延遲。
要指定停止引腳,可以使用命令:
set_clock_tree_exceptions -stop_pins
關于用戶定義的stop pin或者顯示的stop pin,篇幅太長了,這里就不介紹了。
5、Dont_touch_subtrees(勿觸碰子樹)
在某些情況下,希望保留現有時鐘樹的一部分,需要這樣設置。例如,當兩個時鐘網絡共享多路選擇器后面的某些時鐘邏輯的一部分時。保留的時鐘樹的部分稱為不觸碰子樹。要指定不觸碰子樹,可以使用如下命令指定不觸碰子樹的根引腳:
set_clock_tree_exceptions -dont_touch_subtrees
關于dont_touch_subtrees的應用,感興趣的可以看之前發過的一篇非常火的推文:
深度好文 | 一個考慮了Scan、Boundary Scan、分頻時鐘、門控時鐘的CTS的分析設計示例(含腳本)
雖然該工具在時鐘樹綜合期間沒有對不接觸子樹進行任何修改,但它會傳播時鐘樹屬性和非默認布線規則(NDR)到不要觸碰的子樹。為了防止時鐘屬性和非默認布線規則的傳播,請將cts_traverse_dont_touch_subtrees變量設置為false。
ICC在平衡時鐘延遲和計算時鐘偏移時,會考慮到不碰觸子樹中的時鐘匯點。
要刪除某個引腳上的dont_touch_subtrees屬性,可以使用命令:
remove_clock_tree_exceptions -dont_touch_subtrees
# 本公眾號有個紅包和資料福利微信群?##? 可以先加我微信,我拉你進群? ##? 加我微信 請備注下面問題的答案? ##? ? ? ?ASIC的全稱? ? ? ?#如果喜歡本公眾號也請多多分享喲,謝謝您的關注
總結
以上是生活随笔為你收集整理的输入引脚时钟约束_最强干货分享 | 时钟树例外(exclude pin、stop pin、non_stop pin、float pin)...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C语言函数class,C语言--7-cl
- 下一篇: C语言第一行为N以下N行,C语言每日小练