靜態時序分析(static timing analysis) --- 時序路徑
時序分析工具會找到且分析設計中的所有路徑。每一個路徑有一個起點(startpoint)和一個終點(endpoint)。起點是設計中資料被時鐘沿載入的那個時間點,而終點則是資料通過了組合邏輯被另一個時間沿載入的時間點。
路徑中的起點是一個時序元件的時鐘pin或者設計的input port。input port可以作為起點是因為資料可以由外部源(external source)進入設計。
終點則是時序元件的資料輸入pin或者設計的output port。同理output port可以作為終點是因為資料可以被外部源捕捉到。
上圖顯示一個時序路徑的例子。
path1 開始於一個input port 且結束於時序元件的資料輸入端
path2 開始於時序元件的時鐘pin且結束於時序元件的資料輸入端
path3 開始於時序元件的時鐘pin且結束在一個output port
path4 開始於input port 且結束於 output port
每一個path都有專屬的slack,slack值可以是正,0或者負。某一個path擁有最壞的slack的話則稱之為 critical path
critical path擁有最大的負slack值。若是所有的path都沒有時序違規,則slack都是正數,此時最小的那個slack則是critical path。
複數critical paths意味著某一組的path都是critical path。
路徑可以被分組(group)來得到各自的時序分析,時序報告和優化。
在IC compliler中輸入report_timimg可以得到時序報告,如下所示。
Startpoint: I_RISC_CORE/I_INSTRN_LAT/Instrn_1_reg_27_ (rising edge-triggered flip-flop clocked by SYS_2x_CLK) Endpoint: I_RISC_CORE/I_ALU/Zro_Flag_reg (rising edge-triggered flip-flop clocked by SYS_2x_CLK) Path Group: SYS_2x_CLK Path Type: max Point Incr Path ---------------------------------------------------------------------------------- clock SYS_2x_CLK (rise edge) 0.00 0.00 clock network delay (propagated) 0.51 0.51 I_RISC_CORE/I_INSTRN_LAT/Instrn_1_reg_27_/CP (senrq1) 0.00 0.51 r I_RISC_CORE/I_INSTRN_LAT/Instrn_1_reg_27_/Q (senrq1) 0.62 1.13 f I_RISC_CORE/I_INSTRN_LAT/Instrn_1[27] (INSTRN_LAT) 0.00 1.13 f I_RISC_CORE/I_ALU/ALU_OP[3] (ALU) 0.00 1.13 f I_RISC_CORE/I_ALU/U288/ZN (nr03d0) 0.36 * 1.49 r I_RISC_CORE/I_ALU/U261/ZN (nd03d0) 0.94 * 2.43 f I_RISC_CORE/I_ALU/U307/ZN (invbd2) 0.35 * 2.78 r I_RISC_CORE/I_ALU/U343/Z (an02d1) 0.16 * 2.93 r I_RISC_CORE/I_ALU/U344/ZN (nr02d0) 0.11 * 3.04 f I_RISC_CORE/I_ALU/U348/ZN (nd03d0) 0.28 * 3.32 r I_RISC_CORE/I_ALU/U355/ZN (nr03d0) 0.29 * 3.60 f I_RISC_CORE/I_ALU/U38/Z (an02d1) 0.15 * 3.75 f I_RISC_CORE/I_ALU/U40/Z (an02d1) 0.12 * 3.87 f I_RISC_CORE/I_ALU/U48/ZN (nd02d1) 0.06 * 3.93 r I_RISC_CORE/I_ALU/U27/ZN (nd02d1) 0.06 * 3.99 f I_RISC_CORE/I_ALU/Zro_Flag_reg/D (secrq4) 0.00 * 3.99 f data arrival time 3.99 clock SYS_2x_CLK (rise edge) 4.00 4.00 clock network delay (propagated) 0.47 4.47 clock uncertainty -0.10 4.37 I_RISC_CORE/I_ALU/Zro_Flag_reg/CP (secrq4) 0.00 4.37 r library setup time -0.37 4.00 data required time 4.00 -------------------------------------------------------------------------------- data required time 4.00 data arrival time -3.99 ------------------------------------------------------------------------------- slack (MET) 0.01
此例子的圖如下:
報告開始顯示了路徑的起點,路徑終點,路徑組名和路徑檢測的型別。此例中,路徑檢測型別為max,意味著最大的延時或者setup check,若是min則是最小的延時或者hold check
下面一個大表顯示了從起點到終點之間的一個個點的延時值。縱列有三個標識, Point, Incr和 Path,分別表示了路徑中的各個點,此點所需要的延時和從起點一直累積到此點的延時值。
星號(*)表示了使用了SDF檔案中的延時值,r和f表示 上升或者下降沿。
之前說過路徑由資料載入的時鐘沿開始,到device的資料輸入端結束。表中的data arrival time表示了從載入時鐘沿到終點資料到達所經歷的時間。
再用required time減去arrival time 則得到了slack值。
例子中顯示的slack非常小,意味著時序約束很勉強的達到要求。若是負數則需要改變設計來修復此violation,例如使用更大的drive strenth的driver來減少net delay。
反過來說,若是slack值相當大,則說明了此路徑還有很多優化的機會。例如換成更小更慢的driver來減少面積,或者更高閾值的driver來減少leakage power。