本节摘要:静态时序分析(STA)是 FPGA 工具按约束对每一条时序路径做"体检"的工序——不需要仿真波形,纯静态计算所有路径的建立与保持时间余量。本节教你读懂时序报告的结构(slack、WNS、TNS、关键路径),区分建立时间违例与保持时间违例,并掌握定位与修复违例的基本章法。
硬件团队里流传一句行话:"WNS 是红的,周末就别想休息了。"WNS(Worst Negative Slack,最差负余量)是时序报告里最重要的数字——它表示全芯片最坏一条路径还差多少纳秒才能满足约束。WNS 为正,全芯片时序通过;WNS 为负,表示存在违例,这条路径就是不满足约束的最差路径。工程上约定俗成用"红"表示违例、"绿"表示满足,所以"看 WNS 是红是绿"成了判断一次实现成败的第一反应。
为什么静态时序分析能"不跑波形就知道结果"?因为路径延迟是可以静态计算的:每根布线有固定延迟、每个逻辑单元有固定延迟,工具把"起点触发器 → 组合逻辑 → 终点触发器"的延迟累加,和约束要求的时钟周期一比,就有结论。它不验证功能,只验证"时间够不够"——这是 STA 与仿真互补分工的关键。
任何寄存器都有两个硬性时间要求:
它们分别对应两条检查:建立时间检查关心数据最晚什么时候到(路径太长、时钟太快会违例),保持时间检查关心数据最早什么时候变(路径太短、时钟偏斜大大会违例)。工程上建立时间违例占绝大多数,保持时间违例多出现在跨时钟域或复位释放场景。

这张图的公式建议抄下来:建立余量 slack = 时钟周期 − 数据到达时间 − 建立时间。slack 为正是余量,为负就是欠账——欠得越多,路径越急。
一份完整的 STA 报告信息量很大,按"由粗到细"三个层次读:
第一层:全局数字。看 WNS(最差负余量)和 TNS(负余量总和)。WNS 决定"过不过",TNS 告诉你违例是"一根独苗"还是"一片荒芜"。WNS 负一点点而 TNS 很小 → 单条关键路径,好修;WNS 负得不多但 TNS 很大 → 系统性问题(约束或布局),别在单条路径上使劲。
第二层:关键路径清单。报告会列出最差的若干条路径,每条给出起点、终点、路径延迟分解。先看路径延迟分解里哪一段占比最大——组合逻辑延迟?布线延迟?扇出太大?段与段的比例直接告诉你修法:组合段长 → 切流水线;布线段长 → 改布局或管脚;扇出大 → 寄存器复制。
第三层:单条路径细节。展开到每个节点的到达时间,确认修法是否生效。
下面模拟一段报告关键路径(示意,字段按真实报告简化):
Timing Path (Max Delay Path) — 建立时间检查 Startpoint: proc_inst/reg_data[7] (rising edge of clk_200m) Endpoint: fir_inst/acc_reg[15] (rising edge of clk_200m) Path Group: clk_200m Path Type: Max (Setup) Slack (MET): 0.512 ns Source Clock: clk_200m at 0.000 ns Data Path Delay: 4.488 ns Logic Delay: 2.960 ns Route Delay: 1.528 ns Destination Clock: clk_200m at 5.000 ns Analysis: slack = 5.000 - 4.488 = 0.512 ns (MET = 满足)
模拟一份违例版(关键字段),对比着看:
Slack (VIOLATED): -0.784 ns Data Path Delay: 5.784 ns Logic Delay: 4.460 ns ← 组合逻辑占了 77% Route Delay: 1.324 ns
组合逻辑占 77%——这是典型的"组合链太长",修法首选在关键路径中间切一级流水(把组合逻辑分成两半,各用一拍)。第 2 章你写的 a * b 如果没打拍,在这里就会现形。
拿到违例,按这个顺序尝试,别一上来就动代码:
问:时序报告里每条路径标注的 MET(满足)和 VIOLATED(违例)是怎么算出来的?答:核心就是 4.2 那个公式——slack = 时钟周期 − 数据到达时间 − 建立时间。slack 为正标 MET,为负标 VIOLATED。注意两点:slack 是"全路径"的余量,不是某一级的延迟,所以只看路径总延迟不够,要看延迟分解(组合/布线/扇出各占多少)才能判断修法;报告分建立和保持两组,同一路径在两个检查组里各有 slack,别只看建立组就下结论。
⚠️ 常见坑:保持时间违例(尤其复位释放和跨时钟域)用切流水线是修不好的——保持违例的修复方向是"加延迟"(插缓冲)或改时钟偏斜,工具通常有自动修复,但前提是约束里声明了相关时钟关系。别把两类违例的修法搞混。
下一步进入 4.3:同一时钟域的问题能用 STA 查,跨时钟域的隐患却藏在 STA 盲区里——亚稳态与 CDC 处理登场。