第四章:时序库与工艺角——Liberty库结构,PVT工艺角,OCV与AOCV
各位好,我是老李。今天咱们聊聊时序库和工艺角。说实话,这章内容有点“硬”,但它是后端时序收敛的根基。你想想看,没有准确的库,你做的STA就是空中楼阁。我当年刚入行时,就因为搞混了WC和BC的库,导致一条关键路径setup违例没发现,差点让芯片翻车。嗯,从那以后,我对库文件就格外上心。
4.1 Liberty库结构:芯片的“说明书”
Liberty库,后缀通常是.lib,说白了就是标准单元的行为描述文件。它告诉EDA工具:每个门延迟多少、功耗多少、输入电容多大。我习惯把.lib看作芯片的“身份证”。
一个典型的.lib文件,结构大致如下:
library (my_library) {
delay_model : "table_lookup";
in_place_swap_mode : "match_footprint";
/* 定义工艺参数 */
operating_conditions (typical) {
process : 1.0;
temperature : 25.0;
voltage : 1.2;
}
/* 定义每个单元 */
cell (AND2X1) {
area : 10.0;
pin (A) {
direction : input;
capacitance : 0.005;
}
pin (Y) {
direction : output;
function : "A & B";
timing () {
related_pin : "A";
timing_sense : positive_unate;
cell_rise (delay_template_7x7) {
index_1 ("0.1, 0.3, 0.5, 0.7, 0.9, 1.1, 1.3");
index_2 ("0.01, 0.05, 0.1, 0.2, 0.4, 0.8, 1.6");
values ( \
"0.12, 0.15, 0.18, 0.22, 0.28, 0.35, 0.45", \
"0.14, 0.17, 0.20, 0.25, 0.31, 0.39, 0.50", \
...
);
}
}
}
}
}
这里有几个关键点:
- delay_model:查表模型(table_lookup)是最常见的。工具根据输入转换时间(slew)和输出负载(load)查表得到延迟。
- operating_conditions:定义了工艺、温度、电压的“标称值”。注意,这只是库的默认条件,实际STA会覆盖它。
- cell:每个标准单元都有独立的描述,包括引脚方向、电容、功能、时序弧。
- timing表格:7x7的二维表,行是输入slew,列是输出load。值就是延迟。我见过新手直接拿表格里的最大值去算,这是不对的——工具会插值。
4.2 PVT工艺角:WC, BC, WCL, ML
PVT就是Process(工艺)、Voltage(电压)、Temperature(温度)。芯片在不同条件下,性能差异巨大。你想想看,夏天手机发烫时,芯片速度会变慢;冬天在北方,芯片速度会变快。所以我们要覆盖所有极端情况。
常见的工艺角有四个:
| 工艺角 | 全称 | 工艺 | 电压 | 温度 | 速度 | 主要检查 |
|---|---|---|---|---|---|---|
| WC | Worst Case | 慢(Slow) | 低(Vmin) | 高(125°C) | 最慢 | Setup |
| BC | Best Case | 快(Fast) | 高(Vmax) | 低(-40°C) | 最快 | Hold |
| WCL | Worst Case Low | 慢(Slow) | 低(Vmin) | 低(-40°C) | 慢(但低温补偿) | Setup(低温) |
| ML | Maximum Leakage | 快(Fast) | 高(Vmax) | 高(125°C) | 快(但漏电大) | 功耗 |
这里有个坑:WC和BC是“最慢”和“最快”的极端。但WCL呢?它也是慢工艺,但温度低。为什么低温下芯片反而慢?因为载流子迁移率在低温下会下降,但阈值电压也会下降,两者竞争。实际上,对于某些先进工艺,低温反而可能变慢。所以WCL是专门用来检查低温下的setup的。
4.3 OCV与AOCV:从“一刀切”到“精细化管理”
OCV(On-Chip Variation),片上偏差。说白了,就是同一颗芯片上,不同位置的晶体管性能不一样。为什么?因为光刻、掺杂、温度梯度等因素。你想想看,芯片中心区域和边缘区域,工艺偏差可能差10%以上。
传统的STA做法是:所有路径都用同一个库(比如WC)。但这是“一刀切”,太悲观了。因为一条路径上的所有门不可能同时都最慢。所以OCV引入了derating因子:
# 传统OCV derating示例
set_timing_derate -early 0.9 # 快路径(launch clock)加速10%
set_timing_derate -late 1.1 # 慢路径(capture clock)减速10%
这样,launch clock路径用0.9倍延迟(更快),capture clock路径用1.1倍延迟(更慢),从而模拟出最坏情况。但问题来了:这个10%的derating是固定的,不管路径长短。对于短路径,10%可能太大;对于长路径,10%可能太小。
于是,AOCV(Advanced OCV)应运而生。AOCV的核心思想是:路径越长,偏差越小。因为长路径上,随机偏差会相互平均。AOCV通过查表来动态计算derating因子:
# AOCV derating表(示例)
# 路径深度(级数) early_derate late_derate
# 1 0.85 1.15
# 2 0.88 1.12
# 5 0.92 1.08
# 10 0.95 1.05
# 20 0.97 1.03
你看,当路径只有1级门时,derating是15%;当路径有20级门时,derating只有3%。这更符合实际物理规律。
4.4 知识体系总览
下面这张图,是我自己整理的本章知识结构。你可以把它当作一个“地图”,方便随时回顾。
好了,这一章的内容就到这里。记住,库和工艺角是STA的“弹药”,弹药不对,仗就没法打。下次你拿到一个新工艺的库,不妨先打开看看它的表格维度、工艺角定义,心里有个底。嗯,咱们下回见。