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是输出负载电容。工具就是靠查这个二维表,再插值,算出延迟的。

我的小技巧: 查库文件时,重点关注两个地方:一是PVT corner的定义,二是时序模型类型。这两个决定了你分析的准确性。

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项目中,低温下某些单元的延迟反而比高温下更大,这就是所谓的“逆温效应”。

避坑指南: 我曾经在一个项目中只跑了WC和BC两个角,结果芯片在某个中间温度下时序违例了。后来我养成了习惯:至少跑5个角(SS, FF, TT, SF, FS),特别是对于先进工艺。

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的核心思想:根据实际情况动态调整余量。

核心观点: OCV是“一刀切”,AOCV是“看人下菜碟”。对于先进工艺(7nm以下),我强烈建议用AOCV或POCV(参数化OCV),否则要么过度悲观导致面积浪费,要么过度乐观导致芯片失效。

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%以内。

我的经验: 如果你同时有CCS和NLDM库,建议用CCS做signoff分析,用NLDM做前期快速迭代。这样既保证了精度,又提高了效率。

好了,关于时序库和工艺角,今天就聊这么多。记住一句话:库是STA的基石,工艺角是分析的边界,OCV是精度的保障,模型是仿真的灵魂。下一章咱们聊聊具体的时序约束怎么写。