學(xué)習(xí)Fusion_Compiler_FE17:Timing 相關(guān):Modes, Corners and Scenarios2
掃描二維碼
隨時(shí)隨地手機(jī)看文章
通過(guò)場(chǎng)景分析最小化模式和角點(diǎn)的數(shù)量:
? 如若你繼承了包含混合模式、角點(diǎn)和場(chǎng)景的約束條件:
▲ 為每個(gè)場(chǎng)景創(chuàng)建獨(dú)有的模式和角點(diǎn),借此可以移除相同的場(chǎng)景。
▲ 執(zhí)行remove_duplicate_timing_contexts命令來(lái)找出模式和角點(diǎn)的最小集合,移除重復(fù)項(xiàng),并重新分配場(chǎng)景。
▲ 運(yùn)行write_script命令來(lái)記錄模式、角點(diǎn)及場(chǎng)景相關(guān)的約束條件,以便后續(xù)使用或?qū)彶椤?
1create_mode M1 ; create_corner C1 2create_scenario -name S1 -mode M1 -corner C1 3create_mode M2 ; create_corener C2 4create_scenario -name S2 -mode M2 -corner C2 5...... 6current_scenario S1 7read_sdc S1.sdc 8current_scenario S2 9read_sdc S2.sdc 10...... 11remove_duplicate_timing_contexts 12write_script
假設(shè)在上述例子中,remove_duplicate_timing_contexts命令發(fā)現(xiàn)模式M1和M2實(shí)際上是相同的模式(因?yàn)樗鼈児蚕硗耆嗤募s束條件):它會(huì)刪除模式M2,并將場(chǎng)景S2重新指派給M1(而不是原來(lái)的M2)。
該命令同樣會(huì)刪除完全相同的場(chǎng)景。例如,如果S1=M1+C1且S2=M2+C2,進(jìn)一步假設(shè)M1=M2、C1=C2以及S1=S2,那么S2、M2和C2都將被移除。
write_script命令會(huì)創(chuàng)建一個(gè)名為wscript的目錄,其中包含為每個(gè)模式、角點(diǎn)、場(chǎng)景以及全局約束單獨(dú)的Tcl文件。
當(dāng)你的網(wǎng)表或布局規(guī)劃發(fā)生變化時(shí),在設(shè)計(jì)設(shè)置階段加載這些創(chuàng)建的文件。
檢查時(shí)序約束條件:
? 可使用以下命令來(lái)檢查約束條件:
▲ 使用check_timing檢查缺失的時(shí)鐘、時(shí)鐘域交叉、缺失的輸入/輸出延時(shí)等問(wèn)題…
▲ 運(yùn)行report_exceptions識(shí)別具有單周期時(shí)序異常的路徑:虛假路徑、多周期路徑、異步最小或最大延遲路徑。
▲ 執(zhí)行report_case_analysis以確認(rèn)模式設(shè)置的正確性。
▲ 運(yùn)用report_disable_timing來(lái)識(shí)別含有被禁用時(shí)序弧的路徑(這些路徑將不會(huì)針對(duì)時(shí)序進(jìn)行優(yōu)化)。
1check_timing 2foreach_in_collection mode [all_modes] { 3 current_mode $mode 4 report_exceptions 5 report_case_analysis 6 report_disable_timing 7}
■ 多數(shù)report_命令均針對(duì)當(dāng)前場(chǎng)景生效:
■ 部分命令提供-scenario,-corner, 及/或-mode選項(xiàng),以便調(diào)整報(bào)告內(nèi)容所涉及的場(chǎng)景、角點(diǎn)或模式。
控制多角多模(MCMM)時(shí)序報(bào)告
? 報(bào)告所有活動(dòng)的、啟用建立時(shí)間分析的場(chǎng)景中,各個(gè)路徑組內(nèi)的單一最差建立時(shí)序路徑:
report_timing
? 從列出的和活動(dòng)的角點(diǎn)、模式或場(chǎng)景中,分別報(bào)告單一最差建立時(shí)序路徑:
1report_timing -corners "C1 C4" 2report_timing -modes FUNC* 3report_timing -scenarios "S1 S2 S5 S6"
? 分別為每個(gè)活躍的角點(diǎn)、模式、場(chǎng)景或路徑組報(bào)告最差建立時(shí)序路徑:
1report_timing -reportby corner|mode|scenario|group
? 分別為每個(gè)列出的和活動(dòng)的角點(diǎn)、模式或場(chǎng)景報(bào)告最差建立時(shí)序路徑:
1report_timing -worst-corners "C1 C4" -modes FUNC* -scenarios "S1 S2 S5 S6"
控制場(chǎng)景分析與優(yōu)化:
?create_scenario命令用于創(chuàng)建場(chǎng)景,將其設(shè)為活動(dòng)狀態(tài),并啟用以下分析類型:
-
建立時(shí)間和保持時(shí)間
-
泄漏功耗與動(dòng)態(tài)功耗
-
最大轉(zhuǎn)換、最大電容與最小電容
? 針對(duì)所有活動(dòng)場(chǎng)景及其啟用的分析類型,優(yōu)化會(huì)同時(shí)進(jìn)行。
-
即使啟用,保持時(shí)間優(yōu)化也不會(huì)在綜合階段執(zhí)行。
-
當(dāng)使用同時(shí)發(fā)生的時(shí)鐘和數(shù)據(jù)(CCD)時(shí),會(huì)考慮到保持時(shí)間。
? 使用set_scenario_status命令限制分析類型,或在編譯前將場(chǎng)景設(shè)為非活動(dòng)狀態(tài)。
-
詳情請(qǐng)參見(jiàn)下一頁(yè)的示例。
CCD = 同時(shí)時(shí)鐘與數(shù)據(jù)(Concurrent Clock and Data)。
CCD優(yōu)化通過(guò)改變啟動(dòng)和捕獲觸發(fā)器的時(shí)鐘延遲值,可以改善數(shù)據(jù)路徑的時(shí)序。當(dāng)為滿足建立時(shí)間而調(diào)整時(shí)鐘偏斜時(shí),保持時(shí)間可能會(huì)受到嚴(yán)重影響。因此,在編譯過(guò)程中同時(shí)啟用保持場(chǎng)景尤為重要。盡管這不會(huì)直接啟用保持修復(fù)或優(yōu)化,但它能確保保持時(shí)間不至于大幅惡化。
CCD優(yōu)化既可以在使用理想時(shí)鐘時(shí)進(jìn)行,也可以在進(jìn)行時(shí)鐘樹(shù)綜合時(shí)應(yīng)用。
這一主題將在后續(xù)單元中更詳細(xì)地討論。
修改Scenario 狀態(tài)的示例:
1create_scenario -mode mFUNC -corner cSLOW 2create_scenario -mode mTEST -corner cSLOW 3create_scenario -mode mFUNC -corner cFAST 4create_scenario -mode mTEST -corner cFAST 5#Disable setup timing for the FAST corner 6set_scenario_status *cFAST -setup false 7#Disable leakage power analysis and optimization for the TEST mode scenarios: 8set_scenario_status mTEST* -leakage_power false 9# Disable fast test mode 10set_scenario_status mTEST::cFAST -active false 11compile_fusion
上表中場(chǎng)景名稱后的 "*" 表示這些場(chǎng)景名稱為用戶自定義(而非默認(rèn)的 "mode::corner" 格式)。
除了使用report_scenarios命令生成包含場(chǎng)景狀態(tài)設(shè)置的表格外,你還可以通過(guò)查詢場(chǎng)景屬性來(lái)獲取類似信息:mode(模式)、corner(角點(diǎn))、active(活動(dòng))、setup(建立時(shí)間)、hold(保持時(shí)間)、leakage_power(泄漏功耗)、dynamic_power(動(dòng)態(tài)功耗)、max_tran(最大轉(zhuǎn)換)、max_cap(最大電容)、min_cap(最小電容)。對(duì)于腳本編寫(xiě)目的而言,這種方法比使用report_scenarios更為實(shí)用。示例如下:
定義操作條件下的角點(diǎn)PVT值
? Fusion Compiler 支持使用 set_operating_conditions 來(lái)確定每個(gè)角點(diǎn)的PVT值。
set_operating_conditions Worst -library saed32lvt_ss0p95vl25c.db
? 這是一種間接方法,依賴于操作條件模型名稱和庫(kù)來(lái)確定PVT數(shù)值。
在上述示例中,通過(guò)在庫(kù) saed321vt_ss0p95vl25c.db 中指定操作條件名稱為 Worst,分別確定了標(biāo)稱PVT值為0.99(典型工藝偏差)、125°C(溫度)和0.95V(電壓)。
上述表格(針對(duì)不同的LVT、IP1和IP2庫(kù))以及后續(xù)頁(yè)面中的表格,是通過(guò)使用 report_lib 命令生成的。
直接定義PVT - 推薦
? 強(qiáng)烈建議使用直接方法,以提高清晰度和易用性:
1current_corner ss125c 2set_process_number 0.99 3set_voltage 0.75 4set_voltage 0.95 -object_list VDDH 5set_temperature 125
在施加電壓時(shí),您可以直接為設(shè)計(jì)設(shè)定電壓(如第一個(gè)示例所示)。如果UPF創(chuàng)建了電源網(wǎng)絡(luò),那么也需要對(duì)該網(wǎng)絡(luò)設(shè)定電壓。例如,如果創(chuàng)建了VDD和VSS這兩個(gè)網(wǎng)絡(luò):
1set_voltage -object_list VDD 0.95 2set_voltage -object_list VSS 0.0
關(guān)于工藝(P)值的一點(diǎn)說(shuō)明:大約幾十年前,用戶僅獲得一個(gè)在“典型”P(pán)VT角點(diǎn)下特征化的庫(kù)。該庫(kù)會(huì)包含多個(gè)操作條件,每個(gè)條件都有一套不同的PVT值,以代表不同的角點(diǎn)。時(shí)序分析隨后會(huì)將典型單元延遲乘以P值以及基于工藝k因子的V和T縮放因子,從而推導(dǎo)出“max”和“min”角點(diǎn)的延遲。為了表示比典型工藝更慢的角點(diǎn),會(huì)使用大于1.0的P值;相反,對(duì)于比典型工藝更快的角點(diǎn),則使用小于1.0的P值。例如,P值為1.2意味著所有單元延遲由于較慢的工藝角點(diǎn)而比典型延遲慢20%;同樣,P值為0.8則意味著由于較快的工藝角點(diǎn),單元延遲比典型情況快20%。
如今,P值(或V和T值)不再用于任何縮放目的,因?yàn)槊總€(gè)庫(kù)中的“標(biāo)稱”單元延遲已經(jīng)針對(duì)特定的PVT角點(diǎn)進(jìn)行了特征化。PVT值僅用于標(biāo)識(shí)庫(kù)的標(biāo)稱PVT角點(diǎn)。因此,許多庫(kù)供應(yīng)商已經(jīng)改為在所有工藝角點(diǎn)上使用P值為1的做法。這種做法直接導(dǎo)致了直接PVT指定方法的一個(gè)問(wèn)題:無(wú)法區(qū)分兩個(gè)針對(duì)相同V和T但針對(duì)慢速和快速工藝角點(diǎn)特征化的不同庫(kù),因?yàn)檫@兩個(gè)庫(kù)的P值都是1。解決這個(gè)問(wèn)題的一種方法是為不同的工藝角點(diǎn)使用不同的P值(例如,上述示例中的0.99和1.01)。只要這些值不同,具體數(shù)值并不重要。如果不能使用不同的P值,可以通過(guò)應(yīng)用“工藝標(biāo)簽”來(lái)區(qū)分庫(kù),這一點(diǎn)稍后討論。