3. LVS规则文件结构解析

Calibre nmLVS 的规则文件(通常以 .lvs 或 .cal 为扩展名)并不是一段顺序执行的脚本,而是一份由多个功能段组成的“声明式配置”。它告诉 Calibre:要读哪些文件、把版图识别成什么器件、如何做层次化处理、拿什么和什么比、比完输出什么。真正具备规则文件阅读能力,意味着拿到一份陌生的 LVS 规则文件时,能快速定位到“哪一段在管哪件事”,而不是从头逐行硬读。下面按功能段逐段拆解,并给出可对照的阅读方法。

控制段:全局开关与运行环境

控制段通常位于文件开头,负责设定全局行为。常见语句包括 LVS SYSTEM(指定工艺/系统类型)、LVS BOX(声明黑盒单元)、LVS PRESERVE、LVS SPICE 相关开关,以及 LAYOUT PATH、LAYOUT PRIMARY、SOURCE PATH、SOURCE PRIMARY 这类路径与顶层单元声明。阅读时先看这一段,就能知道:这次验证的顶层单元是谁、版图和源文件从哪里读、有没有被声明为黑盒的模块。例如:

LVS SYSTEM VLSI
LAYOUT PATH "./layout/TOP.gds"
LAYOUT PRIMARY "TOP"
SOURCE PATH "./source/TOP.spi"
SOURCE PRIMARY "TOP"
LVS BOX "SRAM_1024X32"

这段配置说明:顶层单元为 TOP,版图来自 GDS,源文件来自 SPICE 网表,且 SRAM_1024X32 被当作黑盒处理——LVS 不会深入其内部做器件级比较,只检查端口连接。控制段决定了后续所有段的“作用范围”,因此永远是阅读的第一站。

源文件段与版图文件段:两侧的“输入契约”

源文件段(Source Section)和版图文件段(Layout Section)分别定义两侧如何被解析。源文件段常见内容包括:SOURCE CASE(大小写敏感设置)、SOURCE SPICE 参数、器件模型映射(如把网表中的 nmos 映射到内部器件类型)、以及 SOURCE RESISTOR、SOURCE CAPACITOR 等器件识别规则。版图文件段则定义层号与层名映射、文本层(TEXT)与端口层(PORT)的对应关系、以及 LAYER 语句。例如:

LAYER M1 10
LAYER M1_TEXT 10.1
LAYER POLY 3
LAYER NIMP 4
TEXT LAYER M1_TEXT
PORT LAYER M1_TEXT

阅读这两段时,重点核对三件事:层号是否与工艺 PDK 一致、文本层是否被正确声明为端口、源文件中的器件名是否都能在规则文件中找到对应定义。任何一处不匹配,都会在后续比较段表现为“器件未识别”或“端口缺失”。

层次化处理段:决定“展开到什么程度”

层次化处理段控制 Calibre 如何遍历版图的层次结构。关键语句包括 LVS HIERARCHY、LVS EXPAND、LVS FLATTEN、LVS RECURSIVE 等。它们决定:是逐层比较,还是把某些单元展开后再比;哪些单元保持层次、哪些被压平。对于含大量重复单元的版图(如存储器阵列),合理设置层次化处理能显著缩短运行时间。阅读时注意:LVS EXPAND 列出的单元会被展开,LVS BOX 列出的单元则被跳过。两者配合,构成“展开—保留—跳过”的层次策略。

比较段:LVS 的核心逻辑

比较段是规则文件中最关键的部分,它定义“版图识别出的器件”与“源文件网表”如何对应。典型内容包括:器件识别规则(DEVICE 语句)、连接关系提取(CONNECT)、以及比较选项(LVS COMPARE、LVS ISOLATE)。例如:

DEVICE MOS NMOS (POLY GATE, NIMP S/D, ...)
CONNECT POLY GATE
CONNECT M1 S/D
LVS COMPARE CASE
LVS ISOLATE SHORTS YES

