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 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都会逐条核对。
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核心语法结构。你看一眼,心里就有谱了。
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微米
你看,逻辑很清晰吧?
3.7 避坑指南
最后,分享几个我踩过的坑:
- 层号写错:工艺文档里写的是31,你写成了13。这种错误很隐蔽,因为工具不会报错,但检查结果全是错的。
- CONNECT漏写:特别是多层金属时,容易漏掉中间层的连接。我建议画个连接图,逐层核对。
- REGION范围搞错:INSIDE和OUTSIDE搞反了,该检查的地方没检查,不该检查的地方报一堆假错。
嗯,今天就讲到这里。这些基础语法看着简单,但用好了能解决大问题。下一节我们继续深入,讲讲更复杂的层运算和检查语句。
可可精品资料库