一、规则检查概述
什么是设计规则检查(DRC)
设计规则检查,说白了就是给芯片版图做「体检」。
你想想看,芯片制造就像盖房子。你画好了图纸,但施工队能不能照着做?线宽太细了,光刻机刻不出来;两根线挨得太近,通电后可能会短路。DRC 就是帮你找出这些「施工隐患」的工具。
我个人的理解是:DRC 是一套由晶圆厂定义的几何约束条件。它告诉设计师——你的版图里,每一层图形的宽度、间距、包围关系,必须满足哪些最低要求。
举个例子:
// 一个典型的 DRC 规则(伪代码)
METAL1_WIDTH >= 0.18um // 金属1线宽不能小于0.18微米
METAL1_SPACE >= 0.20um // 金属1间距不能小于0.20微米
VIA1_ENCLOSURE >= 0.05um // 过孔周围必须有至少0.05微米的金属包围
这些数字不是拍脑袋定的。它们是晶圆厂经过无数次流片测试后,总结出的「安全边界」。
核心要点:DRC 检查的是「几何正确性」,不是「功能正确性」。它不管你的电路能不能工作,只管你的版图能不能造出来。
DRC 在芯片设计流程中的位置
DRC 发生在哪个阶段?我画了一张图,你看完就明白了。
从图上你能看到,DRC 发生在布局布线之后、LVS 检查之前。它是流片前的最后一道「几何关卡」。
我记得有一次,一个项目赶进度,团队想跳过 DRC 直接跑 LVS。我当时就拦住了——你想想看,LVS 检查的是电路连接对不对,但如果版图本身就有几何错误,LVS 跑出来的结果也是白搭。先过 DRC,再跑 LVS,这是铁律。
我的习惯:在布局布线过程中,我会分阶段跑 DRC。每完成一层金属的布线,就做一次局部 DRC。这样最后汇总时,错误数量会少很多,不至于一次性看到几千个错误头皮发麻。
DRC 的重要性与目的
DRC 到底有多重要?我给你讲个真实案例。
几年前我参与过一个 28nm 的项目。有个同事画了一条电源线,宽度只差了 0.02 微米——肉眼根本看不出来。DRC 报了一个「最小线宽违规」的警告。他觉得是 DRC 太严格了,就 waiver(豁免)掉了。
结果呢?流片回来后,那条电源线在芯片边缘处烧断了。整个芯片因为局部过热直接报废。一次流片成本几百万,就因为一个 DRC 警告没当回事。
从那以后,我给自己定了个规矩:DRC 报的每一个错误,都必须搞清楚原因。要么改版图,要么写正式的 waiver 说明,绝不允许「看着差不多就放过」。
DRC 的目的,总结下来有三点:
| 目的 | 说明 | 实际影响 |
|---|---|---|
| 确保可制造性 | 版图必须满足晶圆厂的工艺能力 | 线宽、间距、密度等参数在制造极限内 |
| 提高良率 | 减少制造过程中的缺陷概率 | 比如金属密度均匀性,避免 CMP 不平坦 |
| 保证可靠性 | 芯片在长期使用中不失效 | 比如电流密度过大导致电迁移(EM) |
⚠️ 避坑指南:我曾经见过一个团队,为了赶 tapeout 时间,把 DRC 的检查精度从「full」降到了「fast」。结果流片回来,芯片在高温测试时大面积失效。后来查出来是金属密度不达标导致的应力问题——而这个问题在「fast」模式下根本查不出来。所以我的建议是:永远不要为了省时间而降低 DRC 的检查精度。
嗯,说到这儿,我想再强调一点。DRC 不是「一次性」的工作。它贯穿整个后端设计流程。
我个人的工作流是这样的:
- Floorplan 阶段:跑基本的 DRC,检查 IO 布局、电源环宽度
- Place 阶段:检查标准单元间距、阱连接
- Route 阶段:每完成一层金属,跑一次增量 DRC
- Final 阶段:全芯片 DRC,所有规则全开
这样做的好处是——错误不会堆积到最后。你想想看,如果等到所有布线都完成了再跑 DRC,发现某个区域有大量违规,修改起来得多痛苦?
一句话总结:DRC 是芯片从「设计」走向「制造」的质检员。它不负责你的电路有多聪明,只负责你的版图能不能被造出来。没有 DRC 的芯片,就像没有经过质检的飞机——你敢坐吗?
好了,关于 DRC 的概述就聊到这儿。下一节我们会深入具体的 DRC 规则类型,包括最小宽度、最小间距、天线效应等等。到时候我会拿几个我踩过的坑出来,给大家当反面教材。