第四章 DRC运行流程详解:输入文件准备、运行命令与输出分析
DRC,也就是设计规则检查。说白了,就是拿着晶圆厂给的“尺子”,去量你的版图有没有违规。我见过不少新手,觉得这步就是跑个脚本完事。结果呢?流片回来,短路、断路,哭都来不及。
今天我就把DRC的完整流程拆开来讲。从输入文件准备,到命令怎么敲,再到结果怎么看。你跟着走一遍,心里就有底了。
4.1 输入文件准备:三样东西缺一不可
跑DRC之前,你得准备好三样东西。少一样,工具就罢工。
4.1.1 GDS文件——你的版图“底片”
GDS是版图的二进制格式。说白了,就是把你画好的多边形、连线、晶体管,全部存成一个文件。我个人习惯在导出GDS时,把层次结构拍平(flatten)。为什么?因为有些DRC工具对层次敏感,拍平后反而跑得更干净。
4.1.2 网表文件——电路的“骨架”
网表是文本格式,描述晶体管怎么连的。DRC工具会用它来识别器件。比如,它要知道哪个图形是PMOS的源极,哪个是漏极。
我曾经遇到过一个坑:网表里有个晶体管的尺寸写错了,结果DRC报了一大堆“栅极间距违规”。查了两天才发现,是网表里W/L写反了。嗯,从那以后,我每次都会用diff命令对比一下网表。
4.1.3 规则文件——晶圆厂的“法律条文”
规则文件是DRC的核心。晶圆厂会提供,通常是.drc或.rul后缀。里面定义了最小线宽、最小间距、金属密度等等。
你想想看,规则文件里可能有上千条规则。但常用的就那几十条。我建议你先把关键规则挑出来,比如:
- 最小线宽:金属线不能太细,否则电流密度过大。
- 最小间距:两条线不能靠太近,否则会短路。
- 包围规则:接触孔周围必须有足够的金属包围。
4.2 运行命令与参数设置:别让工具“裸奔”
文件准备好了,就该敲命令了。不同的DRC工具,命令略有不同。但核心参数就那么几个。
4.2.1 基本命令格式
以Calibre为例,命令大概是这样的:
calibre -drc -hier -turbo 4 rule_file.drc -gds input.gds -o output.db
我来解释一下:
-drc:告诉工具,我要跑DRC。-hier:层次化运行。如果版图很大,这个参数能省不少时间。-turbo 4:用4个核并行跑。我一般设成CPU核心数减1,留一个给系统。rule_file.drc:规则文件路径。-gds input.gds:输入版图。-o output.db:输出结果数据库。
4.2.2 参数设置的“坑”
参数设置里,最容易出问题的是精度和容差。
比如,有些工具默认的网格精度是0.001μm。如果你的版图是0.005μm的网格,工具就会报一堆“网格未对齐”的错。我建议你先把精度设成和版图一致。
还有一个参数叫density_window,用来检查金属密度的。默认值可能偏大,导致密度检查不敏感。我曾经调过这个参数,才把真正的密度违规抓出来。
4.3 输出结果分析:别被“假错”骗了
DRC跑完了,会生成一个结果文件。里面可能有几百甚至几千个错误。但别慌,很多是假错。
4.3.1 结果文件的结构
结果文件通常是文本格式,或者数据库格式。文本格式可以直接看,数据库格式需要用工具打开。
每条错误记录,一般包含:
- 错误类型:比如“最小间距违规”。
- 坐标:错误发生在版图的哪个位置。
- 涉及的层次:比如金属1、金属2。
- 违规值:实际值 vs 规则要求值。
4.3.2 如何快速定位“真错”
我一般会按错误类型分组。先看数量最多的那种。如果某个错误类型报了上千个,那很可能是规则文件或参数设置有问题。
举个例子:有一次,我跑完DRC,发现“金属密度违规”报了2000多个。我心想,这不可能啊。后来一查,是密度检查窗口设得太小了。调大之后,只剩20个真错。
还有一种情况:错误坐标在版图边缘。这通常是“边缘效应”,可以忽略。晶圆厂一般会允许边缘区域有一些违规。
4.3.3 常见错误类型及处理
| 错误类型 | 常见原因 | 处理方法 |
|---|---|---|
| 最小间距违规 | 两条线靠得太近 | 手动拉开,或调整布线 |
| 最小线宽违规 | 金属线太细 | 加宽金属线 |
| 包围规则违规 | 接触孔周围金属不够 | 扩大金属包围区域 |
| 密度违规 | 金属密度过高或过低 | 添加或删除虚拟金属 |
4.4 用SVG画一张DRC流程图
下面这张图,把DRC的整个流程串起来了。你一看就明白。
这张图很直观。左边是输入,中间是运行,右边是输出。下面那条虚线,代表“分析结果,修改版图”的迭代过程。DRC很少一次过,通常要跑好几轮。
4.5 避坑指南:我踩过的雷
最后,分享几个我亲身经历过的坑。你遇到了,能少走弯路。
- 规则文件版本不对:有一次,我用了旧版本的规则文件,结果所有关于“金属应力”的检查都没跑。流片后,芯片在高温下失效了。从那以后,我每次都会核对规则文件的版本号。
- GDS导出时层次丢失:有些工具导出GDS时,会把某些层次合并。比如,把“金属1”和“金属1_dummy”合并成一个。这会导致DRC漏检。我建议你导出后,用
calibre -gdscheck验证一下层次完整性。 - 并行核数设太多:我曾经把
-turbo设成16,结果服务器直接卡死。后来才知道,并行核数不是越多越好。一般设成8到12就够了。
好了,这一章就到这里。你按照这个流程走一遍,DRC这块基本就稳了。