2. 工艺库与数据准备
数字后端实现的第一步不是写脚本,而是把“工艺数据”准备正确。后端工具本质上是在一套由晶圆厂提供的抽象模型上做布局、布线和时序计算:工具需要知道有哪些标准单元可用、它们长什么样、占多大面积、引脚在哪、延迟多少、金属层怎么走线、哪些图形违反制造规则。这些信息分散在若干类文件中,格式、用途和加载时机各不相同。本节按“数据类别—文件格式—在Cadence流程中的加载方式”三条线索展开,帮助读者建立一张清晰的工艺数据地图。
一、工艺数据的分类与职责
可以把后端所需的工艺数据分为四组。第一组是物理抽象:LEF(Library Exchange Format)描述单元的物理轮廓、引脚位置、金属层与通孔定义,以及布线规则。第二组是时序与功耗抽象:Liberty(.lib)描述单元的逻辑功能时序、建立保持约束、内部功耗和引脚电容。第三组是寄生参数与提取规则:ITF、QRC 技术文件、captable 等描述金属/介质厚度、电阻率、介电常数,用于把版图几何转换成 RC 网络。第四组是物理验证规则:DRC 规则文件、LVS 规则文件、天线规则,用于检查版图是否可制造、是否与网表一致。
这四组数据缺一不可,且必须来自同一工艺节点、同一版本。混用不同版本的 LEF 与 Liberty 是后端最常见的低级错误之一,往往表现为时序与物理信息不一致,例如 Liberty 中某单元有 4 个引脚,而 LEF 中只有 3 个,工具在布局阶段就会报引脚不匹配。
二、标准单元库、宏单元库与 IO 库
标准单元库是后端使用量最大的库,包含反相器、与非门、触发器、缓冲器、多路选择器等基本逻辑单元,通常按驱动能力和阈值电压分为多个版本,例如同一功能的单元可能有 X1、X2、X4 等驱动强度,以及 LVT、SVT、HVT 等阈值类型。综合与后端在满足时序的前提下,会优先选择低功耗、小面积的单元。
宏单元库指 SRAM、寄存器堆、PLL、模拟 IP 等大块硬核。它们通常以“黑盒”形式提供:LEF 给出外形尺寸、引脚位置和布线阻挡层,Liberty 给出时序模型,GDS 给出实际版图。宏单元在布局阶段需要被优先摆放,因为它们位置固定、面积大、引脚方向受限,会显著影响后续布线和时序。
IO 库包含输入输出焊盘、电源地焊盘、ESD 保护单元等。IO 单元通常有固定的物理顺序和电源环要求,在芯片顶层规划阶段就要确定 IO ring 的排布。IO 库同样需要 LEF 与 Liberty,部分 IO 还需要额外的 ESD 规则文件。
三、LEF 与 Liberty 的格式要点
LEF 分为技术 LEF 和单元 LEF。技术 LEF 定义金属层、通孔、布线间距、最小宽度等工艺规则;单元 LEF 定义每个单元的 MACRO,包括 SIZE、PIN、PORT、LAYER 等。一个典型的单元 LEF 片段如下:
MACRO INVX1
CLASS CORE ;
ORIGIN 0 0 ;
SIZE 1.2 BY 2.4 ;
PIN A
DIRECTION INPUT ;
PORT
LAYER M1 ;
RECT 0.2 0.6 0.4 1.8 ;
END
END A
PIN Y
DIRECTION OUTPUT ;
PORT
LAYER M1 ;
RECT 0.8 0.6 1.0 1.8 ;
END
END Y
END INVX1
Liberty 则用 group 描述单元时序。以触发器为例,需要定义 clock 引脚到 Q 的传播延迟、D 到 clock 的建立保持时间、以及内部功耗。Liberty 中的查找表(lookup table)以输入转换时间和输出负载为索引,工具在时序分析时通过二维插值得到实际延迟。因此 Liberty 的准确性直接决定时序签核的可信度。
四、寄生参数规则与物理验证规则
寄生参数规则描述互连线的电阻电容计算方式。常见形式包括 ITF(Interconnect Technology File)、QRC 技术文件和 captable。ITF 给出每层金属的厚度、宽度、间距、电阻率以及层间介质的介电常数;captable 则以表格形式给出单位长度电容。提取工具根据这些规则,把版图中的金属线段转换成 RC 网络,再反标到时序分析中。
物理验证规则包括 DRC、LVS 和天线检查。DRC 规则文件用工具专用语法描述最小间距、最小面积、密度、天线比等约束;LVS 规则文件描述如何从版图提取器件和连接关系,并与网表比对。这些规则文件通常由晶圆厂提供,版本必须与工艺节点严格对应。
五、在 Cadence 流程中的加载方式
在 Innovus 中,工艺数据通过命令逐类加载。典型顺序是:先读入技术 LEF 和单元 LEF,再读入 Liberty,然后设置寄生参数提取规则,最后在验证阶段调用 DRC/LVS 规则。示例命令如下:
# 读入 LEF
read_lef tech.lef
read_lef stdcell.lef
read_lef macro.lef
read_lef io.lef
# 读入 Liberty
read_lib stdcell_tt.lib
read_lib macro_tt.lib
# 设置寄生参数规则
set_qrc_tech qrcTechFile
# 物理验证阶段
verify_drc -rules drc.rul
verify_lvs -rules lvs.rul
在 Genus 综合阶段,主要加载 Liberty 和 LEF(用于物理感知综合)。在 Virtuoso 中,则通过库管理加载 GDS、LEF 和规则文件。不同工具对文件版本和路径的敏感度不同,建议在项目初期建立统一的工艺数据目录,并在脚本中用变量集中管理路径,避免版本漂移。
六、数据准备的检查清单
在正式启动后端流程前,建议逐项确认以下内容:LEF 中是否包含所有标准单元、宏单元和 IO 单元;Liberty 是否覆盖所有工作条件(TT、FF、SS)和所有阈值类型;QRC 技术文件是否与工艺节点匹配;DRC/LVS 规则文件版本是否与版图数据一致;宏单元的 GDS 是否已准备好用于最终流片。任何一项缺失或版本错误,都可能在流程后期造成返工。
tech/、lib/、lef/、qrc/、drc/ 五个子目录,并在脚本中用变量引用,避免硬编码路径导致版本混乱。工艺数据准备看似繁琐,但它决定了后续所有步骤的可信度。把 LEF、Liberty、QRC 和验证规则四类数据理解清楚、加载正确,后端流程才能在一个稳定、一致的基础上推进。