关键路径(critical path)是什么?
更新时间:2026-09-21。问题驱动短答页。报告怎么读见 STA 报告解读,收敛入门见 时序收敛基础,动手修见 时序违例怎么修。
一句话回答
关键路径就是电路中「两个时序元件之间组合逻辑延迟最长、时序最紧张」的那条路径,它的延时决定了整块设计能跑的最高时钟频率;STA 报告里 setup slack 最小(最负)的那一条通常就是当前的关键路径,提频必须先把它压下去。
为什么它决定频率
同步电路一个周期内数据要完成:发射寄存器 → 中间组合逻辑 → 被捕获寄存器采到,还要满足建立时间。周期下界约为:
bash
T ≥ T_clk2q + T_logic(最大) + T_routing + T_setup − T_skewT_logic 最大的那条路径(关键路径)先顶到周期上限,整个芯片的频率就被它「卡脖子」,其他路径再快也没用。
怎么定位
- 打开 STA 报告,按 setup slack 排序,找 WNS(最差负余量) 对应路径。
- 看它的 startpoint / endpoint(哪两个寄存器或 IO 口)。
- 展开 data arrival,看延迟大头是逻辑级数太多、某级门太慢、高扇出网络、还是布线拥塞,见 STA 报告解读。
- FPGA 上在 Vivado/Quartus 的 timing report 里可直接在原理图/Device 视图交叉定位,见 时序报告入门。
怎么优化(按性价比)
- 插流水线寄存器:把长组合路径切成两到三段,最直接提频(代价是增加延迟拍数,协议允许时用)。
- 减少逻辑级数:提前算好的信号提前一级算、合并冗余逻辑、改并行/查表、平衡进位链。
- 换更快的算术结构:行波进位改超前进位/进位选择,大加法器/比较器是高频元凶,见 高级加法器。
- 降扇出:复制寄存器/缓冲(max_fanout),避免一个使能或控制信号拖一大片。
- retiming:让综合器自动在寄存器间重新分配逻辑平衡时延。
- 约束与降频:确认 SDC 正确、不是误报;性能允许时降低目标频率,见 SDC 约束。
常见坑
- 只盯着一条死修:改完布局布线变了,另一条路径冒出来成为新关键路径,要迭代到 WNS/TNS 全为正。
- 在关键路径上塞优先级编码器、宽比较器、跨层级大 MUX,却不插寄存器。
- 用
set_false_path让关键路径「消失」,属于掩盖而非解决,见 false path 与多周期。 - 只看综合阶段时序:布线后延迟才真实,必须以后布局布线/签核 STA 为准。
总结
关键路径是寄存器到寄存器之间组合逻辑延迟最大、setup slack 最差的路径,它直接决定设计的最高频率;定位要从 STA 报告找 WNS 路径并看清延迟是逻辑级数、算术结构、扇出还是布线造成的;优化按插流水线、减逻辑级、换快速加法结构、降扇出、retiming、必要时降频的顺序进行,且每次改动会改变布局布线、需反复迭代直到整体 WNS/TNS 转正,绝不能用虚假路径约束把它藏起来。