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规则文件的典型层次化结构,从顶层到底层逐级细化:

SVRF规则文件层次化结构 SVRF规则文件层次化结构 top_rules(顶层规则) INCLUDE 语句(引用子规则组) std_cell_rules (标准单元规则) memory_rules (存储器规则) io_rules (IO规则) base_rules(基础规则:层定义 + 通用检查) WIDTH 检查 SPACE 检查 ENCLOSURE 检查

4.6 层次化规则检查流程SVG图

下图展示了ICV中层次化规则检查的执行流程,从顶层到底层逐级展开:

ICV层次化规则检查流程 ICV层次化规则检查流程 1. 加载设计数据库 2. 解析规则文件(TCL) 3. 构建层次化规则树 4a. 顶层检查 4b. 子单元检查 4c. 基础规则检查 5. 汇总违例并输出报告

4.7 规则编写常见陷阱与避坑指南

陷阱1:层运算顺序错误
在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的邻近影响,可能遗漏跨单元违例。
避坑指南:在ICV中,使用check_context命令显式指定检查上下文;在Calibre中,使用CONTEXT关键字定义检查范围。

4.8 本章小结

DRC规则文件是物理验证的核心,掌握SVRF和TCL的语法结构是进行规则编写和调试的基础。层次化规则编写通过继承、覆盖和模块化设计,有效解决了大规模芯片验证中的效率和维护问题。在实际项目中,建议根据团队技术栈选择规则语言,并建立统一的规则编写规范,确保规则文件的可读性和可维护性。