DRC规则文件解析:规则文件格式、常见分类与语法入门
各位同学,今天我们来聊聊DRC规则文件。说实话,我刚入行那会儿,看到动辄几千行的规则文件,头都是大的。但后来我发现,这东西就像一本菜谱——只要你看懂了目录和常用术语,剩下的就是按步骤操作了。
规则文件格式:SVRF vs TCL
目前主流的DRC工具,比如Calibre,支持两种规则文件格式:SVRF和TCL。我个人习惯用SVRF,因为它更直观,但TCL的灵活性确实更强。
SVRF格式
SVRF(Standard Verification Rule Format)是Calibre的原生格式。它的语法结构非常清晰,说白了就是「条件+操作」的组合。举个例子:
// SVRF示例:检查金属线宽
WIDTH M1 < 0.18 {
@ 金属1线宽小于0.18um,请检查
M1
}
你看,WIDTH是检查条件,M1是检查对象,花括号里是报错信息。嗯,就是这么简单。
TCL格式
TCL(Tool Command Language)格式更接近编程语言。如果你写过脚本,上手会很快。我在项目中遇到过用TCL写复杂条件判断的场景,确实比SVRF灵活:
# TCL示例:检查金属线宽
if { [width M1] < 0.18 } {
error "金属1线宽小于0.18um"
}
常见规则分类
DRC规则虽然多,但归纳起来就几大类。你想想看,芯片设计最怕什么?无非就是线太细、间距太小、东西没包住。所以规则也是围绕这些来的。
| 规则类型 | 检查内容 | 典型示例 |
|---|---|---|
| 宽度规则 | 检查金属、多晶硅等层的线宽 | M1宽度 ≥ 0.18um |
| 间距规则 | 检查同层或不同层之间的最小距离 | M1到M1间距 ≥ 0.2um |
| 包围规则 | 检查一层对另一层的覆盖程度 | CONT包围M1 ≥ 0.05um |
| 面积规则 | 检查图形的最小面积 | M1面积 ≥ 0.5um² |
| 密度规则 | 检查金属密度是否在合理范围 | M1密度 20%~80% |
避坑指南:我曾经在做一个28nm项目时,忽略了包围规则中的一个细节——CONT对M1的包围要求是0.05um,但我的版图里只有0.04um。结果流片回来,接触孔边缘的金属出现了断裂。从那以后,我对包围规则格外敏感。
规则语法入门
好了,我们来看看具体的语法。我会用SVRF格式来讲解,因为这是最常用的。
基本结构
每条规则通常由三部分组成:检查命令、检查对象、报错信息。比如:
WIDTH M1 < 0.18 {
@ 错误:M1线宽小于0.18um
M1
}
WIDTH:检查命令,表示检查宽度M1:检查对象,这里是金属1层< 0.18:条件,小于0.18um@ ...:报错信息,用@开头
常用命令
我整理了几个最常用的命令,你记下来就行:
| 命令 | 含义 | 示例 |
|---|---|---|
| WIDTH | 检查宽度 | WIDTH M1 < 0.18 |
| SPACE | 检查间距 | SPACE M1 < 0.2 |
| ENC | 检查包围 | ENC M1 CONT < 0.05 |
| AREA | 检查面积 | AREA M1 < 0.5 |
| DENSITY | 检查密度 | DENSITY M1 < 0.2 |
条件组合
实际项目中,规则往往不是单一的。比如,你可能需要同时检查宽度和间距。这时候可以用AND或OR来组合:
// 同时检查宽度和间距
WIDTH M1 < 0.18 AND SPACE M1 < 0.2 {
@ 错误:M1线宽或间距不满足要求
M1
}
注意:条件组合时,一定要用括号明确优先级。我曾经见过一个同事写的规则,因为没有加括号,导致检查结果完全错误。嗯,那天的debug过程相当痛苦。
知识体系总览
为了让你更直观地理解DRC规则文件的整体结构,我画了一张图:
这张图把DRC规则文件的核心内容串起来了。你从文件格式入手,了解规则分类,再学习语法,基本上就能看懂大部分规则文件了。
我的经验:刚开始学的时候,别急着写规则。先找几个现成的规则文件读一读,对照版图看看每条规则在检查什么。我记得我第一次读规则文件时,花了整整两天才把一条复杂的包围规则搞清楚。但搞懂之后,后面的规则就一通百通了。
好了,这一章的内容就到这里。规则文件解析是DRC检查的基础,你把这部分吃透了,后面的实战环节会轻松很多。