多周期路径、伪路径与时序例外:该放宽的放宽,不该放的别放
更新时间:2026-09-12。本文是「集成电路大类 · 芯片设计」进阶层(intermediate)数字逻辑第四十九篇。SDC 约束让 STA 默认把每条寄存器路径当单周期检查,但有些路径按设计本来就不需要一周期到位。这一篇讲三种时序例外(timing exception)——多周期、伪路径、最大/最小延迟,以及为什么滥用它们比违例更危险。
本文要回答的问题
- 什么时候一条路径「名正言顺」可以用多个周期?多周期约束怎么写?
- 设了多周期 setup,为什么 hold 通常也要一起调(N-1)?方向 -start/-end 怎么选?
- 哪些路径是真伪路径?把真路径误标 false path 会怎样?
- 跨时钟域路径应该用 false path、clock groups 还是同步器约束?
- 怎么管理时序例外,避免它成为掩盖差设计的「橡皮图章」?
一、多周期路径:数据本来就隔 N 拍才被用
典型场景:使能逻辑每 N 拍才采一次结果(如用时钟使能慢速动作,或一条多周期数据通路、配置后才用一次的大运算)。物理上触发器仍在同一时钟沿,但目的寄存器在中间周期并不使用新值,强制它一周期收敛既无必要又逼工具过度优化。
# 数据从 src 到 dst,设计上 2 个周期后才被采样
set_multicycle_path 2 -setup -from [get_pins src_reg/C] -to [get_pins dst_reg/D]
set_multicycle_path 1 -hold -from [get_pins src_reg/C] -to [get_pins dst_reg/D]关键坑:setup 放宽到 N,hold 默认仍按「同一沿」检查,通常要显式把 hold 放到 N−1,否则工具会要求一个不合理的「最短路径也要满足第 0 沿」的 hold,插入没必要的延时。-start(关系到发射沿、源时钟)/-end(关系到锁存沿、目的时钟)在同频时差别不明显,跨频率多周期时必须选对。多周期是「设计意图确实如此」时才用,且 RTL 里最好有对应的使能/握手佐证,不能为了过时序事后硬调。
二、伪路径:逻辑上根本不会被采到
set_false_path 告诉 STA 完全不检查某条路径,合法用途包括:
- 上电后不再变的静态配置/测试模式信号(经同步、采样安全)到正常工作逻辑;
- 复位树的部分路径(由专门的 recovery/removal 规则管)、异步复位;
- 逻辑上互斥的选择:硬连线 mux 两边不会同时选、永远不会同时有效;
- 已经用同步器处理的 CDC 数据/控制线本身不做时序收敛(但同步器要有专门的亚稳态/MTBF 约束,CDC 路径更推荐用 clock groups 统一管理)。
危险在于 false path 是「彻底不查」:一旦把实际会被采样、且可能违例的路径标成 false,STA 静默放过它,硅上就可能随机失败,且仿真往往不暴露。因此原则是「能用多周期准确表达意图就别用 false path,能精确到具体引脚/端口就不要按大模块或时钟一刀切」。
三、CDC 例外要用专用机制,而不是乱标 false
跨时钟域不是简单标 false path 了事:
- 真正的两周期/异步关系用
set_clock_groups -asynchronous成组声明,工具既不报这些路径 setup/hold,又保留对组内、复位、同步器结构的检查; - 第一级同步触发器加
set_false_path -to [get_pins .../D]或专用set_max_delay(如 XilinxASYNC_REG、datasheet风格的小 delay)配合 MTBF 分析,目的是让工具把两级触发器贴近放置、不被优化掉; - 但数据必须通过正确的同步结构(单 bit 双触发、多 bit 握手/异步 FIFO),时序例外只是声明「这里靠同步器保证」,不能替代结构正确性——这正是 CDC 规则检查存在的意义。
四、最大/最小延迟与管理纪律
set_max_delay/set_min_delay用于没有自然时钟关系、或 I/O 与片外时序(见 SDC I/O 约束)时,直接给路径上/下界;有时用一个较小 max_delay(而不是完全 false)约束同步器第一级,既承认无法收敛又限制别太离谱。- 管理纪律:①每条例外在代码/约束里写注释说明设计依据(哪级使能、为何互斥、哪个同步器);②集中管理、随 RTL 评审,禁止「时序不过就先 false 掉」;③用报告核对每条例外确实命中且只命中目标路径(
report_exceptions -ignored/coverage),防止过宽切除掩盖真实违例或约束重叠失效;④门级签核和 ECO 后复核,因为逻辑重优化可能改变路径归属。
时序收敛的正道仍是微结构/流水线/重编码(见时序收敛基础),例外只用于「架构本来就不要求单周期」的少数真实情况——它们是精确的声明,不是消音器。
与现有篇目的衔接
总结
一句话总结:STA 默认每条寄存器路径单周期收敛,但真实设计存在三类时序例外——多周期路径用于数据按设计隔 N 拍才采样(如时钟使能慢动作、多周期运算),用 set_multicycle_path 放宽 setup 到 N 且通常要把 hold 调成 N−1 并选对 -start/-end;伪路径用于逻辑上永不被采或互斥的路径(静态配置、复位、互斥 mux、已同步的 CDC),用 set_false_path 完全不检查,但它是「彻底不查」,误标真实路径会静默放过硅片随机失效,所以应尽量用精确的多周期替代、并把范围收到具体引脚;CDC 不能乱标 false,要用 set_clock_groups -asynchronous 成组声明并对同步器加专用 max_delay/ASYNC_REG 配合 MTBF,结构正确性仍靠握手/异步 FIFO;再用 max/min delay 处理无时钟关系的路径,并对所有例外写依据、评审、用覆盖率/忽略报告核对命中范围——例外是对架构意图的精确声明,不是时序不过时的消音器,收敛正道仍是流水线和微结构优化。