2. Calibre平台与运行环境搭建

Calibre 的签核结果是否可信,首先取决于运行环境是否“干净、可复现、可追溯”。同一份 GDS、同一套规则,在不同 Calibre 版本、不同 License 特性、不同机器配置下,DRC/LVS 结论可能不一致。因此本章不讨论规则文件怎么写,而是先把平台底座搭稳:选对版本、配好 License、规划分布式算力、固定工艺库与规则文件的目录结构。

一、工具版本选择:签核版本与规则文件必须匹配

Calibre 的版本号形如 2023.4_38.19,其中年份与主版本决定语法与引擎行为,后面的构建号决定补丁级别。选择版本时遵循三条硬约束:

  • 以 Foundry 规则文件声明为准。规则文件头部通常有 # Calibre version: 2022.3 or later 之类的注释,低于该版本可能无法解析 SVRF、DFM 等新语法。
  • 以 PDK 验证矩阵为准。PDK 发布说明中会列出“已验证版本”,例如 2022.3_18.11、2023.2_25.9,优先选矩阵内版本,避免用最新版“试错”。
  • 全流程版本统一。DRC、LVS、PEX、DFM 尽量使用同一主版本,避免同一项目内出现 calibre -drc 与 calibre -lvs 行为差异。

实际落地时,用环境变量锁定版本,而不是依赖 PATH 中默认的 calibre:

# 版本锁定示例(写入项目 env 脚本)
export CALIBRE_HOME=/eda/mentor/calibre/2023.2_25.9
export PATH=$CALIBRE_HOME/bin:$PATH
export MGC_HOME=$CALIBRE_HOME
calibre -v   # 输出 2023.2_25.9,确认生效

若项目需要多版本并存,建议按 /eda/mentor/calibre/<version> 平铺安装,用 module 或 env 脚本切换,禁止在同一个 shell 中混用两个版本的 MGC_HOME。

二、License 配置:区分特性、绑定端口、控制并发

Calibre 的 License 由 Mentor(现 Siemens EDA)的 salicd 守护进程管理,核心是 MGLS_LICENSE_FILE 与 LM_LICENSE_FILE 两个变量。配置要点:

  • 端口与主机:形如 1717@lic-server,1717 是默认端口,若被占用需在 license 文件中改 PORT 并同步客户端。
  • 特性名(feature):Calibre 按功能授权,常见有 calibre_drc、calibre_lvs、calibre_pex、calibre_rdb、calibre_mtv 等。跑 LVS 却只申请了 DRC 特性,会直接报 Cannot find feature。
  • 并发数:License 文件中的 INCREMENT 行决定同时可用的进程数。分布式跑 64 个 DRC 分块,若 calibre_drc 只有 32 个,后 32 个会排队等待。
# 客户端 License 配置
export MGLS_LICENSE_FILE=1717@lic-server
export LM_LICENSE_FILE=$MGLS_LICENSE_FILE

# 查看特性占用情况
lmstat -a -c $MGLS_LICENSE_FILE | grep calibre
建议在项目 env 脚本中显式导出 MGLS_LICENSE_FILE,不要依赖用户家目录的 .bashrc,否则跨用户、跨集群提交时容易取到错误 License。

三、分布式计算资源:LSF/SGE 与 Calibre 的对接

Calibre 本身支持多线程(-turbo)与分块(tiling)并行,但大规模签核通常交给 LSF、SGE、Slurm 等作业调度器。关键是把“单机多核”和“多机分块”分开配置:

  • 单机多线程:calibre -drc -hier -turbo 8,适合层次化规则,8 核内收益明显,超过物理核数反而下降。
  • 多机分块:用 -tiling 或 calibre -drc -runset ... -batch 配合调度器,把版图切成 N 块分发。
  • 资源申请:每块 DRC 建议 8~16 GB 内存、4~8 核;PEX 因提取寄生参数,内存需求更高,建议 32 GB 起。
# LSF 提交示例:64 块 DRC 分块
bsub -q calibre -n 8 -R "rusage[mem=16384]" \
     -J drc_tile \
     calibre -drc -hier -turbo 8 \
     -runset drc.runset \
     -tiling 64 -tile_index \$LSB_JOBINDEX

调度器侧要确认:队列名、内存单位(MB/GB)、核数上限与 License 并发数匹配。若 License 只有 32 个 DRC 特性,却一次提交 64 个作业,会出现大量 PEND 状态,需在提交脚本中限制并发。

四、工艺库与规则文件目录结构

签核环境最怕“规则文件散落各处、版本对不上”。推荐按“工艺节点—PDK 版本—规则类型”三层组织,并用只读挂载保证一致性:

/pdk
  /tsmc28
    /pdk_v1.3
      /tech          # 工艺文件:tf、layermap、display
      /calibre
        /drc         # drc.runset、drc.rule
        /lvs         # lvs.runset、lvs.rule
        /pex         # pex.runset、pex.rule
        /dfm         # dfm.runset
      /lib           # 标准单元、IO、SRAM 的 GDS/LEF/LIB
      /doc           # PDK 发布说明、验证矩阵

规则文件中的路径应使用相对路径或环境变量,避免硬编码绝对路径:

# drc.runset 片段
LAYOUT PATH "$PROJ/gds/top.gds"
LAYOUT PRIMARY "top"
SOURCE PATH "$PDK/tsmc28/pdk_v1.3/calibre/drc/drc.rule"
PDK 目录必须只读(chmod -R a-w),任何项目级修改应复制到项目目录后再改,否则一次误改会影响所有项目。

五、环境自检:一次跑通再签核

搭好环境后,用最小用例验证:calibre -v 确认版本,lmstat 确认 License,calibre -drc -runset drc.runset 跑一个小模块,检查 drc.results 与 drc.summary 是否生成。若报 Cannot find feature,查 License;若报 Syntax error,查版本与规则文件匹配;若作业长时间 PEND,查调度器与 License 并发。只有这三步都通过,才进入正式签核。

Calibre 签核运行环境四要素 ① 工具版本 2023.2_25.9 PDK 验证矩阵内 CALIBRE_HOME 锁定 全流程主版本统一 ② License 1717@lic-server drc / lvs / pex 特性 并发数 ≥ 分块数 MGLS_LICENSE_FILE ③ 分布式算力 LSF / SGE / Slurm -turbo 8 单机多核 -tiling 64 多机分块 8~16GB / 4~8 核 ④ PDK 目录 /pdk/tsmc28/v1.3 tech / calibre / lib drc / lvs / pex / dfm 只读挂载,禁硬编码 环境自检:calibre -v → lmstat → 最小 DRC 用例 版本 / License / 规则文件三者一致,才进入正式签核 通过 drc.results / summary 生成 进入正式签核 异常 Cannot find feature → License Syntax error → 版本/规则 排队 作业 PEND → 调度器 并发数 / 队列资源 版本、License、算力、PDK 目录四者一致,是签核结果可复现的前提 示例参数:2023.2_25.9 / 1717@lic-server / -turbo 8 / -tiling 64 / /pdk/tsmc28/pdk_v1.3