阅读比较段时,要抓住“器件—端口—连接”三要素:每个 DEVICE 语句说明一种器件由哪些层构成、各端口对应哪一层;CONNECT 语句说明不同层之间如何电气连接;LVS COMPARE 等选项则决定比较的严格程度。若 LVS 报出“器件数量不一致”,通常要回到这一段检查器件识别条件是否过宽或过窄。

输出段:结果如何呈现

输出段控制 LVS 运行结束后生成什么报告、以什么格式呈现。常见语句包括 LVS REPORT、LVS REPORT OPTION、LVS OUTPUT 等。例如 LVS REPORT "lvs.rep" 指定报告文件名,LVS REPORT OPTION 可控制是否输出匹配器件列表、是否显示未匹配节点等。阅读输出段时,重点确认报告路径是否可写、报告详细程度是否满足调试需要。对于复杂设计,建议开启未匹配节点和器件的详细输出,便于定位问题。

Calibre nmLVS 规则文件功能段结构 从全局控制到结果输出,六段各司其职 ① 控制段 LVS SYSTEM · LAYOUT PATH/PRIMARY · SOURCE PATH/PRIMARY · LVS BOX 作用:设定全局运行环境、顶层单元、黑盒声明 ② 源文件段 SOURCE CASE · SOURCE SPICE 器件模型映射 · 电阻/电容识别 作用:定义网表解析规则 ③ 版图文件段 LAYER 层号映射 · TEXT LAYER PORT LAYER · 文本层声明 作用:定义版图层与端口识别 ④ 层次化处理段 LVS HIERARCHY · LVS EXPAND · LVS FLATTEN · LVS RECURSIVE 作用:控制层次遍历策略,决定展开/保留/跳过哪些单元 ⑤ 比较段(核心) DEVICE MOS NMOS (POLY GATE, NIMP S/D) · CONNECT POLY GATE · CONNECT M1 S/D LVS COMPARE CASE · LVS ISOLATE SHORTS YES 作用:定义器件识别、端口连接与比较严格程度 ⑥ 输出段 LVS REPORT "lvs.rep" · LVS REPORT OPTION · LVS OUTPUT 作用:控制报告文件名、详细程度与输出格式 阅读顺序 阅读方法:先看控制段确定顶层与黑盒 → 核对源/版图段层号与端口 → 检查层次化策略 → 聚焦比较段器件与连接 → 确认输出段报告路径 提示:比较段是 LVS 报错时最常回溯的段落,器件识别条件与 CONNECT 语句需与工艺 PDK 严格一致

建立阅读能力:从“逐行读”到“按段定位”

掌握六段结构后,阅读规则文件的效率会显著提升。建议按以下顺序建立自己的阅读路径:第一步,扫控制段,确认顶层单元、路径和黑盒列表;第二步,核对源文件段与版图文件段的层号、端口层、器件映射是否与当前工艺一致;第三步,看层次化处理段,判断是否有单元被展开或跳过;第四步,精读比较段,逐条检查 DEVICE 和 CONNECT 语句;第五步,确认输出段报告路径与详细程度。当 LVS 报错时,优先回溯比较段和版图文件段,因为绝大多数“器件不匹配”“端口缺失”问题都源于这两段。

阅读陌生规则文件时,可先用文本编辑器的搜索功能定位关键字:搜 LAYOUT PRIMARY 找顶层,搜 DEVICE 找器件定义,搜 CONNECT 找连接关系,搜 LVS REPORT 找输出路径。这四个关键字能帮你快速建立文件骨架。

需要强调的是,规则文件中的段并非严格按上述顺序排列,不同 foundry 或不同工艺节点的写法可能有差异,但功能段的划分是稳定的。真正要培养的能力,是看到任意一条语句时,能立刻判断它属于哪一段、影响哪一侧的解析、最终会在 LVS 报告的哪个环节体现出来。这种“段—功能—结果”的对应意识,才是规则文件阅读能力的核心。