MMMC 与高级 STA:OCV/AOCV/POCV、CPPR 与多场景签核
更新时间:2026-09-25。本文是芯片设计专家层第一篇。基础概念见 STA 入门,约束怎么写见 SDC 约束实战,报告怎么读见 STA 报告解读。这一篇讲流片级签核为什么要同时管理几十上百个 mode/corner/scenario,以及片上变异如何被建模。
一、为什么单一 corner 不够
芯片在不同电压、温度、工艺、工作模式下时序不同:
- 慢角(低电压、慢工艺、高温或特定低温反转点):门慢,setup 最危险;
- 快角(高电压、快工艺、低温):门太快,hold 最危险;
- 模式不同:功能模式、Scan/ATPG、休眠、低速外设、多时钟频率组合,时钟和路径关系都不同。
只在一个「典型角」签核,等于赌所有硅片都在典型条件工作。MMMC(Multi-Mode Multi-Corner)就是把这些组合都建成 scenario,在同一物理数据库上分别约束、分析、收敛。
读图抓住一点:scenario 不是 corner 的别名,而是「模式 × 工艺角 × RC 角 × 约束」四者的绑定。FUNC_SS_125C 用慢工艺、125℃、Max RC 专门压 setup;FUNC_FF_M40 用快工艺、负 40℃、Min RC 专门压 hold。同一个触发器在两个 scenario 里可能分别因为「门太慢」和「门太快」违例,必须各算各的,不能合并成一个角。
二、片上变异:从 OCV 到 POCV
即便同一颗芯片,相邻两个门的实际延迟也因制造微差而不同,工具不能用一个确定延迟签核,于是引入 derate(对数据/时钟路径乘系数制造悲观量)。
| 方法 | 建模 | 问题/进步 |
|---|---|---|
| OCV | 对所有路径统一乘 derate(如 data×1.1、clock×0.9) | 简单但过度悲观,长路径被惩罚过多 |
| AOCV | derate 随路径逻辑深度/物理距离变化 | 长路径统计上更平均,悲观降低 |
| POCV/LVF | 每个门延迟按统计分布(均值/方差),按路径算 σ | 先进节点主流,更接近真实、减少过度悲观 |
setup 分析通常让 launch/data 慢、capture/clock 快,制造最劣余量;hold 相反。derate 不是越大越安全,过度悲观会逼出大量无用 buffer,恶化面积、功耗和布线。
给一组典型量级(具体值以 foundry 的 ADA/LVF 库为准):早期 OCV 在 28nm 常用 data early 0.9、data late 1.1,即 ±10% 量级;到 16nm 以下全局系数升到 ±12%~±20%,但长路径里很多门统计上互相平均,统一乘满系数明显过惩罚。AOCV 把系数做成二维表:逻辑深度 1 级时 derate 可能高达 1.15,深度堆到 20 级以上回落到 1.03~1.05;物理距离维度同理,相邻门变异相关性强、远距门独立。POCV 更进一步,库直接给每级延迟均值 μ 和标准差 σ,一条 N 级路径的总标准差按独立随机变量合成 √(σ1²+σ2²+…+σN²),签核时取 μ+kσ(k 常取 3 左右,对应约 99.87% 单侧覆盖),这正是它比统一 derate 省面积的数学根源:随机抖动按根号 N 增长,而非按 N 线性增长。
举个算例:一条 25 级组合逻辑路径,每级典型延迟 40ps。OCV 对整段统一乘 1.15,悲观量 = 25×40×0.15 = 150ps;POCV 若每级 σ=6ps,3σ 的总不确定度只有 3×6×√25 = 90ps。两者差出的 60ps 可能就是「要插两级 buffer、抬高频率风险」和「直接收敛」的区别。这也是先进节点签核几乎一边倒转向 POCV/LVF 的原因——LVF 还把电压降导致的延迟分布一并纳入,专门服务低电压、near-threshold 场景。
三、CPPR:别把同一段时钟惩罚两次
一条触发器到触发器路径,launch 和 capture 时钟可能共享同一段时钟树(common path)。OCV 分别对 launch、capture 路径加悲观系数时,公共那段会被既算慢又算快,重复惩罚。CPPR(Clock Path Pessimism Removal / CRPR) 识别公共路径,把这部分人为悲观量加回 slack。
图里 launch 与 capture 两条路径在分叉点之前共享 Common Path。OCV 为了制造最坏余量,让 launch 时钟乘慢系数、capture 时钟乘快系数,于是同一段公共物理延迟被既算成最慢、又算成最快——但一段真实金属不可能同时取两个极值。CPPR 把这部分人为差量加回 slack。判据是「同一定义时钟 + 同一物理公共段 + 同一沿」三者都满足才给 credit;一旦经过 generated clock、不同时钟源或跨域,补偿立即失效。
要注意 CPPR 只对真正相同的时钟定义和物理公共段有效;复杂 generated clock、不同时钟源、跨域路径通常拿不到这个补偿。
四、scenario 管理与签核收敛
一个项目可能有几十到上百 scenario。实践要点:
- 确定签核集合:功能/测试/低功耗模式 × setup/hold 最劣角 × 典型 RC corner,砍掉冗余但不能漏 worst;
- 多场景并行分析(multi-scenario):在同一布局布线数据库上同时看所有 scenario 的 WNS/TNS;
- 修 worst-of 路径:一条路径在 A 角 setup 差、另一条在 B 角 hold 差,优化要找对所有相关角都成立的动作;
- hold 通常在后期修:布线延迟稳定后插 delay buffer,过早修 hold 容易被后续布线推翻;
- 例外约束统一管理:false/multicycle 在所有相关 scenario 一致,见 SDC 实战。
收敛阶段还要盯几个量化判据:除全局 WNS/WHS 外,按 scenario 看的 TNS/THS 应趋于 0 而非只剩「永远修不动的几条」;同一条路径在不同角的 slack 差若超过几百 ps,往往是 RC 角或 derate 配置问题,先查配置再修电路。修一条违例前后要回归全部签核角,确认没有在快角把 hold 顶负、在另一 mode 制造新违例。一般做法是每轮 ECO 后跑全量增量 STA,越到流片前越不允许「只在当前角看着过了」就提交。
五、useful skew / time borrowing
零 skew 不是最优。适当让 capture 时钟晚到(positive useful skew),可把一条 setup 紧张路径的余量「借」过来,但会压缩前后级余量、可能制造 hold 问题,必须在多角下验证。锁存器设计还可用 time borrowing,让借用透明地沿锁存器链传播。useful skew 是后期收敛手段,不是替代 RTL 打拍的借口。
具体说:设 regA→regB 路径 setup 差 80ps,而 regB 的 capture 时钟比理想再晚 100ps 到达,这条路径立刻转正;代价是 regB→regC 的下一级相当于被提前 100ps 采样,且 regA→regB 的 hold 窗口收窄。因此借用前必须同时核对三件事:下一级 setup 还有没有 100ps 以上余量、快角 hold 会不会变负、时钟树能不能在不制造新 skew/DRC 的前提下把这 100ps 调出来。经验阈值是单次 useful skew 控制在一个 buffer 延迟(约 40~80ps)以内、全芯片累计借用路径不超过违例总数的一小部分;大面积靠借 skew 收敛,本质是时钟周期定得不合理,应当回到架构降频或加流水级。
六、常见签核陷阱
- 漏建某个实际存在的功能/测试模式,硅片在该模式失败;
- 用了 OCV 却关了 CPPR,公共路径被过度惩罚逼出多余缓冲;
- POCV 统计库与工艺角版本不匹配;
- generated clock 关系错误导致跨时钟路径被误当同步/异步;
- 只收敛 setup,快角 hold 未清;
- 低功耗模式下电源开关、retention、level shifter 路径没有进约束与分析;
- waiver 堆积,把真实最差路径豁免掉。
七、签核报告怎么读
多场景 STA 报告不要只盯全局 WNS,建议按下面顺序收敛:
- 按 scenario 排序:先找每个 mode/corner 的最差路径,确认它是不是真实工作场景;
- 按 path group 聚类:输入端、reg2reg、输出端、时钟、扫描链的修法完全不同;
- 看违例分布:TNS 很大通常是频率/规划问题,几条孤立违例才适合 ECO;
- 展开时钟路径:确认 launch/capture clock latency、uncertainty、CPPR credit;
- 对比 GBA 与 PBA:GBA 悲观违例可先用 path-based 模式去悲观,真实违例再修;
- 检查相关 hold:任何 setup 修复后都要同步看快角 hold。
报告中的每个负 slack 都应能回答四个问题:它属于哪个合法工作场景、物理瓶颈在哪里、约束是否正确、准备在哪一层修。如果回答不了这四点,直接让工具自动加 buffer 往往会制造新问题。
八、签核检查清单
- [ ] mode/corner/scenario 清单可追溯到架构与测试需求;
- [ ] 慢角 setup、快角 hold、必要 RC corner 全部覆盖;
- [ ] OCV/AOCV/POCV 方法和库版本与工艺要求一致;
- [ ] CPPR 启用,generated/common clock 关系正确;
- [ ] 功能、Scan/ATPG、低功耗/DVFS、复位模式都有时序结论;
- [ ] 多场景 WNS/TNS/WHS/THS 收敛,无 worst 路径遗漏;
- [ ] false/multicycle/clock group 全部有设计依据并评审;
- [ ] useful skew 在所有角 setup+hold 同时验证;
- [ ] waiver 有责任人、理由和过期条件。
总结
MMMC 签核把功能/测试/低功耗等 mode 与慢角、快角、RC corner 组合成 scenario,分别用最劣条件分析 setup 和 hold,因为同一片硅上每个门还有片上变异,所以要用 derate 建模:OCV 统一系数过于悲观,AOCV 按逻辑深度、POCV/LVF 按延迟统计分布逐级逼近真实,并用 CPPR 把 launch/capture 公共时钟段被重复施加的悲观量补回;收敛时要在同一份物理数据上看多场景 worst-of 路径、后期修 hold、谨慎使用 useful skew,并确保每个真实模式、generated clock、低功耗边界和时序例外都有可追溯的签核结论。