6.3 瓶颈定位:从报告到根因


6.3 瓶颈定位:从报告到根因

本节摘要:修复之前先定位:违例是孤岛还是群岛?瓶颈在负载、线长、逻辑级数还是翻转率?本节给出一套按证据聚类的定位方法——分组统计、字段取证、电路回溯三步走,把"逐条修"的低效循环变成"按根因群修"。

为什么有人修时序又快又准,有人修一条崩两条?差别不在工具熟练度,而在定位方法。低效的循环是这样的:按 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 提及的结构;电压热点——违例与压降地图的高跌落区空间重合、随频率升高恶化。拿到违例清单先扫指纹再动手,多数情况下五分钟内就能锁定主攻方向。

本节要点回顾

  • 先统计后动手:按域、共同端点、共同起点、物理区域聚类,违例的群形态决定修群因还是修孤岛。
  • slack 分布是全局温度计:大片浅违例指向政策与全局因素,深违例才是结构问题。
  • 四类字段证据:高扇出、长互连、深逻辑、翻转率恶化,每种对应明确的手段方向。
  • 回溯交叉验证:字段坐实根因,目视补充报告盲区,两者吻合才动手。
  • 伪案三查:check_timing、例外命中、估算偏差回灌,约束问题永远先于电路问题。

定位清楚了,就轮到手段本身。下一节把修复手段组织成一棵决策树,并给每种手段标上收益量级与代价——那是本章的落脚点,也是日常收敛工作的速查卡。


作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U