
做PCB这行没跟DRC打过交道的人基本不存在。不管你是刚学会画板子的学生还是干了七八年的老硬件工程师Altium Designer里那个DRCDesign Rule Check设计规则检查按钮每次投板之前都得老老实实点几遍。但问题是很多人只是“点了”压根没搞懂规则是怎么配的、报出来的错该怎么看、规则优先级到底谁说了算。这篇文章就把Altium Designer 20里的DRC规则检查设置彻底拆开讲一遍从规则分类、配置思路到跑检排错、跟KLayout和OrCAD的DRC做对比全给你捋清楚。这内容适合谁正在用Altium Designer画板子、板子投出去总被板厂电话骚扰的硬件工程师学校里学过AD但只会自动布线的新手还有那些被“partial route conflicts”这种报错折腾到半夜不知道到底哪儿没连上的朋友。看完之后你至少能搞清楚三件事规则文件怎么建才不容易返工报错信息怎么读才不会瞎猜以及那些烦人的“假错”怎么快速排查干净。1. DRC到底是什么投板前为什么必须跑一遍1.1 DRC的底层逻辑把约束变成可执行的检查项先说个最朴素的问题DRC到底在干什么它的本质就是把你在设计规范里定的那些“线不能太近、孔不能太小、线不能太细”之类的约束翻译成一组可以量化的“检查项”然后让软件逐条去比对整块板子。比对完了给你一份报告告诉你哪里不符合规矩哪里可能有隐患。很多人把DRC当成一个“投板前的仪式”这是最大的误解。它其实是你和板厂之间的翻译官。你画完板子觉得一切OK但板厂拿到Gerber文件之后是按他们的工艺能力来加工制造的。如果你设计的间距小于板厂的最小线距能力加工出来就可能短路如果你的过孔孔径小于板厂的钻孔能力钻头就直接打偏。DRC的意义就是在这些风险变成“板子废了”之前先替你挡一道。我之前带过几个新人画完板子直接投板被板厂退回原因就是丝印压了焊盘、走线间距0.15mm小于工艺极限。其实这些在Altium Designer里跑一遍DRC就能全查出来但他们压根没配规则用的还是软件默认值等于让一个不认识路的人替你开车能不跑偏吗。1.2 Altium Designer 20的规则体系长什么样Altium Designer 20的规则管理在“Design - Rules”里打开之后你会看到左侧是一棵规则树按类别分成了十大类Electrical电气、Routing布线、SMT贴片、Mask阻焊/助焊、Plane电源层、Testpoint测试点、Manufacturing制造、High Speed高速、Placement布局、Signal Integrity信号完整性。这十个类别看着多但日常我们真正要手工配的一般就是Electrical和Routing两大块其他的大多数用默认值或者根据板厂的工艺文件稍作调整。我见过不少工程师打开Rules面板之后直接懵掉树下面少说几十条子规则每条还有一堆参数根本不知道从哪下手。这个正常但你要明白的是Altium的规则体系虽然看着复杂它的设计哲学其实很清晰所有规则都可以设定“作用范围”你可以让某条规则只管某一个网络也可以让它只管某一层还可以让它只管某一类器件。这就是它跟一些简单EDA工具最大的区别——规则是可以分场景、分层、分网络精细管控的而不是一刀切。1.3 什么时候跑DRC在线检查与批量检查的分工Altium Designer 20里DRC其实有两种工作模式一种是Online DRC在线检查一种是Batch DRC批量检查。在线检查就是你在拖线的时候软件实时盯着你你一违反规则它立刻在界面上高亮出来甚至直接阻止你继续走线。批量检查则是你主动点击“Run DRC”软件对整个板子做一次全量扫描出一份详细报告。这两种模式的分工一定要搞明白。在线检查适合布线过程中用它能帮你“边画边改”不至于到最后攒一大堆错。但在线检查不能完全替代批量检查因为在线检查一般只检查部分规则比如间距、短路、线宽很多制造类规则它根本不管。批量检查才是投板前的最终把关它会把所有启用的规则全部跑一遍包括丝印、孔环、铜皮连接方式这些制造细节。我的习惯是每一层布线完成之后先按快捷键“T - D - R”跑一次批量检查确认当前层没有大的问题再继续下一层。全部布完之后再跑一次全量检查把剩余的报错逐条清零。这样分段跑检查比全部画完再一次性面对几百个报错要轻松得多定位问题也快。2. 规则配置的先后顺序不按这套思路配你就是在跟工具较劲2.1 先分清规则的作用范围全局、网络、区域、层Altium Designer的规则配置第一件事不是去填参数而是搞清楚“这条规则管的是谁”。规则的作用范围Scope决定了它的管辖区域。常见的范围有这么几种All所有对象整块板子的所有走线、焊盘、过孔都归它管。Net网络只针对你指定的某个网络比如电源网络、时钟网络。Net Class网络类别把多个网络打包成一类统一设规则这是最常用的方式。Layer层只针对某一层比如内电层或顶层。Region区域板上某一个画出来的特定区域。Component Class器件类别针对某一类元器件比如连接器类、BGA类。很多新手配规则的时候上来就把所有网络的间距改成6mil结果发现某些网络需要特殊处理比如高压网络要1mm间距又不知道怎么单独加一条规则只能大改全局把其他本不需要放宽间距的网络也一起改了。这就是没搞懂作用范围的典型表现。正确的做法是先建立网络类别Net Class把电源网络、地网络、差分信号、普通信号分别归类然后再针对每个类别去设规则最后再补几条针对特殊网络或特殊区域的规则。这样层次分明后面对某条规则做调整的时候不会牵一发而动全身。2.2 优先级怎么排数字越小越优先Altium的规则系统里同一种类型的规则允许多条并存。比如“Clearance”这条规则你可以先设一个全局的6mil间距再给电源网络类别设一个12mil间距再给某个特定网络设一个20mil间距。这时候问题来了一堆规则同时存在到底听谁的答案是优先级Priority。在规则编辑器里每条规则都有一个“Priority”数字数字越小优先级越高。当两条规则的作用范围有重叠时软件会优先执行优先级高的那条如果那条没法覆盖才往下看次优先级的。这里有个关键要点全局规则的优先级一定要最低特殊规则的优先级拉高。我见过有人反着设把全局规则优先级设成1结果专门给某个网络设的规则反而被全局规则盖掉了检查结果一点都不生效。一般在Altium里你新建的规则默认优先级是1已有的规则会自动往下降你需要检查一下确保“All”那条全局规则是最后兜底的特殊网络、特殊区域的规则排前面。这个优先级机制本质上跟C语言里的switch-case有点像——从上往下匹配命中就执行没命中就继续走下一个。2.3 几个最容易被忽略的制造类规则很多人配DRC时只盯着Electrical和RoutingManufacturing类目下的规则基本不碰。但恰恰是这些被忽略的规则最容易让板厂打来电话。我挑三个最常踩坑的来说。第一个是Silk To Solder Mask丝印到阻焊的间距。丝印压焊盘是很多新手的通病Altium默认规则里这项有时候是0或关闭状态导致丝印直接盖在焊盘上。板厂虽说不一定会因为这个废板但丝印覆盖焊盘会影响可贴性也可能在回流焊后出现丝印残缺。建议至少设0.15mm以上。第二个是Minimum Solder Mask Sliver阻焊桥最小宽度就是两个焊盘之间残留的阻焊油宽度。BGA或者密间距QFP封装里如果焊盘间距太小阻焊桥宽度很窄板厂印刷阻焊的时候容易脱落。一般设0.1mm左右如果板厂工艺好可以设小一点但别低于0.075mm。第三个是Hole Size钻孔尺寸。这个规则包含两个方向的最小值和最大值约束。很多人的过孔用的是默认的0.3mm外径、0.15mm孔径这在普通双层板没问题但如果你的板子用的是厚板或者有背钻需求板厂可能做不了那么小的孔。先跟板厂确认最小机械钻孔能力一般常规工艺是0.2mm以上再把这个数值写进规则里DRC就能帮你挡住那些“画得出来但钻不出来”的孔。3. 手把手从零配置一套能直接投板的DRC规则3.1 打开规则编辑器的正确姿势在Altium Designer 20里配置DRC规则的主入口是“Design - Rules”快捷键是“D - R”。打开之后是那个熟悉的规则树界面。如果你是从别的版本升上来的界面布局可能会有点差异但整体逻辑一致。我建议你从一开始就给自己的模板配好一套“常用规则”然后把它存成模板文件之后每次新建工程直接导入不用每次重配。具体操作是配好规则之后在“Design - Rules”面板里点右键选择“Save Rules To File”把规则保存为一个“.RUL”文件。下次新建工程在“Design - Rules”面板里右键“Load Rules From File”一键导入。这个方法我用了很多年换电脑、换公司都不会丢掉自己那套积累出来的规则体系。3.2 电气规则配置要点间距、短路、未布线电气规则Electrical是整个DRC里最核心的部分我们逐条看。**Clearance间距**是最重要的一条。它检查的是不同网络之间铜箔的最小距离。常规双层板建议设6mil0.1524mm高密度板可以压到4mil但前提是板厂工艺支持。功率部分、高压部分要单独加大间距比如220V交流或者超过50V的直流建议至少0.5mm以上安全标准高的场合甚至要1mm以上。具体怎么设参考你所在行业的安规要求。**Short-Circuit短路**规则一般保持默认“不允许短路”就行。但有一种情况要特别注意就是某些特殊设计比如检测用的网络故意要跟铺铜相连形成连接点这种情况下需要单独对那个网络设一条“允许短路”的规则并把优先级设高。不过这个操作风险很大非必要别碰。**Un-Routed Net未布线网络**是必查项它的默认规则通常是“不允许存在未布线网络”意思就是所有网络必须完整连通不能有断头路。这个规则对应的就是文章开头提到的“partial route conflicts”报错一会儿我会专门讲。配置完这些别忘了把“Ignore”选项都检查一遍。比如有些设计里焊盘和同网络的走线在某个特殊层是故意断开的这种你可以在对应规则里勾选Ignore让DRC跳过这个检查项。但这个操作一定要记得写注释不然过几个月你自己都忘了为啥这里要Ignore。3.3 布线规则配置要点线宽、过孔、走线布线规则Routing里日常用得最多的是Width线宽和Routing Via Style过孔样式。线宽规则的设计思路一般是按网络类别分别设置最小、首选、最大三个值。Altium输入的就是这组数值Min最小、Preferred首选、Max最大。首选线宽是你交互布线时软件默认采用的宽度最大最小值是DRC检查的上下限。举个例子常规信号线我通常设Min 6mil、Preferred 8mil、Max 10mil这样既允许板厂在必要的时候稍微缩窄也能防止走线太粗导致布线拥堵。电源线和地线要单独设一个网络类别线宽建议20mil起步根据电流大小往上加。Rough估算线宽有个经验公式1oz铜厚、允许温升10摄氏度左右时1A电流大约需要20mil线宽。当然这只是粗略参考实际还要考虑走线长度、环境温度、散热条件严谨一点的话用IPC-2221标准的公式去算。把计算出来的值填进规则里DRC就能自动帮你把关电源线宽够不够。Routing Via Style这条规则控制过孔的尺寸。常规过孔我一般设外径0.6mm、孔径0.3mm这几乎是所有板厂都能做的常规工艺值。如果做BGA扇出可能需要更小的过孔比如外径0.45mm、孔径0.2mm但要提前跟板厂确认激光钻孔和机械钻孔的最小直径是不一样的。还有一个**Routing Layers布线层**规则用来限制哪些层允许走线。比如四层板里如果你想让信号主要走顶层和底层内层只走电源和地那在这条规则里把中间层的布线权限关掉DRC就会把跑到内层去的信号线全部报出来。这个是很多人漏掉的设置等到发现内层全是杂线再删工作量就大了。3.4 跑DRC并读取报告规则配置好之后跑检查就很简单了。菜单路径是“Design - Board Layers Colors”右侧那个“DRC...”按钮或者在菜单里“Tools - Design Rule Check”快捷键是“T - D - R”。跑之前会弹出“Design Rule Checker”对话框左边是所有规则类别你可以勾选要检查哪些项。一般情况下全勾上就行但如果只想快速检查某个类别的错误也可以只勾对应的类别。注意右上角有个选项“Create Report File”建议勾上它会生成一份HTML格式的报告方便你存档和事后回溯。点击“Run Design Rule Check”之后软件就开始扫描整块板子。板子大小、规则数量、电脑性能都会影响扫描时间我见过一块12层的高速背板跑完整次DRC花了将近二十分钟。扫描完成后左下角的“Messages”面板会弹出所有报错条目。这个面板是可以点击跳转的——你双击某一条报错界面就会自动放大到对应的位置。这是定位问题最重要的一步一定要学会用。报告里每个条目都带一个“Rule”字段告诉你违反了哪条规则还有一个坐标信息告诉你在板子上的具体位置。配合Messages面板的跳转基本能快速定位每一处问题。4. 实战中的典型报错partial route conflicts到底在说什么4.1 RTSTAT-6 partial route conflicts的含义文章开头提到的热搜词里有一条很典型的报错信息“drc rtstat-6 partial route conflicts: 1184 net(s) have a partial conflict.” 这个报错在Altium Designer里非常高频尤其是从别的EDA工具导过来的板子或者用Draft Mode草图模式走了一半线的板子。先说结论这个报错的意思就是“有1184个网络存在未完成的布线”。什么叫未完成就是你启动了一条走线命令走了一半还没连到目标焊盘上就停了。Altium把这种半截线叫“partial route”中文可以理解成“残线”或者“断头走线”。它跟普通走线最大的区别是走线的一端已经连在焊盘或过孔上另一端却是悬空的。这在物理连接上等于断路所以DRC把它定义为冲突。那“1184 net(s)”是什么意思就是有1184个网络里都检测到了这种悬空走线段。一个网络可能有多截残线但只统计一次所以1184个网络里有大量残线密密麻麻。这个数字看着吓人但你不用慌因为背后往往就是一个原因你在某次交互布线时大批量启动了走线但没走完就切换了工具或者结束命令。还有一种常见情况是你从原理图导入了网络表在PCB里选择“Interactive Routing”之后对所有飞线做了“Fanout”或者“Auto Route”自动布线跑到一半因为某种原因中断了留下了一堆残线。自动布线工具本身不是总能100%完成尤其在非常复杂的板子上报个几百条残线太常见了。4.2 快速定位未完成布线的两个方法定位这些残线不要一条一条在Messages面板里双击跳转那效率太低了。有两个高效方法。第一个是按网络逐个高亮。在PCB界面里按住“Ctrl 左键”点击某个网络软件会高亮整个网络的所有走线残线的部分会显示成跟正常走线不同的样式通常是空心或者虚线状。在布线的图形模式下正常走线是实心的铜箔线残线则是半透明或带轮廓的非常容易分辨。对着一块板子所有高亮的网络扫一遍基本能看个大概。第二个是使用“Select - Tracks”加过滤器。具体操作是在“Find Similar Objects”对话框里通过设置“Track”对象的属性来筛选残线比如筛选“Locked”为False、“Width”为某个值但“Net”为特定网络或者直接点击“Is Partial Route”属性。在Altium Designer 20里按“Shift F”可以打开Find Similar Objects在里面选择对象类型为“Track”然后勾选“Partial Route”作为匹配条件就能一键把所有残线选中。选中之后在“Properties”面板里看一下总数量心里就有数了。如果你用的是比较新的版本还有更直接的方式——在Messages面板里右键报错条目选择“Highlight”或者“Select Affected”软件会直接帮你把相关的残线全部框选高亮。这个方法我最常用。4.3 1184个网络报错的排查思路面对几千上万条错误人很容易崩溃。这时候别急先做个预处理在Messages面板的底部“Filter”栏里输入“Partial Route”把报错先筛出来看看这类错误占比多少。筛选完之后再执行一个关键操作——把残线全部选中看它分布在什么区域。用“Select - All”配合分层隐藏或者用区域框选你很快就能发现大多数残线集中在某个连接器附近或者BGA周边。这说明当初大概率是在这附近做扇出或者重布线时操作中断了。定位到区域之后再决定是“补线”还是“删线”。如果残线的走向可以接受就用交互布线把它继续连到目标焊盘上如果残线的路径已经被其他走线破坏或者本来就是一次失败的布线尝试那就直接选中删除。删除的操作是选中残线按Delete。这里注意千万别按到“X - T”之类的清理命令那个会把整层铜皮都删掉别问我为什么知道。删掉之后重新跑一次DRC1184这个数字通常会断崖式下降。剩下的如果还有几百个那就要检查是不是有“飞线”没连上的问题也就是网络表里存在未布线的连接。这个可以通过DRC报告里的“Un-Routed Net”条目来查看Altium会列出所有未完成布线的网络清单逐个补齐即可。5. 误报、假错和规则屏蔽怎么处理“不想改”的违规5.1 常见误报场景与处理DRC跑出来的结果不可能永远正确它也会误报。误报的意思是设计本身没问题但规则设置得不合理或者软件理解不了你的设计意图硬是把正常的东西标成了错误。最常见的误报场景是铺铜和走线的连接问题。比如说你有一块一整片的GND铺铜中间放了一个电源芯片的散热焊盘散热焊盘本身是GND网络那它在电气上跟铺铜是同一个网络不会报错。但如果你用的是多个网络共用一个机械焊盘的设计比如散热焊盘下打过孔阵列连接到内层地平面这中间只要有一个过孔没打上或者孔跟焊盘的间距小于规则设定的值DRC就会一阵狂报。遇到这种问题不要急着去改板子先看规则。多数情况下是把“Clearance”规则里“Same Net”这个选项打开了。Altium里的Clearance规则默认是只检查不同网络之间的间距但如果你在规则设置里把“Check same net”选上了那同一网络下的焊盘、走线、过孔之间的间距也会被检查。对某些特殊网络比如电池正极的大焊盘同一网络内的间距可能确实很小这不一定是问题。处理方式是把同网络检查关掉或单独建一条针对该网络的规则允许同网络间距为0。另一个常见误报是过孔跟焊盘的孔环Annular Ring冲突。有些焊盘本身就是过孔焊盘比如插接件它在顶层和底层的焊盘环宽是固定的如果你的孔环宽度小于制造规则的最小值DRC会报错。这种问题通常只能找器件封装的问题或者跟板厂确认能否放宽工艺值而不是在PCB文件里硬扛。5.2 把已知问题排除在报告之外有些情况下你明知道DRC会报某个位置的错误但你不想改、也没必要改。比如板子上有两个不同网络的焊盘机械上需要靠得很近但你已经在铺铜上加了隔离带电气上完全没问题。某些丝印位号跨到了焊盘边缘但位号是装配后才会丝印的实际不影响焊接。某条走线在快到焊盘的地方宽度从8mil变成6mil以满足BGA间距这本身是有意为之。这些情况如果不想每次跑DRC都看到一排红色报错可以选择在规则里给特定对象加例外。Altium Designer 20里有两个常用做法一个是创建“Rule Exception”规则例外把特定的坐标区域或对象类型排除在某条规则之外另一个是直接在该条规则的“Scope”里把范围缩小比如把它从“All”改成“Not In Any Class”之类的反向过滤让它只检查你不想检查的部分。这里必须提醒一句屏蔽任何DRC报错都得在原理图或PCB的文字注释里写清楚原因。我吃过这个亏当时为了赶时间把一个BGA区域内的间距报错用例外方式屏蔽了也没写注释。两个月后这个板子改版我把那个例外规则当作普通错误清理掉了结果新板子BGA区域直接短路白白损失一批样品和一周时间。DRC的例外规则相当于“我知道这里有问题但我确认它能工作”的免责声明写清楚原因是对自己负责也是对这个设计负责。5.3 与KLayout、OrCAD的DRC功能差异对比很多人在网上搜“KLayout如何进行DRC”或者问“OrCAD的DRC跟Altium的DRC有什么区别”这里我根据实际使用经验简单对比一下。KLayout是开源社区里做IC版图验证的一个工具主要针对的是芯片版图GDSII、OASIS格式它跟Altium Designer的PCB DRC完全不是一个赛道。KLayout的DRC核心是跑“规则文件”通常是.lyt或.lyr格式用一套脚本语言来描述几何规则比如“检查M1层和M2层间距不能小于0.1微米”。它的精确度和可定制性极高但学习曲线很陡你得会写脚本。而Altium的DRC是在图形化界面里勾选参数不需要写代码两者面向的行业完全不同KLayout面向半导体工艺验证Altium面向PCB制造验证。如果你不是做IC设计的KLayout基本用不上。OrCAD的DRC分两种一种是针对原理图的DRC检查电源悬空、引脚冲突、网络标号错误这类问题另一种是PCB环境下的DRC由Allegro工具完成功能上和Altium的PCB DRC处于同一水平。从易用性来说Altium Designer的DRC配置对新手更友好规则树和参数界面一目了然Allegro的约束管理器Constraint Manager功能也很强大甚至可以针对拓扑结构设约束但上手门槛明显更高需要花时间理解“物理约束”和“电气约束”这两套体系。你有Altium的基础再去学KLayout或OrCAD的DRC核心思路是通用的先分清作用范围再设约束值然后跑检查、读报告、修问题。工具可以换方法论是一致的。6. 大板子跑DRC太慢怎么办性能与效率优化板子规模一大DRC跑起来就特别磨人。我见过最多的抱怨就是点了一下Run DRC然后去倒水、上厕所、刷手机回来还没跑完。其实有几个办法能显著提升效率。第一尽量只跑需要检查的规则。在运行DRC之前把“Design Rule Checker”对话框里这次不需要的规则类别取消勾选。比如你还没铺铜那关于铺铜连接方式和阻焊桥的规则就可以先不跑你还没画丝印那丝印相关的规则也可以先跳过。每少一条规则扫描时间都会缩短。第二在线DRC可以配置成“懒模式”。在“Design - Rules”里右侧底部有个“Online and Batch”按钮体系每条规则都可以分别设置是“在线检查”、“批量检查”还是“两者都启”。你以为所有规则默认都是两者都启其实不是。我习惯把Online DRC里那些非常耗时的检查项比如大面积铺铜的间距检查关掉只保留最关键的短路和间距在线检查这样在布线过程中转一点都不会卡等布完线再跑批量检查。第三善用“Highlighted”和“Masked”状态做局部检查。Altium支持在布局空间里用“过滤面板”只显示一部分对象然后针对这部分对象单独跑DRC。比如你只改了BGA区域的布线那就先选中BGA区域内的走线然后在DRC对话框里选择“Check Selected Objects Only”。这个选项能把检查范围从整板缩小到局部速度能快十倍以上。改完局部之后再跑整板全量检查这个思路跟写程序做单元测试很像——你不可能每次都把整个项目的所有测试跑一遍才提交。最后再多说一句如果你用的是老电脑或者超多层板Altium的DRC速度确实会明显吃力。这时候先把“实时高亮错误”这个选项关掉它在布线过程中会频繁重绘错误标记非常吃CPU。等所有工作都结束了再打开一次性看报告就好。写在最后的实操体会做了这么多年板子我越来越觉得DRC规则配置这件事本质上是在用一套“提前说好的标准”来约束自己和板厂之间的关系。规则配得好板子投出去几乎不会被退回规则是摆设那板厂就会替你做本该你自己做的判断而他们的判断标准跟你设计的意图未必一致最后受伤的还是项目进度。我个人的习惯是每年年初花半小时把过去一年踩过的所有DRC相关的坑整理一遍更新到自己的规则模板里。比如“所有BGA区域走线线宽最小不能低于4mil”“所有螺丝孔周围1mm范围内不允许有任何走线”这些都是吃过亏才总结出来的。规则模板不是一成不变的它会随着你的项目经验和板厂工艺的进步不断演进。如果你现在正对着一条看不懂的DRC报错发愁最直接的建议就是先看它的“Rule”是什么再去规则优先级列表里找到这条规则搞清楚它的作用范围和约束值然后回到板子上看实际对象。三步走完绝大多数问题都能现场解决。千万别干那种“看到报错就猛按Delete”的傻事你删的可能是你自己好几个小时的辛勤劳动。