3、DRC规则文件解析(上):深入理解SVRF语法,包括LAYER、CONNECT、REGION等关键语句

各位同学,今天我们来聊聊DRC规则文件。说实话,很多新手看到那些密密麻麻的SVRF代码就头大。我当年也一样,第一次打开一个几万行的规则文件,整个人都是懵的。

但你别怕。规则文件再复杂,核心语法就那么几个。今天我们就把它拆开揉碎了讲。

3.1 SVRF是什么?

SVRF,全称是Standard Verification Rule Format。说白了,它就是芯片设计里用来写DRC、LVS规则的“语言”。

你想想看,我们要告诉EDA工具:哪些层要检查、哪些层要连在一起、哪些区域不能有东西……总得有个标准写法吧?SVRF就是干这个的。

我个人习惯把SVRF比作“给芯片画红线”。就像建筑图纸上标出哪些地方不能动,SVRF就是在版图上划出各种规矩。

3.2 LAYER语句:定义你的“图层”

LAYER是SVRF里最基础的语句。没有它,后面什么都干不了。

它的作用很简单:给版图上的每一层起个名字,告诉工具这层对应什么物理层。

LAYER M1 31
LAYER V1 32
LAYER M2 33

这里M1是层名,31是层号。层号是工艺厂定好的,不能乱写。我在项目中遇到过有人把M1和M2的层号写反了,结果跑DRC时全是假错,排查了两天才发现。

嗯,这里要注意:层名可以自己起,但最好和工艺文档保持一致。不然团队里其他人看不懂,你自己过两周也忘了。

小技巧:我习惯在LAYER语句后面加注释,写上这层的用途。比如:
LAYER M1 31 // 第一层金属,用于走线
别小看这个习惯,回头查问题时会省很多时间。

3.3 CONNECT语句:告诉工具“谁和谁连在一起”

CONNECT语句,是LVS检查的核心。它定义了不同层之间怎么连接。

举个例子:

CONNECT M1 V1
CONNECT V1 M2

这表示M1和V1可以连,V1和M2可以连。工具看到这个,就知道通孔(via)的作用是把上下两层金属接起来。

为什么会需要这个?你想想看,版图上M1和M2之间有个V1的方块,工具怎么知道它们是连通的?就是靠CONNECT语句告诉它的。

我曾经犯过一个低级错误:写LVS规则时忘了写M2到V1的CONNECT,结果所有跨层连线都报开路。当时查了整整一天,最后发现是少了一行代码。从那以后,我每次写完CONNECT都会逐条核对。

注意:CONNECT是有方向的。虽然大多数情况下双向都能用,但有些工艺会要求你按电流方向写。建议仔细看工艺文档。

3.4 REGION语句:划定“检查区域”

REGION语句,用来定义我们要在哪些区域做检查。

比如,有些规则只检查核心区,不检查IO区。或者只检查有源区,不检查空白区。REGION就是干这个的。

REGION core_region = INSIDE LAYER core_boundary
REGION io_region = OUTSIDE LAYER core_boundary

这里core_region是核心区,io_region是IO区。后面写DRC规则时,就可以指定只在某个REGION里检查。

我个人习惯把REGION分成三类:

  • 全局REGION:整个芯片都检查
  • 局部REGION:只检查特定模块
  • 排除REGION:某些区域不检查(比如dummy区域)

这样分类后,写规则会清晰很多。

3.5 知识体系总览

下面这张图,是我自己总结的SVRF核心语法结构。你看一眼,心里就有谱了。

SVRF核心语法结构 SVRF规则文件 LAYER 层定义 CONNECT 连接 REGION 区域 层名+层号 派生层 层运算 金属-通孔 通孔-金属 跨层连接 INSIDE OUTSIDE INTERSECT 三者配合使用,构成完整的DRC/LVS检查规则 💡 核心思路:先定义层 → 再定义连接 → 最后划定检查区域 顺序不能乱,否则工具会报错

3.6 实际案例:一个简单的DRC规则片段

光讲理论没意思。我们来看一个实际例子。假设我们要检查M1的最小宽度:

// 第一步:定义层
LAYER M1 31
LAYER V1 32

// 第二步:定义连接
CONNECT M1 V1

// 第三步:定义检查区域
REGION check_area = INSIDE LAYER active_region

// 第四步:写检查规则
M1_MIN_WIDTH = WIDTH M1 < 0.18
CHECK M1_MIN_WIDTH check_area

这段代码什么意思?

  • 先告诉工具M1是31层,V1是32层
  • 然后说M1和V1是连通的
  • 接着限定只在active_region里检查
  • 最后检查M1的宽度是否小于0.18微米

你看,逻辑很清晰吧?

重点:写DRC规则文件,顺序很重要。先定义层,再定义连接,再定义区域,最后写检查规则。这个顺序乱了,工具就会报错。我见过有人把CHECK语句写在LAYER前面,结果工具根本不知道要检查什么层。

3.7 避坑指南

最后,分享几个我踩过的坑:

  • 层号写错:工艺文档里写的是31,你写成了13。这种错误很隐蔽,因为工具不会报错,但检查结果全是错的。
  • CONNECT漏写:特别是多层金属时,容易漏掉中间层的连接。我建议画个连接图,逐层核对。
  • REGION范围搞错:INSIDE和OUTSIDE搞反了,该检查的地方没检查,不该检查的地方报一堆假错。

嗯,今天就讲到这里。这些基础语法看着简单,但用好了能解决大问题。下一节我们继续深入,讲讲更复杂的层运算和检查语句。

课后练习:打开你手头的一个DRC规则文件,找到LAYER、CONNECT、REGION语句,看看它们是怎么配合的。试着画一张它们的关系图,会很有帮助。

可可精品资料库