第四章:时序库与工艺角——Liberty库结构,PVT工艺角,OCV与AOCV

各位好,我是老李。今天咱们聊聊时序库和工艺角。说实话,这章内容有点“硬”,但它是后端时序收敛的根基。你想想看,没有准确的库,你做的STA就是空中楼阁。我当年刚入行时,就因为搞混了WC和BC的库,导致一条关键路径setup违例没发现,差点让芯片翻车。嗯,从那以后,我对库文件就格外上心。

4.1 Liberty库结构:芯片的“说明书”

Liberty库,后缀通常是.lib,说白了就是标准单元的行为描述文件。它告诉EDA工具:每个门延迟多少、功耗多少、输入电容多大。我习惯把.lib看作芯片的“身份证”。

一个典型的.lib文件,结构大致如下:

library (my_library) {
  delay_model : "table_lookup";
  in_place_swap_mode : "match_footprint";
  /* 定义工艺参数 */
  operating_conditions (typical) {
    process : 1.0;
    temperature : 25.0;
    voltage : 1.2;
  }
  /* 定义每个单元 */
  cell (AND2X1) {
    area : 10.0;
    pin (A) {
      direction : input;
      capacitance : 0.005;
    }
    pin (Y) {
      direction : output;
      function : "A & B";
      timing () {
        related_pin : "A";
        timing_sense : positive_unate;
        cell_rise (delay_template_7x7) {
          index_1 ("0.1, 0.3, 0.5, 0.7, 0.9, 1.1, 1.3");
          index_2 ("0.01, 0.05, 0.1, 0.2, 0.4, 0.8, 1.6");
          values ( \
            "0.12, 0.15, 0.18, 0.22, 0.28, 0.35, 0.45", \
            "0.14, 0.17, 0.20, 0.25, 0.31, 0.39, 0.50", \
            ...
          );
        }
      }
    }
  }
}

这里有几个关键点:

  • delay_model:查表模型(table_lookup)是最常见的。工具根据输入转换时间(slew)和输出负载(load)查表得到延迟。
  • operating_conditions:定义了工艺、温度、电压的“标称值”。注意,这只是库的默认条件,实际STA会覆盖它。
  • cell:每个标准单元都有独立的描述,包括引脚方向、电容、功能、时序弧。
  • timing表格:7x7的二维表,行是输入slew,列是输出load。值就是延迟。我见过新手直接拿表格里的最大值去算,这是不对的——工具会插值。
我的小技巧: 拿到一个新工艺的.lib,我第一件事就是grep "cell_rise"看看表格维度。7x7是主流,如果是5x5,说明库比较老,精度可能不够。另外,记得检查库的版本号,不同版本的库可能不兼容。

4.2 PVT工艺角:WC, BC, WCL, ML

PVT就是Process(工艺)、Voltage(电压)、Temperature(温度)。芯片在不同条件下,性能差异巨大。你想想看,夏天手机发烫时,芯片速度会变慢;冬天在北方,芯片速度会变快。所以我们要覆盖所有极端情况。

常见的工艺角有四个:

工艺角 全称 工艺 电压 温度 速度 主要检查
WC Worst Case 慢(Slow) 低(Vmin) 高(125°C) 最慢 Setup
BC Best Case 快(Fast) 高(Vmax) 低(-40°C) 最快 Hold
WCL Worst Case Low 慢(Slow) 低(Vmin) 低(-40°C) 慢(但低温补偿) Setup(低温)
ML Maximum Leakage 快(Fast) 高(Vmax) 高(125°C) 快(但漏电大) 功耗

这里有个坑:WC和BC是“最慢”和“最快”的极端。但WCL呢?它也是慢工艺,但温度低。为什么低温下芯片反而慢?因为载流子迁移率在低温下会下降,但阈值电压也会下降,两者竞争。实际上,对于某些先进工艺,低温反而可能变慢。所以WCL是专门用来检查低温下的setup的。

我曾经踩过的坑: 有一次我只跑了WC和BC,结果芯片在低温下setup违例了。后来才发现,那个工艺的WCL比WC还要慢5%。从那以后,我每个项目都会把WCL和ML也跑一遍,宁可多花点时间,也不留隐患。

4.3 OCV与AOCV:从“一刀切”到“精细化管理”

OCV(On-Chip Variation),片上偏差。说白了,就是同一颗芯片上,不同位置的晶体管性能不一样。为什么?因为光刻、掺杂、温度梯度等因素。你想想看,芯片中心区域和边缘区域,工艺偏差可能差10%以上。

传统的STA做法是:所有路径都用同一个库(比如WC)。但这是“一刀切”,太悲观了。因为一条路径上的所有门不可能同时都最慢。所以OCV引入了derating因子:

# 传统OCV derating示例
set_timing_derate -early 0.9   # 快路径(launch clock)加速10%
set_timing_derate -late 1.1    # 慢路径(capture clock)减速10%

这样,launch clock路径用0.9倍延迟(更快),capture clock路径用1.1倍延迟(更慢),从而模拟出最坏情况。但问题来了:这个10%的derating是固定的,不管路径长短。对于短路径,10%可能太大;对于长路径,10%可能太小。

于是,AOCV(Advanced OCV)应运而生。AOCV的核心思想是:路径越长,偏差越小。因为长路径上,随机偏差会相互平均。AOCV通过查表来动态计算derating因子:

# AOCV derating表(示例)
# 路径深度(级数)  early_derate  late_derate
# 1                 0.85          1.15
# 2                 0.88          1.12
# 5                 0.92          1.08
# 10                0.95          1.05
# 20                0.97          1.03

你看,当路径只有1级门时,derating是15%;当路径有20级门时,derating只有3%。这更符合实际物理规律。

我的建议: 对于28nm及以上的工艺,传统OCV基本够用。但对于16nm及以下,一定要用AOCV。我做过一个7nm的项目,用传统OCV跑出来setup违例有200ps,换成AOCV后违例降到了50ps,省了大量ECO时间。说白了,AOCV让你不再“过度悲观”。

4.4 知识体系总览

下面这张图,是我自己整理的本章知识结构。你可以把它当作一个“地图”,方便随时回顾。

时序库与工艺角知识体系 Liberty库结构 PVT工艺角 OCV与AOCV delay_model cell / pin / timing WC (最慢) BC (最快) WCL / ML 固定derating 深度查表 时序收敛应用:Setup检查 → Hold检查 → 功耗分析 核心要点 1. Liberty库是STA的基础,理解表格结构才能正确分析 2. PVT工艺角覆盖极端条件,WC/BC/WCL/ML缺一不可 3. AOCV比OCV更精确,先进工艺必须使用

好了,这一章的内容就到这里。记住,库和工艺角是STA的“弹药”,弹药不对,仗就没法打。下次你拿到一个新工艺的库,不妨先打开看看它的表格维度、工艺角定义,心里有个底。嗯,咱们下回见。

专注资料整理