2. Calibre DRC 基础:DRC规则文件结构、标准规则解读、运行DRC的基本流程
各位工程师朋友,咱们今天来聊聊Calibre DRC。说实话,DRC这东西,刚入行时觉得它就是一堆烦人的规则,跑起来还慢。但干久了你会发现——它其实是芯片流片前的最后一道防线。我见过太多因为DRC没跑干净就贸然tapeout的项目,结果回来一堆短路、断线,那叫一个惨。
好,咱们直接进入正题。这一章,我带你拆解DRC规则文件的结构,看懂那些标准规则到底在说什么,最后捋一遍跑DRC的完整流程。
2.1 DRC规则文件结构
Calibre的DRC规则文件,后缀通常是.drc或.rul。你打开一看,密密麻麻的,别慌。它的结构其实很清晰,就像一本操作手册。
我个人习惯把规则文件分成三大块:
- 头部定义区:声明工艺、单位、层号映射
- 规则主体区:具体的检查语句
- 输出控制区:定义报错格式、报告内容
咱们先看一个最简单的规则文件骨架:
// 头部定义
PRECISION 1000
RESOLUTION 5
// 层定义
LAYER M1 1001
LAYER V1 1002
LAYER M2 1003
// 规则主体
@ M1最小宽度检查
M1_WIDTH = WIDTH M1 < 0.18
M1_WIDTH CHECK M1
// 输出
DRC RESULTS DATABASE "drc_results.db"
DRC SUMMARY REPORT "drc_summary.rpt"
嗯,这里要注意:PRECISION和RESOLUTION决定了你所有尺寸的单位精度。我遇到过有人把PRECISION设成100,结果0.18um的宽度检查变成了0.18*100=18,完全不对。所以,这两个参数一定要和工艺文件对齐。
2.2 标准规则解读
标准DRC规则,说白了就是工艺厂给你的“设计红线”。你跨过去,芯片就可能出问题。咱们挑几个最常见的来拆解。
2.2.1 最小宽度规则
这是最基础的规则。比如金属线宽不能小于0.18um。为什么?因为太细的线,光刻时容易断,电流一大就烧了。
规则写法:
M1_MIN_WIDTH = WIDTH M1 < 0.18
M1_MIN_WIDTH CHECK M1
我曾经在一个高速接口项目中,为了省面积,把M1线宽压到了0.16um。结果DRC报了一堆错,工艺厂直接打回。后来才知道,那家厂的0.18um工艺,实际光刻裕度只有0.02um,你压到0.16,良率直接掉到60%。
2.2.2 最小间距规则
两条同层金属之间不能靠太近。否则容易短路,或者产生串扰。
规则写法:
M1_MIN_SPACE = SPACE M1 < 0.2
M1_MIN_SPACE CHECK M1
你想想看,为什么间距规则比宽度规则更严格?因为光刻时,两条线的边缘会“糊”在一起。间距不够,就等于短路。
2.2.3 包围规则
比如过孔(Via)被金属包围的尺寸。如果金属包不住过孔,那过孔就容易脱落。
规则写法:
V1_ENC_M1 = ENCLOSURE M1 V1 < 0.1
V1_ENC_M1 CHECK V1
这里有个坑:ENCLOSURE的方向。我记得刚带团队时,有个小伙子把M1和V1写反了,结果检查出来全是假错。所以,第一个参数是包围层,第二个是被包围层,顺序别搞反。
2.2.4 密度规则
这个很多人容易忽略。工艺厂要求每块区域的金属密度不能太低,也不能太高。太低,CMP研磨会不平;太高,容易过腐蚀。
规则写法:
M1_DENSITY = DENSITY M1 100 100 < 0.2
M1_DENSITY CHECK M1
这里的100 100是检查窗口大小,单位是um。我建议你拿到工艺文件后,先看看密度窗口是多少。有的厂用50um,有的用200um,差别很大。
2.3 运行DRC的基本流程
好,规则文件看懂了,咱们怎么跑起来?流程其实就四步,但每一步都有讲究。
- 准备输入文件:GDSII或OASIS版图 + DRC规则文件
- 设置运行环境:指定工艺库、临时目录、输出路径
- 执行DRC命令:命令行或图形界面
- 分析结果:看报告、查错误、修版图
咱们重点说说第三步。命令行方式最常用,也最可控。一个典型的命令长这样:
calibre -drc -hier -turbo 4 my_design.gds -rule my_drc_rule.drc
参数解释:
| 参数 | 含义 | 我的建议 |
|---|---|---|
-drc | 运行DRC模式 | 必选 |
-hier | 层次化检查 | 大芯片必开,否则内存爆炸 |
-turbo 4 | 使用4核并行 | 根据服务器CPU核数设置,别贪多 |
为什么要用-hier?我试过一次,一个500万门的芯片,不开层次化,跑了48小时还没出结果。开了之后,2小时搞定。说白了,层次化就是只检查顶层和底层之间的连接关系,重复单元只检查一次。
calibre -drc -check_only检查规则文件语法。我见过太多人直接跑,跑一半报语法错,白白浪费几个小时。
2.4 结果分析与常见陷阱
DRC跑完了,会生成一个结果数据库和一个文本报告。你打开报告,会看到类似这样的内容:
Total errors: 152
M1_MIN_WIDTH: 23
M1_MIN_SPACE: 45
V1_ENC_M1: 84
别急着全修。我教你一个方法:先看数量最多的错误类型。因为很多时候,一个大的布局问题会导致成百上千个同类错误。比如V1_ENC_M1报了84个,很可能是一个标准单元库的过孔位置整体偏了。
我曾经遇到过一个案例,M1_MIN_SPACE报了500多个错。我一看,全是同一个模块里的。后来发现是那个模块的电源地线间距设错了。改一个参数,500个错全消。所以,别一个一个修,先找根因。
另外,注意假错。有些DRC错误其实是规则文件写得太死导致的。比如某些特殊结构(电感、天线)本来就不需要遵守普通规则。这时候,你需要和工艺厂沟通,申请waiver(豁免)。
- DRC规则文件 = 头部 + 规则 + 输出,三部分缺一不可
- 标准规则:宽度、间距、包围、密度,每个都有物理意义
- 运行流程:准备 → 设置 → 执行 → 分析,层次化检查是性能关键
- 修错先看根因,别陷入“一个一个修”的陷阱
好了,这一章的内容就到这里。下一章咱们会深入讲如何编写自定义DRC规则,包括条件检查、派生层、以及如何用SVRF语言写出高效的检查语句。到时候我会分享一些我在实际项目中用过的“骚操作”,保证让你大开眼界。
记住,DRC不是用来折磨你的,它是帮你把问题留在tapeout之前。跑一次DRC,省一次流片费,这笔账你算得过来。