4、DRC规则编写基础:标准DRC命令语法、条件语句与循环、变量与函数定义
各位工程师朋友,大家好。今天我们来聊聊DRC规则编写的基础。说实话,我刚入行那会儿,看到动辄几千行的DRC规则文件,头都是大的。但后来我发现,只要掌握了几个核心语法,写规则就跟搭积木一样简单。
DRC规则,说白了就是告诉工具:什么样的版图是合格的,什么样的不行。你想想看,没有规则,芯片流片回来全是短路断路,那得多惨?
4.1 标准DRC命令语法
每个DRC工具都有自己的语法,但万变不离其宗。我以业界最通用的Calibre DRC为例,它的命令语法其实就三要素:操作对象 + 操作类型 + 参数。
先看一个最简单的例子:
// 定义金属1层
M1 = metal1
// 检查金属1的最小宽度
WIDTH M1 < 0.18
嗯,这里要注意:WIDTH是检查宽度的命令,M1是我们要检查的层,0.18是设计规则要求的宽度(单位微米)。
常见的标准命令有这些:
| 命令 | 功能 | 示例 |
|---|---|---|
| WIDTH | 检查图形宽度 | WIDTH M1 < 0.18 |
| SPACE | 检查图形间距 | SPACE M1 < 0.2 |
| AREA | 检查图形面积 | AREA M1 < 0.5 |
| ENC | 检查包围关系 | ENC M1 V1 < 0.1 |
| AND | 逻辑与操作 | AND M1 M2 |
| OR | 逻辑或操作 | OR M1 M2 |
| NOT | 逻辑非操作 | NOT M1 M2 |
我在项目中遇到过最坑的事:有人把WIDTH和SPACE搞混了。检查宽度用了SPACE,结果该报错的地方没报,不该报的地方全红了。所以,命令选对,事半功倍。
4.2 条件语句与循环
实际项目中,规则不是一成不变的。比如,不同工艺角下,最小间距可能不一样。这时候就需要条件语句了。
我个人习惯用IF...ELSE来处理这类情况:
IF (TECHNOLOGY == "28nm") THEN
MIN_SPACE = 0.09
ELSE IF (TECHNOLOGY == "40nm") THEN
MIN_SPACE = 0.14
ELSE
MIN_SPACE = 0.18
END IF
SPACE M1 < MIN_SPACE
为什么会这样?因为不同工艺节点的物理极限不同,规则自然要跟着变。你想想看,28nm的线宽比40nm细得多,间距要求当然更严格。
循环语句在DRC里用得不多,但处理重复结构时特别好用。比如检查一组等间距的金属线:
FOR i = 1 TO 10
LINE_i = RECTANGLE (i*10, 0, i*10+5, 100)
SPACE LINE_i < 0.2
END FOR
嗯,这里要注意:循环变量i从1到10,每次生成一条矩形金属线,然后检查间距。这种写法在检查阵列结构时能省不少事。
4.3 变量与函数定义
变量是DRC规则的灵魂。没有变量,你就要在每个地方写死数字,改起来能累死人。
定义变量很简单:
// 定义变量
MIN_WIDTH = 0.18
MIN_SPACE = 0.20
MIN_AREA = 0.50
// 使用变量
WIDTH M1 < MIN_WIDTH
SPACE M1 < MIN_SPACE
AREA M1 < MIN_AREA
你看,这样写的好处是:如果规则变了,只需要改变量定义那一行,不用满世界找数字。我记得有一次,客户临时改了设计规则,把最小宽度从0.18改成0.15。我花了10秒钟改完变量,重新跑一遍就完事了。要是没变量,你得翻几百行代码去找所有写0.18的地方。
函数定义就更高级了。它能把一段重复的逻辑封装起来,像搭积木一样复用:
// 定义一个函数:检查金属层的最小宽度和间距
DEFINE check_metal(layer, min_w, min_s)
WIDTH layer < min_w
SPACE layer < min_s
END DEFINE
// 调用函数
check_metal(M1, 0.18, 0.20)
check_metal(M2, 0.20, 0.22)
check_metal(M3, 0.22, 0.25)
说白了,函数就是帮你偷懒的。你想想看,如果每个金属层都要写一遍WIDTH和SPACE,那代码得多冗余?用函数,一行调用就搞定。
4.4 知识体系总览
为了让大家更直观地理解本章的知识结构,我画了一张图:
func_,避免冲突。
好了,这一章的内容就这些。DRC规则编写,说白了就是三件事:选对命令、用好条件、定义好变量和函数。把这三点吃透了,写规则就跟喝水一样简单。下次遇到复杂的DRC文件,别慌,先看看它用了哪些变量和函数,理清逻辑,再动手改。
可可精品资料库