3. DRC文件结构解析:标准DRC deck的组成与Calibre SVRF语法基础

DRC(Design Rule Check)规则文件通常被称为“DRC deck”,是物理验证工具执行检查的依据。一个标准DRC deck由层定义、规则语句和派生层三大核心模块构成。Calibre作为业界主流物理验证工具,其SVRF(Standard Verification Rule Format)语法是编写DRC deck的事实标准。本章将深入解析DRC deck的骨架结构,并系统讲解SVRF语法基础。

核心认知:DRC deck本质上是“层操作 + 几何运算 + 规则比较”的指令序列。理解其文件结构,是后续自动化验证与错误调试的基石。

3.1 标准DRC deck的三层架构

一个完整的DRC deck通常遵循“输入定义 → 中间处理 → 规则输出”的逻辑流程。其物理结构可划分为以下三个层次:

层次 功能描述 典型内容
层定义 (Layer Definition) 将GDSII/OASIS中的层号映射为可读的层名,并指定派生层来源 LAYER M1 16、LAYER VIA 17、LAYER M2 18
派生层 (Derived Layer) 通过布尔运算、几何运算从原始层生成中间层,用于规则检查 AND M1 VIA、SIZE M1 BY 0.1、NOT M1 M2
规则语句 (Rule Statement) 定义具体的几何约束条件,并输出检查结果 WIDTH M1 >= 0.18、SPACE M1 M2 >= 0.2
实战提示:在大型项目中,DRC deck往往按功能模块拆分(如金属层规则、通孔规则、阱规则),通过INCLUDE语句组合,便于团队协作维护。
标准DRC Deck 三层架构流程图 第一层:层定义 (Layer Definition) LAYER M1 16; LAYER VIA 17; LAYER M2 18 第二层:派生层 (Derived Layer) M1_VIA = AND M1 VIA; M1_EXP = SIZE M1 BY 0.1 第三层:规则语句 (Rule Statement) WIDTH M1 >= 0.18; SPACE M1 M2 >= 0.2

3.2 层定义:从GDSII编号到逻辑层名

层定义是DRC deck的入口。GDSII文件使用数字编号(如16、17、18)标识物理层,而DRC deck通过LAYER语句将其映射为有意义的名称,便于后续规则编写。

// 基本层定义语法
LAYER M1 16          // 将GDSII层号16命名为M1
LAYER VIA 17         // 将GDSII层号17命名为VIA
LAYER M2 18          // 将GDSII层号18命名为M2

// 多GDSII层合并定义
LAYER METAL 16, 18   // 将层16和18合并为METAL层

// 文本层定义(用于标签识别)
LAYER TEXT_M1 16:1   // 层16的datatype 1作为文本层
常见错误:层号与datatype组合错误是DRC运行失败的常见原因。务必与版图设计团队确认GDSII的层号映射表(Layer Map),避免“层未定义”或“层数据为空”的错误。

3.3 派生层:几何运算与布尔逻辑

派生层是DRC deck的“中间变量”,通过对原始层进行几何变换生成。Calibre SVRF支持丰富的派生层操作,包括布尔运算、尺寸运算、逻辑运算等。

3.3.1 布尔运算

运算符 含义 示例 说明
AND 逻辑与(交集) AND M1 VIA M1与VIA重叠的区域
OR 逻辑或(并集) OR M1 M2 M1和M2的合并区域
NOT 逻辑非(差集) NOT M1 VIA M1中除去VIA的部分
XOR 逻辑异或 XOR M1 M2 M1和M2不重叠的区域

3.3.2 几何尺寸运算

// 尺寸放大(外扩)
M1_EXP = SIZE M1 BY 0.1          // M1向外扩大0.1μm

// 尺寸缩小(内缩)
M1_SHR = SIZE M1 BY -0.05        // M1向内缩小0.05μm

// 非对称尺寸变化
M1_ASYM = SIZE M1 BY 0.1 0.2     // X方向扩大0.1μm,Y方向扩大0.2μm

// 斜角处理
M1_CHAMFER = CHAMFER M1 BY 0.05  // 对M1的直角进行45°切角
派生层布尔运算示意图 层A 原始层 层B 原始层 AND 交集 OR 并集 NOT 差集 派生层命名规范 建议使用“原始层_操作”格式,如 M1_VIA_AND、M1_EXP,便于调试追溯

3.4 规则语句:检查约束与结果输出

规则语句是DRC deck的“判决器”,定义几何约束条件并生成检查结果。Calibre SVRF规则语句遵循“检查类型 + 层名 + 约束条件”的语法结构。

3.4.1 常用规则语句类型

规则类型 语法示例 检查内容
宽度检查 WIDTH M1 >= 0.18 M1层所有图形的宽度必须≥0.18μm
间距检查 SPACE M1 M2 >= 0.2 M1与M2图形之间的间距必须≥0.2μm
面积检查 AREA M1 >= 0.05 M1层每个独立图形的面积必须≥0.05μm²
包围检查 ENC VIA M1 >= 0.05 M1对VIA的包围宽度必须≥0.05μm
密度检查 DENSITY M1 >= 0.3 M1层在窗口内的密度必须≥30%

