1. 程式人生 > >靜態時序分析(static timing analysis) --- 時序路徑

靜態時序分析(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。