
拿到一块新板子我最先做的不是急着看网表、摆封装而是先把约束管理器里的规则从头到尾过一遍。数据手册上写着“USB 差分线 90Ω”“HDMI 差分线 100Ω”可打开 Allegro 17.4 的 Constraint Manager面对一堆默认值你要是直接开始拉线后面等长、阻抗、DRC 清理会一条一条跳出来找你算账。这篇就专门写我在 17.4 上从普通信号线走到差分走线的完整规则设置和实操流程包括线宽、间距、过孔、差分对参数、等长补偿以及最后 DRC 检查的坑给正在用 Cadence Allegro 或者刚从 16.6 升到 17.4 的同行一个能照做的参考。1. 动手拉线之前先把约束管理器这块“压舱石”摆正1.1 约束管理器里其实有四套东西你至少得看明白三套很多刚用 Allegro 的人会把“规则”理解成一个线宽实际上打开 Display——Constraint Manager在 17.4 里也可以直接命令行敲cmgr回车你会看到约束管理器被分成了好几块Physical、Spacing、Same Net、Electrical。这四块的分工必须弄清楚不然就会出现“明明设了线宽DRC 还是报间距错误”这类奇怪问题。Physical Constraint Set物理规则管的是线宽、过孔、neck 值也就是一根线本身的物理形态。Spacing Constraint Set间距规则管的是不同网络之间、或者是同网络不同走线对象之间的最小距离。Same Net同网络规则管同一网络内部的间距典型场景就是差分对的两条线之间的距离还有过孔到自身网络的间距。Electrical Constraint Set电气规则管相对传播延迟、总长度、差分对阻抗这些和信号完整性直接相关的参数。我的习惯是先物理后间距再电气。因为差分对规则挂在 Electrical 下面但差分对能不能走通又取决于 Physical 里的线宽和 Spacing 里的线距是不是给你留了余地。顺序反了你设了半天 Electrical回到板上拉线时发现线宽根本被 Physical 限制死了白费劲。1.2 先建 Net Class 再布线还是边布边改我的建议是必须先建Allegro 的规则对象不是单根网络而是网类Net Class。你不建 Net Class所有的默认网络都挂在DEFAULT下面那相当于所有信号共享一套规则这在实际项目里基本不可用。我的做法很固定在 Physical Constraint Set 页面里右键 Create——选择 Physical Constraint Set先建出PCS_SIG、PCS_PWR、PCS_DIFF这么几套再到 Spacing 页面右键 Create——建立SCS_DEFAULT、SCS_DIFF等。然后把网表里对应的网络在 Net 页面里批量选中在对应的 PCS 和 SCS 列下拉改成你要的规则集。这一步批量分配看起来麻烦但它能把你后面的工作量削减 80%。你想如果等线拉了一半才发现电源网络和普通信号网络共用一套间距铜皮和走线挤在一起DRC 满屏报错再回头改规则、重新推挤布线那才叫浪费时间。1.3 17.4 界面改动老用户最容易在这里迷路从 16.6 升到 17.4 以后界面风格变了不少。老版本的菜单是传统下拉式17.4 更接近 Office 的 Ribbon 风格。我最开始也找了一会儿约束管理器在 Display 菜单下但是差分对规则有时藏在 Electrical 的子类别里需要把左侧树展开到 Electrical——Differential Pair 那一层。还有一个小地方17.4 里如果在 cmgr 里面改完规则回到布线界面没有生效很多人以为软件坏了。其实是 17.4 的约束管理器和布线界面是实时同步的但部分参数比如差分对耦合长度需要执行一次Upd或者重新生成一下网络才能作用到走线对象上。遇到这种“改了等于没改”的错觉先别急着重装重启一下 cmgr 或者刷新 DRC 基本就好了。2. 一般信号线规则线宽、间距、过孔不是拍脑袋定的2.1 物理规则Minimum/Nominal/Maximum 三个值怎么填很多教程喜欢直接告诉你“信号线走 6mil”但在 Allegro 里一个物理规则集包含的是一组值Minimum Line Width、Nominal Line Width、Maximum Line Width以及 Neck 相关设置。这三个值不是随便填的它们对应的是布线过程中不同的场景。Minimum这是下限也是 DRC 判错的依据。我把普通数字信号的最小线宽设成 5mil意思是哪怕 BGA 扇出区再挤也不能低于这个值。Nominal布线时拉线默认使用的宽度一般就是综合了制造能力和阻抗需求之后的推荐值。常用 6mil。Maximum上限给电源旁路和铺铜用的。信号线上一般不触发但设一个较大值可以避免某些自动推挤操作把走线意外变宽。这三个值之间Allegro 会默认拉线用 Nominal你手动 Width 命令改线宽时它也必须落在 Min 到 Max 之间否则直接报错。所以我在项目里会给电源网络单独建一个 PCS_PWRMin 设 10milNominal 设 30milMax 设 100mil和信号线的规则集分开互不干扰。还有一个很多人忽略的 ——Neck 线宽。在 BGA 扇出的时候两排焊盘之间能走线的通道很窄6mil 线根本挤不出去。Neck 的作用就是允许走线在特定区域内变细规则上是 Min Neck 和 Max Neck。我用 Allegro 自动扇出时会把 BGA 区域单独设一个 Region 约束把 Neck 线宽放到 4mil这样扇出成功率会高很多。这一招对 0.8mm pitch 以下的 BGA 基本是必须的。2.2 间距规则从 5mil 到 8mil依据在哪里间距规则Spacing管的是“线到线”“线到过孔”“过孔到焊盘”这些距离。这一块最容易出问题的地方在于很多人把数值填得整整齐齐却没有理解它背后的制造和电气含义。我举个具体例子一块双面贴片的板子板厂常规能力是 4mil/4mil 线宽线距但如果你在高密度区域真的全部按 4mil 去布制造良率会下降成本反而上去。所以我一般默认间距定 5mil关键信号区域 6~8mil高压区域另说。这些数字之间的差别不只是“能不能做出来”还关系到串扰和阻抗一致性。Spacing 规则集里还有两个容易漏掉的子设置Line to SMD走线到贴片焊盘的距离这个和 Line to Pad 不一样很多人会漏。如果这里设得太大元件密集的地方根本就没法走线。Same Net Spacing如果差分对规则挂在 Same Net 下一层普通信号网络默认不需要管但如果是电源网络给铜皮和过孔之间留间距就要单独看。有一个经验所有间距值不是越大越好而是要和走线密度匹配。你把全局间距设成 10milDRC 干净得很但板子面积被迫扩大层数也可能增加成本就上去了。做设计是平衡的艺术不是堆料。2.3 过孔与区域约束别等布完了才想起换过孔过孔这件事我踩过的坑最深。早期做板子规则里用的是默认 VIA布线中途发现电源电流根本走不过那一个小过孔只能全局替换过孔结果一堆走线需要重新调整。所以在物理规则阶段就要把过孔规则集配好信号线用一个常规过孔比如 10/20mil 钻孔/焊盘电源线用大刀孔BGA 扇出用微过孔。Allegro 的 Physical Constraint Set 里有一个 Vias 列表你需要把你允许使用的过孔加进去而不是留着DEFAULT。区域约束Region是另一个隐藏功能。你可以把整板划成几个区域BGA 区、连接器区、高压区每个区域用不同的线宽/间距规则。这个功能常常被新手忽略但在混合信号板里几乎是救命的。我当时做一块带 FPGA 的板子BGA 扇出区用 Region 把线宽放宽到 5mil间距放到 5mil而 BGA 外面的普通走线区域用 6mil/6mil两个区域之间自动过渡DRC 一点都不乱。规则说白了就是“给不同的地方定制不同的标准”Grid 不 Grid 反而不重要。3. 差分对规则为什么 90Ω 和 100Ω 不是“指线宽”3.1 差分对的本质两条线之间的相对耦合很多人把差分对理解成“两根线并排走”这没错但不够。差分信号真正的价值在于两条线上的电流方向相反、幅度相等对外辐射相互抵消抗干扰能力强。所以差分对规则的核心不是单独一根线的宽度而是两条线之间的相对关系——间距Gap、耦合长度、以及两条线之间的等长误差。这也是为什么你会在 Allegro 的 Electrical——Differential Pair 里看到一堆“Min Line Spacing”“Primary Gap”“Primary Width”之类的参数。这些参数共同决定了一件事差分阻抗。90Ω、100Ω 并不是指单根线的阻抗而是差分线对在特定叠层、特定线宽和特定间距下呈现的差分阻抗值。换句话讲你用两根 50Ω 单端线并排走不会自动得到 100Ω 差分阻抗因为两条线之间的耦合会把阻抗拉下来。对这个不理解的话后面调参数会非常痛苦。3.2 创建差分对与关键参数Primary Gap/Width/Tolerance在 Allegro 17.4 里创建差分对的路径是打开 cmgr——Electrical——Differential Pair右键 Create然后在弹出的窗口里选左区网络、点箭头移动到右侧区配对完成后会自动形成一个差分对对象。创建完以后重点设以下几项Min Line Spacing差分对内两条线之间的最小间距这个值一般设成与层叠计算出来的 Gap 一致或略小一点是 DRC 的一个触发条件。Primary Line Width差分线的主要线宽和叠层阻抗计算挂钩。Primary Gap两条差分线之间的边到边距离这是调整差分阻抗最常用的旋钮。Uncoupled Length允许两条线分开走、不成对的最大长度。我一般设 10mil 以内严格要求的地方设 0。Tolerance差分对内部两条线之间的等长误差视接口协议而定。我举两个实际工程最常见的例子USB 2.0 一般要求 90Ω 差分阻抗对内等长误差控制在 5mil 以内HDMI 一般要求 100Ω 差分阻抗对内误差很多芯片手册要求 5mil 或者更小。但注意这些数值必须在实际叠层下通过阻抗计算工具验证不同叠层、不同介质厚度同样的线宽和线距阻抗差别很大。3.3 阻抗值与线宽、线距的关系改哪个参数最有效这里我给一个比较工程化的结论在常规叠层下增加差分线宽会降低差分阻抗增加差分线对内间距会提高差分阻抗。原因是线宽越宽对地电容越大阻抗越低间距越大两条线之间的耦合越弱差分阻抗越接近两根单端线阻抗的串联效果数值随之升高。举个例子我在一块四层板表层到参考层 4mil 介质上做 100Ω 差分初始线宽 5mil、线距 5mil用阻抗计算工具算出来是 96Ω 左右。我把线距从 5mil 加到 7mil阻抗升到 101Ω再把线宽从 5mil 减到 4.5mil阻抗又升一点点。这个过程不是一次就能调准的要来回试。所以我的建议是在创建差分对之前先把叠层确定下来用 Polar 或者其他阻抗计算工具算出线宽和线距的组合值然后再把算出来的值填进 Allegro 约束管理器。这样布线的时候基本不用返工。反过来如果你先把规则里的线宽线距随手填了等到板厂反馈阻抗不达标那时候改叠层和改走线的代价都非常大。4. 从扇出到等长差分走线的完整实操流程4.1 扇出与走线顺序先解决密度问题差分对规则设置完毕回到 Allegro 布线界面第一步不是急着 Connect 拉线而是先处理扇出。尤其是 BGA 封装下引出的差分对焊盘间距小不扇出的话根本没办法同时走两根线。我通常用 Route——Fanout——Fanout by Pick 来操作选中要扇出的器件在 Options 面板里选好扇出方向和过孔类型。扇出完成后检查一下有没有背离信号流向的长尾巴有的话手动调整。这个阶段别偷懒扇出走线如果绕得太远后续差分等长会非常难做因为留给长度补偿的空间会被吃掉。扇出完了再处理大的电源网络用 Shape 铺铜或者宽线连接。最后才是逐组拉信号线和差分线。个人经验是先走最严格的差分对比如时钟、高速串行接口再走普通信号线。优先级的逻辑很简单——难走的先走空间多的时候先把难啃的骨头解决掉。4.2 交互式差分布线遇到过孔、避让、换层怎么处理拉差分线时不要用普通 Connect 一根一根拉而是用 Route——Differential Pair Routing工具栏上也有对应的图标。这时候鼠标会拖着两根线一起走Allegro 会自动保持你设置的 Gap 和 Width。几个实际操控技巧换层拉线过程中按R键或者F4看个人快捷键设置切换布线层软件会自动打过孔。注意第一次换层前要确认目标层的参考平面是否完整否则差分阻抗会突变。避让遇到障碍物时差分管脚会张开或者收窄这时候要看 DRC 是不是在报警。如果 Gap 明显被拉开说明旁边有普通信号线挤得太近。我一般会先处理阻挡的信号线而不是强行把差分线挤过去。保持对内间距有时候板子空间不够差分对的两根线会被器件挡住被迫分道扬镳。只要分叉长度在 Uncoupled Length 以内一般还能接受。如果分叉太长必须重新绕线否则共模噪声会变大。差分线内部的两条线尽量在同一层走换层也要在同一位置同步换不要在一条线上打了两个过孔另一条线还是直的这种极不对称的结构对时序和眼图都是灾难。4.3 等长与相位补偿Phase Tune 的使用逻辑差分对的两根线物理长度不可能完全一样尤其经过几个过孔、绕了几个弯之后必然出现长度差。解决这个问题的工具是 Phase Tune也叫相位调整。在 Allegro 17.4 里选中 Route——Phase Tune然后点一下需要调整的差分线软件会进入交互式等长调整模式。你可以像拉手风琴一样拖动曲线把短的那根线绕出蛇形线直到它和另一根线的长度差落入 Tolerance 范围内。实际操作中我的习惯是先把差分对的 Target 长度设为一个有意义的参考值比如最长的那根线的长度然后让 Phase Tune 自动把另一根补到和目标一致。在 Options 面板里可以设定振幅Amplitude和间距Spacing绕线不能贴得太近否则线间串扰反而变大。有一点要特别提醒等长补偿不是越长越好。蛇形线绕得越多信号在拐角处的反射和辐射也越多。如果一根差分线需要绕很大的圈才能等长我更倾向于重新调整前面的布线路径而不是无限加蛇形。很多时候换个扇出方向或者调整一下过孔位置就能省掉一大截补偿长度。4.4 Gloss 自动修线与人工检查的分工等长做完线又密又乱这时候可以交给 Gloss 自动修线。在 Route——Gloss——Parameters 里可以勾选要做的优化项包括 Line Gloss、Via Gloss有些版本还有 Differential Pair Gloss。但我必须泼一盆冷水Gloss 不是万能的而且过度依赖自动优化有时候会破坏你精心调整的差分对称性。我的分工是普通单端线可以让 Gloss 去整理比如把不必要的拐角改圆、去掉冗余的绕线差分线我几乎不用 Gloss 全自动整理更倾向于手动微调。因为自动优化工具不会理解“这里绕线是因为要匹配等长”这个逻辑它只会按几何最优去处理很可能把你辛辛苦苦绕出来的等长蛇形线拉直或者把差分对的两条线处理得不对称。用 Gloss 的姿势应该是先跑一遍看它优化了什么然后对照 DRC 和等长报告逐项检查手动恢复那些被改坏的线段。管线是设计的一部分你的意图才是最终规则。5. 规则检查与避坑不要等到 DRC 里全是错误才回头5.1 走线完成后的 DRC 检查配置很多新手的习惯是布完线再看 DRC结果一刷新出来几百个错误根本不知道从哪里下手。正确做法是布线过程中就把 DRC 模式调成在线实时检查On-line让问题在产生的那一刻就暴露出来。在 Allegro 17.4 里DRC 模式一般在 Setup——Constraints——Modes 里配置把要看的三类检查Physical、Spacing、Same Net全部打开。这样拉线的时候违规的线段会直接被高亮或者弹出错误标记你当场就能处理而不是攒到最后。同时Display——Status 窗口可以看全局覆盖率、DRC 数量这些基础信息。我每次布线进入收尾阶段都会先看 Status 里的 DRC error 数量是不是 0如果不是先用左下角的错误定位按钮逐条双击跳转到对应坐标一个坑一个坑填。这个过程很枯燥但必须做。5.2 参考平面问题差分线下面有地槽怎么办差分线等长、间距都调好了DRC 也干净了不代表信号质量就过关。最容易忽略的是参考平面。差分线走在外层下面的参考层必须是连续的地平面。如果差分线正好跨过一条地分割线或者电源分割槽回流电流就要绕路差分阻抗在跨分割处会突变辐射干扰也会变严重。你在 Allegro 里看不到这个 DRC只能靠层叠视图和平面分割图来判断。我的经验是在布线阶段就用颜色区分各层的 shape把差分线所在层和相邻参考平面层叠在一起查看凡是看到差分线横穿平面分割的地方都要手动调整或者加缝合电容/地过孔来提供回流路径。对于高速差分对我甚至会提前在平面层划出走线禁区让铺铜在布线结束后自动避开而不是等 DRC 报错再处理。5.3 常见 17.4 操作误区丝印、铜皮、修改板框的几个坑最后分享几个我在 17.4 里遇见的和规则设置相关的其他高频问题你在做完布线检查时也顺手看看。丝印被误删处理丝印时很多人直接在 Board Geometry——Silkscreen 里删字符结果把位号删没了。正确做法是锁定位号文本后再编辑或者在 Manufacture——Silkscreen 里重新生成。这和规则无关但布线后丝印检查是常规动作别漏。铜皮优先级铺铜时如果多个 Shape 叠加在一起优先级Shape Priority设置不当会出现“该避让的没避让、被覆盖的显示不出来”的问题。还记得差分线对间距敏感吗如果电源铜皮和差分线靠得太近必须在约束管理器里给 Netz 到 Shape 的间距设置最小值并把铜皮的优先级调低让差分线的 DRC 优先显示出来。修改板框后丢失规则区域在 17.4 里改完板框Edit——Shape——Edit Boundary 或者直接删除板框重画之后之前定义的 Route Keepin 和 Region 约束区域可能变成悬空状态导致部分走线 DRC 失效。所以每次改完板框都去检查一下 Route Keepin 有没有跟着更新、区域约束还在不在原位置这个动作特别重要。另一个不算 bug 但很影响效率的是快捷键。17.4 支持自定义 alias我建议把差分布线、Phase Tune、DRC 刷新这些常用命令都绑到顺手的位置比如把ppo绑定到d省得老是去菜单里翻。工具是死的熟练度是自己的多用几次就能形成肌肉记忆。最后再分享一个小习惯送出去打样之前我会把约束管理器里的差分对约束、物理规则、间距规则全部导出一份 PDF 或者截图和光绘文件一起发给板厂。一方面逼着自己把设计规则再检查一遍另一方面板厂看到你的差分阻抗和等长要求清清楚楚沟通成本会低很多。做硬件就是这样一个抠细节的活儿规则设置省下来的每一分钟都会在后面的调试和改版里加倍还回来。