一、时序收敛概述
什么是时序收敛?
时序收敛,说白了就是让芯片里的所有信号,都能在规定时间内到达该去的地方。你想想看,一个芯片里有几亿个晶体管,信号从一个触发器跑到下一个触发器,路径有长有短,延迟有大有小。我们要做的,就是确保每条路径的延迟都小于一个时钟周期。
我刚开始做后端设计时,总觉得时序收敛就是个跑跑工具的事。直到有一次,一个28nm的项目,前仿真全过,后仿真也没问题,结果流片回来芯片就是跑不到目标频率。查了三个月,最后发现是一条关键路径的setup time差了0.02ns。嗯,从那以后我再也不敢小看时序收敛了。
时序收敛的核心定义:
在给定的工艺、电压、温度条件下,芯片中所有时序路径的建立时间(setup time)和保持时间(hold time)都满足设计要求,且没有违反任何时序约束。
为什么时序收敛是芯片设计的核心挑战?
这个问题我问过很多新人,答案五花八门。我个人习惯用一个比喻来解释:
想象你在设计一条高速公路。每个触发器就是一个收费站,信号就是车流。时钟就是交通信号灯。时序收敛要解决的问题是:
- 车不能开太快(hold time violation)—— 信号不能比时钟早到太多,否则会冲过收费站
- 车不能开太慢(setup time violation)—— 信号必须在绿灯结束前到达,否则会被拦下
- 路不能太堵(congestion)—— 布线资源有限,信号线不能挤在一起
- 油不能太贵(power)—— 芯片功耗要控制,不能为了时序乱加buffer
我在项目中遇到过最头疼的情况,就是setup和hold同时违反。你修了setup,hold就变差;你修了hold,setup又崩了。这种时候,真的想摔键盘。
注意:随着工艺节点不断缩小(从28nm到7nm再到3nm),时序收敛的难度呈指数级增长。线延迟占比越来越大,工艺波动也越来越明显。我曾经做过一个5nm的项目,光时序收敛就花了4个月,占了整个后端流程的一半时间。
时序收敛的基本流程
我一般把时序收敛分成四个阶段,每个阶段都有不同的侧重点:
- 预收敛阶段(Pre-CTS)
- 综合后初步评估时序
- 调整floorplan和placement
- 我习惯在这个阶段先跑一遍快速STA,看看有没有明显的violation
- 时钟树综合阶段(CTS)
- 构建时钟树,平衡时钟延迟
- 这个阶段最容易出问题,我见过有人CTS没做好,后面怎么修都修不回来
- 布线后收敛阶段(Post-Route)
- 实际布线后重新评估时序
- 修复布线引入的新violation
- 嗯,这个阶段最磨人,因为每次修完都要重新跑一遍DRC/LVS
- 签核阶段(Signoff)
- 用signoff工具做最终验证
- 检查所有corner下的时序
- 我建议至少跑三个corner:最慢、最快、典型
关键指标详解
做时序收敛,你得盯住几个核心指标。我每次看报告,第一眼就看这几个数:
| 指标 | 含义 | 典型值 | 我踩过的坑 |
|---|---|---|---|
| Setup Slack | 建立时间余量,越大越好 | ≥ 0 ps | 曾经为了省面积,把slack压到0.01ps,结果温度一变化就崩了 |
| Hold Slack | 保持时间余量,越大越好 | ≥ 0 ps | hold violation最隐蔽,有时候仿真看不出来 |
| Transition Time | 信号上升/下降时间 | ≤ 0.5ns(视工艺而定) | transition太大会导致延迟计算不准 |
| Clock Skew | 时钟到达不同触发器的偏差 | ≤ 50ps | skew太大,setup和hold都难修 |
| Total Negative Slack (TNS) | 所有violation的slack总和 | 0 | TNS不为0,说明还有violation没修完 |
我的小技巧:看报告时别只看WNS(最差负slack),TNS也很重要。WNS为0但TNS很大,说明有很多路径在violation边缘,这种芯片流片风险很高。我一般要求TNS也为0才敢签核。
时序收敛的常见误区
做了这么多年后端,我总结了几条新人容易犯的错误:
- 过度优化setup—— 为了修setup狂加buffer,结果hold崩了,功耗也上去了
- 忽视clock tree—— 觉得CTS是工具自动做的,结果skew大到没法修
- 只看一个corner—— 只跑最慢corner,结果最快corner下hold violation一堆
- 不重视floorplan—— floorplan没做好,后面怎么修都修不回来
避坑指南:我曾经在一个项目里,为了赶进度,跳过了预收敛阶段的详细分析,直接跑CTS。结果CTS做完发现setup violation有2000多条,花了三周才修回来。从那以后,我每个阶段都会做一次完整的STA,绝不跳过任何一步。
好了,时序收敛的基本概念就讲到这里。记住一句话:时序收敛不是跑一次工具就能搞定的,它是一个反复迭代、不断优化的过程。 你想想看,一个芯片从设计到流片,时序收敛可能要占掉40%的时间。所以,打好基础很重要。