昨天发了《论STA | POCV/ SOCV 时序报告解析 》后,有好学的朋友提到如下两点没有解释清楚:
表头,每个值的mean 跟sigma 如何计算得到? 读了SOCV 又设了timing derate 该如何解读? 在support.cadence.com 上正好有两篇对应文章,解释得简单明了,借用于此。
表头解析
从这个timing report 的表头,可分别得到:
第一行,可知当前是setup check, endpoint 的clock pin, 是否满足timing 需求; 第二行,第三行,分别列出startpoint, endpoint, 跟对应的launch clock, capture clock, 以及对应的clock edge; 第四行,给出当前path 所属的clock group; 第五行,Other End Arrival time 就是capture clock path 的Arrival time, 计算方式同launch path 的Arrival time 类似,区别是对于setup check, capture clock path arrival time = mean - N * sigma. 第六行,Phase shift, 如果无multi cycle 即为当前clock 的周期; 第七行,CPPR 不再是简单的Launch clock path common point arrival time - Capture clock path common point arrival time. 在Innovus/ Tempus 中用report_cppr 可得到对应的mean 跟sigma 值 由如上的report 可得:
当前时钟上升沿跟下降沿分别对应的Late/ Ealry 的Mean 和 Sigma. 对应到本例,是时钟上升沿check, 所对应的CPPR mean 在report_cppr 中用Pessimism Mean 表示,其计算方式是: Late Mean - Early Mean =
0.279 - 0.229 = 0.51
同样可得到上升沿对应的CPPR sigma, 即report_cppr 中的Pessimism Sigma, 其计算方式为: sqr (Late Sigma ^ 2 + Early Sigma ^ 2) =
sqr (0.023 ^ 2 + 0.019 ^2) = 0.030
timing report 中的CPPR 在report_cppr 中用Pessimism 表示,其计算方式为: Pessimism Mean + N * Pessimism Sigma =
0.51 + 3*0.030 = 0.141
再回到timing report:
第八行,Required Time = Req Time Mean - N * Req Time Sigma. 其中每个值的计算为: 第九行,Arrival Time 即是Launch Clock Path + Launch Data Path 的Arrival Time; 第十行,Slack Time = Slack Mean - N * Slack sigma. 其中每个值的计算为: 对mean 跟Sigma 设了timing derate 的解析
如果要在SOCV 的基础上加更多的Derate 可以用命令set_timing_derate 来设置,通常有:
对cell 的mean 和sigma 值分别设置Derate, 在Timing report 中会显示在"User Derate" 一列,格式是mean : sigma, 设置示例: 对net 的mean 和sigma 值分别设置Derate, 在Timing report 中会显示在"User Derate" 一列,格式是mean : sigma, 设置示例:
对net 或 cell 设置incremental derate, 在Timing report 中会与"User Derate" 相加后呈现在"Total Derate" 一列,设置示例: 设置timing derate 的timing report 如下所示,在该例中,Total mean/ sigma derate, Delay Mean, Delay sigma 的计算分别为,其他的计算跟不带set_timing_derate 的一致。
Total mean Derate = User mean Derate + incr_adjust; Total sigma Derate = User sigma Derate; Delay mean = Total mean Derate * Delay mean from lib; Delay sigma = Total sigma Derate * Delay sigam from lib;