3. DRC 运行环境与工具:主流 DRC 工具介绍、运行流程与 Deck 文件结构

DRC(Design Rule Check)是芯片物理验证中最基础、最关键的环节。本章将系统介绍业界主流 DRC 工具的特点、标准运行流程以及 DRC Deck 文件的组织架构,帮助学员建立从工具选型到实际运行的完整知识体系。

3.1 主流 DRC 工具对比

目前业界最广泛使用的 DRC 工具主要包括三大阵营:Mentor(现 Siemens EDA)的 Calibre、Synopsys 的 ICV(IC Validator)以及 Cadence 的 Assura。下表从多个维度对这三款工具进行对比:

对比维度 Calibre ICV (IC Validator) Assura
开发商 Siemens EDA (原 Mentor Graphics) Synopsys Cadence
市场地位 市场占有率最高,业界标准 增长迅速,先进工艺支持好 传统工具,逐渐被替代
运行模式 独立工具,支持命令行/GUI 集成于 Synopsys 流程 集成于 Cadence 流程
性能特点 层次化处理能力强,内存管理优秀 分布式并行计算,多核优化好 与 Virtuoso 深度集成
Deck 语言 SVRF / Tcl 混合 Tcl 为主 Skill / Diva 语法
先进工艺支持 7nm/5nm/3nm 成熟 5nm/3nm 成熟 主要支持成熟工艺
典型应用场景 Sign-off 验证,全芯片 DRC 大规模数字芯片,层次化验证 模拟/混合信号芯片
选型建议:对于 28nm 及以下先进工艺节点,建议优先选择 Calibre 或 ICV;对于模拟/IP 级别验证,Assura 在 Cadence 环境中仍有其便利性。多数 Foundry 会同时提供 Calibre 和 ICV 的 Runset,但 Calibre 的覆盖率通常最完整。

3.2 DRC 运行流程

一个标准的 DRC 运行流程可以分为以下六个阶段,每个阶段都有明确的输入输出和检查要点:

  1. 准备阶段:收集 GDSII/OASIS 版图文件、DRC Deck 文件、层次化定义文件(如 .lvs 或 .rul 文件中的 EXT 语句)。
  2. 规则加载:DRC 工具解析 Deck 文件,建立内部规则数据库,检查语法错误和规则依赖关系。
  3. 版图读取:将版图数据读入内存,构建层次化数据结构(Cell Tree),进行 flatten 或 hierarchical 处理。
  4. 规则检查:逐条执行 DRC 规则,包括宽度、间距、密度、天线效应、阱连接等检查项。
  5. 结果输出:生成 DRC 结果数据库(如 Calibre 的 .db 文件、ICV 的 .ascii 文件)和摘要报告。
  6. 结果查看:使用 RVE(Calibre)、ICV Workbench 或 Assura Diva 等工具进行结果浏览和 Debug。
DRC 标准运行流程 准备阶段 规则加载 版图读取 规则检查 结果输出 结果查看 输入:GDS/OASIS + DRC Deck 输出:DRC 结果数据库 + 摘要报告
关键提示:在实际项目中,规则加载阶段(阶段 2)最容易出现 Deck 语法错误,建议在运行全芯片 DRC 之前,先使用小面积测试结构(如 100μm × 100μm)进行规则验证,确认 Deck 无误后再进行全芯片运行。

3.3 DRC Deck 文件结构

DRC Deck 是 DRC 工具执行的规则文件,通常由 Foundry 提供,也可以由用户自定义。以 Calibre 的 SVRF 语言为例,一个典型的 DRC Deck 文件包含以下核心部分:

3.3.1 Deck 文件整体架构

一个完整的 DRC Deck 通常由五个逻辑段组成,每个段承担不同的功能:

逻辑段 关键字/指令 功能描述
头部定义 LAYOUT SYSTEM, DRC RESULTS DATABASE 指定版图格式、输出数据库类型、精度设置
层次定义 LAYER, DATATYPE, DERIVED 定义物理层、衍生层、逻辑运算层
规则检查 WIDTH, SPACE, ENC, AREA 执行具体的几何规则检查
结果处理 SAVE RESULTS, REPORT 保存检查结果、生成摘要报告
辅助定义 VARIABLE, IF/ELSE, INCLUDE 变量定义、条件编译、文件包含

3.3.2 典型 Deck 代码示例

以下是一个简化的 Calibre DRC Deck 示例,展示了金属层间距检查的完整实现:

// ============================================
// 头部定义
// ============================================
LAYOUT SYSTEM GDSII
DRC RESULTS DATABASE "drc_results.db" ASCII

// ============================================
// 层次定义
// ============================================
LAYER M1 10 0          // 金属1层,GDS层号10,数据号0
LAYER M2 11 0          // 金属2层,GDS层号11,数据号0
LAYER VIA1 20 0        // 通孔1层,GDS层号20,数据号0

// 衍生层定义
DERIVED M1_DUMMY = M1 AND NOT ACTIVE   // 虚拟金属层

// ============================================
// 规则检查
// ============================================
// 规则1:M1 最小宽度 0.18μm
WIDTH M1 < 0.18 {
    @ M1_MIN_WIDTH: M1 width < 0.18μm
    M1_MIN_WIDTH = INT [M1]
}

// 规则2:M1 到 M1 最小间距 0.20μm
SPACE M1 < 0.20 {
    @ M1_MIN_SPACE: M1 space < 0.20μm
    M1_MIN_SPACE = EXT [M1] < 0.20
}

// 规则3:M1 与 VIA1 最小包围 0.05μm
ENC M1 VIA1 < 0.05 {
    @ M1_VIA1_ENC: M1 enclosure of VIA1 < 0.05μm
    M1_VIA1_ENC = ENC [M1] VIA1 < 0.05
}

// ============================================
// 结果输出
// ============================================
SAVE RESULTS M1_MIN_WIDTH M1_MIN_SPACE M1_VIA1_ENC
REPORT SUMMARY "drc_summary.rpt"
常见错误:初学者容易混淆 WIDTH 和 SPACE 的检查对象。WIDTH 检查的是同一层图形自身的线宽,而 SPACE 检查的是同一层不同图形之间的间距。在编写 Deck 时,务必确认检查方向是否正确。

3.4 DRC 工具运行命令示例

不同工具的调用方式有所差异,以下给出三种主流工具的命令行运行示例:

工具 命令行示例 说明
Calibre calibre -drc -hier -turbo 4 drc_rule.rul -gds top.gds -o drc_results.db -hier 启用层次化模式,-turbo 4 使用 4 核并行
ICV icv -drc -f drc_rule.tcl -layout top.gds -output drc_results -f 指定 Tcl 格式的规则文件
Assura assura drc_rule.rsf -layout top.gds -output drc_results .rsf 为 Assura 规则文件格式

3.5 Deck 文件调试技巧

在实际项目中,DRC Deck 的调试往往比运行本身更耗时。以下是一些实用的调试技巧:

  • 分段运行:将 Deck 按功能模块拆分,每次只运行一个模块,便于定位问题。
  • 使用测试结构:创建包含已知违规的测试版图,验证规则是否被正确触发。
  • 查看中间层:利用 SAVE RESULTS 输出衍生层,检查逻辑运算是否正确。
  • 日志分析:关注工具输出的 ERROR 和 WARNING 信息,特别是语法错误和层次引用错误。
  • 版本管理:使用 Git 等工具管理 Deck 版本,每次修改后记录变更原因。
DRC Deck 文件逻辑结构 头部定义 层次定义 规则检查 结果处理 辅助定义 执行顺序:头部定义 → 层次定义 → 规则检查 → 结果处理 辅助定义(变量/条件/包含)可在任意位置引用 规则检查段是 Deck 的核心,包含所有 DRC 检查语句

3.6 本章小结