2. DRC规则文件解析:常见DRC规则文件格式(如SVRF、TCL),规则语句的基本结构与含义
DRC(Design Rule Check)规则文件是物理验证的“法律条文”,它定义了芯片制造过程中各层图形之间必须满足的几何约束。理解规则文件的格式与语句结构,是准确解读DRC违例报告、高效定位修复方向的前提。本章将深入解析业界最主流的两种规则文件格式——SVRF(Standard Verification Rule Format)与TCL(Tool Command Language)——并拆解其核心语句的构成要素。
2.1 规则文件格式概览
不同EDA厂商的物理验证工具采用不同的规则描述语言。下表对比了两种主流格式的核心差异:
| 对比维度 | SVRF(Calibre) | TCL(ICV / PVS) |
|---|---|---|
| 主导工具 | Mentor Calibre | Synopsys ICV / Cadence PVS |
| 语法风格 | 声明式、关键字驱动 | 过程式、脚本化 |
| 变量定义 | 使用 INTEGER / STRING 关键字 |
使用 set 命令 |
| 层运算 | 通过 AND / OR / NOT 等操作符 |
通过 geoAnd / geoOr / geoNot 等函数 |
| 检查语句 | WIDTH / SPACE / AREA 等内置检查 |
DRC CHECK + 几何函数 |
| 可读性 | 接近自然语言,适合规则编写 | 灵活性强,适合复杂条件控制 |
行业现状:目前全球约70%以上的先进工艺节点(7nm及以下)仍以SVRF格式作为主规则交付格式,但TCL格式在先进制程的复杂条件规则(如多重图形、OPC辅助规则)中应用日益广泛。
2.2 SVRF规则文件结构解析
SVRF文件采用“层定义 → 层运算 → 规则检查 → 结果输出”的线性结构。一个典型的SVRF规则文件包含以下核心段落:
- 头部声明:定义单位、精度、版本信息。
- 层定义:将设计中的GDS层号映射为逻辑层名称。
- 派生层运算:通过布尔运算或几何运算生成中间层。
- 规则检查:调用内置检查函数,设定约束值。
- 结果输出:指定违例报告格式与数据库输出。
2.2.1 层定义语句
// 层定义:将GDS层号映射为逻辑名称
LAYER M1 10 // 金属1层,GDS层号10
LAYER V1 11 // 通孔1层,GDS层号11
LAYER M2 20 // 金属2层,GDS层号20
LAYER DIFF 5 // 有源区层,GDS层号5
LAYER POLY 6 // 多晶硅层,GDS层号6
2.2.2 派生层运算语句
// 布尔运算生成中间层
GATE = POLY AND DIFF // 栅极层 = 多晶硅与有源区的交集
CONTACT_AREA = V1 AND M1 // 接触区域 = 通孔与金属1的交集
ACTIVE_NOT_GATE = DIFF NOT GATE // 有源区非栅极部分
2.2.3 规则检查语句
// 最小宽度检查
WIDTH M1 0.10 // M1最小宽度0.10μm
// 最小间距检查
SPACE M1 0.12 // M1最小间距0.12μm
// 最小面积检查
AREA M1 0.05 // M1最小面积0.05μm²
// 包围检查(通孔被金属包围的最小余量)
ENC V1 M1 0.04 BOTH // V1被M1包围的最小余量0.04μm(四周)
关键概念:SVRF中的检查语句通常包含三个要素:检查对象(层名)、约束值(数值+单位)、修饰符(如BOTH表示四周、SINGULAR表示单一方向)。理解修饰符的含义是准确解读DRC违例类型的关键。
2.3 TCL规则文件结构解析
TCL格式的规则文件将DRC规则封装为可执行的脚本过程。其核心结构包括:变量定义、层对象创建、几何运算函数调用、检查命令执行。
2.3.1 变量与层定义
# 设置工艺参数变量
set MIN_WIDTH_M1 0.10
set MIN_SPACE_M1 0.12
set MIN_AREA_M1 0.05
# 创建层对象
set layerM1 [dbCreateLayer "M1" 10]
set layerV1 [dbCreateLayer "V1" 11]
set layerM2 [dbCreateLayer "M2" 20]
2.3.2 几何运算与检查
# 派生层运算
set layerGate [geoAnd $layerPoly $layerDiff]
# 最小宽度检查
DRC CHECK "M1_MIN_WIDTH" {
geoWidth $layerM1 < $MIN_WIDTH_M1
}
# 最小间距检查
DRC CHECK "M1_MIN_SPACE" {
geoSeparation $layerM1 < $MIN_SPACE_M1
}
# 最小面积检查
DRC CHECK "M1_MIN_AREA" {
geoArea $layerM1 < $MIN_AREA_M1
}
注意:TCL格式中,检查条件使用“<”表示“小于约束值即违例”,这与SVRF中直接给出约束值的语义不同。在解读TCL格式的DRC报告时,需要明确违例条件是“小于”还是“大于”约束值。
2.4 规则语句的基本结构模型
无论是SVRF还是TCL,一条完整的DRC规则语句都可以抽象为以下四要素模型:
2.5 常见规则类型与语句对照
下表汇总了物理验证中最常用的10种DRC规则类型及其在SVRF和TCL中的典型语句写法:
| 规则类型 | 描述 | SVRF语句示例 | TCL语句示例 |
|---|---|---|---|
| WIDTH | 最小线宽 | WIDTH M1 0.10 |
geoWidth $layerM1 < 0.10 |
| SPACE | 最小间距 | SPACE M1 0.12 |
geoSeparation $layerM1 < 0.12 |
| AREA | 最小面积 | AREA M1 0.05 |
geoArea $layerM1 < 0.05 |
| ENC | 包围余量 | ENC V1 M1 0.04 BOTH |
geoEnclosure $layerV1 $layerM1 < 0.04 |
| DENSITY | 密度范围 | DENSITY M1 0.20 0.80 |
geoDensity $layerM1 < 0.20 || > 0.80 |
| STEP | 台阶高度 | STEP M1 0.15 |
geoStepHeight $layerM1 < 0.15 |
| EXT | 延伸长度 | EXT POLY DIFF 0.10 |
geoExtension $layerPoly $layerDiff < 0.10 |
| NOTCH | 凹槽宽度 | NOTCH M1 0.08 |
geoNotch $layerM1 < 0.08 |
| LENGTH | 最小长度 | LENGTH POLY 0.18 |
geoLength $layerPoly < 0.18 |
| CURL | 拐角间距 | CURL M1 0.15 |
geoCornerSpace $layerM1 < 0.15 |
2.6 规则文件中的注释与调试
良好的注释习惯能大幅提升规则文件的可维护性。两种格式均支持注释:
// SVRF注释:使用双斜杠
/* SVRF多行注释:使用斜杠星号 */
# TCL注释:使用井号
调试技巧:在SVRF文件中,可以使用
TRACE 语句输出中间层的几何数据,帮助验证派生层运算是否正确。例如:TRACE GATE 会将栅极层的所有图形输出到调试文件。
2.7 规则文件版本管理与兼容性
在实际项目中,规则文件会随工艺节点演进不断更新。以下是一个典型的规则文件版本头示例:
// SVRF版本头示例
// File: drc_rule_7nm_v2p3.svrf
// Technology: 7nm FinFET
// Revision: 2.3
// Date: 2024-06-15
// Author: PDK Team
// Description: 7nm BEOL DRC rules for M1-M10
PRECISION 1000 // 精度:1单位 = 0.001μm
UNITS MICRONS // 单位:微米
LAYER M1 10
LAYER V1 11
// ... 后续规则定义
版本兼容性风险:不同版本的Calibre工具对SVRF语法的支持存在差异。例如,Calibre 2020之前的版本不支持
DENSITY 语句中的 WINDOW 修饰符。在跨版本迁移规则文件时,务必查阅工具版本兼容性矩阵。
2.8 从规则语句到DRC违例的映射
理解规则语句的结构,最终是为了能够从DRC违例报告中反向定位到具体的规则定义。下图展示了这一映射关系:
通过上述映射关系,当你在DRC报告中看到“M1_MIN_WIDTH”违例时,可以快速回溯到规则文件中对应的 WIDTH M1 0.10 语句,明确检查对象是M1层、检查类型是最小线宽、约束值是0.10μm,从而准确判断版图修改方向。