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 怎么快速定位问题?
我一般按这个顺序排查:
- 先看 WNS:最差的那条路径在哪?
- 再看 TNS:问题范围大不大?
- 打开关键路径报告:看是逻辑延迟大,还是线延迟大?
- 看时钟偏斜:有时候不是路径慢,而是时钟歪了
一个小技巧:如果关键路径上全是逻辑门延迟,那就优化逻辑级数。如果全是线延迟,那就考虑插 buffer 或者调整布局。两种问题的解法完全不同。
3.5 知识体系图
下面这张图,帮你理清时序报告的核心逻辑:
3.6 避坑指南
- 别只看 WNS:WNS 修好了,TNS 可能还很大。要全面看。
- 注意多时钟域:跨时钟域的路径,slack 计算方式不同,别搞混。
- 温度电压影响:同样的路径,在 worst case 下 slack 可能差很多。我一般用最差 corner 来检查。
总结一下:时序报告不复杂。WNS 告诉你最差在哪,TNS 告诉你问题多大,关键路径告诉你具体怎么修。这三样看明白了,时序问题就解决了一大半。