4. CCS与NLDM模型:从“黑盒”到“灰盒”的演进
做数字IC设计的朋友,对时序库肯定不陌生。但你真的了解库里的模型吗?
今天咱们聊聊两个核心模型:NLDM和CCS。我刚开始做设计那会儿,用的全是NLDM。后来工艺到了28nm以下,发现这玩意儿越来越不准了。嗯,这就是我们今天要讲的重点。
4.1 NLDM模型:经典但过时的“查表法”
NLDM,全称Non-Linear Delay Model。说白了,就是查表。
它把输入转换时间(slew)和输出负载电容(load)作为两个维度,建一个二维查找表。你要算延迟?去表里插值就行了。
NLDM的核心假设:
- 输入波形是线性斜坡(Linear Ramp)
- 输出波形也是线性斜坡
- 延迟只与输入slew和输出load有关
我在一个40nm的项目里用过NLDM。当时觉得挺准的,毕竟工艺没那么激进。但到了16nm,问题就来了——
NLDM的致命缺陷:
- 波形失真:实际波形根本不是线性斜坡。尤其是FinFET工艺,驱动能力变化很大。
- Miller效应忽略:输入和输出的耦合电容会影响延迟,NLDM完全不管。
- 噪声分析不准:NLDM只能算延迟,算不了波形形状。做串扰分析时,误差能到30%以上。
避坑指南:我曾经在一个7nm项目中,用NLDM做STA,结果后仿发现时序差了20%。查了半天,发现是NLDM对高负载下的波形预测严重偏乐观。从那以后,7nm以下我坚决不用NLDM。
4.2 CCS模型:更真实的“电流源”视角
CCS,Composite Current Source。名字听着复杂,其实思路很简单——它不再假设输出是线性斜坡,而是直接建模输出电流。
你想想看,一个标准单元的输出,本质上就是一个电流源在给负载电容充电。CCS就是把这个电流源的行为建模出来。
CCS的核心思想:
- 把输出端建模成一个受控电流源
- 电流值随输入电压和输出电压变化
- 能精确预测输出波形的形状
我个人习惯用CCS做7nm以下的时序分析。为什么?因为它能捕捉到FinFET的“非线性驱动特性”。
CCS vs NLDM 关键差异:
| 对比项 | NLDM | CCS |
|---|---|---|
| 输出波形 | 线性斜坡假设 | 实际电流驱动 |
| 延迟精度 | ±10%~20%(先进工艺) | ±3%~5% |
| 噪声分析 | 不支持 | 支持(波形形状) |
| 库文件大小 | 小(~MB) | 大(~GB) |
| 仿真速度 | 快 | 稍慢(但可接受) |
4.3 选型建议:什么时候用哪个?
这个问题,我经常被问到。我的建议很简单——
选型原则:
- 28nm及以上:NLDM完全够用。库文件小,仿真快,精度也还行。
- 16nm~7nm:建议用CCS。尤其是做串扰分析和功耗分析时,CCS的波形精度太重要了。
- 7nm以下:必须用CCS。NLDM的误差会让你流片回来哭的。
我的小技巧:如果你在做混合工艺设计(比如28nm IO + 7nm core),建议IO用NLDM,core用CCS。这样既保证了精度,又控制了库文件大小。我在一个AI芯片项目中就这么干的,效果很好。
另外,别忘了功耗分析。CCS还有一个变种叫CCS Power,专门用来建模动态功耗和漏电。NLDM的功耗模型就粗糙多了,只能给个平均电流。
功耗分析对比:
- NLDM:基于平均电流,误差±15%
- CCS Power:基于波形,误差±5%
嗯,这里要注意。如果你做的是低功耗设计,比如IoT芯片,CCS Power几乎是必须的。我见过一个项目,用NLDM算功耗,结果实际芯片功耗比仿真高了20%,差点没通过测试。
4.4 实际使用中的注意事项
最后,分享几个我在项目中踩过的坑——
- 库版本一致性:CCS库和NLDM库不能混用。我见过有人把两种库混在一起,结果STA工具直接报错。
- 仿真器支持:不是所有仿真器都支持CCS。比如老版本的HSPICE就不行。用之前先确认工具版本。
- 文件大小:CCS库文件很大。一个7nm的CCS库,解压后可能超过10GB。做好存储规划。
重要提醒:我曾经在一个项目中,因为CCS库文件太大,导致STA跑了一周还没结束。后来发现是工具的内存分配不够。建议用CCS时,至少给工具分配32GB内存。
好了,关于CCS和NLDM,今天就聊这么多。说白了,选模型就是选精度和效率的平衡点。你工艺越先进,就越需要CCS。但如果你还在做成熟工艺,NLDM也够用。
下一章,咱们聊聊功耗分析中的动态功耗和静态功耗。到时候我会分享一个实际项目的功耗优化案例,很有意思。