3. DRC运行流程:从GDS/OASIS输入到结果输出的完整流程与关键步骤

DRC(Design Rule Check,设计规则检查)是芯片物理验证中最核心的环节之一。其运行流程从版图数据输入开始,经过规则加载、几何运算、违例检测、结果输出等多个阶段,最终生成可供设计师定位和修复的DRC报告。理解这一完整流程,对于优化DRC运行性能、减少迭代次数、提升验证效率至关重要。

3.1 DRC运行流程全景图

下图展示了DRC工具从输入到输出的完整处理流水线。整个流程可划分为五个主要阶段:数据输入、规则加载与编译、几何运算与违例检测、结果聚合与分级、报告输出与可视化。

DRC运行流程全景图 阶段1:数据输入 GDS / OASIS 版图 层次映射表 (LAYER MAP) 阶段2:规则加载 DRC 规则文件 (SVRF/TVF) 规则编译与优化 阶段3:几何运算 布尔运算 / 尺寸检查 密度 / 天线检查 阶段4:结果聚合 违例分类与分级 坐标 / 层次关联 阶段5:结果输出 DRC 报告 / 数据库 迭代修复反馈回路 关键说明: • 数据输入阶段需确认GDS/OASIS版本与层次映射表的一致性,避免因层次编号错误导致误报。 • 规则加载阶段,现代EDA工具会对SVRF/TVF规则进行预编译和优化,减少运行时开销。 • 几何运算阶段是性能瓶颈所在,合理的层次派生和运算顺序可显著提升运行速度。 • 结果输出阶段支持多种格式(ASCII、二进制数据库、GUI交互式浏览),便于不同场景使用。

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误报的常见原因之一。

实践建议:在启动DRC运行前,先使用工具自带的版图浏览器(如Calibre RVE、ICV Workbench)快速检查层次映射是否正确,可避免因映射错误导致的无效运行。

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核心并行处理,大幅缩短运行时间。

性能调优要点:在规则编写时,应尽量将运算量大的检查(如密度检查)放在流程后面,利用前面检查的结果过滤掉无效区域,减少计算量。同时,合理设置分区大小(Tile Size)可平衡并行效率与内存开销。

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)

通过分析日志中的时间分布,可以快速定位性能瓶颈。例如,若密度检查耗时占比过高,可考虑优化密度检查的窗口大小或采样频率。

注意:在大型SoC设计中,DRC运行时间可能长达数小时甚至数天。建议在运行前使用工具的预估模式(如Calibre的-estimate选项)快速评估运行时间和资源需求,避免因资源不足导致运行失败。

3.5 流程优化策略

基于对DRC运行流程的深入理解,可以采取以下优化策略:

  • 层次化运行:对标准单元库、IP模块等重复性高的部分单独运行DRC,顶层只做连接性检查,减少重复计算。
  • 增量运行:仅对修改过的区域重新运行DRC,避免全芯片重新计算。
  • 规则分级:将规则分为快速检查(如宽度、间距)和慢速检查(如密度、天线),先运行快速检查过滤掉大部分违例区域。
  • 分区优化:根据版图密度分布动态调整分区大小,在密度高的区域使用更小的分区以平衡负载。

通过以上流程解析和优化策略,芯片物理验证工程师可以更高效地完成DRC运行,缩短验证周期,提升芯片设计的整体效率。