第二章 DRC规则文件解析:规则文件语法与结构
各位同学,今天我们来聊聊DRC规则文件。说实话,我刚入行那会儿,看到动辄几千行的规则文件就头大。后来做多了才发现,这东西就像一本字典——看着厚,但查起来有规律。
DRC规则文件,说白了就是告诉EDA工具:什么样的版图是合格的,什么样的会出问题。今天我就带大家把它的语法和结构拆开看看。
2.1 规则文件语法:SVRF与TCL
目前主流的DRC规则文件有两种格式:SVRF和TCL。嗯,这里要注意,不同厂家的工具支持不同格式,但核心思想是一样的。
SVRF格式
SVRF是Calibre工具的标准格式。我个人习惯用SVRF,因为它语法直观,读起来像自然语言。举个例子:
// SVRF示例:定义金属层最小宽度
LAYER M1 1000
WIDTH M1 >= 0.18 // 单位微米
你看,LAYER定义层号,WIDTH定义宽度约束,一目了然。
TCL格式
TCL格式更灵活,适合做复杂的条件判断。我在项目中遇到过用TCL写自适应规则的情况,比如根据密度动态调整间距要求。
# TCL示例:条件规则
if { [layer_exists M1] } {
rule_width M1 0.18
}
核心区别:SVRF偏声明式,TCL偏脚本式。新手建议从SVRF入手。
2.2 规则语句结构:LAYER、WIDTH、SPACING
规则文件里最常用的就是这几个关键字。我给大家拆开讲。
LAYER语句
定义层号和层名。这是所有规则的基础。
LAYER M1 1000
LAYER M2 1001
LAYER VIA1 2000
你想想看,没有层定义,工具根本不知道你在检查什么。
WIDTH语句
检查线宽是否满足最小要求。我在项目中遇到过因为线宽不够导致电流密度超标的情况,后来老老实实加宽了。
WIDTH M1 >= 0.18
WIDTH M2 >= 0.20
SPACING语句
检查间距。这个最容易出问题,特别是不同层之间的间距。
SPACING M1 M1 >= 0.20
SPACING M1 M2 >= 0.30
注意:同层间距和异层间距的检查逻辑不同。我曾经因为搞混了这两个,导致流片后短路——嗯,那教训够深刻。
2.3 层次化规则定义
真正的芯片有几十层,规则不可能一条条写。这时候就需要层次化定义了。
什么叫层次化?说白了就是「继承+覆盖」。比如:
// 基础规则
LAYER POLY 10
WIDTH POLY >= 0.13
// 层次化:在POLY基础上定义栅极层
LAYER GATE POLY AND ACTIVE
WIDTH GATE >= 0.15 // 覆盖基础规则
这里GATE层是POLY和ACTIVE的交集,宽度要求更严格。我在项目中经常用这种技巧,避免重复定义。
我的经验:层次化规则能减少50%以上的代码量。但要注意继承关系别搞乱,否则查错很痛苦。
2.4 知识体系总览
下面这张图是我整理的DRC规则文件知识结构,大家先看个全貌:
2.5 实战避坑指南
讲完理论,我分享几个实际项目中踩过的坑:
- 层号冲突:我曾经把两个不同工艺的规则文件合并,结果层号重复,工具报错。后来我养成了先检查层号表的习惯。
- 单位混淆:有的规则用微米,有的用纳米。我建议统一用微米,减少换算错误。
- 层次化循环引用:定义A层依赖B层,B层又依赖A层,工具会死循环。嗯,这个坑我掉进去过两次。
小技巧:写规则文件时,先写一个最小可运行的版本,验证通过后再逐步添加复杂规则。这样定位问题快很多。
好了,关于DRC规则文件的语法和结构,今天就聊到这里。记住:规则文件不是写出来就完事了,要反复验证。下一章我们讲具体的规则编写实战,到时候我会带大家手写一个完整的DRC规则文件。
可可精品资料库