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 规则文件解析流程

当面对一个陌生规则文件时,建议按以下步骤进行解析:

  1. 识别格式:查看文件头注释或第一行命令,判断是 SVRF 还是 TCL。
  2. 提取层映射表:扫描所有 LAYER 或 setLayer 语句,建立 GDS 层号与逻辑名称的对应关系。
  3. 追踪派生层链:从基础层出发,逐层追踪布尔运算和尺寸运算,绘制层依赖图。
  4. 定位检查语句:找到所有 WIDTH/SPACE/checkWidth/checkSpace 等检查命令,记录检查对象和阈值。
  5. 理解输出配置:查看 RESULT 或 setResultDB 语句,确认结果数据库的格式和路径。
效率建议: 使用文本编辑器的“大纲视图”或“折叠功能”快速定位规则文件的四大结构块。对于超过 10 万行的复杂规则文件,建议先运行 grep -n "LAYER\|WIDTH\|SPACE\|checkWidth\|checkSpace" 提取关键行。

2.6 规则文件结构可视化

下图展示了一个典型 DRC 规则文件从层定义到结果输出的完整数据流:

DRC 规则文件结构数据流 层定义 LAYER / setLayer 派生层运算 AND / OR / ENLARGE 几何检查 WIDTH / SPACE / ENC 条件控制 IF / foreach / SELECT 输出配置 RESULT / setResultDB 结果数据库 DRC_RESULTS 说明: 1. 层定义将 GDS 层号映射为逻辑名称,是规则文件的基础。 2. 派生层运算通过布尔/几何操作生成中间层,用于后续检查。 3. 几何检查语句定义具体的 DRC 约束,是规则的核心。 4. 条件控制和输出配置管理检查流程和结果存储。

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 违例”的桥梁。