AD22 里画 2 层板,最容易被应付过去的一步就是 Class 和规则设置。我见过太多这样的板子:原理图画得干干净净,布局也规规矩矩,结果 DRC 一跑两百多条报错,或者板子打回来发现电源走线细得跟头发丝一样、密脚 IC 的阻焊开窗连成一整片。追根溯源,问题几乎都出在同一件事上——从头到尾用的都是 AD22 出厂默认的那套规则,Class 一个没建,规则一条没改。默认值本身没什么错,它是按"通用安全值"给的,但通用就意味着对你的板子不一定合适。2层板只有 Top 和 Bottom 两层铜,没有完整的内层地平面,回流路径、载流能力、阻抗控制这三件事全都要靠走线和铜皮硬扛,规则设置的分量比 4 层板重得多。
这篇文章面向的是这样一类人:会用 AD22 画板,Layout 也能拖得动,但每次新建工程都要重新翻一遍规则对话框,改完也不知道改全没改全;或者建过 Net Class,但下次从原理图同步一下类就没了。我会把 2 层板这一套 Class 体系怎么搭、几条关键规则的具体数值怎么倒推出来、优先级怎么排、Query 语句怎么写、最后怎么沉淀成模板文件,从头到尾捋一遍。数值我会给出计算过程,不直接甩结论,你换成自己的板厚、铜厚、载流要求也能算。
1. 先厘清 Class 与 Rule 的关系,否则改到最后自己都绕晕
1.1 从 4 层板搬到 2 层板的三个典型翻车
第一个翻车是间距。4 层板有内层参考平面,线到线之间只要有 0.15mm 就基本安全,因为串扰主要靠参考平面兜底。2 层板不行,Top 层两条长距离平行走线,底下没有完整平面,边缘场直接耦合过去,间距按默认的 0.254mm 走反而还凑合,一旦你为了省空间把间距规则改成 0.127mm,串扰就会明显上来。所以 2 层板上的 Clearance 规则不是"越松越好"也不是"越紧越好",而是分对象分场景——地线和电源线之间可以松,两条长并行的信号线之间必须紧。
第二个翻车是线宽。4 层板电源走 0.5mm 心里很踏实,因为内层还有铜。2 层板 Top 层只有 1oz 铜,0.5mm 宽、35µm 厚,截面积只有 0.0175mm²,扛 2A 已经接近 10℃ 温升的临界。很多人习惯性地把 Width 规则的 Max 卡死在 0.5mm,结果画大电流路径时一拉粗线就报错,只好拆成两条细线绕,反而更难散热。Width 规则的 Max 值在 2 层板上应该放开,Min 值才是真正要守的底线。
第三个翻车是过孔。4 层板上的过孔主要是换层,载流压力小。2 层板上,如果 Bottom 层是一整片地铜,那 Top 层上的每一个地过孔都是回流路径的一部分,一根信号线换层后,回流要在地铜上绕一大圈才能跟上。这类过孔的数量和位置直接影响 EMI。规则里没法直接约束"回流过孔必须贴着信号过孔放",只能靠 Via Style 规则把过孔尺寸定死,然后靠人工在关键信号过孔旁边补地过孔。
1.2 Class 是花名册,Rule 是规章,两者必须配套
AD22 的规则引擎里,每一条规则都有一个作用域,写在规则对话框的"Where the First Object Matches"和"Where the Second Object Matches"两个框里,本质就是一句 Query 语句。你可以直接把一堆网络名硬写进去,比如:
InNet('VBAT') || InNet('VCC_5V') || InNet('VCC_3V3') || InNet('VCC_1V8')这句没错,能跑。问题是项目一改,多加了一路 1V2 电源,你得回来把每一处写过的 Query 都补一遍;漏掉任何一处,那条规则的覆盖就不完整了,而 DRC 不会告诉你"你忘了加一个网络",它只会默默按默认规则放行。这就是不做 Class 最大的代价——错误是静默的。
Class 解决的就是这件事。把上面那四个网络放进一个叫PWR的 Net Class,规则里只需要写InNetClass('PWR')。以后新增电源网络,在原理图或 PCB 面板里往PWR类里一拖,所有引用这个类的规则自动生效,一条都不用改。
AD22 里的 Class 分好几族:Net Class(网络类)、Component Class(元件类)、Differential Pair Class(差分对类)、Pad Class(焊盘类)、Layer Class(层类),还有结构类。对于 2 层板,真正高频使用的是前三族,Layer Class 基本用不上,因为规则里直接写OnTopLayer或OnLayer('Bottom Layer')就够了。
这里有个认知上的坑要提前说清:Class 是"对象集合",Rule 是"约束条款",两者是正交的。你可以建十个 Class 但一条规则都不为它们写,也可以为同一个类写五条不同维度的规则。很多人建完 Class 就以为"万事大吉",其实那只是把花名册编好了,规章一条还没写。
提示:判断一个项目的规则体系健不健全,有个很土但很有效的办法——打开 Design » Rules,看规则树里有多少条规则的 Query 里是硬写的
InNet(...)。这个数量越多,项目就越脆。
2. 2层板该建哪几个 Class,怎么建才不会被同步冲掉
2.1 我常用的最小 Class 清单
2 层板结构简单,Class 不需要建得太细,细了维护成本反而高。我一般控制在 4 个 Net Class + 2 个 Component Class + 1 个差分对类,基本能覆盖九成以上的中小型项目。
| Class 名称 | 类型 | 典型成员 | 用途 |
|---|---|---|---|
| PWR | Net Class | VBAT、VCC_5V、VCC_3V3、VCC_1V8、VREF | 统一放宽线宽、收紧到信号线的间距 |
| GND | Net Class | GND、AGND、PGND | 铜皮连接方式、直连过孔 |
| HS | Net Class | USB_DP/DM、CLK、SPI_SCK 等高速信号 | 收紧间距、限制换层次数 |
| SLOW | Net Class | LED、按键、继电器驱动、蜂鸣器 | 允许细线宽、允许长距离走线 |
| IC | Component Class | 所有芯片、模块 | 用于元件间距、丝印避让 |
| CONN | Component Class | 排针、座子、接线端子 | 用于板边距离、机械避让 |
| DIFF | Differential Pair Class | USB_DP/DM 等 | 差分线宽、间距、等长 |
为什么把 SLOW 单独拎出来?因为把它和 HS 混在一起,规则只能取两者的交集,结果是既限制了高速线又委屈了低速线。分开之后,HS 类可以设最小间距 0.2mm、禁止在 Top 层长时间平行走线(靠人工把关),SLOW 类可以放宽到 0.15mm,走线自由度大很多。这种"该松的松、该紧的紧"是 2 层板能不能布通的关键。
Component Class 常被忽略,其实很有用。比如你可能希望在排针、座子周围留出更大的机械避让,或者不让丝印压在 IC 上。这些约束用 Net Class 表达不了,必须靠 Component Class。
2.2 在原理图侧定义 Class 的三种做法
这是我踩过最多次的坑:在 PCB 面板里手工建了一堆 Net Class,改了几轮原理图,一次 Update PCB 之后类成员全乱了。原因是 AD 的类定义有"来源"概念,PCB 端的类如果和原理图端不同步,后续更新时会按原理图为准。
所以稳妥做法是:尽量在原理图侧定义类,PCB 侧只做补充。
第一种做法是放 Net Class 指示符。在原理图编辑器里选 Place » Directives » Net Class,把它放在要归类的网络走线上,然后在属性面板里填 ClassName,比如PWR。一个网络可以被多个指示符命中,就会同时属于多个类。这种做法最直观,缺点是网络多的时候要放很多个,视觉上乱。
第二种做法是 Parameter Set。在走线上放一个 Parameter Set,在里面加一条名为Net Class的参数(有些版本是ClassName),值填类名。它和指示符本质一样,只是能挂的参数字段更多,适合顺便把差分对、走线宽度偏好一起写进去的场景。
第三种做法是总线自动生成。在 Project Options » Class Generation 里勾上Generate Net Classes for Buses,然后原理图里用总线命名规范,比如DDR_DQ[0..15],AD 会自动生成一个叫DDR_DQ的 Net Class,成员就是这 16 根线。这个方式对排线、并行总线特别省事,一条总线一句话搞定。同样的机制还有Generate Net Classes for Components,会按元件的前缀或者指定规则生成 Component Class。
| 做法 | 适合场景 | 维护成本 | 主要缺点 |
|---|---|---|---|
| Net Class 指示符 | 零散网络、电源类 | 低 | 网络多时图面拥挤 |
| Parameter Set | 需要同时挂多个参数的场合 | 中 | 属性面板里字段容易填错 |
| 总线自动生成 | 并行总线、排线 | 极低 | 依赖命名规范,命名一乱就失效 |
我的习惯是混合用:电源和地这种零散网络用指示符,并行总线和排线用总线自动生成,差分对单独用差分对指示符。
2.3 差分对类要在哪一端生成
差分对比较特殊,它的类成员是一对一对的,不是单个网络。AD22 里可以在 PCB 面板切到 Differential Pairs Editor 模式,用Create Differential Pairs From Nets按钮,按_P/_N、_+/_-之类的后缀规则批量识别并建对。这个功能很快,但它是在 PCB 端生成的关系,原理图同步时同样有被覆盖的风险。
更稳的办法是在原理图里给差分对网络放差分对指示符(Place » Directives » Differential Pair),把正负两根线的网络名按规范写好。这样从原理图 Update 到 PCB 的时候,差分对关系会跟着过去,类也就在了。识别后缀在 Project Options 里可以配,常见的是_P/_N,也有用+/-的,看你团队习惯统一一下。
注意:无论用哪种方式,改完 Class 之后一定要重新跑一次 Update PCB Document,然后打开 Object Class Explorer 逐个核对成员。我吃过一次亏——原理图里改了一个网络名,指示符上的 ClassName 还是旧的,结果那根线整个掉出了 PWR 类,规则对它全部失效,DRC 一切正常,板子回来才发现那一路电源线是按信号线宽走的。
3. 2层板真正需要动的那几条规则
3.1 Clearance:分层设置比一把梭更管用
默认的 Clearance 规则大约是按 0.254mm 给的,对 2 层板来说偏保守,会白白吃掉布线空间。常规工艺下,0.2mm 是舒适值,0.15mm 是省空间的进攻值,再往下就要看板厂能力和成本了。
但不要只改这一条。我的做法是按优先级建三条:
第一条,PWR与HS之间的间距设为 0.25mm。电源线是噪声源,高速线是敏感对象,两者靠太近容易耦合,这条要比普通间距更严。
第二条,HS类内部的线间距设为 0.2mm,并且尽量拉长平行段就走不过去——AD 没有直接约束平行长度的规则,只能靠经验在布线时错开。
第三条,全局默认间距设为 0.2mm。
至于SLOW类和GND之间的间距,其实可以放松到 0.15mm,因为低速线对耦合不敏感,地线本身又是参考。这一步能明显提升 2 层板的布通率,尤其是那些元件密、空间紧的小板子。
再补充一个容易被忽略的点:Clearance 规则在 AD 里默认作用于不同网络的对象之间,同网络内部的走线重叠不会被判为短路。这是合理的,但也意味着你没法用 Clearance 规则来约束"同网络走线之间的最小间距",需要控制线间距只能靠人工或者用其他手段。
3.2 Width:线宽要从载流倒推,不是拍脑袋
Width 规则有三个值:Min、Preferred、Max。Preferred 只影响交互式布线的默认值,DRC 不检查它;Min 和 Max 才是会被 DRC 卡的红线。很多人把 Max 设成 Preferred 的 1.2 倍,结果想加粗电源线的时候一路报错,这就是典型的把 Preferred 当成了上限。
真正该做的是先把载流量算出来。IPC-2221 给出的经验公式是:
A = (I / (k × ΔT^0.44))^(1/0.725)其中 A 是导体截面积(单位 mil²),I 是电流(A),ΔT 是允许温升(℃),外层 k 取 0.048,内层取 0.024。算出截面积后,除以铜厚(1oz 铜约 1.378 mil),就得到线宽。
按外层、1oz 铜、静止空气、不打散热孔的最保守条件算,结果是:
| 电流 | 允许温升 10℃ 的线宽 | 允许温升 20℃ 的线宽 |
|---|---|---|
| 1A | 约 0.30mm | 约 0.20mm |
| 2A | 约 0.78mm | 约 0.52mm |
| 3A | 约 1.36mm | 约 0.92mm |
| 5A | 约 2.77mm | 约 1.85mm |
这张表有几个使用前提必须说清楚。第一,它假设的是裸露铜,实际板子有阻焊覆盖,散热会差一些,所以算完建议再留 20% 到 30% 的余量。第二,它假设的是连续直流,如果是脉冲电流,按有效值折算。第三,如果走线特别短(几个毫米以内),热传导能帮上忙,可以适当减一档。
把这些数落到 Width 规则上,我的配置是:PWR类 Min 设 0.4mm、Preferred 设 0.5mm、Max 放开到 5mm;GND类 Min 设 0.4mm;HS类 Min 设 0.2mm;SLOW类 Min 设 0.2mm;全局 Min 设 0.15mm。
提示:全局 Min 值设成 0.15mm 而不是 0.127mm,是因为 0.15mm 是绝大多数板厂的双层板常规工艺,不需要加价;设成 0.127mm 有些厂会进"精细线路"档,报价直接涨一截。
3.3 Via Style:过孔不是越小越好,还要算载流
Routing Via Style 规则管的是过孔的直径、孔径的 Min/Preferred/Max 三档。同样的道理,Preferred 只影响你放新过孔时的默认值,Min 和 Max 才是 DRC 的边界。如果 Max 卡得太紧,你后面想手动放个大一点的过孔做散热就会报错。
2 层板上过孔的两个用途要分开看待。换层用的过孔,0.3mm 孔径 / 0.6mm 盘径是稳妥档,绝大多数板厂不加价,机械钻孔也不容易偏。载流用的过孔,就要单独算了。
孔壁镀铜厚度通常按 25µm 算(板厂常见的 1oz 孔铜),一个孔径 d 的过孔,其孔壁环形截面积约等于:
S = π × d × t以 0.3mm 孔径、25µm 孔铜代入,S ≈ 3.14 × 0.3 × 0.025 ≈ 0.0236 mm²。换算成 1oz 铜厚的等效线宽,大约相当于 0.67mm 宽的走线。按前面那张表,0.67mm 在 10℃ 温升下大约能扛 1.7A。但过孔在板子内部,散热条件比表层走线差得多,还要考虑工艺波动,所以我实际会打个对折——单个 0.3/0.6 的过孔按 0.8A 到 1A 估。
| 过孔规格(孔径/盘径) | 单孔保守载流 | 常见用途 |
|---|---|---|
| 0.3mm / 0.6mm | 约 0.8A ~ 1A | 普通换层、小电流 |
| 0.4mm / 0.7mm | 约 1.4A | 中等电流、电源分支 |
| 0.5mm / 0.8mm | 约 2A | 大电流路径、散热 |
| 0.8mm / 1.2mm | 约 4A | 大电流汇流点 |
大电流靠单孔硬扛从来不是好办法,正确做法是并排打一排过孔。三个 0.3/0.6 的过孔并联,保守估 2.4A 到 3A,比一个 0.8/1.2 的大孔更划算,还省钻孔成本。并排过孔之间的间距别太近,孔到孔至少留 0.25mm,否则钻孔时容易破壁。这个约束可以用 Manufacturing 类里的 Hole To Hole Clearance 规则卡住。
关键信号的换层过孔旁边,一定要补回流地过孔。2 层板没有地平面,信号从 Top 换到 Bottom,回流要沿着地铜皮绕行,绕得越远环路面积越大。紧贴信号过孔放一到两个地过孔,能把回路面积压到最小。这个动作规则管不了,只能靠布线时养成习惯。
3.4 Polygon Connect Style:地铜皮的热焊盘是个大坑
2 层板通常会在 Bottom 层铺一整片 GND 铜皮,或者 Top 层也铺一块。铜皮和焊盘的连接方式由 Polygon Connect Style 规则控制,这条规则不设好,会有两种极端后果。
第一种极端是全部直连(Direct Connect)。铜皮直接糊在焊盘上,散热太快,手工烙铁根本焊不动,尤其是大面积的接地焊盘和插件引脚。第二种极端是全部热焊盘(Thermal Relief),结果是每根接地过孔都被四个细脖子卡着,大电流下这些脖子成了瓶颈,等效载流能力比直连低一大截。
我的配置分两条规则:
一条针对焊盘,Query 写IsPad,用 Thermal Relief,辐条宽度 0.25mm,空气间隙 0.25mm,四条辐条。这个参数下,辐条的总截面积约为 4 × 0.25 × 0.035 ≈ 0.035mm²,等效线宽约 1mm,一般信号的接地引脚完全够用,手工焊接也舒服。
另一条针对过孔,Query 写IsVia,用 Direct Connect。过孔不需要焊接,直接连上能显著降低接地阻抗,也避免热焊盘的窄脖子限制载流。
注意:如果你用的是网格铜(Hatched)而不是实心铜,热焊盘的辐条和网格线可能会错位叠加,导致连接数量不足。2 层板的地铜皮我建议一律用实心铜,不要图好看用网格。网格铜对散热和回流都没好处。
3.5 Manufacturing 与 Mask:跟板厂工艺对齐的价值
这一组规则是很多人直接跳过的地方,但它们决定了板子能不能按预期做出来。我列一下我常用的数值,以及背后为什么这么定。
| 规则名称 | 建议值 | 依据 |
|---|---|---|
| Minimum Annular Ring | 0.15mm | 常规工艺的环宽下限,再小容易破环 |
| Hole To Hole Clearance | 0.25mm | 钻孔定位误差与破壁风险 |
| Minimum Solder Mask Sliver | 0.1mm | 阻焊桥的机械强度下限 |
| Silk To Solder Mask | 0.15mm | 丝印不能压到开窗上,否则印不上去 |
| Silk To Silk | 0.15mm | 丝印字符之间不能糊在一起 |
| Board Outline Clearance | 0.3mm 到 0.5mm | 走线和铜皮到板边留安全距离 |
| Minimum Solder Mask Expansion | 0.05mm | 开窗过大会吃掉阻焊桥 |
这里面最值得展开的是阻焊开窗和阻焊桥这对矛盾。AD 默认的 Solder Mask Expansion 是 4mil,大约 0.1mm。对普通封装的焊盘没问题,但你一旦碰到 0.5mm 间距的密脚 IC,比如 TSSOP、QFN,焊盘宽 0.3mm、焊盘间隙 0.2mm,两侧各扩 0.1mm,中间的阻焊桥就只剩 0.2 - 0.1 - 0.1 = 0,直接连成一片。结果就是回流焊时相邻引脚之间挂锡,拆都拆不干净。
解决办法是在规则里给密脚封装单独建一条 Solder Mask Expansion,Query 写成按封装名匹配,把扩展值降到 0.05mm 甚至 0。同时把 Minimum Solder Mask Sliver 设成 0.1mm,让 DRC 帮你把做不出阻焊桥的地方抓出来。
丝印到阻焊的 0.15mm 这条也经常被人忽略。板厂在印丝印的时候,如果字符压在开窗区域上,油墨会渗进焊盘,要么印不上要么印成一团。DRC 跑一遍 Silk To Solder Mask 就能把这些问题提前暴露出来。
4. 优先级与 Query:规则写"准"比写"多"更重要
4.1 AD 判定优先级的真实逻辑
AD22 的规则列表是从上往下执行的,位置越靠上优先级越高。当一对对象同时命中多条同类规则时,AD 会取优先级最高的那条来判定,剩下的全部忽略。这个机制决定了规则列表的顺序本身就是一种设计。
最容易踩的坑是新建的规则默认被扔在列表最底下。比如你新建了一条 PWR 的 Clearance 规则,条件写得天衣无缝,但上面那条全局 Clearance 的优先级比它高,结果全局规则先命中,你辛辛苦苦写的 PWR 规则从来没生效过。更麻烦的是,界面上看不出任何异常,DRC 也不报错。
改的办法是在规则对话框里点右下角的 Priorities 按钮,或者在规则树上右键 Move Up。我的习惯是排成"特殊在前、通用在后":
- 差分对专属规则(差分对间距、差分对线宽)
- 特定网络对之间的规则(如 PWR 对 HS)
- 特定类内部的规则(如 HS 类内间距、PWR 类线宽)
- 单类通用规则(如 GND 连接方式)
- 全局默认规则
排完之后跑一次批量 DRC,然后做一次反向验证:故意把间距改小,看 DRC 会不会按你预期的规则报错。如果报错信息里引用的规则名不是你写的那条,说明优先级排反了,回去调。
4.2 2层板常用的 Query 语句速查
Query 是 AD 一个迷你查询语言,支持And、Or、Not和括号组合。下面这些是 2 层板里出现频率最高的:
| Query 写法 | 命中对象 |
|---|---|
All | 所有对象 |
InNetClass('PWR') | PWR 类里的所有网络对象 |
InNet('GND') | 名为 GND 的网络 |
InComponentClass('IC') | IC 类里的元件 |
InDifferentialPairClass('DIFF') | 差分对类对象 |
IsVia | 所有过孔 |
IsPad | 所有焊盘 |
IsTrack | 所有走线段 |
IsPolygon | 所有铜皮 |
OnTopLayer/OnBottomLayer | 位于顶层 / 底层的对象 |
IsSurfaceMount/IsThroughHole | 表贴 / 插件对象 |
HasFootprint('TSSOP-20') | 指定封装的元件 |
InNetClass('PWR') And IsVia | PWR 网络里的过孔 |
组合起来能表达很细的意图。比如"限 PWR 类在底层上的走线最小宽度",规则条件就可以写:
InNetClass('PWR') And OnBottomLayer And IsTrack写 Query 有几个原则。第一,能用类就别写具体网络名,原因前面讲过。第二,字符串一律用单引号,双引号在某些版本里会解析失败。第三,And的优先级高于Or,遇到多条件时老老实实加括号,别指望解析顺序符合你的直觉。
4.3 三个特别容易写错的 Query
第一个是把InNetClass和InNet混用。前者匹配的是"属于某个类的对象",后者匹配的是"某个具体网络的对象"。这两者返回的结果集完全不同,前者会包含这个网络上的一切——走线、焊盘、过孔、铜皮;后者只针对网络本身。写规则的时候想清楚你是要管网络还是管网络上的对象。
第二个是IsVia的作用范围。它匹配所有过孔,包括盲埋孔和测试点孔。2 层板没有盲埋孔,问题不大,但如果你从别的项目导入了规则,里面可能有针对盲埋孔的条款,导进来在 2 层板上永远不会命中,属于无效规则,建议清理掉。
第三个是括号。有一类需求是"PWR 类或者 GND 类里的过孔用直连",有人会写成:
InNetClass('PWR') Or InNetClass('GND') And IsVia按 And 优先的规则,这句实际等价于InNetClass('PWR') Or (InNetClass('GND') And IsVia),PWR 类里的焊盘、走线也会被命中,规则范围一下就失控了。正确写法是:
(InNetClass('PWR') Or InNetClass('GND')) And IsVia5. 把这一套做法沉淀成可复用的模板
5.1 导出 RUL 文件与制作模板 PCB
规则配好之后,最不划算的做法就是只留在当前工程里。设计完一遍,下次新项目又从头来。AD22 提供了规则的导入导出:打开 Design » Rules,在左侧规则树的空白区域右键,选 Export Rules,存成一个 .RUL 文件。新项目里同样的位置右键选 Import Rules,整套规则一次性导入,包括所有 Class 成员和优先级顺序。
不过这里有个细节:RUL 文件里保存的是规则条件,规则的 Query 里引用的 Class 必须在新工程里也存在,否则导入后条件命中不到任何对象。所以正确顺序是先确认新工程里的 Net Class 成员已经建好,再导入 RUL。
更省事的办法是做一个模板工程。我会维护一个Template_2L.PcbDoc,里面已经配好全部规则、Class、层叠参数(板厚、介质常数、铜厚)、常用的图层颜色方案,甚至放几个常用的封装库引用。新项目直接从它另存一份,改掉项目名就能开工。这个文件我大概每半年更新一次,把新踩的坑对应的规则补进去。
层叠参数也在模板里定好。2 层板的 Layer Stack Manager 里主要就三项:介质厚度(决定板厚,常见 1.6mm)、介电常数(FR-4 大约 4.3 到 4.5)、铜厚(1oz 即 35µm)。这些值不只是记录,它会影响 AD 的阻抗计算。
5.2 用 DRC 做闭环验证
规则设完不等于生效,必须用 DRC 验证一遍。Tools » Design Rule Check 打开批量检查,我的检查清单是这几项必须勾上:Clearance、Short-Circuit、Un-Routed Net、Width、Routing Via Style、Minimum Annular Ring、Hole To Hole Clearance、Minimum Solder Mask Sliver、Silk To Solder Mask、Board Outline Clearance、Modified Polygon、Net Antennae。
在线 DRC 建议一直开着,边布边报,比攒到最后一次性跑要省时间。但要注意在线 DRC 只检查你打开的那条规则吗?不是,它检查所有 Online 生效的规则,性能上会有影响,板子元件特别多的时候可以临时关掉,靠批量检查兜底。
跑完批量检查后不要只看红色报错数量,要点开每一条看它引用的是哪条规则。如果发现某个报错引用的规则名是Clearance(默认名)而不是你自己建的那条,说明你的规则优先级排错了,这是最隐蔽的一类错误。
5.3 我踩过的坑和对应的检查动作
第一个坑是差分对从原理图同步后消失了。原因是原理图里网络名没有按约定的后缀写,或者差分对指示符没放对位置。检查动作:每次 Update PCB 之后,切到 PCB 面板的 Differential Pairs Editor 模式,数一下对数对不对。
第二个坑是铜皮重新铺完之后 DRC 突然冒出一堆间距报错。原因是铜皮的优先级或者 Rebuild 顺序问题,铺完铜要全选铜皮右键 Repour All,然后再跑一次 DRC。这个动作我现在已经写进了出图前的固定流程。
第三个坑是导入别的项目的 RUL 之后,原来的规则被覆盖了一部分。RUL 导入默认是追加还是替换,不同版本表现不一样,导入前一定要先备份当前的规则(再导出一份),导入后逐条核对。
第四个坑是 Width 规则的 Max 值卡得太死。有次做电源板,PWR 类 Max 设了 1mm,结果从连接器到 MOS 管那段需要 3mm 宽的汇流走线,一拉就报错。现在我的做法是 Max 一律放开到远大于实际需要的值,靠 Min 值守底线,靠人工把关上限。
最后分享一个小技巧。规则列表其实可以右键生成报告,把整个规则树导成一个 HTML 或文本文件。我在出图交付之前会生成一份,和 PCB 文件一起放进项目归档。下次有人问"这块板的线宽是按多少设计的",翻一下报告就有答案,比打开工程翻规则快得多。这个习惯让我省了不少事后解释的力气——毕竟规则文件本身不显眼,但它才是一块板子真正的设计约束记录。