4. DRC结果文件解析
DRC(Design Rule Check)运行完成后,EDA工具会输出包含所有违规信息的结果文件。正确解析这些文件是定位和修复物理验证问题的前提。本章将深入剖析DRC结果文件的三种常见格式、基本结构、错误标记方式以及坐标系统。
4.1 DRC结果文件格式
根据工具和用户需求的不同,DRC结果文件主要分为以下三种格式:
| 格式类型 | 扩展名示例 | 特点 | 适用场景 |
|---|---|---|---|
| ASCII文本 | .drc, .txt, .log | 人类可读,体积较大,包含详细的错误描述、坐标和层次信息 | 调试、脚本解析、人工审查 |
| 二进制 | .db, .bin, .drcb | 机器可读,体积小,解析速度快,通常包含索引结构 | 大规模设计、工具间数据交换、GUI加载 |
| GDSII | .gds, .gds2 | 图形化标记,将错误标记为多边形或路径,可直接在版图编辑器中叠加显示 | 可视化定位、版图修复、最终签核 |
关键提示: 在大型SoC项目中,ASCII格式的DRC结果文件可能达到数GB。建议优先使用二进制格式进行自动化处理,仅在需要人工详细分析时导出ASCII摘要。
4.2 结果文件的基本结构
无论采用何种格式,一个完整的DRC结果文件通常遵循以下分层结构:
- 文件头(Header):包含工具名称、版本、运行日期、设计名称、工艺文件版本等元信息。
- 规则组(Rule Group):按规则类别(如金属间距、阱密度、天线效应)组织的错误集合。
- 违规条目(Violation Entry):每个具体的DRC错误,包含规则名称、违规类型、严重等级。
- 几何描述(Geometry Description):描述违规形状的坐标、层次、多边形顶点列表。
- 文件尾(Footer):汇总统计信息,如总错误数、各规则错误数、运行时间等。
解析技巧: 在编写自动化脚本解析ASCII结果时,建议先定位“Violation”或“Error”关键字,然后按规则名称分组提取坐标信息,避免逐行扫描整个文件。
4.3 错误标记与坐标系统
DRC工具在标记错误时,会使用特定的标记层(Marker Layer)和坐标系统来精确定位违规位置。
4.3.1 错误标记方式
常见的错误标记方式包括:
- 多边形标记(Polygon Marker):用实心或空心多边形直接勾勒出违规的几何区域,适用于面积类规则(如最小面积、密度)。
- 边缘标记(Edge Marker):用线段或路径标记违规的边或拐角,适用于间距类规则(如最小间距、包围)。
- 点标记(Point Marker):用一个坐标点指示违规位置,通常配合文字描述,适用于天线效应、ERC类规则。
- 层次化标记(Hierarchical Marker):在顶层标记违规,同时保留违规所在子模块的引用路径。
4.3.2 坐标系统
DRC结果文件中的坐标系统通常与版图数据库一致,遵循以下规范:
| 坐标属性 | 说明 | 示例 |
|---|---|---|
| 单位 | 通常为纳米(nm)或微米(μm),取决于工艺数据库单位 | 1 μm = 1000 nm |
| 原点 | 芯片左下角为 (0, 0),坐标值随芯片尺寸增大而增大 | 芯片右上角 (5000, 5000) |
| 精度 | 整数坐标,最小分辨率为数据库网格(如 1 nm 或 0.5 nm) | 坐标 (12345, 67890) |
| 层次偏移 | 子模块坐标相对于顶层原点的偏移量,用于层次化解析 | 偏移 (100, 200) |
常见陷阱: 不同EDA工具(如Calibre、ICV、Assura)对坐标原点的定义可能不同。有些工具将芯片中心定义为 (0,0),有些则使用左下角。在跨工具流转时,务必确认坐标偏移量,否则会导致错误定位偏差。
4.4 DRC结果文件结构示意图
下图展示了一个典型的ASCII格式DRC结果文件的内部结构,以及错误标记与坐标系统的对应关系:
4.5 ASCII格式示例解析
以下是一个典型的ASCII格式DRC结果文件片段,展示了规则名称、坐标和错误标记的对应关系:
// DRC 结果文件示例 (Calibre .drc 格式)
// 工具: Calibre v2023.3
// 设计: top_chip
// 工艺: 7nm_tech
RULE: M1_M2_VIA_ENCLOSURE (VIA1)
VIOLATION: 1
LAYER: M1
COORDINATES: (12345, 67890) (12400, 67950)
MARKER: POLYGON
DESCRIPTION: M1 enclosure of VIA1 is less than minimum 0.02um
VIOLATION: 2
LAYER: M2
COORDINATES: (23456, 78901)
MARKER: EDGE
DESCRIPTION: M2 edge to VIA1 edge spacing violation
RULE: METAL1_SPACING
VIOLATION: 3
LAYER: M1
COORDINATES: (34567, 89012) (34600, 89100)
MARKER: POLYGON
DESCRIPTION: M1 to M1 spacing 0.015um, required 0.020um
// 统计信息
TOTAL VIOLATIONS: 3
RUNTIME: 125.3 seconds
解析要点: 上述示例中,每个违规条目都包含了规则名称、层次、坐标和标记类型。在自动化脚本中,可以通过正则表达式提取“COORDINATES”后的数值对,并结合“MARKER”类型决定如何生成标记图形。
4.6 二进制与GDS格式的差异
与ASCII格式相比,二进制和GDS格式在存储和解析上有显著差异:
| 特性 | ASCII格式 | 二进制格式 | GDS格式 |
|---|---|---|---|
| 可读性 | 高(文本编辑器可打开) | 低(需专用工具解析) | 低(需版图工具打开) |
| 文件大小 | 大(冗余信息多) | 小(紧凑存储) | 中等(包含图形数据) |
| 解析速度 | 慢(逐行解析) | 快(随机访问) | 中等(需解析GDS记录) |
| 坐标精度 | 整数或浮点数 | 整数(数据库单位) | 整数(数据库单位) |
| 错误标记 | 文本描述+坐标 | 二进制结构+索引 | 图形多边形+层次 |
4.7 坐标系统转换示例
在层次化设计中,子模块的坐标需要经过偏移转换才能映射到顶层坐标。以下是一个转换示例:
// 子模块实例化信息
INSTANCE: u_core
ORIGIN: (1000, 2000) // 子模块在顶层中的左下角坐标
// 子模块内部的DRC错误坐标(相对于子模块原点)
LOCAL_COORD: (500, 300)
// 转换为顶层坐标
TOP_COORD_X = 1000 + 500 = 1500
TOP_COORD_Y = 2000 + 300 = 2300
注意: 如果子模块存在旋转(Rotation)或镜像(Mirror)操作,坐标转换还需要考虑变换矩阵。例如,旋转90度后,局部坐标 (x, y) 在顶层中变为 (y, -x) 再叠加偏移。在解析层次化DRC结果时,务必检查实例的变换属性。
4.8 本章小结
DRC结果文件的解析是物理验证流程中的关键环节。通过理解ASCII、二进制和GDS三种格式的差异,掌握文件的基本结构(文件头、规则组、违规条目、几何描述、文件尾),以及熟悉错误标记方式(多边形、边缘、点标记)和坐标系统(单位、原点、层次偏移),工程师可以高效地定位和修复设计规则违规。在实际项目中,建议结合自动化脚本和版图工具,实现从结果解析到错误修复的闭环流程。