时序余量 Slack
时序余量 Slack
概念解析
定义与起源
术语定义:时序余量(Slack)是STA中最核心的指标——它告诉你一条时序路径"有多紧张"。Setup slack = 数据要求到达时间 - 数据实际到达时间。正slack = 时序满足,有余量。负slack = violation,需要修复。零slack = 刚好满足,但工艺变异可能让硅片上变负。
Slack是一把尺子——度量你的设计离fail有多近。WNS(Worst Negative Slack)=全芯片最差的那条violation路径。TNS(Total Negative Slack)=所有violation的slack之和——告诉你总violation严重程度。
核心要义
第一,Setup slack和Hold slack是两种完全不同的度量。 Setup slack检查数据是否"太快到"——数据必须在时钟沿之前稳定下来(建立时间)。正slack=数据及时到达。Hold slack检查数据是否"太慢走"——数据必须在时钟沿之后保持稳定(保持时间)。正slack=数据没有太快消失。修Setup=加快数据路径。修Hold=减慢数据路径。两者优化方向相反。
第二,Slack的多个来源需要不同修复策略。 路径太长(逻辑级数多)→减少逻辑级数或增大驱动。时钟偏斜大→调整时钟树。约束过紧(不合理的延迟约束)→松约束。IR Drop导致局部延迟增大→优化电源网格。找到slack的root cause比修slack本身更重要。
第三,Slack直方图(Slack Histogram)比WNS/TNS更有信息量。 WNS只看最差的一条。直方图展示所有路径的slack分布——如果大部分路径slack>100ps但少数几条<0ps→集中修那几条。如果slack分布整体偏负→需要架构级优化而不是local ECO。
实践应用
* WNS告诉你最紧迫的问题:先修WNS路径——它决定芯片能跑的最高频率。 * TNS告诉你问题的规模:TNS巨大意味着有大量中等violation——需要批量修复策略而非逐条修复。 * Slack Histogram是signoff必备:直方图的形状比单个数字更有价值——偏态分布vs正态分布→不同的优化策略。
实战案例
某CPU的WNS追击战:WNS从-200ps开始——修第一轮→-120ps(修了最长的combinational path)。第二轮→-50ps(调整CTS skew)。第三轮→-20ps(插入LVT cell)。第四轮→+5ps(松了一条over-constrained path)。四轮ECO——WNS从负到正。
TNS爆炸的根因:某GPU的TNS从-50ns跳到-300ns。根因是一条clock gating使能信号的hold violation→影响了所有被它门控的寄存器。修正一条hold violation→TNS跳回-60ns。
Slack直方图发现了隐藏bug:某SoC的slack分布有两个峰——正常的在+50ps附近,异常的在-30ps附近。异常峰的路径全部经过了同一个PLL生成的时钟——那个PLL的时序模型有bug——修了模型后异常峰消失。
常见误区
误区一:WNS=0就万事大吉。 WNS=0意味着所有路径在STA模型下刚好满足。但STA模型有5-10%的误差——加上OCV/IR Drop/crosstalk影响——硅片上可能变负。需要正slack margin来吸收这些不确定性。
误区二:setup slack修好hold slack就不会坏。 修setup通常加快数据路径——这可能让hold slack变差(数据太快消失)。每次ECO后setup和hold都要重新检查。
误区三:TNS小=问题少。 TNS只是violation的幅度之和。如果只有1条路径violation=-200ps(TNS=-200ps)——比100条各-10ps(TNS=-1000ps)难修得多。TNS小不一定意味着容易修。