3. DRC运行流程:从GDS/OASIS输入到结果输出的完整流程与关键步骤
DRC(Design Rule Check,设计规则检查)是芯片物理验证中最核心的环节之一。其运行流程从版图数据输入开始,经过规则加载、几何运算、违例检测、结果输出等多个阶段,最终生成可供设计师定位和修复的DRC报告。理解这一完整流程,对于优化DRC运行性能、减少迭代次数、提升验证效率至关重要。
3.1 DRC运行流程全景图
下图展示了DRC工具从输入到输出的完整处理流水线。整个流程可划分为五个主要阶段:数据输入、规则加载与编译、几何运算与违例检测、结果聚合与分级、报告输出与可视化。
3.2 各阶段详细解析
3.2.1 数据输入阶段
DRC工具首先读取版图数据,主流格式为GDSII(Graphic Data System II)和OASIS(Open Artwork System Interchange Standard)。OASIS相比GDSII具有更高的压缩率和更快的读取速度,在大规模设计中逐渐成为首选。
| 对比维度 | GDSII | OASIS |
|---|---|---|
| 文件大小 | 较大(未压缩) | 通常为GDSII的1/5~1/10 |
| 读取速度 | 较慢 | 快2~5倍 |
| 支持层次 | 有限(最多256层) | 无限制 |
| 工具兼容性 | 最广泛 | 主流工具均支持 |
数据输入阶段还需加载层次映射表(LAYER MAP),将版图中的GDS层号映射到DRC规则中使用的逻辑层名称。映射错误是导致DRC误报的常见原因之一。
3.2.2 规则加载与编译阶段
DRC规则文件通常以SVRF(Standard Verification Rule Format)或TVF(Tcl Verification Format)编写。工具在加载规则时,会进行以下处理:
- 语法解析:检查规则文件中的语法错误,如括号不匹配、关键字拼写错误等。
- 规则编译:将高级规则语句转换为内部执行指令序列,优化运算顺序。
- 层次派生优化:识别可复用的中间层次,避免重复计算。
- 内存预分配:根据规则复杂度预估内存需求,减少运行时动态分配开销。
// SVRF规则示例:金属最小宽度检查
// 规则定义
LAYER M1 1001 ;
LAYER VIA1 1010 ;
// 宽度检查
WIDTH M1 < 0.18 // 最小宽度0.18μm
{
@ M1最小宽度违例
// 违例标记输出
COPY M1
}
// 间距检查
EXT M1 < 0.20 // 最小间距0.20μm
{
@ M1最小间距违例
COPY M1
}
3.2.3 几何运算与违例检测阶段
这是DRC运行的核心阶段,工具对版图进行各种几何运算,检测违反设计规则的位置。常见的运算类型包括:
| 运算类型 | 说明 | 典型规则示例 |
|---|---|---|
| 宽度检查 (WIDTH) | 检查图形的最小/最大宽度 | 金属线宽 ≥ 0.18μm |
| 间距检查 (EXT/SPACE) | 检查同层或异层图形之间的最小间距 | M1间距 ≥ 0.20μm |
| 包围检查 (ENC) | 检查通孔/接触孔被包围的尺寸 | VIA1被M2包围 ≥ 0.05μm |
| 密度检查 (DENSITY) | 检查指定窗口内的图形密度 | M1密度 20%~70% |
| 天线检查 (ANT) | 检查栅极天线效应比率 | 天线比 ≤ 1000 |
几何运算阶段是性能瓶颈所在。现代DRC工具采用分区并行计算技术,将版图划分为多个矩形区域(Tile),分配到多个CPU核心并行处理,大幅缩短运行时间。
3.2.4 结果聚合与分级阶段
各分区计算完成后,工具将结果进行聚合处理:
- 去重合并:消除分区边界处的重复违例记录。
- 违例分级:根据规则严重程度(如致命违例、警告、建议)对违例进行分类。
- 坐标关联:将违例坐标与版图层次、单元实例路径关联,便于定位。
- 统计汇总:生成违例总数、各规则违例数、违例密度分布等统计信息。
3.2.5 结果输出阶段
DRC结果以多种格式输出,满足不同使用场景:
| 输出格式 | 特点 | 适用场景 |
|---|---|---|
| ASCII文本报告 | 人类可读,体积较大 | 快速查看违例摘要 |
| 二进制数据库 (如SVDB) | 体积小,加载快,支持交互浏览 | GUI交互式分析 |
| GDS/OASIS标记层 | 将违例图形写入版图文件 | 在版图编辑器中直接查看 |
| XML/JSON格式 | 结构化数据,便于脚本解析 | 自动化流程集成 |
3.3 关键步骤与常见问题
下表总结了DRC运行流程中各阶段的关键步骤及常见问题:
| 阶段 | 关键步骤 | 常见问题 | 解决建议 |
|---|---|---|---|
| 数据输入 | 验证GDS/OASIS完整性 检查层次映射 |
文件损坏、层次编号错误 | 使用工具自带的版图验证功能预检 |
| 规则加载 | 语法检查 规则编译优化 |
规则语法错误、变量未定义 | 使用规则调试模式逐步执行 |
| 几何运算 | 分区计算 布尔运算执行 |
内存溢出、运行时间过长 | 优化分区大小、增加并行核心数 |
| 结果聚合 | 去重合并 违例分级 |
分区边界重复违例 | 调整分区重叠区域设置 |
| 结果输出 | 格式转换 报告生成 |
输出文件过大、格式不兼容 | 选择二进制数据库格式,减少冗余信息 |
3.4 运行流程中的性能监控
在DRC运行过程中,工具通常会输出实时日志,记录各阶段的执行时间和资源消耗。以下是一个典型的日志片段:
// DRC运行日志示例(Calibre)
INFO: Reading GDS file 'top.gds' ... Done. (12.3s, 2.1GB)
INFO: Loading rule file 'drc_rule.svrf' ... Done. (0.8s)
INFO: Compiling rules ... Done. (3.2s)
INFO: Partitioning layout (tile size: 100x100um) ... Done. (1.5s)
INFO: Running DRC checks on 64 partitions using 16 cores ...
INFO: [1/64] Width check ... Done. (4.2s)
INFO: [1/64] Spacing check ... Done. (6.8s)
INFO: [1/64] Density check ... Done. (15.3s)
INFO: Aggregating results ... Done. (2.1s)
INFO: Writing DRC database ... Done. (1.4s)
INFO: Total runtime: 47.6s | Peak memory: 8.3GB
INFO: Total violations: 1,234 (Fatal: 45, Warning: 1,189)
通过分析日志中的时间分布,可以快速定位性能瓶颈。例如,若密度检查耗时占比过高,可考虑优化密度检查的窗口大小或采样频率。
3.5 流程优化策略
基于对DRC运行流程的深入理解,可以采取以下优化策略:
- 层次化运行:对标准单元库、IP模块等重复性高的部分单独运行DRC,顶层只做连接性检查,减少重复计算。
- 增量运行:仅对修改过的区域重新运行DRC,避免全芯片重新计算。
- 规则分级:将规则分为快速检查(如宽度、间距)和慢速检查(如密度、天线),先运行快速检查过滤掉大部分违例区域。
- 分区优化:根据版图密度分布动态调整分区大小,在密度高的区域使用更小的分区以平衡负载。
通过以上流程解析和优化策略,芯片物理验证工程师可以更高效地完成DRC运行,缩短验证周期,提升芯片设计的整体效率。