2. Calibre命令行工具与脚本接口基础

Calibre 后端验证的自动化,本质上不是“把图形界面换成命令行”,而是把每个工具变成可被脚本编排的确定性进程。要做到这一点,必须掌握三件事:工具如何被调用、调用结果如何被表达(返回码与日志)、以及脚本如何稳定地封装这些调用。本节围绕 DRC、LVS、PEX 三类典型工具展开,同时说明它们共有的命令行约定。

一、Calibre 各工具的命令行调用方式

Calibre 的 DRC、LVS、PEX 分别由 calibre -drc、calibre -lvs、calibre -pex 启动,它们共享同一套运行框架,因此选项风格高度一致。最基础的调用形式是“运行文件 + 工作目录 + 日志文件”:

calibre -drc -hier -64 -turbo 8 \
        -runset ./runset/drc_runset \
        -batch \
        ./rule/tech_drc.svrf \
        | tee ./log/drc_console.log

其中 -hier 表示层次化处理,-64 指定 64 位模式,-turbo 8 指定并行线程数,-batch 表示非交互批处理。LVS 与 PEX 的调用结构相同,只是规则文件与运行集不同:

calibre -lvs -hier -64 -turbo 8 -runset ./runset/lvs_runset -batch ./rule/tech_lvs.svrf
calibre -pex -hier -64 -turbo 8 -runset ./runset/pex_runset -batch ./rule/tech_pex.svrf

需要特别注意的是,Calibre 的输入输出路径通常不写在命令行里,而是由运行集(runset)或规则文件中的变量决定,例如 LAYOUT_PATH、SOURCE_PATH、REPORT_FILE。脚本封装时,推荐用环境变量或 -D 方式覆盖这些变量,而不是直接修改规则文件:

calibre -drc -batch \
        -D LAYOUT_PATH=./layout/top.gds \
        -D REPORT_FILE=./report/drc_top.rpt \
        ./rule/tech_drc.svrf

这样同一份规则文件可以在不同项目、不同版本间复用,脚本只需替换变量值,规则本身保持稳定。

二、常用选项与返回码

在自动化脚本中,最常用的选项可以归为四类:并行控制(-turbo)、层次控制(-hier)、批处理控制(-batch)、变量覆盖(-D)。此外,-64 用于指定 64 位模式,-runset 用于加载运行集,-log 可显式指定日志文件路径。

返回码是脚本判断成败的第一依据。Calibre 的返回码约定如下:

返回码含义脚本处理建议
0运行成功,且无违规或违规数为 0继续后续流程
1运行成功,但存在违规(DRC/LVS 错误)记录违规数,按策略决定是否阻断
2运行失败,规则或输入文件错误立即终止,输出错误日志
3运行被中断或超时重试或人工介入

实际脚本中不能只看返回码,因为返回码 1 既可能是“有违规”,也可能是“部分检查未完成”。因此必须结合日志中的统计行做二次判断。

三、日志输出格式与关键字段

Calibre 的日志分为控制台输出和报告文件两部分。控制台输出以运行阶段为主,报告文件则包含具体的违规条目。典型的日志片段如下:

// Calibre DRC v2023.4
// Runset: ./runset/drc_runset
// Layout: ./layout/top.gds
// Rule:   ./rule/tech_drc.svrf
// Start:  2024-06-01 10:12:03
...
TOTAL Results: 17
  M1.SPACE: 5
  M2.WIDTH: 8
  VIA.ENCLOSURE: 4
// End: 2024-06-01 10:18:41
// CPU Time: 398.2s

脚本解析时,最值得提取的是 TOTAL Results 行和其后的分类统计行。前者给出总违规数,后者给出每类规则的违规数。若 TOTAL Results 为 0,则即使返回码为 1,也可判定为“无违规但存在警告”。若日志中出现 ERROR 或 FATAL 关键字,则无论返回码如何,都应视为运行失败。

建议在脚本中统一用正则提取 TOTAL Results:\s*(\d+) 和 ^\s*([A-Z0-9_.]+):\s*(\d+),前者用于总控,后者用于生成分类报告。

四、脚本封装要点

把 Calibre 调用封装成脚本时,核心目标是“可重复、可观测、可恢复”。可重复要求所有输入路径、变量、线程数都来自配置文件或环境变量,而不是硬编码;可观测要求每次运行都保留完整日志和报告,并记录运行时间、版本、返回码;可恢复要求脚本在失败时能保留现场,并支持从失败点重跑。

一个实用的封装结构如下:

#!/bin/bash
set -euo pipefail

RUN_ID=$(date +%Y%m%d_%H%M%S)
LOG_DIR=./log/${RUN_ID}
mkdir -p ${LOG_DIR}

run_calibre() {
  local tool=$1 rule=$2 runset=$3
  calibre -${tool} -hier -64 -turbo 8 \
          -runset ${runset} -batch \
          -log ${LOG_DIR}/${tool}.log \
          ${rule}
  return $?
}

run_calibre drc ./rule/tech_drc.svrf ./runset/drc_runset
RC=$?
echo "DRC return code: ${RC}" | tee -a ${LOG_DIR}/summary.txt
grep -E "TOTAL Results|ERROR|FATAL" ${LOG_DIR}/drc.log >> ${LOG_DIR}/summary.txt

这段脚本做了三件事:为每次运行建立独立日志目录、把返回码写入汇总文件、把关键日志行提取到汇总文件。这样即使运行失败,也能从 summary.txt 快速定位问题,而不必翻遍整个日志。

五、三类工具的调用关系与数据流

DRC、LVS、PEX 在流程上并非孤立,而是依次依赖:DRC 检查版图几何,LVS 检查版图与网表一致性,PEX 在 LVS 通过后提取寄生参数。脚本编排时,通常把 LVS 通过作为 PEX 的前置条件,把 DRC 无违规作为签核条件。下图展示了三者的调用顺序、输入输出与返回码判断关系。

Calibre DRC / LVS / PEX 命令行调用与返回码判断 输入 GDS + 规则 + Runset calibre -drc 几何检查 DRC 报告 TOTAL Results calibre -lvs 版图 vs 网表 LVS 报告 CORRECT / INCORRECT calibre -pex 寄生参数提取 PEX 网表 SPEF / DSPF 返回码判断 0 / 1 / 2 / 3 失败处理 保留日志 / 重跑 脚本封装要点:变量覆盖(-D)、日志目录隔离、返回码 + 日志双重判断、失败现场保留

图中可以看到,DRC 的输出是几何违规统计,LVS 的输出是一致性结论,PEX 的输出是寄生网表。三者的返回码含义一致,但日志中的关键字段不同:DRC 看 TOTAL Results,LVS 看 CORRECT 或 INCORRECT,PEX 看是否生成完整的 SPEF/DSPF 文件。脚本封装时,应针对不同工具提取不同的关键字段,而不是用同一套正则处理所有日志。

不要把返回码 0 直接等同于“签核通过”。Calibre 在某些配置下即使存在未检查项也可能返回 0,必须结合日志中的 WARNING 和 NOT CHECKED 行做最终判断。