一、从一个问题开始

假设一条数据路径上有 10 级组合逻辑,每级 delay 在 PVT corner 下 nominal 值为 100ps。如果所有 cell 同向偏差(都变慢),路径 delay = 10 × 110ps = 1.1ns;如果有的快有的慢,实际 delay 可能只有 1.03ns。

传统 STA 怎么处理? 统一用一个 global margin(如 setup 0.75ns / hold 0.3ns),不管路径长短、cell 多少,一刀切。

问题来了:芯片越大、工艺越先进,这种一刀切要么过于悲观(过度设计),要么过于乐观(sign-off 遗漏)。这就是 OCV 要解决的问题。


二、OCV 是什么

2.1 定义

OCV(On-Chip Variation,片上偏差) 指同一芯片上不同位置的器件由于工艺、电压、温度的局部差异而表现出的性能偏差。

2.2 偏差来源

PVT 偏差
├── 全局偏差(Global/Systematic)
│   ├── 工艺角(TT/SS/FF/SF/FS)
│   ├── 电压(VDD 波动)
│   └── 温度(chip 级温差)
│
└── 局部偏差(Local/Random)—— OCV 关注的核心
    ├── 晶体管沟道长度差异(L 偏差)
    ├── 阈值电压波动(Vt mismatch)
    ├── 氧化物厚度不均(Tox 差异)
    └── 金属线宽/间距变化

关键理解: 全局偏差在 PVT corner 中已经覆盖了。OCV 处理的是 同一 corner 内、不同 cell 之间的相对偏差——这在对时序路径两端(launch vs capture)做比较时才真正重要。

2.3 为什么 180nm 也需要关注 OCV

虽然 180nm 属于成熟工艺,在 2.5MHz / 400ns 的时钟下 timing 通常很宽松,但以下场景 OCV 仍可能造成影响:

场景 风险 说明
长路径 setup 悲观不足 多级 cell 累积偏差可能超过 margin
hold 检查 hold 实际变差 data 变慢且 clock 变快时 hold 恶化
异步接口 同步失败 跨时钟域的格雷码路径也需要考虑
IO 接口 片外 timing FPGA/memory 接口 margin 紧张时

三、OCV 方法论演进

3.1 Flat OCV(传统 derating)

最简单的做法:给 data path 和 clock path 各乘一个 derating factor。

setup check:
  data_path_delay × (1 + derate)  <  clock_path_delay × (1 - derate) + T_period - setup_time

hold check:
  data_path_delay × (1 - derate)  >  clock_path_delay × (1 + derate) + hold_time
  • derate factor 通常由 foundry 提供(例如 1.1 / 0.9)
  • 优点:简单
  • 缺点:
    • 长路径过度悲观(实际偏差会平均化)
    • 短路径可能不足够悲观
    • 对所有路径一刀切

3.2 AOCV(Advanced OCV)

核心思想: derating factor 根据路径深度(logic level)动态减小。

  • 路径越深 → 偏差相互抵消 → derating 越小
  • 路径越浅 → 偏差影响越大 → derating 越大
AOCV derating table (示例):
Logic Levels | Setup Derate | Hold Derate
-------------|-------------|------------
1-3          | 1.15         | 0.85
4-7          | 1.12         | 0.88
8-12         | 1.10         | 0.90
13-20        | 1.08         | 0.92
21+          | 1.05         | 0.95
  • 优点:比 flat OCV 更精确
  • 缺点:查表法仍然是经验值,不是统计模型

3.3 POCV(Statistical OCV)

核心思想: 每个 cell 的 delay 不再是一个固定值,而是一个概率分布(高斯分布)。

cell_delay = nominal_delay + sensitivity × ΔP
其中 ΔP 是工艺参数的随机偏差分量

STA 工具沿着路径传播这些分布,最终得到路径 delay 的概率分布,在指定的 sigma 点(如 3-sigma)做 sign-off。

  • 优点:最精确,消除了 AOCV 的过度悲观
  • 缺点:需要 foundry 提供统计模型(CCS/ECSM 中的 statistical moments),工具支持(PrimeTime POCV)

在 180nm 的实际情况: 9TV50 库通常不提供 POCV 模型,因此 AOCV 是实用选择。


四、方法论总结

工艺节点          推荐 OCV 方法          原因
─────────        ─────────────          ────
180nm ~ 130nm    Flat OCV + guardband   库不提供 AOCV/POCV 模型
90nm ~ 65nm      AOCV(可查表定制)      有 distance-based OCV 数据
40nm ~ 28nm      AOCV + distance-based  需要物理距离信息
16nm ~ 7nm       POCV mandatory         必须统计模型

lookout 的环境(180nm / 2.5MHz):

SDC uncertainty:    setup 0.75ns / hold 0.3ns
时钟周期:           400ns
OCV derate:         flat OCV 1.08/0.92(保守估算)

