2. DRC规则文件解析:规则文件格式、语句结构与派生层

DRC(Design Rule Check)规则文件是物理验证工具执行检查的依据,它定义了芯片制造工艺对版图几何图形的约束条件。理解规则文件的格式、语句结构以及派生层的构建逻辑,是准确解读DRC结果、定位版图违例的基础。本节将系统解析主流规则文件的组织方式与核心语法。

2.1 规则文件格式:SVRF与TCL

业界主流的DRC规则文件格式主要有两种:SVRF(Standard Verification Rule Format)和TCL(Tool Command Language)。SVRF是Calibre工具的原生格式,而TCL则被ICV、PVS等工具广泛采用。两种格式在语法风格和扩展能力上存在差异,但核心的几何约束表达逻辑相通。

对比维度 SVRF(Calibre) TCL(ICV / PVS)
语法风格 关键字驱动,接近自然语言描述 脚本语言风格,支持变量、过程、条件
可读性 规则语句直观,易于工艺工程师阅读 需要一定的编程思维,灵活性更高
扩展能力 通过内部函数和宏实现扩展 原生支持循环、分支、自定义函数
典型工具 Calibre DRC / LVS ICV, PVS, Assura
文件后缀 .svrf 或 .rul .tcl 或 .drc
格式选择要点: SVRF格式在先进工艺节点(7nm及以下)的复杂规则描述中仍占主导地位,因其对几何运算的封装更稳定;TCL格式则在需要高度定制化检查流程的设计环境中更具优势。实际项目中,规则文件通常由Foundry提供,工程师需根据工具链选择对应格式。

2.2 规则语句核心结构

无论采用哪种格式,DRC规则语句都围绕三个核心要素构建:层定义(LAYER)、宽度检查(WIDTH)和间距检查(SPACING)。这些语句构成了物理验证的最小检查单元。

2.2.1 LAYER:层定义与派生

层定义是规则文件的起点,它告诉工具版图中哪些图形属于哪个物理层或派生层。派生层是通过布尔运算(AND、OR、NOT、XOR)或几何运算(SIZE、GROW、SHRINK)从基础层生成的中间层,用于构建更复杂的检查规则。

// SVRF 格式示例
LAYER M1 1000                    // 定义金属1层,GDS编号1000
LAYER V1 1100                    // 定义通孔1层,GDS编号1100
LAYER M2 1200                    // 定义金属2层,GDS编号1200

// 派生层定义:M1与V1的交集区域
LAYER M1_V1_OVERLAP = M1 AND V1

// 派生层定义:M1向外扩展0.1um后的区域
LAYER M1_ENLARGED = M1 SIZE 0.1

2.2.2 WIDTH:宽度检查

宽度检查用于确保版图中导线的宽度不小于工艺允许的最小值,避免因线宽过细导致电阻增大或电迁移失效。

// SVRF 格式:检查M1层最小宽度为0.18um
WIDTH M1 < 0.18  // 违例标记为M1.W.1

// TCL 格式:检查M1层最小宽度为0.18um
drc_check(M1, "width", 0.18, "M1.W.1")

2.2.3 SPACING:间距检查

间距检查确保同一层或不同层之间的图形保持足够距离,防止短路或漏电。间距检查可以针对同层、异层,也可以设置边缘到边缘、边缘到拐角等不同模式。

// SVRF 格式:检查M1层之间最小间距为0.2um
SPACING M1 < 0.2  // 违例标记为M1.S.1

// 异层间距检查:M1与M2之间最小间距0.3um
SPACING M1 M2 < 0.3  // 违例标记为M1M2.S.1

// TCL 格式:检查M1层之间最小间距0.2um
drc_check(M1, "spacing", 0.2, "M1.S.1")
实战提示: 在先进工艺中,WIDTH和SPACING检查往往不是单一数值,而是与线长、密度、相邻图形宽度相关的复杂约束。例如,长线宽度的最小值可能比短线更严格,这需要通过规则语句中的条件分支来实现。

2.3 规则层级与派生层构建

现代芯片制造工艺包含数十个物理层,而DRC规则需要在这些层之间建立复杂的逻辑关系。规则层级通过派生层的逐级构建,将基础物理层转化为具有特定几何意义的检查层,从而实现对复杂工艺约束的精确描述。

派生层的构建遵循“基础层 → 中间层 → 检查层”的层级递进关系。下图展示了从基础物理层到最终检查规则的典型派生流程。

