一、分析类型
通过分析方式分为Path-Based及Block-Based两种。
Path-Based 如图:
Block-Based如图:
二、需要的文件
1.Library data(.db)
STA所需要的Timing Model就存放在标准组件库(Cell Library)中。这些必要的时序信息是以Timing Arc的方式呈现在标准组件库中。
2.PVT环境
3.interconnect data (.spef)
P&R前使用0线负载模型,P&R后通过RCE提取spef电阻电容电路贴回(Back-annotate)STA计算交互延迟。
4.timing constraints (.sdc)
Path分为四类:reg/clk-reg/d reg/clk-ouput input-reg/d input-output。
定义好时钟后reg/clk-reg/q的约束就确定了,其他三类需要额外定义boundary condition, boundary condition一般包括:driving cell 、 input transition time 、 output capacitance load 、input delay 、 output delay。
其余属于timing exception.
三、时序路径计算
Setup check : slack = Require Time (RT) - Arrival Time (AT) = (Tcapture + Tclk - Tsu) - ( Tlaunch + Tclk2q +Tdp) (launch比capture早一个周期)
Hold Check : slack = Arrival Time (AT) - Require Time (RT) = (Tlaunch + Tclk2q +Tdp) - (Tcapture + Thold) (launch和capture同一个周期)
注意以上公式没有考虑 clock source latency 、network latency和clock uncertainty,network latency RT和AT都要加,uncertainty加到RT上。
例题:
四、时序报告分析
报告时序的命令report_timing有很多开关,依据需求选择,可通过man 这个命令查看开关具体用法。
每条路径时序报告开头会有路径起点、终点、所属时钟域、所用的PVT环境。时序报告的组成从左至右分别为 路径节点、该节点推动组件个数、负载电容、节点上信号转换时间、时序放宽调整derate值、该节点造成的延迟以及自路径起点至该节点的总延迟(延迟数值通过library的time table查表得到。对于CK端,最右边的r代表触发器正沿触发,f代表负沿。对于q端r代表信号由0-1变化的延迟更长。
五、违例修复方法
交付前修复hold的优先级高于setup,因为setup影响的是性能,可以降频处理,而hold影响的是功能。
修复setup:
首先判断是否为真违例,即能否通过修改sdc、设置exception避免。如果是真违例研究时序报告分析违例原因,比如是时钟树不够balance导致的,需要调整时钟树;如果是路径太长导致的,可以换用阈值小的单元,但会因此导致功耗增加,还可以和前端沟通增加触发器级数采用流水线结构;如果是部分单元扇出过大导致的,可以换用驱动能力稍差但面积更小延迟更小的单元。如果违例很严重后端可能无法解决,需要通知前端修改rtl。
修复hold:
在setup有余量时通常采用插buf和inv的方法解决,或者是换阈值更高的单元。