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 可控制是否输出匹配器件列表、是否显示未匹配节点等。阅读输出段时,重点确认报告路径是否可写、报告详细程度是否满足调试需要。对于复杂设计,建议开启未匹配节点和器件的详细输出,便于定位问题。
建立阅读能力:从“逐行读”到“按段定位”
掌握六段结构后,阅读规则文件的效率会显著提升。建议按以下顺序建立自己的阅读路径:第一步,扫控制段,确认顶层单元、路径和黑盒列表;第二步,核对源文件段与版图文件段的层号、端口层、器件映射是否与当前工艺一致;第三步,看层次化处理段,判断是否有单元被展开或跳过;第四步,精读比较段,逐条检查 DEVICE 和 CONNECT 语句;第五步,确认输出段报告路径与详细程度。当 LVS 报错时,优先回溯比较段和版图文件段,因为绝大多数“器件不匹配”“端口缺失”问题都源于这两段。
LAYOUT PRIMARY 找顶层,搜 DEVICE 找器件定义,搜 CONNECT 找连接关系,搜 LVS REPORT 找输出路径。这四个关键字能帮你快速建立文件骨架。
需要强调的是,规则文件中的段并非严格按上述顺序排列,不同 foundry 或不同工艺节点的写法可能有差异,但功能段的划分是稳定的。真正要培养的能力,是看到任意一条语句时,能立刻判断它属于哪一段、影响哪一侧的解析、最终会在 LVS 报告的哪个环节体现出来。这种“段—功能—结果”的对应意识,才是规则文件阅读能力的核心。