第二章 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规则文件知识结构,大家先看个全貌:

DRC规则文件知识体系 DRC规则文件 语法格式 语句结构 层次化定义 SVRF TCL LAYER WIDTH SPACING 继承 覆盖 核心:语法是工具,结构是骨架,层次化是灵魂

2.5 实战避坑指南

讲完理论,我分享几个实际项目中踩过的坑:

  • 层号冲突:我曾经把两个不同工艺的规则文件合并,结果层号重复,工具报错。后来我养成了先检查层号表的习惯。
  • 单位混淆:有的规则用微米,有的用纳米。我建议统一用微米,减少换算错误。
  • 层次化循环引用:定义A层依赖B层,B层又依赖A层,工具会死循环。嗯,这个坑我掉进去过两次。

小技巧:写规则文件时,先写一个最小可运行的版本,验证通过后再逐步添加复杂规则。这样定位问题快很多。

好了,关于DRC规则文件的语法和结构,今天就聊到这里。记住:规则文件不是写出来就完事了,要反复验证。下一章我们讲具体的规则编写实战,到时候我会带大家手写一个完整的DRC规则文件。

可可精品资料库