4. DRC规则文件解析:标准DRC规则(如SVRF、TCL)的语法结构、层次化规则编写基础
DRC规则文件是物理验证的“法律条文”,它定义了芯片制造过程中各层几何图形必须满足的约束条件。无论是Calibre使用的SVRF(Standard Verification Rule Format)还是ICV使用的TCL-based规则,其核心都是通过层定义、逻辑运算和测量检查三个基本要素来构建检查项。本章将深入解析这两种主流规则语言的语法结构,并讲解层次化规则编写的核心方法。
核心认知:规则文件不仅仅是检查命令的集合,更是对工艺约束的精确数学建模。理解规则语法,是解读DRC结果、调试违例、甚至自定义检查项的基础。
4.1 SVRF语法结构(Calibre)
SVRF是一种专为物理验证设计的声明式语言,其语法简洁、层次分明。一个典型的SVRF规则文件由以下部分组成:
- 层定义(LAYER / DATATYPE):将GDSII中的层号映射为有意义的名称。
- 层运算(AND, OR, NOT, GROW, SHRINK等):通过布尔运算和几何操作生成中间层。
- 检查语句(WIDTH, SPACE, ENCLOSURE, AREA等):定义具体的几何约束。
- 规则组(RULE GROUP / IF…THEN):组织和管理检查项。
| 语法元素 | 示例 | 说明 |
|---|---|---|
| 层定义 | LAYER M1 10 |
将GDS层号10命名为M1 |
| 层运算 | M1_AND_V1 = M1 AND V1 |
生成M1与V1的交集层 |
| 宽度检查 | WIDTH M1 < 0.18 |
检查M1最小宽度是否小于0.18μm |
| 间距检查 | SPACE M1 < 0.20 |
检查M1之间的最小间距是否小于0.20μm |
| 包围检查 | ENCLOSURE V1 M1 < 0.10 |
检查M1对V1的包围是否小于0.10μm |
| 规则组 | RULE GROUP METAL1 { ... } |
将M1相关的检查打包 |
实战技巧:在Calibre中,
GROW和SHRINK操作是构建复杂检查的利器。例如,通过GROW M1 0.1可以生成M1的扩展区域,用于检查M1与相邻图形的间距是否满足要求。
4.2 TCL规则语法结构(ICV)
ICV采用TCL(Tool Command Language)作为规则语言,其语法更接近通用编程语言,支持变量、循环、条件判断等高级特性。ICV规则的核心是层对象和检查函数。
- 层对象(layer):通过
layer命令创建,支持布尔运算。 - 检查函数(check_width, check_space, check_enclosure等):执行具体的DRC检查。
- 变量与表达式:支持
set定义变量,使用expr进行算术运算。 - 流程控制:支持
if、foreach、proc等TCL原生语法。
# ICV TCL规则示例
set M1 [layer 10]
set V1 [layer 11]
# 层运算
set M1_AND_V1 [and $M1 $V1]
# 宽度检查
check_width $M1 -min 0.18 -output M1_width_violation
# 间距检查
check_space $M1 -min 0.20 -output M1_space_violation
# 包围检查
check_enclosure $V1 $M1 -min 0.10 -output V1_enclosure_violation
# 使用变量和条件
set min_width 0.18
if { [expr $min_width < 0.2] } {
check_width $M1 -min $min_width -output M1_width_violation
}
注意:ICV的TCL规则虽然灵活,但调试难度较高。建议在规则文件中大量使用
puts命令输出中间层信息,以便定位问题。
4.3 SVRF与TCL语法对比
| 对比维度 | SVRF(Calibre) | TCL(ICV) |
|---|---|---|
| 语言风格 | 声明式,专为DRC设计 | 脚本式,通用编程语言 |
| 层定义 | LAYER M1 10 |
set M1 [layer 10] |
| 布尔运算 | M1_AND_V1 = M1 AND V1 |
set M1_AND_V1 [and $M1 $V1] |
| 检查语法 | WIDTH M1 < 0.18 |
check_width $M1 -min 0.18 |
| 变量支持 | 有限(通过DEFINE) |
原生支持(set) |
| 流程控制 | 不支持 | 支持(if, foreach) |
| 调试难度 | 较低,语法直观 | 较高,需TCL基础 |
| 执行效率 | 高,引擎优化好 | 中等,脚本解释开销 |
4.4 层次化规则编写基础
现代芯片设计包含数亿个晶体管,如果将所有检查写在一个平面规则文件中,不仅维护困难,而且运行效率极低。层次化规则编写是解决这一问题的关键方法,其核心思想是将规则按设计层次(如标准单元、宏单元、顶层)进行分解和复用。
4.4.1 层次化规则的核心概念
- 单元(Cell):规则文件中的基本模块,对应设计中的一个标准单元或宏单元。
- 继承(Inheritance):子单元可以继承父单元的规则定义。
- 覆盖(Override):子单元可以修改或扩展父单元的规则。
- 上下文(Context):规则检查时考虑单元所处的环境(如邻近单元的影响)。
4.4.2 层次化规则编写示例(SVRF)
// 定义基础规则单元
RULE GROUP base_rules {
WIDTH M1 < 0.18
SPACE M1 < 0.20
}
// 定义标准单元规则,继承基础规则
RULE GROUP std_cell_rules EXTENDS base_rules {
// 覆盖M1间距规则,更严格
SPACE M1 < 0.22
// 新增内部检查
ENCLOSURE V1 M1 < 0.12
}
// 定义顶层规则,包含所有子单元
RULE GROUP top_rules {
// 引用标准单元规则
INCLUDE std_cell_rules
// 顶层特有的检查
WIDTH M1 < 0.20
}
4.4.3 层次化规则的优势
| 优势 | 说明 |
|---|---|
| 代码复用 | 基础规则只需定义一次,所有单元共享 |
| 维护便捷 | 修改基础规则,所有继承单元自动更新 |
| 运行效率 | 层次化检查避免重复计算,提升运行速度 |
| 调试友好 | 违例可以精确定位到具体单元和规则组 |
| 工艺适配 | 不同工艺节点只需修改基础规则层 |
最佳实践:在大型项目中,建议将规则文件按功能拆分为多个文件:
base_rules.svrf(基础规则)、std_cell_rules.svrf(标准单元规则)、memory_rules.svrf(存储器规则)、top_rules.svrf(顶层规则)。通过INCLUDE语句组织,实现模块化管理。
4.5 规则文件结构SVG图
下图展示了SVRF规则文件的典型层次化结构,从顶层到底层逐级细化:
4.6 层次化规则检查流程SVG图
下图展示了ICV中层次化规则检查的执行流程,从顶层到底层逐级展开:
4.7 规则编写常见陷阱与避坑指南
陷阱1:层运算顺序错误
在SVRF中,
在SVRF中,
M1_AND_V1 = M1 AND V1与M1_AND_V1 = V1 AND M1结果相同,但GROW和SHRINK的顺序会影响结果。例如:GROW (SHRINK M1 0.1) 0.1与SHRINK (GROW M1 0.1) 0.1结果不同。
避坑指南:在编写复杂规则时,建议使用
SAVE语句(SVRF)或write_layer命令(ICV)将中间层输出为GDS文件,通过图形化方式验证层运算的正确性。
陷阱2:层次化规则中的上下文丢失
在层次化检查中,如果子单元规则没有正确继承父单元的上下文(如邻近层信息),可能导致违例漏报或误报。例如,标准单元内部的M1间距检查,如果没有考虑顶层M1的邻近影响,可能遗漏跨单元违例。
在层次化检查中,如果子单元规则没有正确继承父单元的上下文(如邻近层信息),可能导致违例漏报或误报。例如,标准单元内部的M1间距检查,如果没有考虑顶层M1的邻近影响,可能遗漏跨单元违例。
避坑指南:在ICV中,使用
check_context命令显式指定检查上下文;在Calibre中,使用CONTEXT关键字定义检查范围。
4.8 本章小结
DRC规则文件是物理验证的核心,掌握SVRF和TCL的语法结构是进行规则编写和调试的基础。层次化规则编写通过继承、覆盖和模块化设计,有效解决了大规模芯片验证中的效率和维护问题。在实际项目中,建议根据团队技术栈选择规则语言,并建立统一的规则编写规范,确保规则文件的可读性和可维护性。