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 选型建议:什么时候用哪个?

这个问题,我经常被问到。我的建议很简单——

选型原则:

  1. 28nm及以上:NLDM完全够用。库文件小,仿真快,精度也还行。
  2. 16nm~7nm:建议用CCS。尤其是做串扰分析和功耗分析时,CCS的波形精度太重要了。
  3. 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也够用。

下一章,咱们聊聊功耗分析中的动态功耗和静态功耗。到时候我会分享一个实际项目的功耗优化案例,很有意思。