SDC 时序合同的生命周期:一份约束怎样陪芯片走到签核(F2)
EDA 数据格式与标准 已讲过 SDC 有哪些命令;本篇不重复字段,而是把 SDC 当作一份贯穿 S2→S5、有作者有版本有评审的「时序合同」,讲它怎么生、怎么分层、怎么随流程改。对应综合站 S2 与签核站 S5。
一、SDC 为什么是「合同」而不是「脚本」
SDC(Synopsys Design Constraints,事实标准,基于 Tcl)向工具表达设计的时序意图:时钟多快、外部世界多久把数据放到端口、哪些路径不按默认规则检查。它之所以是合同,是因为:
- 它定义了**「正确」的判据**:同样一颗芯片,约束不同,WNS 可正可负,签核结论随之改变;
- 它被多个工具、多个阶段共同遵守:综合、布局布线、CTS、STA 必须读同一套意图;
- 错误约束比没有约束更危险——静默的假收敛:报告全绿,只是因为真实路径被
set_false_path排除了。
二、SDC 的分层结构(按职责而不是按工具堆)
成熟项目把 SDC 拆成可评审、可复用的几层,而不是一个几千行文件:
| 层 | 内容 | 典型作者 | 何时冻结 |
|---|---|---|---|
| 时钟层 | create_clock、create_generated_clock、时钟网络、不确定性 | 前端/时钟负责人 | 早,随架构时钟树 |
| IO 层 | set_input_delay/set_output_delay、IO 驱动/负载 | 前端 + 板级/接口团队 | 接口协议定下来时 |
| 例外层 | set_false_path、set_multicycle_path、set_max_delay | 设计 + 时序负责人共同评审 | 逐条论证,最晚冻结 |
| 环境/模式层 | 驱动强度、线负载、case_analysis、func/scan/test 模式 | 后端/DFT | 随模式定义 |
| 优化目标 | 面积/功耗/多角目标 | 后端 | 各阶段调整 |
例外层是事故高发区。每条 false_path 都是在对工具说「这条路径别检查」,必须回答:为什么物理上真的不要求时序?是异步跨域(应有 CDC 同步器背书)、静态配置、还是测试专用?没有论证的例外等于在报告上盖假章。多周期路径还要写清是发射端还是捕获端、几个周期,方向写反会放过 setup 或 hold。
三、随里程碑演化:SDC 不是写一次

- 综合(S2):时钟是理想的(零源延迟),约束聚焦性能意图。
- 布局(S3):线延迟有了物理估计,可能补充物理相关约束。
- CTS(S4)的关键回写:时钟树长出后,时钟被设为传播模式(propagated clock),STA 用真实插入延迟与偏斜,不再用理想时钟。若漏了这一步,就是「用理想时钟对真实数据路径」,setup/hold 都会失真。
- 签核(S5):在 MMMC(多角多模) 下,同一份基础合同要和不同 corner、不同 scenario(func/scan、时钟开关组合)笛卡尔组合,并叠加 OCV/AOCV/POCV 与 SI 分析。
四、多模式(mode/scenario):一份合同的多张面孔
一颗芯片在功能模式、扫描测试模式、休眠/调试模式下时钟关系不同。SDC 通过 set_case_analysis 等定义模式,工具按 scenario 分别分析。漏掉某个 mode,等于该模式下整类路径无人检查——扫描链时序问题常在这一步漏到很后面。模式清单本身要作为受版本管理的数据(见规划 X2)。
五、典型交接事故
| 事故 | 现象 | 根因/拦截 |
|---|---|---|
| 假收敛 | 报告全绿、硅上错 | 无评审的 false_path 放过真实路径;例外逐条评审+留档 |
| 漏 generated clock | 分频/MMCM 后路径无约束 | 查 unconstrained endpoint 报告作为硬门禁 |
| 时钟失真 | CTS 后时序仍异常好看 | CTS 后强制 propagated clock,禁理想时钟 |
| 模式盲区 | scan 模式时序到后端才爆 | scenario 清单化,全模式进 MMMC |
| 阶段不同源 | 综合过、签核不过 | SDC 单一来源随流程传播,不在各工具里私自改 |
| 例外失效 | 重构后路径改名 | 例外尽量绑逻辑意图(时钟/端口),定期核对仍生效 |
**「未约束端点(unconstrained endpoint)为零」**应作为 S2/S5 的硬门槛——只要有端点没被任何时钟路径覆盖,时序报告就不完整。
六、与相邻数据的边界
- SDC 表达意图,真实延迟来自 SPEF 反标(见 F5),单元延迟来自 Liberty(F3);三者在 S5 合流。
- 工具具体怎么
read_sdc/report_timing见 STA 入门;命令字段见 EDA 数据格式。
总结
SDC 是一份从综合活到签核的时序合同:按时钟/IO/例外/模式分层、例外像 RTL 一样逐条评审、CTS 后必须回写真实时钟、全模式进 MMMC;时序收敛里最贵的错误从来不是「路径太难修」,而是「合同写错导致根本没在量该量的路径」。