1. 为什么DRC检查是PCB设计中最容易被低估的环节
干了十来年PCB设计,我见过太多这样的情况:原理图没问题,布局看着也漂亮,走线规规矩矩,结果板子打回来一上电,短路了。或者更隐蔽的——功能正常,但EMC测试死活过不了,查来查去发现是某条信号线离电源平面太近,耦合了一堆噪声。这些问题,十有八九都能在DRC检查阶段提前发现。
DRC,Design Rule Check,翻译过来叫设计规则检查。很多人把它当成一个“走流程”的步骤——画完板子,点一下DRC按钮,没有报错就导出Gerber发出去。但实际上,DRC是你交付设计之前的最后一道防线,也是最重要的一道。它检查的不只是“线宽够不够”“间距合不合规”这种基础项,还包括差分对匹配、阻抗连续性、过孔环宽、铜皮连接方式、丝印重叠等等几十个大类、上百个细分规则。
Cadence Allegro 17.4在DRC这块的功能相当强大,但强大也意味着复杂。Constraint Manager里的规则设置如果没搞对,要么该报的错不报(漏检),要么不该报的拼命报(误报),最后你干脆忽略所有警告直接发板——这是最危险的操作。
这篇文章面向的是已经有一定Allegro基础、能独立完成布局布线、但对DRC检查流程还不够系统的PCB设计工程师。我会从规则设置、检查执行、错误分类、排查方法四个维度,把整个DRC流程拆开讲透。也会分享一些我这些年踩过的坑和总结出来的排查技巧,希望能帮你少走弯路。
2. Allegro 17.4 DRC检查的整体流程设计
2.1 从Constraint Manager开始:规则先于检查
很多人打开Allegro,画完板子,直接点Tools→Quick Reports→Design Rules Check,看到一堆绿色就放心了。这个操作本身没错,但前提是你的Constraint Manager里的规则是完整的、正确的。如果规则本身没设好,DRC跑出来的结果就是自欺欺人。
Allegro 17.4的约束管理器(Constraint Manager)是整个DRC体系的基石。它分为几个核心模块:
- Physical Constraints(物理约束):线宽、过孔尺寸、铜皮间距等
- Spacing Constraints(间距约束):线到线、线到焊盘、焊盘到焊盘等各类间距
- Electrical Constraints(电气约束):阻抗、差分对、等长、延时等
- Same Net Spacing(同网络间距):同一网络内不同元素之间的间距
我通常的做法是,在布局开始之前就把Constraint Manager里的规则全部配置好。为什么?因为规则是“设计意图”的数字化表达。你先想清楚这块板子要怎么做,再去画,比画完了再补规则要高效得多。
举个实际例子。假设你做一个四层板,信号层走50Ω单端阻抗线,差分对走100Ω。那么你需要在Electrical Constraints里设置好阻抗目标值,然后在Physical Constraints里根据叠层计算出对应的线宽。Allegro 17.4支持通过叠层编辑器(Cross-section)自动计算阻抗对应的线宽,这个功能在Setup→Cross-section里操作。
注意:叠层编辑器里算出来的线宽是理论值,实际加工时PCB厂会根据他们的工艺做微调。所以你在Constraint Manager里设的线宽,最好和板厂确认过的阻抗线宽保持一致。
2.2 规则优先级与作用域:别让规则互相打架
Constraint Manager里有一个很容易被忽略但极其重要的概念——规则优先级。当你对同一个对象设置了多条规则时,Allegro需要知道哪条规则优先执行。
默认情况下,规则的优先级从高到低是:
- Class-to-Class规则(最高优先级)
- Net-to-Net规则
- Group规则
- Default规则(最低优先级)
这个优先级体系意味着,如果你在Default里设了线宽6mil,但在Class-to-Class里对某个信号类设了线宽8mil,那么该类信号会按照8mil来检查。听起来很合理对吧?但问题在于,很多人设了一堆规则之后忘了自己设过什么,导致DRC报出来的错误让人摸不着头脑。
我的建议是:规则不要贪多,够用就行。每设一条规则,都在备注里写清楚为什么设这条规则。Allegro 17.4的Constraint Manager支持在规则上添加注释,这个功能一定要用起来。
2.3 DRC检查的两种模式:在线与批量
Allegro 17.4提供两种DRC检查模式:
在线DRC(Online DRC):在布线过程中实时检查,发现违规立即在状态栏提示。这个模式适合在布线阶段使用,能帮你及时发现并修正问题。开启方式是在Setup→Constraints→Mode里勾选On-line DRC。
批量DRC(Batch DRC):在布线完成后统一执行一次全面检查。这个模式适合在发板前做最终验证。执行方式是在Tools→Quick Reports→Design Rules Check,或者在Allegro的Command窗口输入drc命令。
两种模式各有优劣。在线DRC反应快,但会拖慢软件运行速度,尤其是在大板子上。批量DRC速度快,但只能在最后阶段发现问题,修改成本高。我的习惯是:布局阶段开在线DRC,走线阶段关掉(太卡),走完线再开批量DRC做全面检查。
3. 核心规则设置与实操要点
3.1 物理规则:线宽与过孔的关键参数
物理规则里最重要的两个参数是线宽(Line Width)和过孔尺寸(Via Size)。这两个参数直接决定了板子的电气性能和可制造性。
线宽的设置逻辑是这样的:先确定电流大小,再根据铜厚计算最小线宽,最后考虑阻抗要求做调整。对于普通信号线,1A电流在1oz铜厚下大约需要20mil线宽(温升10℃以内)。对于电源线,我通常按照1A对应40mil来估算,留足余量。
过孔的选择更讲究。Allegro 17.4支持多种过孔类型:通孔(Through Via)、盲孔(Blind Via)、埋孔(Buried Via)、微孔(Micro Via)。对于大多数消费类电子产品,通孔就够了。过孔尺寸方面,常规的0.3mm钻孔/0.6mm焊盘是性价比最高的选择——太小了板厂良率下降,太大了占空间。
在Constraint Manager里设置过孔时,需要注意过孔环宽(Annular Ring)。环宽 = (焊盘直径 - 钻孔直径) / 2。对于0.3mm钻孔配0.6mm焊盘,环宽是0.15mm,这是大多数板厂能稳定做到的。如果环宽小于0.1mm,就要跟板厂确认工艺能力了。
实操心得:我习惯在Constraint Manager里建一个“Via List”,把常用的过孔类型都列进去,比如0.3/0.6、0.2/0.4、0.15/0.35。布线时直接切换,不用每次都手动输入尺寸。
3.2 间距规则:不同网络不同待遇
间距规则是DRC报错最多的来源。Allegro 17.4的间距规则可以按照对象类型(线、焊盘、过孔、铜皮、丝印等)和网络类别(电源、地、信号等)分别设置。
我的设置策略是“分级管理”:
| 网络类型 | 线到线间距 | 线到焊盘间距 | 过孔到线间距 |
|---|---|---|---|
| 普通信号 | 6mil | 6mil | 6mil |
| 电源/地 | 8mil | 8mil | 8mil |
| 高压信号 | 20mil | 20mil | 20mil |
| 差分对内 | 按阻抗计算 | 按阻抗计算 | 按阻抗计算 |
这个表格里的数值是基于普通FR-4板材、1oz铜厚、常规工艺给出的参考值。如果你的板子有特殊要求(比如高压、高频),需要相应调整。
设置间距规则时,有一个很容易踩的坑:Same Net Spacing。同一网络内的元素,比如一条线的两个段之间、线到自己的焊盘之间,默认是不检查间距的。但有些情况下你需要检查,比如铜皮到同网络的焊盘之间需要保持一定间距以便焊接。这时候就要在Same Net Spacing里单独设置。
3.3 电气规则:差分对与等长匹配
电气规则是高速PCB设计的核心。Allegro 17.4在这块的功能非常细致,我重点讲两个最常用的:差分对和等长匹配。
差分对的设置分三步:
- 在Constraint Manager的Electrical→Differential Pair里创建差分对
- 设置差分对的Primary Gap(线间距)和Primary Width(线宽)
- 设置差分对的阻抗目标值,Allegro会自动计算是否需要调整线宽
差分对最常见的DRC错误是“差分对间距不匹配”。这通常是因为在布线过程中,差分对的两条线绕过了不同的障碍物,导致间距变化。Allegro 17.4会在DRC报告里标出具体位置,你只需要找到那个位置,手动调整走线即可。
等长匹配的设置稍微复杂一些。你需要先创建一个Match Group,把需要等长的网络加进去,然后设置目标长度和允许误差。Allegro 17.4支持两种等长模式:Relative Propagation Delay(相对传播延时)和Total Etch Length(总走线长度)。前者更精确,考虑了信号在PCB上的传播速度;后者更简单,直接比较走线长度。
注意:等长匹配的误差范围不要设得太小。很多新手喜欢设±5mil,结果DRC报了一堆错,怎么调都调不好。实际上,对于大多数DDR信号,±50mil的误差完全够用。误差设得太小,只会浪费你的时间。
4. DRC检查的执行与错误分类
4.1 批量DRC的完整操作流程
批量DRC的执行流程如下:
- 确认所有布线已完成,没有未连接的飞线
- 打开Tools→Quick Reports→Design Rules Check
- 在弹出的对话框中选择检查范围(整个设计或当前层)
- 勾选需要检查的规则类别
- 点击Run,等待检查完成
- 查看DRC报告,逐条分析错误
Allegro 17.4的DRC报告会以HTML格式输出,包含错误类型、位置坐标、涉及的网络和对象。你可以直接在报告里点击错误条目,Allegro会自动跳转到PCB上的对应位置。
这里有一个很实用的技巧:在DRC报告里,你可以按错误类型排序,把相同类型的错误集中处理。比如所有“Line to Line Spacing”的错误一起看,往往能发现是某个区域的规则设错了,而不是真的布线有问题。
4.2 常见DRC错误类型与含义
Allegro 17.4的DRC错误类型有上百种,但实际设计中经常遇到的也就那么十几种。我整理了一个常见错误速查表:
| 错误代码 | 错误类型 | 常见原因 | 排查方向 |
|---|---|---|---|
| L-L | Line to Line Spacing | 两条线间距小于规则值 | 检查是否规则设太严,或走线太密 |
| L-P | Line to Pad Spacing | 线到焊盘间距不足 | 检查焊盘周围是否有走线穿过 |
| P-P | Pad to Pad Spacing | 两个焊盘间距不足 | 检查元件布局是否太密 |
| V-L | Via to Line Spacing | 过孔到线间距不足 | 检查过孔位置是否合理 |
| S-L | Shape to Line Spacing | 铜皮到线间距不足 | 检查铜皮避让设置 |
| D-P | Differential Pair Gap | 差分对间距不匹配 | 检查差分对走线是否对称 |
| E-L | Etch Length | 等长匹配超差 | 检查Match Group设置 |
| A-R | Annular Ring | 过孔环宽不足 | 检查过孔尺寸设置 |
| S-O | Silkscreen Overlap | 丝印重叠 | 调整丝印位置 |
这个表格里的错误代码是Allegro 17.4的默认代码,如果你自定义了规则名称,代码可能会不同。
4.3 在线DRC的实时监控技巧
在线DRC虽然方便,但如果不加控制,会频繁弹出警告,严重影响布线效率。我的做法是:
- 在布局阶段,只开启间距和物理规则的在线检查
- 在布线阶段,关闭在线DRC,改用批量DRC定期检查
- 在收尾阶段,重新开启在线DRC,做最后一遍走线检查
Allegro 17.4允许你自定义在线DRC的检查范围。在Setup→Constraints→Mode里,你可以选择只检查当前层、只检查可见对象、或者检查整个设计。我通常选择“只检查当前层”,这样既能及时发现问题,又不会太卡。
还有一个很实用的功能:DRC Marker的颜色和大小可以自定义。在Setup→Colors里,找到DRC Marker那一栏,把颜色改成醒目的红色或黄色,大小调大一些。这样在PCB上找错误位置会快很多。
5. 常见问题与排查技巧实录
5.1 DRC报错太多怎么办:分级处理策略
新手最怕的就是跑完DRC,报告里几百条错误,看得头皮发麻。其实不用慌,错误再多,也是有规律可循的。
我的处理策略是“先分类,再分级,后分批”:
第一步:分类。把DRC报告里的错误按类型排序,看看哪几类错误最多。通常来说,间距类错误(L-L、L-P)会占大多数,这类错误往往是因为某个区域的规则设得太严,或者走线太密。
第二步:分级。把错误按严重程度分成三级:
- 致命错误:短路、开路、环宽不足——必须改
- 严重错误:间距不足、差分对不匹配——尽量改
- 轻微错误:丝印重叠、测试点间距——可以酌情忽略
第三步:分批。先集中处理致命错误,再处理严重错误,最后看轻微错误。很多时候,改完致命错误和严重错误,轻微错误也跟着消失了。
5.2 规则设了但DRC不报错:漏检排查
比DRC报错更可怕的是——规则设了,但DRC不报错。这意味着你的板子有隐患,但你不知道。
漏检的常见原因有三个:
原因一:规则作用域不对。比如你在Class-to-Class里设了规则,但你的网络没有被分配到对应的Class里。检查方法是打开Constraint Manager,看看你的网络是否在正确的Class下。
原因二:规则优先级被覆盖。比如你在Default里设了间距6mil,但在某个Class里设了4mil,那么该Class的网络会按照4mil检查,6mil的规则被覆盖了。
原因三:DRC检查范围没勾选。在批量DRC的对话框里,如果你没有勾选对应的规则类别,Allegro就不会检查那类规则。这个坑我踩过——有一次忘了勾选“Same Net Spacing”,结果铜皮到焊盘的间距问题没查出来,板子打回来发现焊接不良。
排查技巧:在Constraint Manager里,有一个“Waived”选项卡,里面列出了所有被豁免的DRC错误。如果你发现某个规则设了但没报错,先去看看是不是被Waive了。
5.3 差分对DRC报错的典型排查流程
差分对DRC报错是高速板设计中最常见的问题之一。我总结了一个排查流程:
确认差分对是否创建成功。在Constraint Manager的Electrical→Differential Pair里,看看你的差分对是否在列表里。如果不在,说明创建失败了,需要重新创建。
确认差分对的线宽和间距设置是否正确。在Physical Constraints里,找到对应的差分对,检查Primary Width和Primary Gap是否与你的阻抗设计要求一致。
确认差分对走线是否对称。在PCB上找到报错的位置,看看差分对的两条线是否等长、等间距。如果不对称,手动调整走线。
确认差分对是否经过了过孔或焊盘。差分对经过过孔时,过孔的位置和尺寸会影响阻抗连续性。Allegro 17.4会在DRC报告里标出这类问题,你需要调整过孔位置或增加补偿。
确认差分对的参考平面是否完整。差分对下方的参考平面如果有裂缝或开槽,会导致阻抗突变。检查方法是打开平面层,看看差分对下方是否有完整的铜皮。
5.4 等长匹配DRC报错的调试方法
等长匹配的DRC报错通常有两种:一种是“长度超差”,一种是“匹配组未定义”。
“长度超差”的排查比较简单:打开Constraint Manager,找到对应的Match Group,看看目标长度和实际长度的差距。如果差距不大,可以通过绕线(Snake Route)来补偿。Allegro 17.4有一个“Auto-interactive Delay Tuning”功能,可以自动帮你绕线,效率很高。
“匹配组未定义”通常是因为你创建了Match Group,但没有把网络加进去,或者加错了网络。检查方法是打开Constraint Manager的Electrical→Relative Propagation Delay,看看Match Group里的网络列表是否正确。
实操心得:等长匹配的绕线不要绕得太密。绕线间距太小会导致串扰,反而影响信号质量。我通常把绕线的间距控制在3倍线宽以上,绕线幅度不超过线宽的10倍。
5.5 丝印重叠与测试点间距:容易被忽略的DRC项
丝印重叠和测试点间距是两类很容易被忽略的DRC项,但它们在量产阶段会带来大麻烦。
丝印重叠会导致元件标识看不清,影响焊接和维修。Allegro 17.4的DRC可以检查丝印到丝印、丝印到焊盘、丝印到过孔的间距。我的设置是丝印到焊盘至少4mil,丝印到丝印至少2mil。
测试点间距不足会导致测试探针无法同时接触。对于ICT测试,测试点之间的间距至少需要50mil;对于飞针测试,可以小一些,但也要保证30mil以上。Allegro 17.4可以在Constraint Manager里设置测试点的间距规则,DRC会自动检查。
6. 提高DRC效率的进阶技巧
6.1 自定义DRC报告模板
Allegro 17.4默认的DRC报告是HTML格式,信息很全,但不够直观。我习惯自定义一个报告模板,只显示我关心的字段:错误类型、位置坐标、涉及网络、严重程度。
自定义报告模板的方法是在Tools→Quick Reports→Design Rules Check的对话框里,点击“Report”按钮,选择“Custom”,然后勾选你需要的字段。你还可以把常用的报告模板保存下来,下次直接调用。
6.2 用Skill脚本自动化DRC检查
如果你经常做同类型的板子,可以考虑用Skill脚本自动化DRC检查。Allegro 17.4支持Skill脚本,你可以写一个脚本,自动执行以下操作:
- 打开Constraint Manager,加载预设的规则文件
- 执行批量DRC检查
- 导出DRC报告到指定目录
- 发送邮件通知检查结果
这个脚本我用了好几年,每次发板前跑一遍,省时省力。Skill脚本的编写需要一定的编程基础,但网上有很多现成的模板可以参考。
6.3 DRC与DFM检查的配合使用
DRC检查的是设计规则,DFM检查的是可制造性。两者配合使用,才能确保板子既能设计出来,又能制造出来。
Allegro 17.4本身没有DFM检查功能,但可以导出ODB++文件,用第三方DFM工具(如Valor、CAM350)做检查。我的流程是:先跑DRC,确保设计规则没问题;再导出ODB++,跑DFM,确保工艺没问题。两步都过了,才发板。
DFM检查的重点包括:最小线宽/间距是否满足板厂工艺能力、过孔环宽是否足够、阻焊开窗是否合理、拼板方式是否优化等。这些检查DRC做不了,但对量产至关重要。
6.4 版本管理与DRC记录的追溯
最后说一个容易被忽略但很重要的点:DRC记录的版本管理。
每次修改设计后,DRC结果都会变化。如果你没有记录每次DRC的结果,出了问题很难追溯。我的做法是:每次跑完DRC,把报告保存到项目目录下的“DRC_Log”文件夹里,文件名包含日期和版本号。同时,在报告里标注哪些错误已修复、哪些错误被豁免、豁免的理由是什么。
这样做的好处是,当板子出了问题,你可以快速回溯到某个版本的DRC报告,看看当时是否有相关警告被忽略了。这个习惯我坚持了五年,帮我省了很多扯皮的时间。
最后分享一个小技巧:Allegro 17.4的DRC报告可以直接导出为CSV格式,方便用Excel做统计和筛选。在报告页面点击“Export”按钮,选择CSV格式即可。用Excel打开后,你可以按错误类型做透视表,快速了解设计中的主要问题分布。
文章写到这里,基本上把Allegro 17.4的DRC检查流程和常见问题都覆盖到了。DRC检查这件事,说难不难,说简单也不简单。关键在于:规则要设对,检查要跑全,错误要分类,排查要有章法。希望这些经验能帮你在PCB设计的路上少踩几个坑。