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 运行流程可以分为以下六个阶段,每个阶段都有明确的输入输出和检查要点:
- 准备阶段:收集 GDSII/OASIS 版图文件、DRC Deck 文件、层次化定义文件(如 .lvs 或 .rul 文件中的 EXT 语句)。
- 规则加载:DRC 工具解析 Deck 文件,建立内部规则数据库,检查语法错误和规则依赖关系。
- 版图读取:将版图数据读入内存,构建层次化数据结构(Cell Tree),进行 flatten 或 hierarchical 处理。
- 规则检查:逐条执行 DRC 规则,包括宽度、间距、密度、天线效应、阱连接等检查项。
- 结果输出:生成 DRC 结果数据库(如 Calibre 的 .db 文件、ICV 的 .ascii 文件)和摘要报告。
- 结果查看:使用 RVE(Calibre)、ICV Workbench 或 Assura Diva 等工具进行结果浏览和 Debug。
关键提示:在实际项目中,规则加载阶段(阶段 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 版本,每次修改后记录变更原因。