本节摘要:修复之前先定位:违例是孤岛还是群岛?瓶颈在负载、线长、逻辑级数还是翻转率?本节给出一套按证据聚类的定位方法——分组统计、字段取证、电路回溯三步走,把"逐条修"的低效循环变成"按根因群修"。
为什么有人修时序又快又准,有人修一条崩两条?差别不在工具熟练度,而在定位方法。低效的循环是这样的:按 slack 从差到好逐条看路径、逐条动手——修完第 10 条发现第 1 条又爆了,因为它们共享同一个根因,而你的每次修复都在加剧它。高效的循环先问结构问题:这些违例是不是同一批原因造成的?修一次能不能清一批?本节把这套结构化定位拆成三步。
拿到违例清单先做统计而非开修。按路径组(path group,即时钟域)统计:违例集中在某个域,说明时钟树或域间接口有问题。按共同端点统计:多个路径挤在同一个终点,终点附近是瓶颈区。按共同起点统计:起点侧的驱动或高扇出是嫌疑人。按物理区域统计(布局后):违例密集区往往对应拥塞区或电源压降区。一份典型的分组命令与输出:
# 按共同端点聚类:报告每个违例终点及其负 slack 路径条数 report_timing -delay_type max -max_paths 500 -group_count 20 \ -sort_by group -path_type full_clock_expanded # 观察项: # Path Group 分布 → 哪个时钟域贡献了大部分违例 # 共同 endpoint → 收敛在同一终点的多条路径:终点是汇点瓶颈 # slack 直方图 → −0.02 内的"毛刺违例"与 −0.15 的"结构违例"要分开对待
统计结果决定修法:如果八成违例挤在一两个根因群里,逐条修就是错误策略——先解决群因,清单会自动缩短;如果违例是稀疏的孤岛,才值得逐条精修。slack 分布同样关键:大量 −5ps 以内的浅违例通常是全局性因素(电压、derate、估算偏差),需要复核政策参数而不是动电路;少量深违例才是结构问题。
报告打开完整字段(翻转率、负载、扇出、逻辑级数),每条违例路径都能读出"钱花在哪了"。四类典型证据:
| 证据特征 | 根因判断 | 对应手段方向(详见 6.4) |
|---|---|---|
| 某网络扇出几十、负载巨大 | 高扇出网未展开 | 逻辑复制、缓冲树重构 |
| 互连行 Incr 占路径一半以上 | 长线/拥塞绕行 | 层提升、中插 buffer、布局调整 |
| 逻辑级数超过同层路径均值一倍 | 深组合链 | 重定时插寄存器、逻辑重构 |
| 单元行延迟大且输入翻转率数值大 | 翻转率恶化链条 | 前级缓冲"洗沿"、驱动增强 |
取证的交叉验证手段是电路回溯:把报告的路径在版图与原理图视图里高亮,肉眼看三件事——这条线是不是绕了远路、这个单元周围是不是太挤、这条逻辑链是不是跨了半个芯片。字段数据与目视证据吻合,根因才算坐实。目视发现"报告完全没提示"的问题也常见:比如某高扇出网其实是配置信号被误连进了数据路径,那是约束问题(回第四章)而不是时序问题。
定位的最后一步是反直觉的:确认违例是不是真的。三个常见伪案来源。约束漏项:check_timing 里的残留(4.3)让某类路径按错误目标检查,修电路是白修。例外漂移:网表更新后伪路径锚点失效,原本豁免的路径重新进入检查——症状是"突然冒出一批新违例",特征是违例路径恰好落在旧例外的作用域附近。估算偏差:综合阶段的系统性偏差到了布线后集中兑现,表现为某类结构(如跨模块长路径)整批恶化——对策是回灌 QoR 快照修正预算,而不是逐条修。
伪案排查的顺序纪律:先跑 check_timing、再核例外命中清单、最后才轮到电路。把这三步写进收敛流程的固定位置,可以挡掉相当比例的无效修复工时。
用一组真实形状的数据走一遍三步法。布线后报告:WNS 为负 0.09,TNS 为负 1.2ns,违例端点 37 个。第一步分组:按时钟域统计,29 个端点集中在外存控制器域——嫌疑立刻收窄;按共同起点统计,其中 18 条路径共享同一个大寄存器堆的输出总线。第二步取证:打开字段,这条输出总线的扇出为 42、互连行 Incr 平均 0.11ns,单元行输入翻转率普遍超过 60ps——高扇出未展开叠加翻转率恶化,两个证据互相印证。第三步伪案排查:check_timing 干净、例外命中正常,排除约束问题。结论:修复单元不是"37 条路径",而是"一个寄存器堆输出总线的驱动结构"——克隆驱动单元为四份、按负载分区重连,一轮修复清掉 18 个端点,剩余违例降为普通量级。整件事的成本是半小时的分组分析;不走这一步的团队,会用两周逐条插 buffer,且边修边崩。
把六类高频根因的"报告指纹"列成速查卡:高扇出未展开——起点单一、fanout 字段两位数、互连与单元行都偏大;长线主导——互连占比高、版图上绕行明显、常伴拥塞标记;深逻辑链——逻辑级数字段显著高于同域均值、常规手段收益都偏小;翻转率恶化——单元行延迟与 transition 字段同向偏大、常见于缓冲不足的链中段;约束残留——违例集中在例外作用域边界或 check_timing 提及的结构;电压热点——违例与压降地图的高跌落区空间重合、随频率升高恶化。拿到违例清单先扫指纹再动手,多数情况下五分钟内就能锁定主攻方向。
定位清楚了,就轮到手段本身。下一节把修复手段组织成一棵决策树,并给每种手段标上收益量级与代价——那是本章的落脚点,也是日常收敛工作的速查卡。