时序收敛基本手法:打拍、流水线、retiming 与约束优先级
更新时间:2026-09-06。本文是「集成电路大类 · 芯片设计」进阶层(intermediate)第十三篇新正文(#15)。前两篇备齐了 SDC 约束(#13)和 STA 报告阅读(#14),这一篇讲违例报告摆在桌上之后怎么修。时序收敛不是后端一家的事——约一半的收敛问题要靠前端 RTL 和微架构解决,越早改代价越小。
本文要回答的问题
- 关键路径违例了,按什么顺序想办法?
- 流水线/打拍、retiming、逻辑重组各解决什么问题?
- 哪些「违例」其实是约束问题,不该动 RTL?
- 前端、综合、后端在收敛流程里各修什么?
一、黄金原则:先查约束,再改设计
看到负 slack 第一反应不是改 RTL,而是问三个问题(#14 的报告里都有答案):
- 这条路径真的需要这个周期约束吗? 跨异步域却没标
clock_groups?数据 N 拍才用一次却没设 multicycle?——假违例修 SDC,动 RTL 是白改还可能引入新问题; - 路径两端是什么? reg→reg 内部路径才谈逻辑优化;input→reg 违例先看 input_delay 与 IO 摆放;
- 延迟花在哪? 网表阶段 cell delay 大 → 逻辑级数太多;布线后 net delay 大 → 扇出/物理距离问题。
确认真违例后,按「改动成本从低到高、效果从架构到工艺」的顺序出手。
二、微架构/RTL 级:最有效,也最便宜
- 插流水线寄存器(打拍):长组合链中间加一级寄存器,关键路径砍半,频率上限提高——代价是结果晚 1 拍出来。必须在协议/功能允许处插:valid/ready 流水用 Skid Buffer 保吞吐(握手 #06),AXI 通路每级打拍反压天然支持;但反馈环(累加器读自己)里插不进去,环本身就是频率上限;
- 切断跨模块组合长链:译码→控制→数据通路一气呵成的组合逻辑,拆成「寄存译码结果 → 下拍用」;
- 高扇出复制:一个使能/控制寄存器驱动几百个单元时,net delay 和 transition 都恶化——复制成多个寄存器各带一片负载(综合器也能自动做,RTL 里显式写更可控);
- 逻辑重组:连环加法/比较改成平衡树(8 个数串行加是 7 级、平衡树是 3 级);宽 mux(多寄存器选 1)改 one-hot 选择(FSM #04 的 one-hot 同理);状态机输出打拍变 Moore,去掉输出组合链;
- 数据预计算:复杂译码/比较提前一拍算好,关键路径只做选择。
三、综合级:让工具做重活
- retiming(重定时):工具在不改变功能的前提下,把寄存器在组合逻辑间前后移动,让每级延迟更均衡——你写的 3 级流水边界未必最优,retiming 自动平衡。前提是寄存器没有被复位/边界钉死;
- cell sizing / Vt 替换:关键路径上的 cell 换成大尺寸(drive 强、延迟低)或低阈值(LVT,快但漏电大)——工具自动做,但要盯着功耗/面积代价,别全芯片 LVT(漏电爆炸,低功耗权衡见 #23/#24);
- 物理综合:综合时预估布局布线延迟(DC Topographical 类),比纯逻辑综合的结果更接近后端实况。
四、后端级:物理距离与时钟树
布线后 net delay 常占关键路径一半以上(物理实现):
- floorplan/f布局:数据交互密集的模块(如 ALU 与寄存器堆、DMA 与 FIFO)摆在一起,长连线天生变短;
- CTS 时钟树:平衡时钟网络让 launch/capture 时钟延迟差最小(#25 提到的复位树同理),insertion delay 小了留给数据的时间就多;
- ECO:布线后违例用工程变更单修——setup 差一点换大 cell、hold 违例插 delay buffer(#14 讲的方向),见进阶 #39 ECO 流程。
五、收敛迭代纪律

纪律:① setup 先行、hold 后清——setup 靠改结构,hold 等 CTS 后插 buffer 集中修;② 先修最差路径,瓶颈会转移(修好一条,次差的冒头),逐轮收敛;③ 不要过设计:为 −0.01ns 把模块全换 LVT 不值得,slack 到正、留合理余量即可;④ 多角多模(最好/最差、温度电压、功能/测试模式)要同时收敛,不能只绿一个角;⑤ 收敛记录归档:哪些路径改了 RTL、哪些加了约束,评审可追溯。
相关与延伸
上一篇:STA 报告解读。时序收敛线(#13–15)至此完成,下一批进入验证线:综合优化(#16)与形式验证入门(#17)。入门铺垫:STA 概念、逻辑综合、物理实现;打拍与反压见 valid/ready 握手;低功耗与 LVT 漏电权衡见进阶 #23 低功耗 RTL / #24 UPF;CTS 见 #35,ECO 见 #39。
总结
时序收敛的正确顺序是「先查约束(假违例修 SDC)→ RTL/微架构(打拍流水线最有效、逻辑重组与扇出复制次之)→ 综合(retiming、sizing)→ 后端(布局、CTS、ECO)」;setup 靠切短路径先行、hold 靠插缓冲后清,逐轮消灭最差路径、多角多模同时签核,不过设计、留余量可追溯。