在上一篇文中描述了SDC的基本語法,其中關于時序異常約束并沒有進行詳細的描述,但是在正常的設計中,一般這種異常的設置反而是需要特別關注的,主要包括:
1. 虛假路徑- false path
? ??不需要滿足任何時序要求的路徑;實現工具在受約束時,忽略此種路徑上的時序。
2. 多周期路徑 - multi-cycle
? ??需要多個時鐘周期來傳遞數據的路徑,實現工具會放寬此路徑上的時序。
3. 最小和最大延遲 - min/max delay
? ? 具有特殊要求的最大延遲和最小延遲路徑,并且實在設計人員想要覆蓋推測的建立和保持要求時指定的。
下面將對三種設置進行詳細描述:
1. 虛假路徑:
? ? a. 組合電路中的虛假路徑:
? ? ? ??
? ? ? ? 從這里可以看到A->mux1/A->mux2/A ->B 這個路徑是不存在的,因為可以設置false path
? ?set_false_path -from [get_ports A] -through [get_pins mux1/A] -throught [get_pins mux2/A] -to [get_ports B]
? ? ? ?b. 時序電路的虛假路徑
? ? ? ? ? 我們假設在a中sel信號是時序路徑產生的,那么這里還是存在上述路徑的虛假路徑;
? ? ? ?c. 動態激活的虛假路徑
? ? ? ? ?? 缺個小圖
? ? ? ? ? ?圖里有兩個從A->B:
? ? ? ? ? ? ? A->K1 -> B
? ? ? ? ? ? ? A -> K2 -> K3 -> K1 -> B
? ? ? ? ? ?如果想讓第二條路徑不被阻塞,那么C必須為0, 如果C為1,這里第二條路徑就像是一個虛假路徑了。
? ? ? ? ? ?但是如果兩個路徑的delay不同,且delay1<delay2,這樣在A從0->1時,會存在毛刺,反之也會有一個毛刺。
? ? ? ? ? ? 這種依賴于延遲的路徑,可能有毛刺的路徑稱為動態激活的虛假路徑。
? ? ? ? ? ? ?這種路徑不應該被聲明為虛假路徑
? ? ? ?d. 時序的虛假路徑
? ? ? ? ? ??時序的虛假路徑是設計中存在的路徑,并且可以被激活,但是設計人員選擇不去定時他們,比如:
- ? ? ? ?設計包含配置寄存器 – 在初始化時序電路期間被初始化,此后保持一個靜態值,并且寄存器時序不是設計人員關心的;
- ? ? ? ?異步信號的路徑 – 比如復位,在最開始時,需要復位達到寄存器的固定值,之后這個路徑就不需要定時了;或者構建跨越異步域
? ? ? ? e. 基于總線協議的虛假路徑
? ? ? ? ? ?比如多個slv和一個master互信,但slv之間并無互信,此時slv之間就可以設置雙向false
? ? ? ? f.?虛擬時鐘和真實時鐘之間的虛假路徑
? ? ? ? ? ? ?缺少文檔圖
? ? ? ? ? ? ?假設這個設計, F1的結果被F3采集,F2的結果被F4采集,這里O1就需要針對clk1和clk2分別指定out_delay;這里就有4個path:
- F1/CLK1 -> O1/CLK1 out_delay;
- F1/CLK1 -> O1/CLK2 out_delay;
- F2/CLK2 -> O1/CLK1 out_delay;
- F2/CLK2 -> O1/CLK2 out_delay;
? ? ? ? ? ? ? 這里path2/path3其實是假的,我們不關注的。但是如果我們采用:
? ? ? ? ? ? ? ?Set_false_path -from clk1 -to clk2
? ? ? ? ? ? ? ?這里有個大問題:
? ? ? ? ? ? ? ? ? 如果這么設置,那么所有設計中的clk1和clk2之間的路徑都不會被check。
? ? ? ? ? ? ? 好的做法:
? ? ? ? ? ? ? ? ?通常的做法是創建對應于時鐘clk1/clk2的虛擬時鐘?,并相對于虛擬時鐘來設置delay和虛擬路徑
? ? ? ? ? g. set_disable_timing
? ? ? ? ? ? ? 缺少環路圖示
? ? ? ? ? ? ?這里存在一個環路,B出發再回到B,一般工具都會自己斷開這種環路,但是如果工具斷開的不好,比如從n1斷開,這其實可能就不好了,B->C之間就不會check了。
? ? ? ? ? ? ?所以可以采用set_disable_timing來自行打斷路徑。
? ? ? ? ? ? ?Set_disable_timing和set_false_path的差異是:
? ? ? ? ? ? ? ? ? 后者只是阻止該路徑的時序,但是延遲計算不會停止;
? ? ? ? ? ? ? ? ? 但是前者,路徑本身會直接從時序分析中移除
? ? ? ? h. 虛假路徑問題
? ? ? ? ? ?在執行虛假路徑的注意事項:
? ? ? ? ? ? ?a. 不要使用通配符;
? ? ? ? ? ? ?b. 當使用through時,需要關注through是不是冗余的;
? ? ? ? ? ? ?c. 不要在同一路徑或者路徑線段上設置不同種類的約束;
? ? ? ? ? ? ?d. set_false_path,需要相關約束;
? ? ? ? ? ? ?e. 常見的false path包含:?
? ? ? ? ? ? ? ? ? 1. 邏輯上不可能存在的路徑;
? ? ? ? ? ? ? ? ? ?2. 跨時鐘域信號經過通路的地方 - max_delay可能更合適;
? ? ? ? ? ? ? ? ? ?3. 上電后,只需要寫一次的路徑;
? ? ? ? ? ? ? ? ? ?4. 復位或者測試邏輯
? ? ? ? ? ? ? ? ? ? ? ?//對于reset, 如果在工作時,reset信號有效時,時鐘信號不翻轉,可以用false path, 否則不可以
? ? ? ? ? ? ? ? ? ? ? ?// 一般異步復位可以設置false path, 但是當異步復位被時鐘捕獲之后再對應時鐘域中使用時,就不能設false path
? ? ? ? ? ? ? ? ? ? ?5. 異步分布式RAM的寫入時鐘和異步讀取時鐘之間的路徑
??