相關閱讀
SDC命令詳解https://blog.csdn.net/weixin_45791458/category_12931432.html?spm=1001.2014.3001.5482
目錄
????????指定降額比例
????????指定降額對象列表/集合
????????指定沿
????????指定最大、最小條件
????????指定早、晚條件
????????指定路徑的類型
????????指定降額類型
????????指定約束
????????指定增量
????????寫在最后? ? ? ?
????????由于制造工藝的偏差,一塊晶圓(Wafer)上的各個裸片(Die)擁有不同的特征,甚至一個裸片上的不同部位也可能出現偏差。前者稱為全局工藝偏差(Global Process Variation),后者稱為局部工藝偏差(Local Process Variation),這個偏差比全局工藝偏差小很多。
????????除了工藝參數(Process),PVT中的電壓(Voltage)和溫度(Temperature)在芯片上的分布也不是恒定的,PVT偏差這可能由下面幾種因素導致:
- PMOS晶體管和NMOS晶體管的電壓閾值偏差。
- PMOS晶體管和NMOS晶體管的溝道長度(尺寸)差異
- 由于電壓降(IR Drop)導致的晶體管電壓偏差。
- 局部熱點造成的溫度偏差。
- 互連線的刻蝕不均造成互連線電阻和電容的偏差。
? ? ? ? 上面的因素可以統稱為OCV(On-Chip Variation),即片上變化。OCV會影響芯片上不同區域的單元延遲和互連延遲,在普通的STA分析中,我們只會選擇一種工作條件(operating condition),并在此條件下分析,而沒有考慮芯片上各區域的差異。因此,為了更好地模擬OCV效應的影響,set_timing_derate命令允許設計者設置時序降額,簡單來說,就是允許某些路徑快一些,允許某些路徑慢一些,STA時會考慮到這些因素,從而分析最難滿足的情況。
? ? ? ? 下面是set_timing_derate命令的BNF范式(有關BNF范式,可以參考以往文章)為:
set_timing_deratevalue object_list[-rise] [-fall][-min] [-max][-early] [-late][-clock] [-data][-net_delay] [-cell_delay][-cell_check] [-min_period] [-min_pulse_width][-increment]//注:該命令的object_list參數一定要放在value參數后
指定降額比例
? ? ? ? value參數指定了降額后的比例(在0.1到2之間),比如可以指定value為0.9,表示計算值為初始值的90%,即降額了10%。
指定降額對象列表/集合
? ? ? ? object_list用于指定降額值用于哪些對象,可以是葉單元、層次單元、庫單元。當不指定降額對象列表/集合時,降額值用于整個設計,當整個設計的降額值和單元的降額值沖突時,以單元的降額值為準。
????????對于列表而言,如果有多于一個對象,需要使用引號或大括號包圍(對使用集合無效),關于列表和集合的區別,可以參考下面的博客。
SDC命令詳解:使用集合(Collection)而不是字符串(String)/列表(List)作為命令參數https://chenzhang.blog.csdn.net/article/details/147144571
指定沿
????????-rise選項用于指定降額值作用于尾部是上升沿的時序弧、-fall選項用于指定降額值作用于尾部是下降沿的時序弧。如果這兩個選項都沒有指定,降額值同時作用于所有時序弧(相當于它們同時指定)。
指定最大、最小條件
????????-max選項用于指定降額值作用于最大延遲分析(一般情況下,如果不開啟on_chip_variation,這指的是建立時間檢查),-min選項用于指定降額值作用于最小延遲分析(一般情況下,如果不開啟on_chip_variation,這指的是保持時間檢查)。如果這兩個選項都沒有指定,降額值同時作用于最大延遲和最小延遲分析(相當于它們同時指定)。
指定早、晚條件
? ? ? ? -early和-late選項在set_clock_latency命令中也有,如下面的博客所示。
SDC命令詳解:使用set_clock_latency命令進行約束https://blog.csdn.net/weixin_45791458/article/details/136130769?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522290c4b7d417404a42653da4af39c2fc8%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=290c4b7d417404a42653da4af39c2fc8&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-1-136130769-null-null.nonecase&utm_term=set_clock_latency&spm=1018.2226.3001.4450????????-early選項用于指定降額值用于最快的路徑,-late選項用于指定降額值用于最慢的路徑。在建立時間分析和保持時間分析中,會對發射路徑和捕獲路徑的這點進行考慮,給出最差情況下的分析結果。如果這兩個選項都沒有指定,降額值同時作用于發射路徑和捕獲路徑(相當于它們同時指定)。為了與實際情況吻合,-early指定的降額值應小于1,-late指定的降額值應大于1。
? ? ? ? 具體來說,對于建立時間分析,發射路徑上的時鐘路徑和數據路徑會使用-late選項指定的最慢降額值,而捕獲路徑上的時鐘路徑和數據路徑會使用-early選項指定的最快降額值,這是最壞的情況下的結果;對于保持時間分析,發射路徑上的時鐘路徑和數據路徑會使用-early選項指定的最快降額值,而捕獲路徑上的時鐘路徑和數據路徑會使用-late選項指定的最慢降額值,這是最壞的情況下的結果。
指定路徑的類型
? ? ? ? -clock選項用于指定降額值只用于時鐘路徑,-data選項用于指定降額值只用于數據路徑。如果這兩個選項都沒有指定,降額值同時用于時鐘路徑和數據路徑(相當于它們同時指定)。
指定降額類型
????????-net_delay選項用于指定降額值只用于互連延遲,-cell_delay選項用于指定降額值只用于單元延遲,需要注意的是,-net_delay選項不能與對象列表/集合一起使用,因為互連延遲的指定是全局性的。
指定約束
? ? ? ? 默認情況下,建立時間、保持時間之類的時序約束不會被降額。
????????-cell_check選項指定對單元的建立時間、保持時間約束應用降額,該選項不能與-clock、-data、-cell_delay、-net_delay選項一起使用。需要注意的是,set_input_delay命令設置的輸入延遲和set_output_delay命令輸出延遲不會被降額影響。
????????-min_period選項指定對單元的最小周期約束應用降額,該選項只能與-rise、-fall選項一起使用,此時-rise選項表示使用上升沿到上升沿計算周期,-fall選項表示使用下降沿到下降沿計算周期。
????????-min_pulse_width選項指定對單元的最小脈沖寬度約束應用降額,該選項只能與-rise、-fall選項一起使用,此時-rise選項表示高電平脈沖寬度,-fall選項表示低電平脈沖寬度。
指定增量
? ? ? ? -increment選項用于設置增量降額值,總降額值為基準降額值加增量降額值。
寫在最后? ? ? ?
? ? ? ? 隨著工藝尺寸的不斷縮小,靜態時序分析受到的制造過程變化影響日益顯著。傳統的解決方案是使用一個全局的固定系數(set_timing_derate命令)來為設計添加裕量,以應對片上變化(On Chip Variation, OCV),雖然在130nm和90nm工藝節點時仍屬合理,但在更先進的制程中已顯得過于保守,帶來了過度設計、性能下降和設計周期延長等問題。
? ? ? ? 為解決這一挑戰,PrimeTime在2008年左右引入了高級片上變化(AOCV)技術,這是對傳統OCV方法的自然擴展,它通過更細致和上下文相關的建模方式,為設計提供了更真實、低悲觀度的時序裕量控制。