靜態時序分析工具默認分析規則是在單週期下對所有時序路徑進行分析,但是實際設計中並不是所有的路徑都需要分析,而且也不是所有時序路徑的延時都規定在一個時鐘週期以內。所以通過定義時序例外來對特殊的時序路徑進行特殊的聲明,指導時序分析工具對特殊的時序路徑做出正確分析,這樣的特殊聲明叫做時序例外。
時序例外主要用於如下幾種情況。
1.多週期路徑設置
設計中存在時序路徑延時比較長,並且設計允許信號在這類時序路徑下的延時等於幾個週期的時間,如下圖所示。
由於發射時序單元和捕獲時序單元中的邏輯電路延時有多個時鐘,故需要設置幾個時鐘的建立時間,定義的命令如下。
set_multicycle_path 5 -setup -from [get_pins DFF1/Q] -to [get_pins DFF2/D]
set_multicycle_path 5 -hold -from [get_pins DFF1/Q] -to [get_pins DFF2/D]
以上命令定義觸發器DFF1與DFF2之間時序路徑建立時間的延時爲第5個時鐘週期檢查,保持時間的延時爲第4個週期檢查,其延時波形如下圖所示。
2.僞路徑設置
當設計中存在不需要做時序分析的時序路徑時,可以通過僞路徑的設置移除該時序路徑上的默認時序約束,指導時序分析工具對設置的時序路徑停止時序分析。
一般設計中滿足如下情況的時序路徑可以定義爲僞路徑:
(1)設計中存在某些時序路徑在特定的工作狀態下是不工作的,那麼在對應的工作狀態下進行時序分析時,該時序路徑實際上是不需要進行分析的。
比如測試邏輯的時序路徑,這種路徑在正常工作模式下是不需要考慮的,這種時序路徑在工作模式下的時序分析中就可以定義爲僞路徑,如下圖所示。
(2)設計中存在某些時序路徑的時序要求是非常的寬鬆,以至於不需要進行時序分析。
比如復位控制信號的時序路徑,如下圖所示。
這種路徑在設計中一般對時序要求比較寬鬆,所以根據設計要求可以定義爲僞路徑。
還有一種具有反饋環的時序路徑如下圖所示。
這種路徑一般在設計中如果不設置僞路徑,可能出現時序違反,但是這種違反是可以接受的 ,那麼可以定義爲僞路徑。
(3)設計中存在某些時序路徑並不會有真正的工作信號通過,這種時序路徑實際上是無效的時序路徑。
比如不同時鐘域之間的時序路徑,如下圖所示。
這種時序路徑在設計中可能存在無關性,那麼可以定義爲僞路徑。
還有一種設計中數據信號通過某些邏輯單元的部分時序路徑沒有對應輸入激勵來觸發工作,如下圖所示。
兩個同樣的選擇器,由於選擇信號不一樣,因此其中的部分時序路徑一定不會被觸發,那麼可以把不工作的時序路徑定義爲僞路徑。
僞路徑通過使用SDC命令set_false_path來定義,命令示例如下:
set_false_path -from [get_clocks CLK1] -to [get_clocks CLK2]
以上命令定義了兩個時鐘域CLK1和CLK2之間的時序路徑爲僞路徑。
set_false_path -through [get_pins DFF/RST]
以上命令定義通過單元DFF中RST引腳的時序路徑爲僞路徑。
3.最大延時和最小延時設置
當設計需要對某些點對點路徑進行特殊設置時,可以通過定義最大延時和最小延時來實現。如下圖所示中,時鐘域clk1和clk2之間的時序路徑默認設置是僞路徑,但是其中有一條從觸發器F1通過組合邏輯1到觸發器F2的時序路徑需要有時序約束。
可以對這條路徑通過定義最大延時和最小延時來實現,該命令將會覆蓋掉所設置路徑的默認時序約束。
通過使用SDC命令set_min_delay和set_max_delay來定義最大延時和最小延時,命令示例如下。
set_max_delay 0.6 -from DFF1/Q -to DFF2/Q
set_min_delay 0.2 -from DFF1/Q -to DFF2/Q
以上命令定義單元DFF1到單元DFF2之間時序路徑的時序約束的最大延時爲0.6ns,最小延時爲0.2ns。
當最大延時和最小延時設置命令中約束的節點定義的是時序路徑中的節點時,那麼時序約束僅僅應用於兩個節點之間。而當約束的節點定義的是一個時鐘,最大延時和最小延時設置將應用於該時鐘源所控制的所有路徑,命令示例如下。
set_max_delay 1.2 -from [get_clocks CLK1] -to [get_clocks CLK2]
set_min_delay 0.4 -from [get_clocks CLK1] -to [get_clocks CLK2]
以上命令定義從時鐘域CLK1到CLK2之間所有時序路徑的時序約束的最大延時爲1.2ns,最小延時爲0.4ns。