3.4.2 规则语句的完整结构

// 规则语句完整语法模板
[RULE_NAME] {
    @ 规则描述注释(可选)
    CHECK_TYPE layer_name [layer_name2] operator value
    [OUTPUT layer_name [RESULT]]   // 结果输出控制
}

// 实际示例:M1最小宽度检查
M1_MIN_WIDTH {
    @ 检查M1层最小宽度,标准为0.18μm
    WIDTH M1 >= 0.18
    OUTPUT M1_WIDTH_ERR RESULT   // 将违规图形输出到错误层
}

// 多条件组合规则
M1_M2_SPACE {
    @ 检查M1与M2间距,标准为0.2μm
    SPACE M1 M2 >= 0.2
    OUTPUT M1_M2_SPACE_ERR RESULT
}
调试技巧:在规则语句前添加@注释,记录规则来源、设计标准版本和修改历史。使用OUTPUT ... RESULT将违规图形输出到指定层,便于在版图编辑器中高亮定位。

3.5 Calibre SVRF语法基础速查

SVRF语法是Calibre工具的原生规则描述语言,掌握其基础语法是编写和调试DRC deck的前提。以下列出最常用的语法元素:

3.5.1 注释与语句分隔

// 单行注释(推荐使用)
# 单行注释(兼容格式)
/* 多行注释
   可以跨越多行 */

// 语句分隔符:分号或换行
LAYER M1 16; LAYER M2 18   // 分号分隔
LAYER VIA 17                // 换行分隔

3.5.2 变量与表达式

// 变量定义
MIN_WIDTH = 0.18
MIN_SPACE = 0.2

// 变量引用
WIDTH M1 >= MIN_WIDTH
SPACE M1 M2 >= MIN_SPACE

// 算术表达式
M1_EXP = SIZE M1 BY MIN_WIDTH * 0.5

3.5.3 条件与分支

// IF-ELSE 条件分支
IF ( TECH_NODE == "28nm" ) {
    WIDTH M1 >= 0.18
} ELSE {
    WIDTH M1 >= 0.24
}

// CASE 多分支
CASE ( LAYER_STACK ) {
    "TOP" : WIDTH M1 >= 0.18
    "BOTTOM" : WIDTH M1 >= 0.24
    DEFAULT : WIDTH M1 >= 0.20
}
Calibre SVRF 语法结构树 SVRF 规则文件 层定义 (LAYER) 派生层 (Derived) 规则语句 (Rule) LAYER 名称 编号 DATATYPE 映射 多GDS合并 AND/OR/NOT SIZE 缩放 CHAMFER 切角 WIDTH/SPACE AREA/DENSITY ENC 包围 SVRF 语法核心原则 大小写不敏感 · 语句以分号或换行结束 · 变量名区分大小写 · 注释不影响执行

3.6 DRC deck的完整示例

以下是一个针对28nm工艺的简化DRC deck示例,展示了层定义、派生层和规则语句的完整协作:

// ============================================
// 28nm 工艺 DRC Deck - 金属层规则示例
// 版本: v1.0
// ============================================

// ---------- 层定义 ----------
LAYER M1 16
LAYER VIA1 17
LAYER M2 18
LAYER CONT 19

// ---------- 派生层 ----------
// 生成M1与VIA1的交集区域
M1_VIA_AND = AND M1 VIA1

// M1向外扩大0.05μm用于包围检查
M1_EXP = SIZE M1 BY 0.05

// 生成M1与M2的合并层
M1_M2_OR = OR M1 M2

// ---------- 规则语句 ----------
// 规则1: M1最小宽度
M1_WIDTH {
    @ M1最小宽度0.18μm
    WIDTH M1 >= 0.18
    OUTPUT M1_WIDTH_ERR RESULT
}

// 规则2: M1与M2最小间距
M1_M2_SPACE {
    @ M1与M2间距0.2μm
    SPACE M1 M2 >= 0.2
    OUTPUT M1_M2_SPACE_ERR RESULT
}

// 规则3: VIA1被M1包围的最小宽度
VIA1_ENC_M1 {
    @ VIA1被M1包围0.05μm
    ENC VIA1 M1 >= 0.05
    OUTPUT VIA1_ENC_ERR RESULT
}

// 规则4: M1最小面积
M1_AREA {
    @ M1独立图形面积不小于0.05μm²
    AREA M1 >= 0.05
    OUTPUT M1_AREA_ERR RESULT
}
关键总结:DRC deck的编写遵循“先定义、后派生、再检查”的固定流程。层定义建立数据映射,派生层生成中间检查对象,规则语句完成约束验证。掌握SVRF语法中的层操作、布尔运算和规则语句结构,是进行DRC自动化验证和错误分析的基础。