4. 后端平台集成架构概览
在先进工艺节点下,物理实现工具(如 Cadence Innovus、Synopsys ICC2)负责布局布线、时钟树综合、时序优化等核心工作,而 Calibre 则承担物理验证(DRC/LVS)、寄生参数提取(PEX)和可靠性检查(ERC)等签核任务。两者并非孤立运行,而是通过一套清晰的集成架构协同工作。理解这套架构,是搭建稳定、高效后端流程的前提。
一、集成架构的三个层次
典型后端平台与 Calibre 的集成可以拆解为三个层次:数据交换层、调用接口层和流程编排层。数据交换层解决“传什么”,调用接口层解决“怎么调”,流程编排层解决“何时调、调完做什么”。三者共同构成从设计数据库到签核结果的完整链路。
数据交换的核心是版图与网表。物理实现工具输出的 GDSII/OASIS 是 Calibre 进行 DRC/LVS 的几何输入;工具内部的设计数据库(如 Innovus 的 .enc、ICC2 的 .nlib)通常不直接交给 Calibre,而是先导出为标准格式。网表方面,LVS 需要与版图对应的 SPICE 网表,通常由物理实现工具导出 Verilog 网表后,再经 v2lvs 等工具转换为 SPICE 格式。此外,Calibre 的 PEX 结果(如 SPEF 或 DSPF)需要回注到物理实现工具中用于时序签核,形成双向数据流。
二、调用接口:从命令行到脚本集成
Calibre 的调用方式主要有三种。最基础的是命令行调用,例如 calibre -drc -hier -turbo 8 drc_runset,其中 -turbo 指定并行线程数,-hier 启用层次化处理。第二种是TCL 脚本集成,物理实现工具在运行过程中通过 exec 或专用接口调用 Calibre,并解析其输出报告。第三种是流程引擎调用,如 Make、Jenkins 或自研 Flow 平台,将 Calibre 作为流程中的一个任务节点,通过依赖关系触发。
以 Innovus 为例,在时序签核阶段调用 Calibre PEX 的典型 TCL 片段如下:
# Innovus 中调用 Calibre xRC 提取寄生参数
set pex_runset "./calibre_pex/pex_runset"
exec calibre -xrc -phdb -turbo 16 $pex_runset
# 读取生成的 SPEF 文件
read_spef "./calibre_pex/output/design.spef"
# 更新时序并报告
update_timing -full
report_timing -max_paths 10 > ./reports/post_pex_timing.rpt
这段脚本的关键在于:-phdb 生成寄生参数数据库,-turbo 16 利用多核加速,生成的 SPEF 通过 read_spef 回注到 Innovus 的时序引擎中。执行后应检查 post_pex_timing.rpt 中的 WNS(最差负裕量)和 TNS(总负裕量),若与 PEX 前差异超过预期(例如 WNS 恶化超过 50ps),则需要检查提取模式是否与签核标准一致。
三、流程编排:从单点调用到流水线
实际项目中,Calibre 不会孤立运行,而是嵌入到一条完整的后端流水线中。典型的编排顺序是:物理实现完成布线 → 导出 GDS 和网表 → 运行 DRC/LVS → 修复违规 → 重新验证 → 运行 PEX → 回注时序 → 最终签核。每个环节都有明确的输入输出和判断条件。
流程编排工具通常采用 Makefile 或 Python 脚本管理依赖。例如,用 Makefile 定义任务依赖:
drc: design.gds drc.rule
calibre -drc -hier -turbo 8 drc.rule
lvs: design.gds design.spi lvs.rule
calibre -lvs -hier -turbo 8 lvs.rule
pex: design.gds pex.rule
calibre -xrc -phdb -turbo 16 pex.rule
signoff: drc lvs pex
@echo "All signoff checks completed"
这种编排方式的好处是:任一环节失败时,后续任务不会盲目执行;同时支持增量运行,例如仅当 GDS 更新时才重新触发 DRC。在大型 SoC 项目中,还会引入任务调度系统(如 LSF、SGE)将 Calibre 作业分发到计算集群,通过 bsub 或 qsub 提交,并监控作业状态。
四、集成中的关键参数与判断依据
无论采用哪种集成方式,以下几个参数和判断点都需要重点关注:
- 规则文件版本:DRC/LVS 规则文件必须与工艺库版本严格对应,版本错配会导致误报或漏报。运行前应核对
rule file的 revision 号与 PDK 发布说明。 - 线程数与内存:
-turbo设置过高可能导致内存溢出,通常建议根据单机内存和版图规模调整,例如 64GB 内存对应 8~16 线程。 - 层次化与扁平化:
-hier适合大规模设计,但某些复杂规则可能需要扁平化处理,需根据规则文件说明选择。 - 结果数据库:Calibre 生成的
svdb目录包含违规标记和交叉引用信息,是后续调试和修复的依据。应确保该目录可写且不被意外清理。 - 日志与报告:每次运行应保留完整的
.log和摘要报告,便于回溯。关键指标包括违规数量、运行时间、内存峰值。
五、典型集成架构的对比
Innovus 与 ICC2 在集成 Calibre 时存在一些差异。Innovus 通常使用 exec 直接调用 Calibre 命令,并通过 read_spef 回注结果;ICC2 则更多依赖 saif 和 spef 的标准化接口,且其 signoff 流程中常与 PrimeTime 配合。但无论哪种平台,数据交换的核心格式(GDS、SPICE、SPEF)和 Calibre 的调用方式(命令行 + 规则文件)是一致的。理解这一点,就能在不同平台间迁移集成方案。
总结来说,后端平台与 Calibre 的集成架构可以概括为:物理实现工具负责生成和消费数据,Calibre 负责签核验证,流程编排层负责调度和依赖管理。掌握数据格式、调用接口和编排方式,是构建可靠后端流程的基础。