2. 时序库与工艺角:Liberty库结构、PVT工艺角、OCV与AOCV、时序模型类型
各位好,咱们今天聊聊时序库和工艺角。说实话,这玩意儿是STA的根基。你时序分析做得再花哨,库文件搞错了,一切都是白搭。我见过不少新手,上来就急着跑PT,结果库没选对,分析出来的数据根本不能用。
2.1 Liberty库结构:芯片的“说明书”
Liberty库,后缀通常是.lib,说白了就是芯片单元的“身份证”加“说明书”。它告诉工具:每个标准单元长什么样,延迟多少,功耗多少。
我个人习惯,拿到一个新工艺的库,第一件事不是直接跑流程,而是先打开.lib文件扫一眼。看看里面定义了哪些PVT条件,哪些时序模型。
一个典型的Liberty库结构长这样:
library (my_library) {
delay_model : "table_lookup";
in_place_swap_mode : "match_footprint";
...
cell (INV_X1) {
area : 0.5;
pin (A) {
direction : input;
capacitance : 0.002;
}
pin (Y) {
direction : output;
function : "(!A)";
timing () {
related_pin : "A";
timing_sense : "negative_unate";
cell_rise (delay_template_7x7) {
index_1 ("0.01, 0.02, 0.05, 0.1, 0.2, 0.5, 1.0");
index_2 ("0.005, 0.01, 0.02, 0.05, 0.1, 0.2, 0.5");
values ( \
"0.05, 0.08, 0.12, 0.18, 0.25, 0.35, 0.50", \
...
);
}
}
}
}
}
你看,这里定义了输入引脚A的电容,输出引脚Y的上升时间查找表。index_1是输入转换时间,index_2是输出负载电容。工具就是靠查这个二维表,再插值,算出延迟的。
2.2 PVT工艺角:芯片的“生存环境”
芯片不是活在真空中。温度、电压、工艺偏差,都会影响时序。PVT就是Process(工艺)、Voltage(电压)、Temperature(温度)的缩写。
为什么要有工艺角?说白了,就是芯片制造有随机性。同一片wafer上,不同die的速度都可能不一样。你想想看,如果只用一个“典型”条件去分析,那流片回来大概率要翻车。
常见的PVT组合有:
| 工艺角名称 | 工艺 | 电压 | 温度 | 用途 |
|---|---|---|---|---|
| WC (Worst Case) | Slow | Low (0.9V) | High (125°C) | 检查建立时间 |
| BC (Best Case) | Fast | High (1.1V) | Low (-40°C) | 检查保持时间 |
| WCL (Worst Case Low Temp) | Slow | Low | Low | 特殊场景 |
| ML (Typical) | Typical | Nominal | 25°C | 功耗估算 |
嗯,这里要注意:WC和BC不是简单的“慢”和“快”。温度对延迟的影响是非线性的。我记得在某个28nm项目中,低温下某些单元的延迟反而比高温下更大,这就是所谓的“逆温效应”。
2.3 OCV与AOCV:从“一刀切”到“精细化管理”
OCV,全称On-Chip Variation,片上偏差。为什么需要它?因为即使在同一颗芯片上,不同位置的晶体管速度也不一样。你想想看,芯片那么大,从左上角到右下角,电压降、温度梯度、工艺梯度,都会导致延迟差异。
传统的OCV做法很简单粗暴:给所有路径加一个统一的derating因子。比如setup分析时,数据路径乘1.1,时钟路径乘0.9。这就像给所有人发同一尺码的鞋,肯定有人不合脚。
AOCV(Advanced OCV)就聪明多了。它考虑了路径长度对偏差的影响。逻辑级数越多,偏差的随机性会被平均掉,所以derating因子可以小一些。
AOCV的查表结构:
ocv_table (setup_rise) {
index_1 ("1, 2, 3, 5, 10, 20");
index_2 ("0.1, 0.2, 0.5, 1.0, 2.0");
values ( \
"1.12, 1.10, 1.08, 1.05, 1.03, 1.02", \
...
);
}
index_1是逻辑级数,index_2是距离。你看,级数越多,derating值越接近1.0。这就是AOCV的核心思想:根据实际情况动态调整余量。
2.4 时序模型类型:非线性、ECSM与CCS
时序模型,就是描述单元延迟和输出波形的方法。目前主流的有三种:NLDM、ECSM、CCS。
NLDM(Non-Linear Delay Model):最传统的模型。它用查找表存延迟和输出转换时间。优点是简单,缺点是精度不够。对于先进工艺,NLDM的误差可能达到10%以上。
ECSM(Effective Current Source Model):Cadence主推的模型。它用电流源代替电压源,能更准确地模拟输出波形。特别是对于长互连线,ECSM的精度明显优于NLDM。
CCS(Composite Current Source):Synopsys主推的模型。和ECSM类似,也是基于电流源的。CCS不仅提供时序信息,还提供噪声和功耗信息。
三种模型的对比:
| 特性 | NLDM | ECSM | CCS |
|---|---|---|---|
| 精度 | 低 | 高 | 高 |
| 库文件大小 | 小 | 大 | 大 |
| 仿真速度 | 快 | 中等 | 中等 |
| 支持工具 | 所有 | Cadence | Synopsys |
| 噪声建模 | 不支持 | 支持 | 支持 |
我个人建议:对于28nm及以上工艺,NLDM够用了。但对于16nm以下,一定要用CCS或ECSM。我在一个7nm项目中,用NLDM分析的结果和实际硅片差了15%,换成CCS后误差降到了3%以内。
好了,关于时序库和工艺角,今天就聊这么多。记住一句话:库是STA的基石,工艺角是分析的边界,OCV是精度的保障,模型是仿真的灵魂。下一章咱们聊聊具体的时序约束怎么写。