400ns 的周期下,0.75ns uncertainty 仅占 0.19%,远小于通常建议的 5-10%。对于 180nm 工艺,建议 先以 flat OCV 快速评估,只在 timing 紧张的关键路径上启用 AOCV 精细分析。


五、Tcl 命令实战

5.1 Flat OCV 设置(PrimeTime)

# 设置 OCV derating
# data path derate
set_timing_derate -early 0.92 -late 1.08 -cell_check
set_timing_derate -early 0.92 -late 1.08 -net_delay

# clock path derate
set_timing_derate -early 0.95 -late 1.05 -clock

# 使能 CRPR(Clock Reconvergence Pessimism Removal)
set_analysis_mode -cppr both

# 指定 clock pair
report_timing -cppr -derate -nosplit_output_transition \
  -max_paths 50 -nworst 10

5.2 AOCV 设置(PrimeTime)

# 读入 AOCV table
read_aocvm -load_from_file aocv_tables/aocv_9tv50.tbl

# 使能 AOCV 分析
set_analysis_mode -aocvm enabled

# AOCV 距离相关(distance-based)
set_analysis_mode -aocvm_distance enabled
set_analysis_mode -aocvm_distance_file aocv_distance.tbl

# 报告同时查看 AOCVM factor
report_timing -derate -aocvm -cppr

5.3 AOCV Table 格式示例

# aocv_9tv50.tbl
# AOCV derating table for 9TV50 180nm library
# Format: logic_depth  early_factor  late_factor

AOCV_TABLE: setup {
  1-3:    0.88  1.15
  4-7:    0.90  1.12
  8-12:   0.92  1.10
  13-20:  0.93  1.08
  21-99:  0.95  1.05
}

AOCV_TABLE: hold {
  1-3:    0.85  1.18
  4-7:    0.88  1.14
  8-12:   0.90  1.11
  13-20:  0.92  1.08
  21-99:  0.94  1.05
}

5.4 CRPR 原理验证

# 查看 CPPR 前后的 slack 对比
report_timing -cppr -slack_lesser_than 0.1
report_timing -nocppr -slack_lesser_than 0.1

# CPPR 取消的 common path pessimism
report_cppr -summarize

5.5 快速筛选 OCV 影响大的路径

# 报告 derate 对 slack 贡献最大的路径
report_derate -significant 20

# path group 级别汇总
report_derate -group "*"

六、虚拟项目复盘

项目 XXX 背景

  • 工艺:180nm (9TV50)
  • 时钟:2.5MHz / 400ns
  • 规模:约 200K gates,含 SPI、I2C、PWM、ADC 控制逻辑
  • SDC uncertainty 初设:setup 0.5ns / hold 0.2ns

问题

第一轮 STA 发现 setup 最差路径 slack 仅 12ps(RC worst corner),hold 最差路径 slack 仅 5ps(BC best corner)。项目 sign-off 不通过。

分析过程

Step 1 — 确认 OCV 设置

当前 derate: flat OCV 1.15 / 0.85(从 130nm 项目沿用)

Step 2 — 检查 AOCV 是否启用

未启用。全芯片用 flat OCV,所有路径相同 derate。

Step 3 — 按路径深度分组检查

# 按逻辑级数分组报告
report_timing -group_by_level -path_type full_clock

发现:

路径深度 路径数 WNS 瓶颈
1-5 级 12 -0.03ns 短路径,derate 过大
6-15 级 156 +0.08ns 可接受
16+ 级 45 +0.21ns 宽松

Step 4 — 结论

flat OCV 1.15/0.85 对短路径过度悲观。改用三段式 AOCV table 后,所有路径 slack 转正。

修复清单

操作 效果
从 flat OCV 切换为 AOCV(3 级 table) 短路径 slack +0.12ns
启用 CRPR 公共路径 pessimism 消除 +0.08ns
SDC uncertainty 调整为 0.75ns / 0.3ns 更匹配 180nm 工艺
最终 sign-off WNS +0.05ns,TNS 0

经验

180nm 工艺下 OCV 的核心不是"用多激进的 derating 节省面积",
而是"用合理的 derating 避免误报,让真正的 timing 问题暴露出来"。

七、延伸思考

OCV 是 STA 从"静态"走向"统计"的桥梁。当你理解了 OCV 的本质——同一芯片上不同位置的器件不是一模一样的——就能理解为什么现代 EDA 流程越来越强调 statistical timing。

对于 180nm 工艺,虽然 timing 通常宽松,但理解 OCV 的意义在于:

  1. 面试必问(OCV / AOCV / CRPR 是 STA 经典考点)
  2. 当项目迁移到更先进工艺时,OCV 知识直接复用
  3. 混合信号芯片中模拟和数字接口的 timing margin 往往很紧,OCV 分析是必需的
Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