2. DRC规则文件解析:结构、语法与常见命令
DRC(Design Rule Check)规则文件是物理验证工具执行检查的依据,通常以标准格式编写。主流格式包括 SVRF(Standard Verification Rule Format) 和 TCL(Tool Command Language)。本章深入解析这两种规则文件的结构层次、核心语法与高频命令,帮助工程师快速读懂并优化规则。
2.1 规则文件的整体结构层次
无论是 SVRF 还是 TCL 格式,DRC 规则文件通常遵循“层定义 → 派生层运算 → 检查语句 → 输出控制”的线性结构。下表对比了两种格式在结构上的对应关系:
| 结构层次 | SVRF 示例 | TCL 示例 | 说明 |
|---|---|---|---|
| 层定义 | LAYER M1 31 |
setLayer M1 31 |
将 GDS 层号映射为逻辑名称 |
| 派生层运算 | M1_AND_V1 = M1 AND V1 |
setLayer M1_AND_V1 [and M1 V1] |
通过布尔/几何运算生成中间层 |
| 检查语句 | WIDTH M1_ACTIVE < 0.18 |
checkWidth M1_ACTIVE -min 0.18 |
定义具体的几何约束检查 |
| 输出控制 | RESULT DRC_RESULTS |
setResultDB DRC_RESULTS |
指定结果数据库路径与格式 |
关键认知: 规则文件的本质是“层操作 + 约束断言”。理解层派生链是分析 DRC 违例根源的前提。
2.2 SVRF 语法核心与常见命令
SVRF 是 Calibre 工具的原生规则格式,采用“命令 + 参数”的声明式语法,不区分大小写,注释以 // 或 /* */ 标记。
2.2.1 层定义与派生
// 基础层定义
LAYER M1 31
LAYER V1 32
LAYER M2 33
// 派生层:布尔运算
M1_ACTIVE = M1 AND DIFF
M1_GATE = M1 AND POLY
// 派生层:尺寸运算
M1_ENLARGE = M1 ENLARGE 0.1
M1_TRIM = M1 NOT M1_ENLARGE
2.2.2 几何检查命令
| 命令 | 语法示例 | 检查内容 |
|---|---|---|
WIDTH |
WIDTH M1 < 0.18 |
检查线宽是否小于最小值 |
SPACE |
SPACE M1 < 0.20 |
检查同层间距是否小于最小值 |
AREA |
AREA M1 < 0.05 |
检查图形面积是否小于阈值 |
ENC |
ENC V1 M1 < 0.06 |
检查通孔被下层金属包围的余量 |
OVLAP |
OVLAP M1 V1 < 0.10 |
检查两层交叠区域尺寸 |
EXT |
EXT M1 M2 < 0.30 |
检查不同层之间的边缘间距 |
实战技巧: SVRF 中
INT 命令用于检查内部间距(如槽孔间距),EXTERNAL 用于检查外部间距。区分两者对分析复杂违例至关重要。
2.2.3 控制流与输出
// 条件检查(IF 结构)
IF { M1_ACTIVE != NULL } {
WIDTH M1_ACTIVE < 0.18
}
// 结果输出
RESULT DRC_RESULTS
RESULT_FORMAT ASCII
RESOLUTION 1000
2.3 TCL 语法核心与常见命令
TCL 格式在 ICV、PVS 等工具中广泛使用,采用“命令 + 选项 + 参数”的函数式语法,支持变量、循环和过程化编程。
2.3.1 层定义与派生
# 基础层定义
setLayer M1 31
setLayer V1 32
setLayer M2 33
# 派生层:布尔运算
setLayer M1_ACTIVE [and M1 DIFF]
setLayer M1_GATE [and M1 POLY]
# 派生层:尺寸运算
setLayer M1_ENLARGE [size M1 0.1]
setLayer M1_TRIM [not M1 M1_ENLARGE]
2.3.2 几何检查命令
| 命令 | 语法示例 | 检查内容 |
|---|---|---|
checkWidth |
checkWidth M1 -min 0.18 |
检查线宽最小值 |
checkSpace |
checkSpace M1 -min 0.20 |
检查同层间距最小值 |
checkArea |
checkArea M1 -min 0.05 |
检查图形面积最小值 |
checkEnclosure |
checkEnclosure V1 M1 -min 0.06 |
检查通孔包围余量 |
checkOverlap |
checkOverlap M1 V1 -min 0.10 |
检查交叠区域尺寸 |
checkSpacing |
checkSpacing M1 M2 -min 0.30 |
检查不同层边缘间距 |
常见陷阱: TCL 格式中
checkSpacing 默认检查的是“边缘到边缘”距离,而 checkOverlap 检查的是“交叠区域尺寸”。混淆两者会导致规则语义错误,产生大量假违例。
2.3.3 变量与过程化控制
# 变量定义
set MIN_WIDTH 0.18
set MIN_SPACE 0.20
# 条件检查
if {[layerExists M1_ACTIVE]} {
checkWidth M1_ACTIVE -min $MIN_WIDTH
}
# 循环检查多个层
foreach layer {M1 M2 M3} {
checkWidth $layer -min $MIN_WIDTH
}
# 结果输出
setResultDB DRC_RESULTS -format GDSII
2.4 SVRF 与 TCL 语法对比总结
| 对比维度 | SVRF | TCL |
|---|---|---|
| 语法风格 | 声明式,命令+参数 | 函数式,命令+选项+参数 |
| 注释符号 | // 或 /* */ |
# |
| 变量支持 | 有限(通过 DEFINE) |
原生支持 set 变量 |
| 流程控制 | IF、SELECT |
if、foreach、while |
| 层运算 | AND、OR、NOT、ENLARGE |
and、or、not、size |
| 检查命令 | WIDTH、SPACE、ENC |
checkWidth、checkSpace、checkEnclosure |
| 适用工具 | Calibre | ICV、PVS、Assura |
2.5 规则文件解析流程
当面对一个陌生规则文件时,建议按以下步骤进行解析:
- 识别格式:查看文件头注释或第一行命令,判断是 SVRF 还是 TCL。
- 提取层映射表:扫描所有
LAYER或setLayer语句,建立 GDS 层号与逻辑名称的对应关系。 - 追踪派生层链:从基础层出发,逐层追踪布尔运算和尺寸运算,绘制层依赖图。
- 定位检查语句:找到所有
WIDTH/SPACE/checkWidth/checkSpace等检查命令,记录检查对象和阈值。 - 理解输出配置:查看
RESULT或setResultDB语句,确认结果数据库的格式和路径。
效率建议: 使用文本编辑器的“大纲视图”或“折叠功能”快速定位规则文件的四大结构块。对于超过 10 万行的复杂规则文件,建议先运行
grep -n "LAYER\|WIDTH\|SPACE\|checkWidth\|checkSpace" 提取关键行。
2.6 规则文件结构可视化
下图展示了一个典型 DRC 规则文件从层定义到结果输出的完整数据流:
2.7 常见命令速查表
以下速查表覆盖了 DRC 规则文件中最高频使用的命令,按功能分类:
| 功能分类 | SVRF 命令 | TCL 命令 | 典型用途 |
|---|---|---|---|
| 层定义 | LAYER |
setLayer |
映射 GDS 层号 |
| 布尔运算 | AND、OR、NOT |
and、or、not |
生成派生层 |
| 尺寸运算 | ENLARGE、SHRINK |
size、shrink |
扩展/收缩图形 |
| 线宽检查 | WIDTH |
checkWidth |
检查最小线宽 |
| 间距检查 | SPACE |
checkSpace |
检查最小间距 |
| 面积检查 | AREA |
checkArea |
检查最小面积 |
| 包围检查 | ENC |
checkEnclosure |
检查通孔包围余量 |
| 交叠检查 | OVLAP |
checkOverlap |
检查交叠区域 |
| 边缘间距 | EXT |
checkSpacing |
检查不同层间距 |
| 条件控制 | IF、SELECT |
if、foreach |
流程分支与循环 |
| 结果输出 | RESULT |
setResultDB |
指定输出路径 |
学习路径: 建议先掌握 SVRF 的
WIDTH、SPACE、ENC 三个核心命令,再对照学习 TCL 的对应命令。理解层派生链是连接“规则文件”与“DRC 违例”的桥梁。