第三章:功耗模型与库文件——Liberty库中的功耗模型(CCS、NLDM)与功耗查找表解读
各位同学,今天我们来聊聊功耗分析里最基础、也最容易被忽视的一环——库文件中的功耗模型。说实话,我刚入行那会儿,总觉得库文件是工艺厂给的,拿来用就行了,管它里面是什么。直到有一次,我用错了功耗模型,导致芯片的功耗估算差了30%以上,被项目经理狠狠批了一顿。从那以后,我养成了一个习惯:拿到新库,先打开 Liberty 文件,看看功耗模型是怎么定义的。
3.1 功耗模型的两大流派:NLDM 与 CCS
在 Liberty 库中,功耗模型主要分两种:NLDM(Non-Linear Delay Model)和 CCS(Composite Current Source)。你可能会问,这两者有什么区别?说白了,NLDM 是“老前辈”,CCS 是“新贵”。
3.1.1 NLDM 功耗模型
NLDM 模型用查找表(Look-up Table)来描述功耗。它把输入转换时间(input slew)和输出负载电容(output load)作为两个维度,查表得到功耗值。我见过很多老项目还在用 NLDM,因为它简单、成熟,工具支持也好。
来看一个典型的 NLDM 功耗表定义:
cell (AND2X1) {
power_lut_template : power_template_3x3;
cell_leakage_power : 1.2e-9;
related_pin : "A";
related_pin : "B";
internal_power () {
when : "A & !B";
rise_power (power_template_3x3) {
index_1 ("0.1, 0.5, 1.0"); /* input slew */
index_2 ("0.05, 0.2, 0.5"); /* output load */
values ( \
"0.012, 0.018, 0.025", \
"0.015, 0.022, 0.031", \
"0.019, 0.027, 0.038" \
);
}
fall_power (power_template_3x3) {
/* 类似定义 */
}
}
}
这里要注意,NLDM 的功耗值单位通常是 pJ(皮焦耳)。我习惯在分析前先确认一下单位,不然容易闹笑话。
3.1.2 CCS 功耗模型
CCS 模型就高级一些了。它不再用简单的查找表,而是用电流波形来描述功耗。你想想看,NLDM 只能给出一个平均功耗值,但 CCS 能告诉你每个时刻的电流变化。这对于分析动态功耗、特别是 IR Drop 非常有用。
CCS 功耗模型在 Liberty 里长这样:
cell (AND2X1) {
ccs_power () {
related_pin : "A";
when : "A & !B";
power_results () {
rise_power () {
vector ("VDD", "VSS");
reference_time : 0.5;
/* 电流波形数据 */
waveform ("0.0, 0.1, 0.3, 0.5, 0.7, 0.9, 1.0");
waveform ("0.001, 0.005, 0.012, 0.008, 0.003, 0.001, 0.0");
}
}
}
}
我个人更喜欢 CCS 模型,因为它更精确。但代价是库文件体积会大很多,仿真时间也会变长。所以,在项目早期做快速评估时,我有时还是会用 NLDM。
3.2 功耗查找表(Power Look-up Table)的解读
不管是 NLDM 还是 CCS,最终都要落到查找表上。功耗查找表其实就是一张二维表格,横轴是输入转换时间,纵轴是输出负载电容,表格里的数值就是功耗值。
我给大家画一张图,帮助理解:
这张图展示了一个 3x3 的功耗查找表。实际项目中,查找表可能是 7x7 甚至更大。你想想看,当输入转换时间是 0.3 ns、输出负载是 0.1 pF 时,工具会怎么算功耗?它会用周围的四个点做插值。
3.3 如何在实际项目中选择合适的功耗模型
说了这么多理论,我们来点实际的。在项目中,到底该选 NLDM 还是 CCS?我给大家一个参考:
| 对比项 | NLDM | CCS |
|---|---|---|
| 精度 | 中等(±10% 左右) | 高(±3% 以内) |
| 库文件大小 | 小 | 大(通常大 3-5 倍) |
| 仿真速度 | 快 | 慢(约慢 2-3 倍) |
| 适用场景 | 早期评估、快速迭代 | 签核分析、IR Drop 分析 |
| 工具支持 | 所有工具都支持 | 主流工具支持,但需额外配置 |
我个人习惯是:在项目的前期 floorplan 和综合阶段,用 NLDM 快速跑几轮,看看功耗的大致范围。到了后端布局布线、特别是做功耗签核时,一定切换到 CCS。为什么呢?因为 CCS 能捕捉到电流的峰值,这对 IR Drop 分析至关重要。
3.4 功耗模型中的“隐藏陷阱”
最后,我想分享几个我在项目中踩过的坑:
- 漏电流模型不一致: 有些库文件里,NLDM 和 CCS 的漏电流定义方式不同。NLDM 通常用一个固定的 cell_leakage_power,而 CCS 可能用温度相关的查找表。如果不注意,漏电流分析结果会差很多。
- 功耗查找表的边界值: 当输入转换时间或输出负载超出查找表的范围时,工具会做外推。外推的精度很差,我建议在约束文件中加一个检查,确保所有 pin 的 slew 和 load 都在查找表范围内。
- 多电压域下的功耗模型: 现在的芯片都有多个电压域,每个电压域可能用不同的库。我曾经遇到过一个案例,两个电压域的库文件版本不一致,一个用 NLDM,一个用 CCS,结果功耗分析工具直接报错。
好了,关于功耗模型和库文件,今天就讲到这里。记住,库文件是功耗分析的基石,花时间读懂它,值得。下一章我们会聊聊功耗分析工具的使用,到时候我会带大家实际操作一下。
可可精品资料库