3. SVRF语法基础:SVRF语言简介、关键字与标识符、注释规则、语句结构

SVRF(Standard Verification Rule Format)是 Calibre 平台的核心规则描述语言,用于定义 DRC、LVS、ERC 等物理验证规则。掌握 SVRF 语法是编写高质量 DRC 规则文件的前提。本节将系统介绍 SVRF 的语言特性、基本词法单元、注释规范以及语句组织方式。

3.1 SVRF语言简介

SVRF 是一种面向物理验证的领域特定语言(DSL),具有以下核心特征:

特性 说明
声明式 描述“检查什么”而非“如何检查”,验证引擎自动推导执行顺序
层次化 支持单元引用、派生层、逻辑运算,可处理复杂版图层次
几何运算 内置 AND、OR、NOT、SIZE、GROW、SHRINK 等图形操作符
规则驱动 通过 RULE 语句定义检查条件,输出违例标记
可扩展 支持变量、函数、条件编译、外部文件包含
设计理念:SVRF 的声明式风格使得规则文件独立于工艺节点——同样的语法结构可复用于 28nm、16nm、7nm 等不同工艺,只需调整数值参数和派生层定义。

3.2 关键字与标识符

3.2.1 保留关键字

SVRF 预定义了约 60 个保留关键字,用于控制规则结构、定义操作和声明对象。以下按功能分类列出最常用的关键字:

类别 关键字 用途
规则声明 RULE 定义一条检查规则
RULE_CHECK 定义带详细报告的控制规则
SELECT 选择检查范围(单元、区域)
EXCLUDE 排除特定单元或区域
层定义 LAYER 声明物理层或派生层
DERIVED 定义由运算得到的派生层
AND 图形逻辑与运算
OR 图形逻辑或运算
几何操作 SIZE 图形尺寸缩放(扩大/缩小)
GROW 图形向外扩展
SHRINK 图形向内收缩
检查约束 WIDTH 线宽检查
SPACE 间距检查
AREA 面积检查
流程控制 IF / ELSE 条件编译分支
INCLUDE 包含外部规则文件
避坑提示:关键字不区分大小写,但业界惯例使用大写以增强可读性。切勿将关键字用作变量名或层名,否则会导致解析错误。

3.2.2 标识符命名规则

标识符用于命名层、变量、规则和函数。SVRF 标识符遵循以下规范:

  • 字符集:字母(a-z, A-Z)、数字(0-9)、下划线(_)
  • 首字符:必须以字母或下划线开头,不能以数字开头
  • 长度限制:建议不超过 64 个字符,过长可能影响可读性
  • 保留字冲突:禁止与关键字同名
  • 命名风格:推荐使用大写字母加下划线(如 METAL1、POLY_OD)
// 合法标识符示例
LAYER M1           // 金属1层
LAYER CONT_VIA     // 接触孔层
DERIVED GATE = POLY AND OD   // 派生层:栅极
VARIABLE min_width = 0.18    // 变量:最小宽度

// 非法标识符示例
LAYER 1METAL       // 错误:以数字开头
LAYER M1-SPACE     // 错误:包含连字符
LAYER AND          // 错误:与关键字冲突

3.3 注释规则

SVRF 支持三种注释方式,用于提高规则文件的可维护性:

注释类型 语法 适用范围 示例
单行注释 // 行内或整行注释 // 定义金属1层
多行注释 /* ... */ 跨行注释块 /* 间距规则组:M1 到 M1 */
文档注释 /** ... */ 规则或变量说明(部分工具支持) /** 最小线宽:0.18um */
// ============================================
// 文件:drc_rules_28nm.svrf
// 功能:28nm 工艺 DRC 规则集
// 作者:IC 后端设计组
// 日期:2025-03-01
// ============================================

/* 层定义部分 */
LAYER M1 31          // 金属1层,GDS 层号 31
LAYER M2 32          // 金属2层,GDS 层号 32

/**
 * 派生层:金属1上的栅极区域
 * 由 POLY 和 OD 的交集定义
 */
DERIVED GATE = POLY AND OD

/* 规则检查部分 */
RULE WIDTH M1 0.18   // M1 最小线宽 0.18um
最佳实践:在规则文件头部使用多行注释块记录文件元信息(工艺节点、版本、作者);在每个规则组前使用单行注释说明检查目的;对复杂派生层使用文档注释解释运算逻辑。

3.4 语句结构

