做PCB设计这些年,DRC大概是被提起最多、又被理解得最浅的名词。很多初学者画完板子,点一下DRC按钮,看到绿色的对勾就以为万事大吉,直到板厂打来电话说"这里间距不够""那里网络被切断了",才意识到自己根本没有搞懂DRC到底查了什么。更常见的情况是,跑完DRC弹出一大串红色报错,比如热搜里那条drc rtstat-6 partial route conflicts: 1184 net(s) have a partial conflict,一眼扫过去直接头疼,压根不知道从哪儿下手。
DRC的全称是Design Rule Check,翻译过来就是设计规则检查。它是从设计到制造之间最重要的一道关卡,原理图有没有画错、PCB有没有违反制造工艺限制、有没有短路断路风险,都要靠DRC去兜底。这篇文章就是给零基础或者半只脚刚入门的硬件工程师准备的,我会把DRC从"它到底是什么"到"怎么样才算把这个工具学明白"拆成一条完整的学习路径,再拿OrCAD和Allegro这种常见工具举例,把实操流程、报错定位、踩坑经验一起讲透。读完你会发现,DRC真不是"跑一下就算了"的按钮,它是一套值得认真对待的方法论。
1. 先搞清楚DRC到底是干什么的——设计规则检查的本质
1.1 DRC在设计流程中的位置:从画完原理图到投板之间的守门员
我习惯把一块板子的诞生分成三个阶段:原理图设计、PCB布局布线、制造与贴片。DRC横跨第二阶段和第三阶段的交界处,它存在的意义,就是在你把Gerber文件发给板厂之前,先用软件替你检查一遍"这板子能不能造、造出来能不能用"。
打个比方,DRC就像是你交毕业论文之前的查重系统。你自己觉得自己写得挺好,但有没有抄袭、格式对不对、引用规不规范,得跑一遍查重才知道。DRC也是一样,它不管你电路功能设计得多巧妙,只管你有没有违反设计规则。规则从哪来?一部分来自PCB制造工艺的物理极限,比如线宽不能小于多少mil、过孔到焊盘的间距不能小于多少mil;另一部分来自电路设计本身的电气要求,比如电源网络和地网络之间不能短路、输入引脚不能悬空。
这个"守门员"角色决定了DRC的地位——它不是锦上添花,而是硬性关卡。我自己见过太多工程师在仿真和原理图上花了大把精力,结果画PCB时因为一个"间距0.2mm小于规则0.3mm"的报错被板厂退回,反复打样浪费时间和钱。DDR、电源、高速信号这些设计固然重要,但DRC是地基中的地基,地基不牢,上面盖得再漂亮都可能塌。
1.2 为什么DRC不是"点一下按钮"就完事
很多初学者有个误区,觉得DRC是一个固定流程:规则用默认的,检查点一下,结果看绿了就结束。实际上,DRC的完整工作流应该是"定义规则-执行检查-解读结果-修改设计-复查闭环"这五步,其中任何一个环节做不好,DRC都只是走过场。
先说定义规则。默认规则通常是EDA工具按照通用工艺给的,但你的板子可能是2层板也可能是12层板,可能是低速数字电路也可能是射频电路,不同板子的核心矛盾完全不同。低速板你可能最关心制造可行性,高速板你得额外关心阻抗、串扰、回流路径,这时候DRC规则就得针对性地加上电气约束和物理约束。
再看结果解读。partial route conflicts这种报错,字面上是"部分布线冲突",但具体是网络没走完、走线出现了stub分支、还是同一网络被铜皮和走线切成了多个孤岛?这需要你把软件报错和PCB图形对照起来看,而不是只看一个数字。所以DRC真正考验的,不是点按钮的手速,而是你把规则、实际设计和检查结果三方对照起来分析的能力。
1.3 DRC、ERC、DFM到底有什么区别
学DRC路上第一个绕不开的困惑,就是"DRC、ERC、DFM这几个东西是不是一回事"。不是,它们是三兄弟,管的事情完全不同。
先看DRC,全称Design Rule Check,侧重PCB物理和电气设计,比如间距、线宽、孔到孔距离、平面连接方式。再看ERC,Electrical Rule Check,通常用在原理图阶段,主要检查单向引脚有没有接反、输入悬空、输出短路这些电气逻辑错误。简单说,ERC检查的是你画的原理图符号之间连接得合不合理,DRC检查的是你画的物理版图符不符合制造和电气要求,这两者在不同工具里菜单位置不一样,但很多初学者容易混。
顺便说一句DFM,Design for Manufacturing,它比DRC更靠近制造端,检查的是你的设计能不能被现有产线加工出来,比如拼板开槽角度、Mark点位置、铜皮到板边的距离。现在有些EDA工具已经把DFM检查整合到DRC流程里了,但概念上它们还是有区分。作为初学者,你可以先记住一条主线:原理图阶段靠ERC把关,PCB阶段靠DRC把关,投板前用DFM做最终体检。
2. 初学者的结构化学习路径:把DRC拆成四个台阶来走
2.1 第一层:理解设计规则从哪来——工艺能力、器件规格、电气约束
如果只看操作不看原理,DRC学起来会非常空虚。我建议初学者把第一层功夫花在"规则是从哪来的"这个问题上,因为它直接影响你后面能不能正确地改规则。
设计规则主要来自三个源头。第一是板厂的工艺能力,线宽和间距做多少能达到良率最优、钻孔最小能做到多少、孔环最小要留多少,这些参数板厂会给你一份"工艺能力表",你的PCB设计规则必须在这个范围之内。第二是器件本身的封装规格,比如一个间距只有0.4mm的BGA,你的走线和过孔策略就得围着它转;有些连接器引脚之间的间距极小,布线规则稍微设宽一点,软件就会疯狂报错。第三是电路设计的电气约束,比如电源网络载流能力要求某段走线必须加宽、差分对要求等长等间距,这些要手动加到规则里去,而不是靠默认规则覆盖。
理解了这三个来源,你就自然理解为什么不同板子要配不同规则文件。我在公司里维护过一套标准规则库,2层低速板、4层中速板、6层高速板各有一套,每套都附带注释说明每条规则来自哪份工艺文件、哪个器件规格书,这样新同事上手也能明白来龙去脉。
2.2 第二层:学会配置规则——最小线宽/间距、钻孔到铜、平面层连接
规则配置是DRC学习路径里最需要动手的一层。我先拿最常用的几个规则类别展开讲。
- 间距规则(Spacing):定义不同网络之间的最小距离,比如Clearance设为6mil还是8mil。这里要注意的是"网络类别"之间的间距,比如普通信号线之间可以6mil,但信号和电源之间、信号和地之间可能要分别设置,因为不同网络对噪声和抗干扰的要求不一样。
- 线宽规则(Line Width):定义走线的最小、最大和推荐宽度。最小宽度受工艺和载流能力限制,最大宽度主要考虑布线密度和阻抗控制。
- 孔类规则(Drill):包括钻孔到铜皮的最小距离、孔环(Annular Ring)的最小宽度、以及孔与孔之间的最小间距。这些规则直接决定板厂能不能顺利钻孔,孔打歪了会不会碰到旁边的走线。
- 平面层规则(Plane):定义内电层铜皮到过孔、焊盘的最小间距,还有热焊盘连接的宽度和数量。平面层的设置直接关系到电源完整性,也关系到回流焊时器件能不能正常散热。
配置这些规则时,我建议每改一条都在旁边写注释,这样后续查问题时不用反复推理"这个值当初是为什么设的"。另外,规则文件一定要和PCB工程一起保存,换电脑、换版本、发给同事评审时才不会乱。
2.3 第三层:会跑、会看、会导出DRC报告
规则配好了,才有资格谈"跑DRC"。这一步的核心不是"点那个按钮",而是选择合理的检查范围以及解读输出的报告。
以Allegro/OrCAD PCB Editor为例,DRC通常在菜单里叫Design Rule Check或者直接在工具栏找到"DRC"图标。跑之前先要选择检查模式:你是做实时模式还是批量模式。实时模式适合布线过程中边画边检查,能第一时间发现问题;批量模式适合在某个设计节点或者最终投板前做全面扫描,把整个板子彻底过一遍。
跑完之后软件会输出一个报告文件,也就是类似drc rtstat-6 partial route conflicts这类信息的来源。报告里一般会分类列出错误个数,比如间距错误、连接性错误、走线完整性错误、钻孔错误。我看到很多新人拿到报告,就盯着第一行发慌,其实正规的做法是先把报告分类看一遍,明白问题集中在哪一类,然后回到PCB编辑器里用定位功能,逐个跳转到错误坐标去看图判断。
2.4 第四层:看懂报错并定位到具体网络和坐标
配置规则、跑出报告,这些都只是手段,最终目的是让你能定位问题、理解问题、解决问题。这一层的学习方法,是拿到真实报错去"翻译"它的含义。
比如partial route conflicts报错,我在实际项目里见到的频率很高。它通常的意思是PCB上有一些网络没有完整连接,或者说网络拓扑不完整。用工程师的行话说,就是"这个网络走线没走完"或者"这里有残桩"。你点开错误定位,会看到一个网络明明两端都有焊盘,但中间有一段没有走线连接,或者走线到了一个过孔就断掉了。还有一种情况是同一网络存在多条未连接的分支,比如一个电源网络通过铜皮连接了多个引脚,其中某个引脚和铜皮的连接被间距规则挡住了,导致这个引脚实际是悬空的。
定位报错的核心技能是会用软件的高亮、过滤和选择功能。我习惯在DRC结果面板里先按错误类型过滤,再把某条错误设为高亮,配合Cross Probe功能在原理图和PCB之间来回跳,这样能快速判断这个管脚原本应该连到哪去,是布线漏了、规则卡了还是器件封装本身就有问题。
3. 以OrCAD为例的DRC实操流程:从原理图到PCB
3.1 原理图阶段的ERC检查——不只"有没有连错",还要看"有没有悬空"
现在很多学OrCAD的人,一上来就盯着PCB Editor的DRC,却忽略了OrCAD Capture原理图阶段还有一个ERC(电气规则检查)。完整的学习路径应该是先过原理图,再过PCB,否则你在PCB阶段发现的很多"规则冲突",源头可能在原理图就已经埋下了。
在OrCAD Capture里,ERC的入口通常位于菜单Tools下手动触发,或者在做Netlist时自动检查。它主要查这些事:第一,有没有未连接的引脚,比如一个电阻的引脚只在原理图画面上看着连了,但没有实实在在的网络标签;第二,有没有电源和地接反,比如某个芯片的VCC引脚被接入了GND网络;第三,有没有输出类型冲突,比如两个输出引脚短接在了一起。这些在原理图上看不出来,但摩擦到PCB阶段全是真实的DRC报错,而且更难改。
我自己的习惯是每一页原理图画完就立刻跑一次ERC,不让错误累积到后面。如果等到整张原理图全部画完再跑,报错几十上百条,你根本分不清哪个报错影响的是哪个模块,定位成本会高很多。这个习惯叫做"小步快跑",放到原理图检查和PCB DRC都适用。
3.2 PCB Editor中的DRC设置——间距、线宽、过孔、平面连接
到了PCB Editor(OrCAD和Allegro共用同一套约束管理器),DRC设置的入口一般在Constraints或Setup -> Constraints菜单下。初学者第一次打开约束管理器通常会懵,因为里面的树状结构非常深,左边是物理约束,右边是间距约束,下面还有区域规则、高速规则、器件规则、制造规则等一大堆分类。
我建议按下面这个顺序去核对:
- 先看全局间距规则
Spacing Constraint Set,确认默认间距值是否符合板厂工艺能力。 - 再看全局物理规则
Physical Constraint Set,这里面包含线宽和过孔的类型定义。 - 然后检查平面层相关的规则,比如
Plane标签页里的热焊盘连接方式和隔离间距。 - 最后确认有没有需要单独设置的特殊网络,比如时钟线、差分对、电源网络,把它们的规则在
Net或Bus层面的约束里单独调出来。
这里分享一个我踩过的坑。早年我画一块FPGA核心板,跑完DRC发现几百个间距报错,全部集中在BGA底下。原因就是我把全局间距统一设成了6mil,但BGA中心距只有0.5mm,折算下来引脚间距离根本容纳不下6mil间距,正确做法是在BGA封装区域单独加一个区域规则(Region),把间距临时放宽,或者把扇出走线改成盘中孔方案重新规划。这个案例说明,DRC规则设置不是"全局一个值走天下",你得有"区域规则"的思维。
3.3 实时DRC与批量DRC:两种模式怎么配合
OrCAD PCB Editor里的DRC,除了批量检查之外,还提供了一个叫"实时DRC"的功能,在布线过程中动态显示违规,比如你拉一根线时,只要间距不够,软件立刻会显示一个红圈或者变色提示。
初学者的常见问题是用不好这两种模式的配合。要么全程开实时DRC,导致布线时被无数红色警告吓得不敢动线,要么干脆全关,画到最后一跑批量DRC才发现几百个错误堆在那里。
我的建议是分阶段使用。布局阶段和布线前期,实时DRC可以开着,但要打开"在线DRC"只查间距类错误,别把连接性错误也实时开,不然会卡顿且信息过载。到了布线中后期,可以把实时DRC的检查项缩小到当前正在处理的网络,专心把主连通搞定。等到布线全部结束,再打开完整的批量DRC做最终体检,把所有类型错误一次扫清。
实际操作中,批量DRC跑完会生成一份报告,报告路径通常在输出目录下,文件名类似chk.drc或者是图形化的DRC Markers列表。别只看报告正文,还要学会利用软件界面的"DRC Browser"窗口,它会把每条错误映射成图形标记,双击任意一条,视图会自动跳到对应的坐标处,非常高效。
4. 一个真实的"partial route conflicts"报错剖析
4.1 报错信息怎么读——rtstat-6里的数字与含义
遇到drc rtstat-6 partial route conflicts: 1184 net(s) have a partial conflict这类报错时,第一步不是恐慌,而是拆解信息。rtstat-6是Allegro/OrCAD PCB Editor里一个检查项的代号,我用几个实际项目经验来解释一下:rtstat全称其实是Route Status的缩写,它检查的是每一个网络有没有完全布通。后面的数字6在旧版软件里对应"部分布线冲突"这个子类型。
重点来了——1184 net(s) have a partial conflict,这行文字的真正含义是,在所有网络里,有1184个网络处于"部分连通"状态。什么叫部分连通?我见过很多新人把它理解成"有1184个网络完全没走线",这是错的。"部分连通"指的是网络内部所有引脚、焊盘、走线、过孔加在一起构成了一张网,但这张网存在至少一个"缺口":要么是某两个焊盘之间缺了一段走线,要么是某个引脚和过孔没有连接上,要么是铜皮之间的间距规则把连接硬生生切断了。
所以当你看到这个报错时,真正要关心的是"缺口在哪里"以及"为什么会产生缺口",而不是被"1184"这个庞大的数字吓到。
4.2 "1184 net(s) have a partial conflict"到底是怎么来的
"1184个网络有冲突"这个数字,在大中型PCB上并不罕见。如果一个BGA封装的芯片有几百个引脚,电源网络和地网络又通过多层平面连接,一旦平面层切割出了问题,或者某一段规则设置错误,报错数量就会指数级上升。
拿我做过的一块含DDR4模块的板子来举例。当时的报错数量大概600多个,我以为是布线没完成,结果打开定位一看,全是同一个原因:DDR4芯片底下的某些电源引脚,通过过孔连到内电层,但内电层的铜皮被另一个网络的分割线切断了,导致引脚和铜皮之间出现了一个极窄的绝缘缝隙。从二维平面上看,过孔和铜皮离得很近,但实际并没有连接。这就是典型的"看起来连上了,实际没连上",DRC报partial conflict是对的。
另一个高频原因是残桩(stub)。有些同学布线时改过路径,原来的走线段没删干净,留下一条一端悬空的短线挂在网络上,这种短线不会导致断路,但会造成信号反射和阻抗不连续,DRC也会把它标记为"部分路由冲突"。所以这个报错不仅仅关乎连通性,还关乎走线质量。
4.3 从定位到修复——拿一个例子完整走一遍
我建议你按照下面这个流程来处理“partial route conflicts”:
第一步,打开DRC Browser或Error Markers列表,设置过滤器只显示Route Status类错误,这样能把1184条报错缩小到更可控的范围。
第二步,按网络分类,优先处理电源和地网络。这类网络通常层数多、覆盖面大,修复一个往往能消掉几十上百条报错。比如我上边提到的DDR4例子,我在内电层分割线处补了一块连接铜皮,同一个电源网络下几十个引脚的报错全部消失了。
第三步,处理单端信号网络的残桩。在PCB编辑器里打开走线显示模式,仔细看报错位置是不是存在一端悬空的走线段。如果是,选中它,按删除键,把残桩清掉。删完之后记得再次用DRC检查这个网络,确认错误消失再切换到下一个。
第四步,有些"部分连接"是规则导致的。比如某个引脚和铜皮之间的间距规则太保守,铜皮被隔离得太远,这时候你就得判断:是改规则合理,还是应该调整铜皮形状、加入一个过渡走线更合理。我的原则是优先改设计,实在无法避免时才改规则,而且改规则要有依据、写注释、经过评审。
4.4 几类常见DRC报错的速查对照表
初学DRC时最缺的是一张"报错速查表",我把项目里最常遇到的几类列在这里,方便你对照排查。
| 报错类型 | 通常含义 | 常见修复手段 |
|---|---|---|
| Partial Route Conflicts | 网络存在未连通或走线分支 | 补走线、删除残桩、补铜皮 |
| Spacing Violation | 间距小于规则值 | 推挤走线、调整过孔位置、改局部规则 |
| Hole to Copper Violation | 钻孔到铜皮距离不足 | 移动过孔、缩小孔环、调整铜皮 |
| Unconnected Pin | 引脚未被网络连接 | 检查原理图、补走线或修改封装 |
| Missing Net Connectivity | 网络标签未分配 | 回到原理图补标签,重新生成网表 |
| Plane Thermal Relief Violation | 热焊盘连接数不足 | 修改热焊盘参数或连接方式 |
这张表只是一个起点,每个EDA工具的报错措辞可能略有不同,但底层逻辑是一致的:先判断错误属于规则类、连通类还是制造类,再决定修复策略。别一上来就动手改设计,先看清楚错误归类,这是我从无数加班夜晚里总结出来的惨痛教训。
5. 初学者最容易踩的坑和排查技巧
5.1 只跑默认规则,从来不建自己的规则文件
这个坑我在前面反复提过,但还是要单拎出来强调,因为它实在太普遍了。很多初学者拿到工程文件后,规则全部用默认,画完板子跑一次DRC,绿了就投板,出问题后又一脸无辜。
默认规则不是不能用,而是它只适用于最简单的两层板、宽间距、低速电路。稍微复杂一点的板子,如果没有针对电源网络加大线宽、对差分对做等长约束、对BGA区域做区域规则,DRC跑出来的结果基本等于"只检查了物理最小间距",电气维度和制造维度的风险全都没覆盖到。
正确做法是先和板厂要一份工艺能力表,再对照原理图的电源树和关键信号,逐一确认规则库中哪条规则对应哪个设计需求。把这个过程写成一个清单,每次新项目直接用模板,再根据具体板子微调,效率会高很多。
5.2 只看错误数量,不看错误分布
跑完DRC看到"1184个冲突",有人第一反应是崩溃,第二反应是想一次性全部修复。这个方向就错了。真正有效的做法是先分类、后抽样、再批量。
我个人的习惯是:先看错误类型分布,比如1000条里如果950条都是同一类错误,那一定是系统性原因造成的,不是一个个手动改出来的。可能是一个规则参数设错了,可能是一个平面层被整体切错,可能是某个原理图网络标号统一错了。修掉这个根因,几百上千个错误可能同时消失。这时候如果你埋头单个去改,一晚上可能只改了几十条,效率低到让人崩溃。
5.3 报错定位后不知道怎么下手
定位到坐标之后,新手经常面临的困境是:看到了红色标记,却不知道这个标记代表的问题应该怎么改。我提供一个非常实用的排查顺序:
先看这个位置属于哪个网络,用软件的Highlight功能高亮这个网络的所有元素。然后看它的连接关系,是应该和哪个焊盘、哪段走线、哪块铜皮相连。如果连接断开了,判断是"没走"还是"走线被规则挡了":没走就补走线;被规则挡了就检查这块区域的间距规则和其他约束,必要时和周边布局协调调整。最后再检查一下封装本身,比如某些器件的引脚排列非常密,扇出走线本来就需要特殊处理,这时就别硬用默认规则了,加一个区域规则来适配更合理。
5.4 实用排查技巧:善用过滤、高亮和Cross Probe
软件操作层面,有几个功能是DRC排查效率倍增器,我建议初学者尽早掌握。第一个是过滤器(Filter),它可以让你只显示当前关注的错误类型,把其他干扰信息全部藏起来。第二个是高亮(Highlight),把目标网络或目标对象用明亮颜色标记出来,尤其是在布线密度高的区域,视觉上能快速帮你抓住重点。第三个是原理图和PCB的Cross Probe联动,在OrCAD和Allegro的联合环境下,在原理图里选中一个网络,PCB里也会同步高亮,反过来也一样。
我处理那种"一个问题牵涉几十个引脚"的报错时,会先在原理图里把整个模块的网络选中,切到PCB高亮,然后在3D视图或暗色背景下观察整体连接走线,很多之前2D平面里看不出来的断点、残桩、间距问题,在这种模式下会变得特别清晰。这个习惯帮我节省了大量时间,真心建议你也试试。
回到开头那条partial route conflicts: 1184 net(s)。说实话,我后来再遇到这种报错已经淡定多了,因为我知道它只是一个"信号",告诉我网络完整性出了问题,至于问题是什么、出在哪个层级、怎么修,都需要回到设计本身去分析。DRC工具是死的,但规则是活的,设计者才是整个流程的核心。初学阶段,我建议你刻意练习"先分类再定位、先根因再批量"的工作方式,把每一次DRC报错都当成一次排查训练,而不是一次麻烦。这样积累半年,你会发现自己对PCB设计的理解深度,已经远远超过了那些只会点按钮的人。