2. 工程数据准备与库文件配置
在先进工艺节点下,数字后端实现的起点并不是打开 Innovus 或 Genus 直接跑命令,而是把一整套“工程数据”准备正确。这一节要解决的核心问题是:Liberty、LEF、NDM、技术文件、QRC 技术文件分别是什么、各自负责哪一层信息、它们之间如何衔接,以及版本不匹配或缺失时如何定位。理解这些文件的职责边界,是后续所有布局布线、时序分析和寄生提取能够收敛的前提。
五类文件的分工
可以把整个后端数据体系理解为“逻辑时序—物理几何—工艺规则—寄生参数”四条信息线,它们分别由不同文件承载:
- Liberty(.lib):描述标准单元、宏单元、IO 的时序、功耗和功能约束。它给出每个 cell 的 delay table、setup/hold、transition、capacitance 等,是时序分析(STA)的输入。先进工艺下通常区分 TT/SS/FF 等多个 PVT corner,并可能提供 CCS 或 NLDM 模型。
- LEF(.lef):描述物理抽象,包括 cell 的 pin 位置、metal 层、via、blockage、site、row 定义,以及工艺的 routing layer 规则(pitch、width、spacing)。它不关心逻辑功能,只关心“能不能摆、能不能连”。
- NDM:Cadence 的整合库格式,把 Liberty 的时序信息与 LEF 的物理信息合并成一个统一数据库,供 Innovus/Genus 直接读取。一个 NDM 通常对应一个 corner 或一组 corner,是实际 flow 中最常被引用的库对象。
- 技术文件(tech file / .tf / .tlef):定义金属层堆叠、通孔、单位、grid、track、routing 方向等全局工艺信息,是 LEF 中 layer 定义的来源,也是 P&R 工具建立坐标系和布线网格的基础。
- QRC 技术文件:由 QRC 或 Quantus 使用,描述各金属层、介质层的厚度、介电常数、电阻率等,用于寄生参数提取(RC extraction)。它决定 post-layout 时序是否可信。
这五类文件不是并列关系,而是有明确的依赖链:技术文件定义工艺层,LEF 引用这些层描述 cell 物理,Liberty 提供时序,NDM 把 Liberty 与 LEF 合并,QRC 技术文件则在提取阶段独立使用。任何一环版本错位,都会在后续步骤中以“看起来无关”的报错形式暴露出来。
先进工艺库的版本匹配
先进工艺(如 7nm、5nm)的库通常以 release 为单位发布,一个 release 内包含特定版本的 Liberty、LEF、tech file 和 QRC 文件。版本匹配的核心原则是:同一设计使用的所有库文件必须来自同一 release,且 corner 定义一致。常见的不匹配情形包括:
- Liberty 是 v1.2,LEF 是 v1.3,导致 cell 的 pin 名称或位置不一致;
- tech file 的 metal stack 与 LEF 中 layer 定义层数不同,布线时出现“layer not found”;
- QRC 技术文件对应的工艺版本与当前 LEF 不同,提取出的 RC 偏大或偏小,post-layout 时序与 pre-layout 差异异常。
实际工程中,建议在项目目录下建立统一的 lib/ 结构,并在读入前用脚本核对版本号。例如在 Innovus 中读入 NDM 后,可用以下命令检查库是否加载成功:
# 读入 NDM 库
read_ndm -library ./lib/ndm/slow.ndm
# 查看已加载库
list_libs
# 检查 cell 是否可识别
get_db cell -lib slow -name NAND2X1
# 检查 layer 是否完整
get_db layer -tech
如果 list_libs 中缺少预期库,或 get_db cell 返回空,说明 NDM 未正确生成或路径错误。此时应回到 Library Manager 或 write_ndm 步骤,确认 Liberty 与 LEF 是否同时提供且版本一致。
常见库缺失与不一致问题排查
库问题往往不会在第一步就报错,而是在 place、CTS 或 route 阶段才暴露。下面按“现象—原因—排查动作”给出典型场景:
| 现象 | 可能原因 | 排查动作 |
|---|---|---|
| place 时报 cell 无 LEF | NDM 中缺少该 cell 的物理视图 | 检查 LEF 是否包含该 cell,重新 write_ndm |
| 时序分析报 unconstrained | Liberty 中缺少对应 corner 或 pin 时序 | 确认 corner 名称与 NDM 一致,检查 .lib 是否完整 |
| route 报 layer 不存在 | tech file 与 LEF 层定义不一致 | 对比 tech 的 metal stack 与 LEF layer 数量 |
| post-layout 时序偏差大 | QRC 技术文件版本错误 | 核对 QRC 文件 release 与 LEF 是否同源 |
| NDM 读入后 cell 数偏少 | Liberty 与 LEF 的 cell 列表不匹配 | 用脚本比对两边 cell 名称集合 |
总结来说,工程数据准备的关键不是“把文件读进去”,而是确认五类文件各自职责清晰、版本同源、corner 覆盖完整、读入后可验证。只有这一步做扎实,后续的 floorplan、placement、CTS 和 route 才有可靠的基础。