SVRF 语句采用自由格式,以分号(;)作为语句结束符。语句可以跨越多行,也可以在一行内书写多条语句。主要语句类型包括:

3.4.1 语句类型概览

语句类型 语法模式 示例
层声明 LAYER 层名 [GDS号]; LAYER M1 31;
派生层 DERIVED 层名 = 表达式; DERIVED GATE = POLY AND OD;
规则定义 RULE 检查类型 层名 参数; RULE WIDTH M1 0.18;
变量赋值 VARIABLE 变量名 = 值; VARIABLE min_spacing = 0.22;
条件编译 IF (条件) { ... } ELSE { ... } IF (TECH == "28nm") { ... }
文件包含 INCLUDE "文件名"; INCLUDE "common_rules.svrf";

3.4.2 语句组织与缩进

SVRF 不强制缩进,但良好的缩进风格能显著提升可读性。推荐采用以下组织方式:

// 推荐缩进风格
LAYER M1 31;
LAYER M2 32;
LAYER V1 33;

DERIVED M1_BLOCKED = M1 AND BLOCK_LAYER;
DERIVED M1_CORE    = M1 AND NOT M1_BLOCKED;

VARIABLE m1_width_min = 0.18;
VARIABLE m1_space_min = 0.22;

RULE WIDTH  M1_CORE m1_width_min;
RULE SPACE  M1_CORE m1_space_min;

// 条件编译块
IF (TECH == "28nm") {
    RULE WIDTH M1 0.18;
} ELSE {
    RULE WIDTH M1 0.24;
}

3.5 SVRF语句结构示意图

下图展示了 SVRF 规则文件的整体语句组织层次,从顶层文件包含到底层规则定义:

SVRF 语句结构层次图 SVRF 规则文件 (.svrf) INCLUDE 语句(文件包含) 层定义语句 变量与参数定义 规则检查语句 LAYER / DERIVED VARIABLE / CONSTANT RULE / RULE_CHECK AND / OR / NOT / SIZE WIDTH / SPACE / AREA 每条语句以分号(;)结束,支持跨行书写 注释不影响语句结构,仅用于文档说明 条件编译 IF/ELSE 可包裹任意语句块 INCLUDE 支持模块化规则文件组织

3.6 语句书写规范与常见错误

3.6.1 书写规范

  • 语句结束:每条完整语句必须以分号(;)结尾,遗漏分号是常见语法错误
  • 大小写:关键字不区分大小写,但层名和变量名区分大小写(M1 与 m1 不同)
  • 空白字符:空格、制表符、换行符均视为分隔符,不影响语义
  • 字符串:文件路径和注释中的字符串使用双引号(")包裹
  • 数值:支持整数和浮点数,单位默认为微米(um),可通过 UNITS 语句修改

3.6.2 常见语法错误

错误类型 错误示例 正确写法
遗漏分号 LAYER M1 31 LAYER M1 31;
关键字冲突 LAYER AND 10; LAYER AND_LAYER 10;
非法字符 LAYER M1-SPACE 31; LAYER M1_SPACE 31;
数字开头 LAYER 1METAL 31; LAYER METAL1 31;
注释未闭合 /* 注释未结束 /* 注释已结束 */
调试技巧:当 Calibre 报告语法错误时,首先检查行末是否缺少分号,其次检查层名是否与关键字冲突。使用 calibre -drc -turbo 1 单线程模式运行,错误信息更易定位。

3.7 SVRF语法解析流程

下图展示了 Calibre 引擎解析 SVRF 规则文件的完整流程,帮助理解语法结构如何被转换为可执行的检查规则:

Calibre SVRF 解析流程 词法分析 化:关键字、标识符、符号 语法分析 构建语法树(AST) 语义分析 层解析、变量绑定、类型检查 代码生成 生成内部检查指令 DRC 执行引擎 语法错误报告 行号 + 错误类型 + 上下文 解析过程中,注释被完全忽略,不参与任何分析阶段 条件编译(IF/ELSE)在词法分析后、语法分析前处理 INCLUDE 语句在词法分析阶段展开,被包含文件视为当前文件的一部分 变量替换在语义分析阶段完成,变量名被替换为实际数值
理解解析流程的意义:当规则文件出现错误时,了解解析阶段有助于快速定位问题。例如,层名未定义属于语义错误(阶段3),而遗漏分号属于语法错误(阶段2)。Calibre 的错误信息会明确指示错误类型和行号。