2. LVS输入文件体系
LVS(Layout Versus Schematic)并不是一个“点一下按钮就出结果”的黑盒工具,它本质上是一次基于规则的图论比对:把版图提取出的器件与连接关系,和原理图网表描述的器件与连接关系,分别转换成同一种内部图结构,再逐节点、逐器件做匹配。要让这次比对成立,Calibre 必须同时拿到五类输入:版图数据、原理图网表、工艺规则文件、控制文件,以及一个组织这些文件的运行目录。理解它们的角色和相互关系,是排查 LVS 报错的第一课。
五类输入的分工
版图 GDS 是几何描述。它只告诉工具“某层上有一个矩形、某层上有一条路径”,并不直接说明这是 MOS 管还是电阻。Calibre 通过规则文件里的 LAYER 映射和器件识别语句,从这些几何图形中“提取”出器件与网络,形成版图侧的网表。因此 GDS 的层号、数据类型(datatype)必须与规则文件中的层定义严格对应,否则会出现“器件提取不到”或“多提取出寄生器件”的问题。
原理图网表 是电路描述。它通常由 Virtuoso、HSPICE 等工具导出为 SPICE 格式,明确给出器件类型、实例名、端口连接和参数(如 W/L、M 因子)。LVS 关心的是连接拓扑,参数比对(如 W/L 是否一致)通常由 LVS 选项或后续的寄生参数检查控制。网表里的器件模型名必须能通过规则文件中的 DEVICE 语句映射到版图提取出的器件类型,否则会出现“器件类型不匹配”。
工艺规则文件(通常以 .cal 或规则集形式存在)是 LVS 的“翻译字典”和“判定标准”。它包含:层定义与派生层、器件识别与提取语句、器件端子定义、器件属性提取、以及连接性判定规则。规则文件由工艺厂或 PDK 提供,一般不应随意修改;若确需修改,必须清楚每一处改动对提取结果的影响。
控制文件(runset)是“运行指令”。它告诉 Calibre:输入 GDS 是哪个、源网表是哪个、规则文件是哪个、输出报告写到哪里、采用哪些 LVS 选项(如 LVS REPORT、LVS SPICE、大小写敏感、电源地名称等)。控制文件通常由工程师根据项目定制,是日常调试中最常改动的部分。
运行目录是“工作台”。它决定了相对路径的解析基准、中间文件的落盘位置、日志与报告的归档方式。一个清晰的运行目录能让复现和回溯变得容易,而混乱的目录往往是“昨天能跑、今天报错”的根源。
运行目录的组织方式
一个可复现的 LVS 运行目录,通常按“输入—规则—控制—输出”分层。下面是一个可直接参考的目录结构示例:
/proj/blockA/lvs/
├── gds/
│ └── blockA.gds
├── netlist/
│ └── blockA.spi
├── rule/
│ └── lvs_rule.cal
├── runset/
│ └── lvs_runset
├── work/
│ ├── blockA.lvs.db
│ └── extracted.spi
└── report/
├── lvs.rep
└── lvs.log
这样组织的好处是:runset 中所有路径都可以写成相对路径,例如 LAYOUT PATH "../gds/blockA.gds"、SOURCE PATH "../netlist/blockA.spi"、LVS REPORT "../report/lvs.rep"。当整个项目目录被复制或归档时,路径关系保持不变,不会因为绝对路径失效而报“文件找不到”。
work/ 和 report/ 视为可再生成的中间产物,不要手工编辑;真正需要版本管理的是 gds/、netlist/、rule/ 和 runset/ 四类输入。控制文件中的关键设置
控制文件是连接五类输入的“胶水”。一个典型的 runset 片段如下(示例参数,实际以项目为准):
// lvs_runset 示例
LAYOUT PATH "../gds/blockA.gds"
LAYOUT PRIMARY "blockA"
LAYOUT SYSTEM GDSII
SOURCE PATH "../netlist/blockA.spi"
SOURCE PRIMARY "blockA"
SOURCE SYSTEM SPICE
LVS REPORT "../report/lvs.rep"
LVS REPORT OPTION S
LVS POWER NAME "VDD" "VSS"
LVS GROUND NAME "VSS"
LVS CASE YES
其中 LAYOUT PRIMARY 与 SOURCE PRIMARY 必须指向同一个顶层单元名,否则 Calibre 会直接报“顶层单元不匹配”。LVS POWER NAME 和 LVS GROUND NAME 用于告诉工具哪些网络是电源地,避免把电源网络当作普通信号参与比对。LVS CASE YES 表示大小写敏感,若原理图网表与版图提取结果的大小写习惯不同,需要谨慎设置。
常见输入类报错与定位
当 LVS 无法正常启动时,问题往往不在比对算法,而在输入文件本身。下面这张对照表可以帮助快速定位:
| 报错现象 | 可能原因 | 检查点 |
|---|---|---|
| Cannot open layout file | GDS 路径错误或文件不存在 | runset 中 LAYOUT PATH 相对路径基准 |
| Top cell not found | LAYOUT PRIMARY 与 GDS 顶层名不一致 | 用版图工具查看 GDS 顶层单元名 |
| No device extracted | 层号/datatype 与规则文件不匹配 | 规则文件 LAYER 定义与 GDS 层映射 |
| Device type mismatch | 网表器件模型名无法映射 | 规则文件 DEVICE 语句与网表模型名 |
| Power/Ground short | 电源地名称未正确声明 | LVS POWER NAME / GROUND NAME |
输入体系的一致性检查
在正式跑 LVS 之前,建议按以下顺序做一次输入一致性检查:
- 层映射检查:确认 GDS 中使用的层号、datatype 在规则文件中有对应定义,且派生层(如
COMP = DIFF AND POLY)逻辑正确。 - 顶层名检查:GDS 顶层单元名、网表顶层子电路名、runset 中两个 PRIMARY 必须完全一致(含大小写)。
- 器件映射检查:网表中的器件模型名(如
nch_mac、pch_mac)能在规则文件的 DEVICE 语句中找到对应提取规则。 - 电源地检查:确认 VDD、VSS 等全局网络已在 runset 中声明,且网表中这些网络名与版图提取结果一致。
- 路径检查:所有相对路径以 runset 所在目录为基准,确认
../gds/、../netlist/等目录真实存在。