4. Calibre DRC运行环境与命令行实战

Calibre DRC 的签核结果是否可信,一半取决于规则文件本身,另一半取决于运行环境与命令行是否被正确组织。很多“规则明明写对了却报错”“昨天能跑今天跑不动”的问题,根源并不在规则语法,而在工作目录、环境变量、命令行参数和日志解读上。本节围绕 calibre -drc 的实际运行展开,把运行目录组织、日志与摘要报告解读、常见错误排查串成一条可复现的操作链。

一、运行环境与目录组织

Calibre 通过环境变量定位安装路径与许可证。典型配置如下(示例路径,需按实际安装替换):

export CALIBRE_HOME=/opt/mentor/calibre/2023.4
export PATH=$CALIBRE_HOME/bin:$PATH
export MGC_HOME=$CALIBRE_HOME
export LM_LICENSE_FILE=27020@lic-server

其中 CALIBRE_HOME 指向安装根目录,PATH 让 calibre 可被直接调用,LM_LICENSE_FILE 指定许可证服务器端口与主机。可用 calibre -v 验证版本、lmstat -a 检查许可证占用情况。

运行目录建议按“规则、版图、输出、日志”分离,避免中间文件污染源文件:

drc_run/
├── rule/        # DRC 规则文件(.cal / .rule)
├── layout/      # GDS/OASIS 版图
├── run/         # 运行目录,存放 svdb、sum、log
└── scripts/     # 批处理与后处理脚本

在 run/ 目录下执行命令,所有输出(.sum、.log、svdb/)都落在当前目录,便于归档与复现。规则文件中引用版图时使用相对路径或绝对路径要统一,否则换目录运行就会找不到输入。

二、calibre -drc 命令与关键参数

最基础的调用形式是:

calibre -drc -hier -turbo 8 \
  -64 -hyper \
  ../rule/drc.cal \
  -gds ../layout/top.gds \
  2>&1 | tee drc_run.log

各参数含义:-drc 指定进入 DRC 模式;-hier 启用层次化处理,大幅减少重复单元的计算量;-turbo 8 指定 8 个线程并行;-64 使用 64 位模式以支持大版图;-hyper 启用超线程加速。规则文件与版图作为位置参数传入,也可在规则文件内用 LAYOUT PATH 指定。输出重定向到 drc_run.log 便于事后排查。

若需生成结果数据库供后续查看,可加 -svdb 指定目录:

calibre -drc -hier -svdb ./svdb drc.cal

运行结束后,Calibre 会生成 drc.results(或规则中 RESULTS DATABASE 指定的文件)、.sum 摘要和 .log 日志。三者分工不同:日志记录运行过程与错误,摘要给出违规统计,结果数据库供版图工具定位。

三、日志与摘要报告解读

日志开头会打印版本、许可证、规则文件路径、CPU 与内存信息,随后是规则编译、版图读入、各检查项执行、结果输出。重点看三类信息:

  • ERROR:致命错误,运行中断,必须解决,如规则语法错误、版图无法打开。
  • WARNING:警告,运行继续,但可能影响结果完整性,如某层未定义、某检查被跳过。
  • CPU time / Peak memory:用于判断资源是否成为瓶颈。

摘要报告 .sum 按检查项列出违规数量,典型片段如下(示例数据):

RULECHECK RESULTS
--------------------------------------------------
M1.SPACE.1         : 128 violations
M1.WIDTH.1         : 0 violations
VIA1.ENCLOSURE.1   : 37 violations
POLY.GATE.1        : 5 violations
--------------------------------------------------
TOTAL              : 170 violations

解读时先看 TOTAL 是否为 0,再看哪一项非零。若某项为 0 但日志中该检查被 WARNING 跳过,则“0”并不代表通过,这是最容易误判的地方。摘要中的数量是违规图形数,不是违规位置数,一个位置可能对应多个图形。

Calibre DRC 运行链与日志判读 输入 rule/drc.cal layout/top.gds 环境变量 / 许可证 CALIBRE_HOME, LM_LICENSE_FILE calibre -drc -hier 层次化 -turbo 8 并行 -64 -hyper 在 run/ 目录执行 输出 drc_run.log drc.sum svdb/ 结果数据库 日志与摘要判读路径 日志 .log ERROR → 中断,必须修复 WARNING → 检查是否被跳过 CPU time / Peak memory 规则编译是否成功 版图读入层数是否完整 摘要 .sum TOTAL 是否为 0 逐项违规数量排序 0 违规 ≠ 通过(可能跳过) 数量为图形数非位置数 结合 svdb 定位坐标 结论与动作 TOTAL=0 且无跳过 → 通过 有违规 → 定位并修复 有 ERROR → 先修环境/语法 资源超限 → 调 -turbo/内存 归档 log+sum+svdb

四、常见运行错误排查

1. 找不到规则文件或版图。日志报 Cannot open rule file 或 Cannot open layout。先确认当前工作目录,再用 ls -l 核对相对路径;规则文件内 LAYOUT PATH 若写死绝对路径,换机器就会失效,建议改为命令行传入。

2. 许可证获取失败。报 License request failed 或 Cannot connect to license server。检查 LM_LICENSE_FILE 是否指向正确端口与主机,用 lmstat -a -c 27020@lic-server 查看是否有空闲 license。若被其他任务占满,需等待或申请更多席位。

3. 规则语法错误。报 Syntax error at line N。按行号定位,常见原因是缺少分号、括号不匹配、层号未定义、变量未声明。建议先用 calibre -drc -check 只做规则编译检查,快速暴露语法问题,避免每次跑完整流程。

4. 内存不足或进程被杀。日志出现 Out of memory 或进程被系统 kill。可降低 -turbo 线程数、启用 -hier 层次化、拆分版图分块运行,或申请更大内存节点。注意 -turbo 过高反而因内存竞争变慢。

5. 结果为空但预期有违规。先看日志中对应检查是否被 WARNING 跳过,再确认版图层号映射是否正确、LAYOUT PRIMARY 是否指向了正确的顶层单元。层映射错误是“零违规”最常见的假象来源。

排查顺序建议:先看日志末尾的 ERROR/WARNING,再看 .sum 的 TOTAL,最后用 svdb 在版图工具中定位具体坐标。不要一上来就改规则。

五、可复现的运行记录模板

为便于复盘与签核追溯,每次运行建议记录以下字段(示例):

字段示例值说明
运行日期2024-06-12签核时间点
Calibre 版本2023.4calibre -v 输出
规则文件drc.cal rev 1.3含版本号
版图top.gds含顶层单元名
命令calibre -drc -hier -turbo 8 ...完整命令行
TOTAL 违规170来自 .sum
ERROR/WARNING0 / 2来自 .log
结论未通过,待修复通过/未通过

把命令、日志、摘要和结果数据库一起归档,下一次运行或换人接手时,才能快速判断“这次结果和上次是否可比”。运行环境与命令行的规范化,是 DRC 签核从“能跑”走向“可信”的第一步。