2. DRC规则文件解析:规则文件格式、语句结构与派生层
DRC(Design Rule Check)规则文件是物理验证工具执行检查的依据,它定义了芯片制造工艺对版图几何图形的约束条件。理解规则文件的格式、语句结构以及派生层的构建逻辑,是准确解读DRC结果、定位版图违例的基础。本节将系统解析主流规则文件的组织方式与核心语法。
2.1 规则文件格式:SVRF与TCL
业界主流的DRC规则文件格式主要有两种:SVRF(Standard Verification Rule Format)和TCL(Tool Command Language)。SVRF是Calibre工具的原生格式,而TCL则被ICV、PVS等工具广泛采用。两种格式在语法风格和扩展能力上存在差异,但核心的几何约束表达逻辑相通。
| 对比维度 | SVRF(Calibre) | TCL(ICV / PVS) |
|---|---|---|
| 语法风格 | 关键字驱动,接近自然语言描述 | 脚本语言风格,支持变量、过程、条件 |
| 可读性 | 规则语句直观,易于工艺工程师阅读 | 需要一定的编程思维,灵活性更高 |
| 扩展能力 | 通过内部函数和宏实现扩展 | 原生支持循环、分支、自定义函数 |
| 典型工具 | Calibre DRC / LVS | ICV, PVS, Assura |
| 文件后缀 | .svrf 或 .rul |
.tcl 或 .drc |
2.2 规则语句核心结构
无论采用哪种格式,DRC规则语句都围绕三个核心要素构建:层定义(LAYER)、宽度检查(WIDTH)和间距检查(SPACING)。这些语句构成了物理验证的最小检查单元。
2.2.1 LAYER:层定义与派生
层定义是规则文件的起点,它告诉工具版图中哪些图形属于哪个物理层或派生层。派生层是通过布尔运算(AND、OR、NOT、XOR)或几何运算(SIZE、GROW、SHRINK)从基础层生成的中间层,用于构建更复杂的检查规则。
// SVRF 格式示例
LAYER M1 1000 // 定义金属1层,GDS编号1000
LAYER V1 1100 // 定义通孔1层,GDS编号1100
LAYER M2 1200 // 定义金属2层,GDS编号1200
// 派生层定义:M1与V1的交集区域
LAYER M1_V1_OVERLAP = M1 AND V1
// 派生层定义:M1向外扩展0.1um后的区域
LAYER M1_ENLARGED = M1 SIZE 0.1
2.2.2 WIDTH:宽度检查
宽度检查用于确保版图中导线的宽度不小于工艺允许的最小值,避免因线宽过细导致电阻增大或电迁移失效。
// SVRF 格式:检查M1层最小宽度为0.18um
WIDTH M1 < 0.18 // 违例标记为M1.W.1
// TCL 格式:检查M1层最小宽度为0.18um
drc_check(M1, "width", 0.18, "M1.W.1")
2.2.3 SPACING:间距检查
间距检查确保同一层或不同层之间的图形保持足够距离,防止短路或漏电。间距检查可以针对同层、异层,也可以设置边缘到边缘、边缘到拐角等不同模式。
// SVRF 格式:检查M1层之间最小间距为0.2um
SPACING M1 < 0.2 // 违例标记为M1.S.1
// 异层间距检查:M1与M2之间最小间距0.3um
SPACING M1 M2 < 0.3 // 违例标记为M1M2.S.1
// TCL 格式:检查M1层之间最小间距0.2um
drc_check(M1, "spacing", 0.2, "M1.S.1")
2.3 规则层级与派生层构建
现代芯片制造工艺包含数十个物理层,而DRC规则需要在这些层之间建立复杂的逻辑关系。规则层级通过派生层的逐级构建,将基础物理层转化为具有特定几何意义的检查层,从而实现对复杂工艺约束的精确描述。
派生层的构建遵循“基础层 → 中间层 → 检查层”的层级递进关系。下图展示了从基础物理层到最终检查规则的典型派生流程。
2.4 规则文件组织与注释规范
一个完整的DRC规则文件通常包含数千行语句,良好的组织结构和注释规范对于维护和调试至关重要。规则文件一般按以下逻辑分区组织:
- 头部定义区: 包含工艺版本、单位定义、精度设置、全局变量声明。
- 层定义区: 所有基础物理层和派生层的定义,按工艺层次顺序排列。
- 规则检查区: 按检查类型分组(如金属层规则、通孔规则、阱规则),每组内按规则编号顺序排列。
- 辅助定义区: 包含错误标记格式、报告输出设置、排除区域定义等。
// SVRF 规则文件典型结构示例
// ============================
// 1. 头部定义
// ============================
PRECISION 1000 // 精度为0.001um
UNITS MICRONS
// ============================
// 2. 层定义
// ============================
LAYER M1 1000
LAYER V1 1100
LAYER M2 1200
// 派生层:M1与V1的交叠区域
LAYER M1_V1_OVERLAP = M1 AND V1
// ============================
// 3. 规则检查 - 金属层
// ============================
// M1最小宽度:0.18um
WIDTH M1 < 0.18 // M1.W.1
// M1最小间距:0.2um
SPACING M1 < 0.2 // M1.S.1
// M1与M2最小间距:0.3um
SPACING M1 M2 < 0.3 // M1M2.S.1
// ============================
// 4. 规则检查 - 通孔层
// ============================
// V1最小面积:0.04um²
AREA V1 < 0.04 // V1.A.1
// V1与M1的交叠包覆检查
LAYER V1_M1_ENCL = V1 ENCLOSURE M1 < 0.05 // V1.M1.E.1
2.5 规则语句中的条件与变量
先进工艺的DRC规则往往不是固定数值,而是根据版图上下文动态变化的。SVRF和TCL格式都支持条件语句和变量,用于实现复杂的工艺约束。
| 功能 | SVRF 示例 | TCL 示例 |
|---|---|---|
| 变量定义 | MIN_WIDTH_M1 = 0.18 |
set min_width_m1 0.18 |
| 条件分支 | IF ( M1_WIDTH > 1.0 ) THEN ... |
if { $m1_width > 1.0 } { ... } |
| 循环迭代 | FOREACH layer IN { M1 M2 M3 } ... |
foreach layer { M1 M2 M3 } { ... } |
| 几何函数 | AREA( M1 ) |
area( M1 ) |
条件语句的典型应用场景包括:
- 线宽相关间距: 当导线宽度大于某阈值时,间距要求可能放宽或收紧。
- 密度相关规则: 根据局部图形密度动态调整最小宽度或间距。
- 层次化规则: 顶层模块与底层模块采用不同的检查阈值。
2.6 规则文件调试与验证
规则文件在正式用于全芯片检查前,必须经过充分的调试和验证。常见的调试方法包括:
- 单规则运行: 在测试版图上只运行一条规则,验证其行为是否符合预期。
- 派生层可视化: 输出中间派生层的GDS图形,人工检查布尔运算结果是否正确。
- 违例注入测试: 在测试版图中故意制造违例,确认规则能够正确捕获。
- 回归测试: 修改规则后,使用标准测试集验证未引入新的误报或漏报。
DRC RESULTS DATABASE 语句将中间派生层输出为独立的GDS文件,便于在版图编辑器中逐层比对。例如:DRC RESULTS DATABASE intermediate_layers.gds M1_V1_OVERLAP。这是定位派生层定义错误最直接的方法。