OCV / AOCV / POCV 深入:片上变化怎样吃掉时序余量
更新时间:2026-09-25。本篇接在 MMMC 高级静态时序分析 之后:MMMC 解决的是「整片硅在不同工作模式、不同工艺角下怎么验」,本篇解决另一个更隐蔽的问题——即使在同一片硅、同一个角里,die 上不同位置的晶体管延迟也不一样。往下读之前,建议先看过 寄生参数 RC 抽取。
本文要回答的问题
- 同一片 die、同一个工艺角,为什么还要再打折(derate)?
- OCV、AOCV、POCV/LVF 三代模型各自怎么算,悲观量差在哪?
- 为什么路径越深,统一 derate 越浪费?
- CPPR 为什么能把 launch/capture 共用时钟段的悲观量补回来?
- 签核时 setup、hold 分别怎么设 derate,常见假违例从哪来?
一、为什么需要 derate:同一片 die 上也没有两个一样的门
STA 库里给的是某个工艺角(比如 slow/typical/fast)下的单元延迟,它描述的是这一批晶圆统计意义上的极端点。但真正流出来的某一片 die 上,几亿个门不可能齐刷刷落在同一个延迟值上:
- 随机掺杂涨落(RDF):沟道里掺杂原子数量本就是离散的,纳米尺度下多一个少一个原子,阈值电压 Vth 就有毫伏级波动;
- 线边缘粗糙度(LER):光刻和刻蚀让栅极边沿不是理想直线,等效沟道长度逐门不同;
- 空间系统性变化:die 中部和边缘的氧化层厚度、CMP 抛光后金属厚度有梯度;
- 局部环境差异:周围密度、应力、热分布不同,相邻两个反相器延迟也能差出几个百分点。
后果落在一条时序路径上很直接:发射触发器(launch flip-flop)、捕获触发器(capture flip-flop)、数据路径上的几十个组合逻辑,是各自独立地围绕标称延迟上下波动的随机变量。若都按「典型」值算,只要有几个门同时偏慢,setup 就会在硅上失败;反过来同时偏快,hold 可能崩。
derate(降额因子)就是给这个不确定性留余量的工程手段:对 setup,把数据到达时间往慢里乘、时钟往快里乘,人为构造「数据最慢、时钟最快到」的不利组合;hold 则反过来。早期工艺节点门延迟占主导、变化幅度小,一个固定百分比就能盖住;节点越先进,固定因子越盖不准,这才逼出了 AOCV、POCV。
这张图说的是因果链:标称分析看到 0.90ns,不代表硅上是 0.90ns;独立波动让最坏组合显著偏大;derate 的价值就是让这条路径在签核阶段、而不是在客户手里暴露。注意 derate 不改变真实延迟,它只改变分析时用的乘数。
二、OCV:统一百分比,简单但对深路径过度悲观
最早的 OCV(On-Chip Variation,片上变化)做法极其朴素:对一类路径统一乘一个系数。比如 setup 分析时数据路径乘 1.10(放慢 10%)、launch 时钟乘 1.10、capture 时钟乘 0.90(收紧余量)。所有门、所有路径一视同仁。
问题出在统计常识上。单个门偏慢 10% 的概率不算太小,但一条 30 级逻辑的数据路径上,30 个门同时各偏慢 10% 的概率几乎为零——随机波动有正有负,深路径会自然平均掉一部分。OCV 却把「单门的极端」复制到「整条路径的每一级」,路径越深,累计的虚高悲观量越大。
在成熟节点这尚可接受:一是变化幅度本来就小,二是频率低、余量厚。到了 16nm 以下,统一 derate 会凭空制造出大量本可收敛的违例,逼着工程师加 buffer、换大单元、降频,面积和功耗白白损失,甚至误判芯片做不出来。行业因此转向看路径结构的 AOCV。
三、AOCV:按逻辑深度和物理距离查表
AOCV(Advanced OCV)的核心观察是:路径越深,相对波动越小。统计上 N 个独立随机变量之和的均值不变、标准差按 √N 增长,于是相对偏差(标准差除以均值)按 1/√N 收缩。深路径不需要浅路径那么大的 derate。
具体做法是晶圆厂在库之外再提供一张 derate 表,通常以两个维度索引:
- 逻辑深度(logic depth):从分析点到该级逻辑经过多少级单元。级数越大,表给的 derate 越接近 1.0;
- 物理距离(distance):分析点跨越的物理范围。距离越远,空间系统性变化越不相关,要留的量略增。
于是一条浅路径(比如两级逻辑后就到触发器)可能用 12% 的 derate,一条 30 级深路径只用 4%~5%。签核工具沿 launch/capture 路径逐级确定深度、套用表中系数。相比 OCV,AOCV 在浅路径上仍保覆盖、在深路径上释放了大量虚假悲观,是 40nm 到 16nm 时代的主流。
AOCV 也有自己的麻烦:表里的深度依赖路径是怎么传播、怎么切分的,clock reconvergence(时钟重汇聚)和多级路径处理复杂;表是离散的,换一个工艺或重做库就得重新表征;它仍然用「确定的乘数」去近似一个本是统计分布的现象,准确度有天花板。
读图抓住一条:颜色越绿、路径越深,需要的人为余量越小。这正是 OCV 给不出、而 AOCV 表能给出的差异——它第一次把「路径结构」纳入了余量计算。
四、POCV 与 LVF:把延迟当成统计分布
POCV(Parametric OCV,部分工具称 SOCV)换了更根本的建模方式:不再用一个确定乘数,而是把每个单元的延迟直接建模为高斯随机变量,用均值 μ 和标准差 σ(或一个相对的 variation 系数)描述。工具不再对单级打折,而是沿路径做统计传播:
- 各单元延迟均值照常按 μ 累加;
- 相互独立的随机部分,其方差按 σ² 逐级相加,总标准差为 √(σ₁²+σ₂²+…);
- 最终在路径终点,用「均值 + N·σ」的形式给出某个统计置信水平(如对应 3σ 的失效率)下的到达时间。
这天然就实现了 AOCV 用查表近似的深度效应,且更平滑、不依赖离散表,时钟重汇聚处理也更干净。POCV 的系数还可以与输入压摆(slew)、输出负载(load)相关,由库的统计表征给出;LVF(Liberty Variation Format) 就是把这些统计量——包括延迟、甚至约束的 σ 以及压摆本身的传播——按统一格式写进时序库,让 POCV 分析拿到随工作点变化的完整统计信息。先进节点(7nm 及以下)签核基本以 POCV/LVF 为准。
| 维度 | OCV | AOCV | POCV / LVF |
|---|---|---|---|
| 建模对象 | 整条路径统一乘数 | 按深度/距离查乘数 | 每级延迟为高斯分布,统计传播 |
| 深度效应 | 无,深路径严重过悲 | 表中按 1/√N 体现 | 方差 σ² 累加,天然连续 |
| 额外输入 | 单一百分比 | foundry derate 表 | 库内 μ/σ(LVF),随 slew/load 变 |
| 时钟重汇聚 | 粗糙 | 处理复杂、易分歧 | 统计传播,较干净 |
| 典型时代 | 成熟节点 | 40–16nm | 7nm 及以下主流 |
| 签核保守度 | 过悲观 | 明显改善 | 同等覆盖率下悲观最小 |
表里「同等覆盖率下悲观最小」是关键:POCV 不是放松要求,而是在不漏掉真实失效的前提下,把三代模型里多算的那部分一点点拿掉。
五、CPPR:别对共用时钟段重复悲观
引入 derate 后会冒出一个新的虚假悲观来源。考虑一条典型路径:launch 时钟和 capture 时钟在芯片上往往先共用同一段时钟树,走了很久之后才在某个分叉点分开,分别去发射和捕获触发器。OCV 风格分析为了构造最坏情况,会让 launch 时钟整体偏慢、capture 时钟整体偏快。
可那段共用物理路径是同一段金属、同一串缓冲器,只有一个真实延迟,不可能既偏慢又偏快。把它同时按两个相反方向 derate,等于对同一段路径施加了两次不相关的悲观,凭空压缩时序余量。
CPPR(Clock Path Pessimism Removal,时钟路径悲观去除,也叫 CRPR)就是把分叉点之前那段共用时钟上、被重复施加的悲观差补回来:工具识别出共同路径,计算两端在该段上的 derate 差异,从违例值里减掉这部分。
图中分叉点之上只有一个节点,CPPR 守住的正是这条物理事实:共同段不该被算两次。实际工程里大量「开了 OCV 才出现、关掉就消失」的 setup 违例,根因都是漏了或错配了 CPPR,而不是路径真有问题。
六、setup、hold 的 derate 方向与签核实践
签核时方向不能搞反:
- setup(要数据赶在捕获前到):数据路径和 launch 时钟往慢乘,capture 时钟往快乘,制造「数据最晚、捕获最早」的组合;
- hold(要数据别太快冲掉旧值):数据路径往快乘、launch/capture 时钟按不利方向收紧,制造「数据最早到」的组合。hold 对深路径不敏感,常用单一 derate 且通常在设计后期、时钟稳定后重点收敛。
落地时几条经验:
- derate 数值必须用本工艺、本库版本的表征。把旧节点 AOCV 表或老 POCV 系数套到新工艺,要么漏失效、要么过悲;
- 同一条路径在 MMMC 各 scenario 下分别看 worst,但 derate 设置要全场景一致、可追溯;
- 先确认 CPPR 生效再判断违例真伪,尤其是共用时钟很长的路径;
- POCV 分析关注的是指定置信水平(几个 σ),σ 取值要和 foundry 签核要求对齐,不能自行调小来「收敛」;
- 低功耗、多时钟、generated clock 场景,时钟路径的统计相关性更复杂,要核对工具设置而不是默认放行。
常见坑
- derate 设过松:为了收敛把系数往 1.0 拉,硅上出现本可拦住的失效,这是拿良率换报告干净;
- 设过紧或漏 CPPR:假违例堆积,逼出多余的面积、功耗甚至降频;
- 库与 derate 表版本错配:AOCV 表、LVF 库、工艺角三者要来自同一套表征;
- hold 用了深度相关的大 derate:hold 风险集中在浅路径/同一时钟沿,照搬 setup 深路径思路会算偏。
这一篇在知识体系里的位置
本篇解释片上变化的余量建模,是签核时序的最后一块统计拼图。上游依赖 MMMC 高级静态时序分析 的 scenario 框架和 寄生参数 RC 抽取 的延迟基础;时钟路径如何构建决定了 CPPR 的共同段,见 高级时钟树综合 CTS;当统计余量仍不够、必须动版图时,进入 物理 ECO 与时序收敛。
总结
同一片 die 上各单元延迟是独立随机波动,OCV 用统一百分比覆盖最坏组合,却在深路径上按「每一级都极端」重复计算、过度悲观;AOCV 按逻辑深度和距离查表、用 1/√N 的统计收缩释放深路径余量;POCV/LVF 干脆把每级延迟建成高斯分布、沿路径按方差累加,在同等失效覆盖率下悲观最小,成为先进节点签核主流;而 CPPR 坚守「launch 与 capture 共用时钟段只有一个真实延迟」的物理事实,把被重复施加的悲观补回——四者共同保证签核既不漏掉硅上真实失效,也不被虚假违例逼到降频。