第四章 DRC运行流程详解:输入文件准备、运行命令与输出分析

DRC,也就是设计规则检查。说白了,就是拿着晶圆厂给的“尺子”,去量你的版图有没有违规。我见过不少新手,觉得这步就是跑个脚本完事。结果呢?流片回来,短路、断路,哭都来不及。

今天我就把DRC的完整流程拆开来讲。从输入文件准备,到命令怎么敲,再到结果怎么看。你跟着走一遍,心里就有底了。

4.1 输入文件准备:三样东西缺一不可

跑DRC之前,你得准备好三样东西。少一样,工具就罢工。

4.1.1 GDS文件——你的版图“底片”

GDS是版图的二进制格式。说白了,就是把你画好的多边形、连线、晶体管,全部存成一个文件。我个人习惯在导出GDS时,把层次结构拍平(flatten)。为什么?因为有些DRC工具对层次敏感,拍平后反而跑得更干净。

我的习惯: 导出GDS前,先跑一遍LVS。确保电路和版图一致。不然DRC过了,LVS挂了,白忙活。

4.1.2 网表文件——电路的“骨架”

网表是文本格式,描述晶体管怎么连的。DRC工具会用它来识别器件。比如,它要知道哪个图形是PMOS的源极,哪个是漏极。

我曾经遇到过一个坑:网表里有个晶体管的尺寸写错了,结果DRC报了一大堆“栅极间距违规”。查了两天才发现,是网表里W/L写反了。嗯,从那以后,我每次都会用diff命令对比一下网表。

4.1.3 规则文件——晶圆厂的“法律条文”

规则文件是DRC的核心。晶圆厂会提供,通常是.drc或.rul后缀。里面定义了最小线宽、最小间距、金属密度等等。

你想想看,规则文件里可能有上千条规则。但常用的就那几十条。我建议你先把关键规则挑出来,比如:

  • 最小线宽:金属线不能太细,否则电流密度过大。
  • 最小间距:两条线不能靠太近,否则会短路。
  • 包围规则:接触孔周围必须有足够的金属包围。
注意: 规则文件版本一定要和工艺节点匹配。我用过0.18μm的规则去跑0.13μm的版图,结果报了上千个假错。别问我怎么知道的。

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,用来检查金属密度的。默认值可能偏大,导致密度检查不敏感。我曾经调过这个参数,才把真正的密度违规抓出来。

核心建议: 第一次跑DRC,先用默认参数。等结果出来了,再根据报错类型,针对性调整参数。别一上来就乱改。

4.3 输出结果分析:别被“假错”骗了

DRC跑完了,会生成一个结果文件。里面可能有几百甚至几千个错误。但别慌,很多是假错。

4.3.1 结果文件的结构

结果文件通常是文本格式,或者数据库格式。文本格式可以直接看,数据库格式需要用工具打开。

每条错误记录,一般包含:

  • 错误类型:比如“最小间距违规”。
  • 坐标:错误发生在版图的哪个位置。
  • 涉及的层次:比如金属1、金属2。
  • 违规值:实际值 vs 规则要求值。

4.3.2 如何快速定位“真错”

我一般会按错误类型分组。先看数量最多的那种。如果某个错误类型报了上千个,那很可能是规则文件或参数设置有问题。

举个例子:有一次,我跑完DRC,发现“金属密度违规”报了2000多个。我心想,这不可能啊。后来一查,是密度检查窗口设得太小了。调大之后,只剩20个真错。

还有一种情况:错误坐标在版图边缘。这通常是“边缘效应”,可以忽略。晶圆厂一般会允许边缘区域有一些违规。

我的经验: 用工具打开结果数据库,把错误高亮显示。然后对照版图,一个一个看。别偷懒,有些假错一眼就能看出来,比如两条线明明没连上,但工具认为它们间距不够。

4.3.3 常见错误类型及处理

错误类型 常见原因 处理方法
最小间距违规 两条线靠得太近 手动拉开,或调整布线
最小线宽违规 金属线太细 加宽金属线
包围规则违规 接触孔周围金属不够 扩大金属包围区域
密度违规 金属密度过高或过低 添加或删除虚拟金属

4.4 用SVG画一张DRC流程图

下面这张图,把DRC的整个流程串起来了。你一看就明白。

GDS文件 版图数据 网表文件 电路连接 规则文件 工艺约束 运行DRC 设置参数 执行检查 生成结果 输出结果 错误列表 坐标信息 违规详情 分析结果,修改版图 DRC运行流程

这张图很直观。左边是输入,中间是运行,右边是输出。下面那条虚线,代表“分析结果,修改版图”的迭代过程。DRC很少一次过,通常要跑好几轮。

4.5 避坑指南:我踩过的雷

最后,分享几个我亲身经历过的坑。你遇到了,能少走弯路。

  • 规则文件版本不对:有一次,我用了旧版本的规则文件,结果所有关于“金属应力”的检查都没跑。流片后,芯片在高温下失效了。从那以后,我每次都会核对规则文件的版本号。
  • GDS导出时层次丢失:有些工具导出GDS时,会把某些层次合并。比如,把“金属1”和“金属1_dummy”合并成一个。这会导致DRC漏检。我建议你导出后,用calibre -gdscheck验证一下层次完整性。
  • 并行核数设太多:我曾经把-turbo设成16,结果服务器直接卡死。后来才知道,并行核数不是越多越好。一般设成8到12就够了。
最后说一句: DRC是芯片设计的“守门员”。你认真对待它,它就不会在关键时刻给你掉链子。每次跑完DRC,我都会把结果文件存一份。万一以后出了问题,还能回溯。

好了,这一章就到这里。你按照这个流程走一遍,DRC这块基本就稳了。