派生层构建与规则层级关系 基础物理层 M1 / V1 / M2 基础物理层 OD / PO / CT 基础物理层 NW / PW / SN 布尔运算与几何变换 AND / OR / NOT / XOR / SIZE / GROW 中间派生层 M1_V1_OVERLAP 中间派生层 OD_PO_GATE 中间派生层 NW_ISO 检查规则 WIDTH / SPACING 检查规则 ENCLOSURE / DENSITY 检查规则 CURRENT DENSITY

2.4 规则文件组织与注释规范

一个完整的DRC规则文件通常包含数千行语句,良好的组织结构和注释规范对于维护和调试至关重要。规则文件一般按以下逻辑分区组织:

  1. 头部定义区: 包含工艺版本、单位定义、精度设置、全局变量声明。
  2. 层定义区: 所有基础物理层和派生层的定义,按工艺层次顺序排列。
  3. 规则检查区: 按检查类型分组(如金属层规则、通孔规则、阱规则),每组内按规则编号顺序排列。
  4. 辅助定义区: 包含错误标记格式、报告输出设置、排除区域定义等。
// SVRF 规则文件典型结构示例
// ============================
// 1. 头部定义
// ============================
PRECISION 1000  // 精度为0.001um
UNITS MICRONS

// ============================
// 2. 层定义
// ============================
LAYER M1 1000
LAYER V1 1100
LAYER M2 1200

// 派生层:M1与V1的交叠区域
LAYER M1_V1_OVERLAP = M1 AND V1

// ============================
// 3. 规则检查 - 金属层
// ============================
// M1最小宽度:0.18um
WIDTH M1 < 0.18  // M1.W.1

// M1最小间距:0.2um
SPACING M1 < 0.2  // M1.S.1

// M1与M2最小间距:0.3um
SPACING M1 M2 < 0.3  // M1M2.S.1

// ============================
// 4. 规则检查 - 通孔层
// ============================
// V1最小面积:0.04um²
AREA V1 < 0.04  // V1.A.1

// V1与M1的交叠包覆检查
LAYER V1_M1_ENCL = V1 ENCLOSURE M1 < 0.05  // V1.M1.E.1
常见陷阱: 派生层的定义顺序会影响检查结果。如果派生层A依赖于派生层B,则B必须在A之前定义。在大型规则文件中,层定义顺序错误是导致DRC运行报错或结果异常的常见原因之一。建议在规则文件头部维护一个层定义依赖关系表。

2.5 规则语句中的条件与变量

先进工艺的DRC规则往往不是固定数值,而是根据版图上下文动态变化的。SVRF和TCL格式都支持条件语句和变量,用于实现复杂的工艺约束。

功能 SVRF 示例 TCL 示例
变量定义 MIN_WIDTH_M1 = 0.18 set min_width_m1 0.18
条件分支 IF ( M1_WIDTH > 1.0 ) THEN ... if { $m1_width > 1.0 } { ... }
循环迭代 FOREACH layer IN { M1 M2 M3 } ... foreach layer { M1 M2 M3 } { ... }
几何函数 AREA( M1 ) area( M1 )

条件语句的典型应用场景包括:

  • 线宽相关间距: 当导线宽度大于某阈值时,间距要求可能放宽或收紧。
  • 密度相关规则: 根据局部图形密度动态调整最小宽度或间距。
  • 层次化规则: 顶层模块与底层模块采用不同的检查阈值。
条件规则执行流程示例 读取版图图形数据 线宽 > 1.0um? (条件判断) 是 宽松间距规则 间距 ≥ 0.25um 否 严格间距规则 间距 ≥ 0.18um 输出DRC检查结果

2.6 规则文件调试与验证

规则文件在正式用于全芯片检查前,必须经过充分的调试和验证。常见的调试方法包括:

  • 单规则运行: 在测试版图上只运行一条规则,验证其行为是否符合预期。
  • 派生层可视化: 输出中间派生层的GDS图形,人工检查布尔运算结果是否正确。
  • 违例注入测试: 在测试版图中故意制造违例,确认规则能够正确捕获。
  • 回归测试: 修改规则后,使用标准测试集验证未引入新的误报或漏报。
调试技巧: 在SVRF规则文件中,可以使用 DRC RESULTS DATABASE 语句将中间派生层输出为独立的GDS文件,便于在版图编辑器中逐层比对。例如:DRC RESULTS DATABASE intermediate_layers.gds M1_V1_OVERLAP。这是定位派生层定义错误最直接的方法。