3. PERC规则语言基础

PERC(Programmable Electrical Rule Check)建立在 Calibre 的 SVRF(Standard Verification Rule Format)语法体系之上。与 DRC 主要处理几何图形不同,PERC 的核心任务是把版图中的金属、通孔、扩散、多晶等几何对象,抽象成具有电气意义的节点(node)与路径(path),再在抽象后的电气网络上执行连通性、方向性、电位与保护关系检查。理解 SVRF 的语法要素、节点与路径的建模方式,以及常用内置函数与操作符,是写出可维护 PERC 规则的前提。

一、SVRF 语法要素:规则文件的基本骨架

一个 PERC 规则文件通常由若干条语句构成,每条语句以关键字开头,以换行或分号结束。最基础的语法要素包括:

  • 层定义:用 LAYER 把 GDS 层号/数据类型映射为规则中的逻辑层名,例如 LAYER M1 31 0 表示把 31/0 定义为 M1。
  • 层运算:支持 AND、OR、NOT、XOR、INSIDE、OUTSIDE、SIZE 等布尔与几何操作,用于构造派生层。
  • 变量与常量:用 ASSIGN 或直接赋值定义数值、字符串或层变量,便于参数化。
  • 连接定义:用 CONNECT 声明哪些层在物理接触时形成电气连接,例如金属与通孔、通孔与下层金属。
  • 器件识别:用 DEVICE 把特定几何组合识别为 MOS、二极管、电阻等器件,并提取其端子。
  • 检查语句:用 PERC 或 ERC 类关键字描述电气规则,输出违规结果。

这些要素不是孤立的,而是按“层→连接→器件→网络→检查”的顺序逐层构建。规则文件的可读性很大程度上取决于层名与变量命名是否清晰、连接关系是否显式声明。

二、电气节点与路径的建模方式

PERC 把版图抽象为一张电气图:节点代表等电位区域,边代表允许电流或信号通过的连接。建模时通常分三步:

  1. 提取连接层:把金属、通孔、扩散、多晶等导电层定义为可连接层,并声明层间接触关系。
  2. 合并等电位区域:通过 CONNECT 与 NET 操作,把物理上接触的导电图形合并为同一个电气节点。
  3. 建立路径:在节点之间根据器件端子、通孔链、金属走线形成有向或无向路径,用于后续的电流方向、保护顺序与压降检查。

节点建模的关键是“什么算连接”。例如,若只声明 M1 与 VIA1 连接、VIA1 与 M2 连接,则 M1 与 M2 通过 VIA1 间接连通;若漏掉 VIA1 与 M2 的连接,网络会被错误地切成两段,导致漏报或误报。路径建模则要区分无向路径(只关心是否连通)与有向路径(关心电流从哪个端子流向哪个端子),后者常用于 ESD 保护路径与电源钳位检查。

PERC 电气节点与路径建模示意 版图几何(抽象前) M1 VIA1 M2 DIFF POLY CONT 抽象 电气图(抽象后) N1 M1+VIA1+M2 N2 DIFF+CONT N3 POLY 路径 P1(有向) 路径 P2 路径 P3(无向) 有向路径 无向路径

三、常用内置函数与操作符

PERC 规则中频繁使用的内置函数与操作符大致可分为四类:

类别 典型函数/操作符 作用
层操作 AND、OR、NOT、XOR、SIZE、INSIDE 构造派生层、筛选区域、调整图形边界
连接与网络 CONNECT、NET、NET AREA、NET NAME 声明层间连接、提取网络、按面积或名称筛选网络
器件与端子 DEVICE、TERMINAL、GATE、SOURCE、DRAIN 识别器件并提取其电气端子,用于路径方向判定
检查与输出 PERC、ERC、REPORT、DFM 描述电气规则、输出违规结果与报告

操作符方面,比较常用的是 ==、!=、>、<、>=、<= 用于数值比较,&&、||、! 用于逻辑组合,+、-、*、/ 用于参数计算。例如,判断某网络是否同时连接到两个指定端子,可以写成 NET N1 CONNECTS TO TERMINAL A && NET N1 CONNECTS TO TERMINAL B 这类组合条件。

四、一个最小可运行的 PERC 规则片段

下面给出一个教学用的最小规则片段,用于检查 M1 与 M2 是否通过 VIA1 正确连通。示例中的层号与参数均为合理假设,实际项目需按工艺 PDK 替换。

LAYER M1    31 0
LAYER VIA1  51 0
LAYER M2    32 0

CONNECT M1 VIA1
CONNECT VIA1 M2

NET M1_NET = NET(M1)
NET M2_NET = NET(M2)

PERC CHECK_VIA_CONNECTIVITY {
  @ 检查 M1 与 M2 是否通过 VIA1 连通
  IF (M1_NET != M2_NET) {
    REPORT "M1 and M2 are not connected through VIA1"
  }
}

这段规则先定义三层,再声明 M1—VIA1、VIA1—M2 的连接关系,然后分别提取 M1 与 M2 的网络。若两者网络编号不同,说明 VIA1 没有把上下层金属连通,规则会输出报告。实际工程中还会加入 NET AREA 过滤、TERMINAL 方向判断以及多条件组合,但基本骨架与上述片段一致。

提示:写 PERC 规则时,建议先画出“层—连接—器件—网络—检查”的依赖链,再逐条落实为 SVRF 语句。连接声明一旦遗漏,后续所有网络与路径都会偏离真实电气行为,且往往难以通过单条检查语句发现。
注意:不同工艺节点与 PDK 对层号、通孔命名、器件识别方式可能不同。上述示例中的层号与函数写法仅用于说明语法结构,实际使用时必须以项目 PDK 与 Calibre 版本支持的语法为准。

掌握 SVRF 语法要素、节点与路径建模方式以及常用内置函数与操作符后,就可以开始编写针对具体电气规则的 PERC 检查。下一阶段的工作,是把这些基础能力组合成完整的 ESD、Latch-up、电源钳位与浮空网络检查规则。