静态时序分析(static timing analysis) --- 时序路径

编程爱好者联盟 2016-09-15

时序分析工具会找到且分析设计中的所有路径。每一个路径有一个起点(startpoint)和一个终点(endpoint)。起点是设计中数据被时钟沿载入的那个时间点,而终点则是数据通过了组合逻辑被另一个时间沿载入的时间点。

路径中的起点是一个时序元件的时钟pin或者设计的input ;port。input ;port可以作为起点是因为数据可以由外部源(external ;source)进入设计。

终点则是时序元件的数据输入pin或者设计的output ;port。同理output ;port可以作为终点是因为数据可以被外部源捕捉到。

静态时序分析(static timing analysis) --- 时序路径

上图显示一个时序路径的例子。

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可以得到时序报告,如下所示。

; ;<pre>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</pre> ; ;

此例子的图如下:

静态时序分析(static timing analysis) --- 时序路径

报告开始显示了路径的起点,路径终点,路径组名和路径检测的类型。此例中,路径检测类型为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。

相关推荐