第二章 DRC规则文件解析:规则文件结构、常用规则语句、层次化规则定义、规则文件调试技巧
各位同学,咱们今天聊聊DRC规则文件。说实话,我刚入行那会儿,看到动辄几千行的规则文件,头都大了。但后来我发现,这东西就像一本菜谱——看着厚,其实翻来覆去就那么几招。今天我就把这些门道掰开了讲给你听。
2.1 规则文件的结构骨架
一个标准的DRC规则文件,说白了就是三大部分:头部声明、规则主体、输出控制。我习惯把规则文件想象成一个工厂的流水线——头部是原料仓库,主体是加工车间,输出控制是质检站。
核心结构一览:
- 头部声明:定义技术参数、层号映射、单位设置
- 规则主体:具体的几何约束、逻辑运算、条件判断
- 输出控制:错误标记、报告格式、图形化显示
举个例子,华大九天的规则文件通常长这样:
// 头部:层定义
LAYER M1 10
LAYER M2 11
LAYER VIA 20
// 规则主体:宽度检查
WIDTH M1 0.18
// 输出控制
OUTPUT M1_WIDTH_ERROR "M1宽度小于0.18um"
嗯,这里要注意:层号映射是规则文件的命根子。我曾经接手过一个项目,因为层号写错了一位,整个DRC跑出来全是假错。你想想看,几千个错误标记,一个个去排查,那滋味可不好受。
2.2 常用规则语句详解
规则语句其实就那么几个核心指令,我给大家拆开揉碎了讲。
2.2.1 WIDTH 语句
这是最基础的规则,检查线宽是否达标。语法很简单:
WIDTH layer_name min_width
我在项目中遇到过一个问题:某条电源线宽度要求0.5um,但规则文件里写成了0.05um。结果流片回来,那条线在工艺角下直接熔断了。所以我的建议是——写完WIDTH规则后,手动算一遍最差情况。
2.2.2 SPACE 语句
检查间距,分两种情况:同层间距和异层间距。
// 同层间距
SPACE M1 0.2
// 异层间距
SPACE M1 M2 0.3
避坑指南:我曾经在0.18um工艺节点上,把M1到M2的间距写成了0.15um。结果呢?寄生电容暴增,时序全乱了。所以异层间距一定要参考工艺手册的寄生参数表,别想当然。
2.2.3 AREA 语句
检查图形面积,常用于防止天线效应或金属密度问题。
AREA M1 0.5
说白了,这就是防止你画出一根细长的天线。我见过新手把一条M1画成10um长、0.1um宽,面积虽然达标,但天线效应直接炸了。所以AREA要配合WIDTH和SPACE一起用,别单独依赖。
2.2.4 其他常用语句
| 语句 | 功能 | 示例 |
|---|---|---|
| ENCLOSURE | 检查包围关系 | ENCLOSURE VIA M1 0.1 |
| DENSITY | 检查金属密度 | DENSITY M1 0.2 0.8 |
| NOTCH | 检查凹槽宽度 | NOTCH M1 0.15 |
2.3 层次化规则定义
大芯片的规则文件,如果全写在一个层级里,那维护起来简直是噩梦。我建议用层次化结构来组织。
我的分层习惯:
- 基础层规则:定义各层的WIDTH、SPACE等基本约束
- 组合层规则:通过逻辑运算生成中间层(如AND、OR、NOT)
- 顶层规则:引用基础层和组合层,做最终检查
举个例子,检查M1到M2的通孔包围:
// 基础层
LAYER M1 10
LAYER M2 11
LAYER VIA 20
// 组合层:生成M1上的VIA区域
M1_VIA = AND M1 VIA
// 顶层规则:检查包围
ENCLOSURE VIA M1_VIA 0.1
你想想看,如果不用层次化,你得写多少重复代码?我曾经维护过一个5000行的规则文件,里面光M1的WIDTH检查就重复了20次。后来重构为层次化结构,文件缩到800行,维护效率翻了好几倍。
2.4 规则文件调试技巧
调试DRC规则文件,说白了就是找bug。我总结了三个实用技巧:
技巧一:分段注释法
把规则文件分成若干段,逐段注释掉,看哪段出问题。我曾经用这个方法,半小时就定位到一个隐藏的语法错误——少写了一个分号。
技巧二:最小测试用例
画一个极简的版图(比如就两条线、一个通孔),专门用来测试规则。这样跑DRC只要几秒钟,不用等全芯片跑完。
技巧三:日志分析
华大九天的DRC工具会生成详细的日志文件。我习惯先看ERROR和WARNING部分,再看统计摘要。如果发现某个规则报了上千个错,那大概率是规则写错了,而不是版图画错了。
嗯,最后说一句:规则文件调试,耐心比技术更重要。我见过太多人一看到几千个错误就慌了,其实只要按部就班地排查,总能找到根因。
好了,这一章的内容就到这里。DRC规则文件解析,说白了就是理解规则的结构、掌握常用语句、学会层次化组织、熟练调试技巧。这四个点吃透了,你就能自己写规则文件了。