3、库的核心指标:驱动强度、扇出能力、延迟模型(NLDM/CCS)、功耗模型(动态/静态)、面积与形状

好,咱们接着聊标准单元库。前面说了库的构成,那怎么判断一个库好不好用?说白了,就看几个核心指标。我这些年选型踩过的坑,十有八九都跟这些指标没吃透有关。

3.1 驱动强度——不是越大越好

驱动强度,英文叫 Drive Strength。你想想看,一个反相器,能驱动多大的负载?这就是驱动强度。

库里面通常会给同一个逻辑功能准备多个驱动版本。比如反相器,可能有 INV_X1、INV_X2、INV_X4、INV_X8。这个 X1、X2 就是驱动强度的倍数。

关键认知:驱动强度越大,管子尺寸越大,延迟越小,但功耗和面积也越大。这不是免费的午餐。

我个人习惯,在时序紧张的路径上用大驱动,在非关键路径上用小驱动。千万别全片用 X8,那面积和功耗直接爆炸。

选型建议:一个成熟的库,每个逻辑单元至少提供 4-6 种驱动强度。少于 4 种,综合工具优化空间就太小了。

3.2 扇出能力——别被数字骗了

扇出能力,就是输出能带多少个负载。库文档里通常会写 max_fanout。

但我要说句实话:这个数字看看就好。我在项目中遇到过,库标称 max_fanout=20,结果扇出到 12 个单元时,时序已经烂得没法看了。

为什么会这样?因为扇出能力跟线负载、工作频率都有关。库给的只是理想条件下的值。

避坑指南:我曾经在一个 28nm 项目里,完全相信库的 max_fanout 值,结果后仿时序收敛花了三周。后来学乖了,实际设计时扇出控制在 8-10 以内,留足余量。

3.3 延迟模型——NLDM vs CCS

延迟模型,这是库的核心中的核心。目前主流就两种:NLDM 和 CCS。

3.4 NLDM(非线性延迟模型)

NLDM 是老大哥,用了二十多年了。它用查找表的方式,把延迟描述成输入转换时间和输出负载电容的函数。

// NLDM 查找表示例(简化版)
// 输入转换时间: 0.01, 0.05, 0.10, 0.50 (ns)
// 输出负载电容: 0.01, 0.05, 0.10, 0.50 (pF)

// 延迟表 (ns)
        0.01    0.05    0.10    0.50
0.01    0.012   0.018   0.025   0.080
0.05    0.015   0.022   0.030   0.095
0.10    0.020   0.028   0.038   0.120
0.50    0.050   0.065   0.085   0.250

NLDM 的优点是简单、计算快。缺点呢?在先进工艺下,波形形状对延迟影响很大,NLDM 只用一个斜率参数,精度不够了。

3.5 CCS(复合电流源模型)

CCS 是后来者,现在 28nm 以下基本是标配。它不只用查找表,还描述了输出波形的完整形状。

我记得第一次用 CCS 库时,STA 工具跑得明显慢了,但时序精度确实高。尤其是处理那些长互连线、高扇出的路径,CCS 比 NLDM 准得多。

我的建议:28nm 及以上,NLDM 够用。16nm 及以下,必须上 CCS。中间节点(比如 22nm),看你的设计复杂度,保守点就用 CCS。

3.6 功耗模型——动态与静态

功耗现在是大问题。库的功耗模型分两块:动态功耗和静态功耗。

3.7 动态功耗

动态功耗 = 开关功耗 + 内部功耗。开关功耗好理解,就是充放电。内部功耗是管子瞬间导通时的短路电流造成的。

库会提供每个单元的功耗查找表,跟延迟表类似,也是输入斜率和输出负载的函数。

// 内部功耗查找表 (nJ)
        0.01    0.05    0.10    0.50
0.01    0.005   0.008   0.012   0.030
0.05    0.007   0.010   0.015   0.035
0.10    0.009   0.013   0.018   0.042
0.50    0.020   0.028   0.038   0.080

3.8 静态功耗

静态功耗就是漏电。先进工艺下,漏电占比越来越高。一个 7nm 芯片,静态功耗可能占到 30%-50%。

库会给出每个单元的漏电值,通常分几种状态:输入固定为 0、输入固定为 1、输入翻转等。不同状态漏电不一样。

实用技巧:做低功耗设计时,我习惯先看静态功耗。把那些不用的大驱动单元换成小驱动,漏电能降不少。我曾经在一个项目里,光换驱动强度就省了 15% 的静态功耗。

3.9 面积与形状

面积,这个好理解。但我要强调一点:面积不是越小越好。

为什么?因为标准单元有形状要求。库里的单元高度是固定的(比如 9 track、12 track),宽度可变。你选太小的单元,布线资源就紧张了。

工艺节点 典型单元高度 特点
28nm 9 track 面积小,性能一般
16nm 7.5 track 平衡型,主流选择
7nm 6 track 面积极致,但布线难

我个人习惯,选库时先看 track 数。track 数越小,单元越矮,但布线层数要求越高。你想想看,一个 6 track 的库,如果后端只有 8 层金属,那布线资源会非常紧张。

重要提醒:面积指标要看「等效门数」,别只看单个单元面积。不同库的驱动能力定义可能不同,直接比面积没意义。

嗯,这些核心指标,说白了就是选库时要权衡的东西。没有完美的库,只有适合你项目的库。驱动强度、扇出、延迟模型、功耗、面积,这五个维度,每个都要看,但侧重点可以不同。

比如你做高性能 CPU,延迟模型和驱动强度就是重点。你做 IoT 芯片,功耗模型就是命根子。这个取舍,就是后端工程师的功力所在了。