3、时序报告解读:slack、WNS、TNS、关键路径分析

时序分析跑完了,工具会吐出一大堆报告。

说实话,我刚入行那会儿,看到这些数字就头大。满屏的英文、一堆缩写,根本不知道从哪看起。

但后来我明白了——时序报告就是芯片的体检单。你得会看,才能知道芯片哪儿有病。

3.1 什么是 Slack?

Slack,中文叫「时序裕量」。说白了,就是你的路径还剩多少时间余量。

公式很简单:

Slack = 要求时间 - 实际到达时间
  • Slack > 0:路径满足时序,有富余
  • Slack = 0:刚好卡在边界,很危险
  • Slack < 0:时序违例,芯片可能跑不到目标频率

我个人习惯:设计初期,我会留 5%~10% 的 slack 余量。别卡得太死,后期布局布线一折腾,时序可能就崩了。

3.2 WNS 和 TNS:两个最重要的全局指标

你想想看,一个芯片里可能有几百万条路径。一条条看 slack,不现实。

所以工具给了两个汇总指标:

缩写 全称 含义
WNS Worst Negative Slack 最差的一条路径的 slack 值
TNS Total Negative Slack 所有违例路径的 slack 总和

WNS 决定了芯片能不能跑起来。只要有一条路径 WNS 是负的,芯片就可能出问题。

TNS 反映了问题的严重程度。TNS 很大,说明违例路径很多,或者违例很深。

我曾经踩过一个坑:有一次 WNS 只有 -0.02ns,我觉得问题不大,就放过去了。结果流片回来,芯片在高温下就是跑不稳。后来查出来,那条路径刚好是时钟树的敏感路径。所以,别小看任何负 slack,哪怕只有一点点。

3.3 关键路径分析

关键路径,就是时序最紧的那条路。通常就是 WNS 对应的那条路径。

工具会告诉你:

  • 起点(Startpoint):通常是寄存器或输入端口
  • 终点(Endpoint):通常是寄存器或输出端口
  • 路径上的每一级逻辑延迟
  • 线延迟
  • 时钟偏斜(Clock Skew)

举个例子,工具输出的关键路径报告大概长这样:

Startpoint: reg_A (rising edge-triggered flip-flop)
Endpoint:   reg_B (rising edge-triggered flip-flop)
Path Group: clk
Path Type:  max

  Point                                   Incr     Path
  ----------------------------------------------------------
  clock clk (rise edge)                   0.00     0.00
  clock network delay (propagated)        0.35     0.35
  reg_A/CK (DFF)                          0.00     0.35
  reg_A/Q (DFF)                           0.12     0.47
  U1/A (AND2)                             0.08     0.55
  U1/Z (AND2)                             0.10     0.65
  U2/A (OR2)                              0.09     0.74
  U2/Z (OR2)                              0.11     0.85
  reg_B/D (DFF)                           0.00     0.85
  data arrival time                                0.85

  clock clk (rise edge)                   1.00     1.00
  clock network delay (propagated)        0.30     1.30
  reg_B/CK (DFF)                                  1.30
  library setup time                     -0.05     1.25
  data required time                               1.25
  ----------------------------------------------------------
  data required time                               1.25
  data arrival time                               -0.85
  ----------------------------------------------------------
  slack (MET)                                      0.40

嗯,这里要注意:

  • Incr 列:每一级单元的延迟
  • Path 列:累计延迟
  • 最后算出来的 slack = 0.40ns,说明这条路径是满足的

3.4 怎么快速定位问题?

我一般按这个顺序排查:

  1. 先看 WNS:最差的那条路径在哪?
  2. 再看 TNS:问题范围大不大?
  3. 打开关键路径报告:看是逻辑延迟大,还是线延迟大?
  4. 看时钟偏斜:有时候不是路径慢,而是时钟歪了

一个小技巧:如果关键路径上全是逻辑门延迟,那就优化逻辑级数。如果全是线延迟,那就考虑插 buffer 或者调整布局。两种问题的解法完全不同。

3.5 知识体系图

下面这张图,帮你理清时序报告的核心逻辑:

时序报告解读核心逻辑 时序报告 WNS(最差负裕量) TNS(总负裕量) 关键路径 芯片能否跑起来? 最差路径在哪? 问题范围多大? 违例严重程度? 逻辑延迟还是线延迟? 时钟偏斜大不大? 优化方向:逻辑级数 / 线延迟 / 时钟树

3.6 避坑指南

  • 别只看 WNS:WNS 修好了,TNS 可能还很大。要全面看。
  • 注意多时钟域:跨时钟域的路径,slack 计算方式不同,别搞混。
  • 温度电压影响:同样的路径,在 worst case 下 slack 可能差很多。我一般用最差 corner 来检查。

总结一下:时序报告不复杂。WNS 告诉你最差在哪,TNS 告诉你问题多大,关键路径告诉你具体怎么修。这三样看明白了,时序问题就解决了一大半。

可可精品资料库