ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Allegro Route Keepout详解:创建、属性配置与精细权限控制

Allegro Route Keepout详解:创建、属性配置与精细权限控制 干过几块混合信号板子的人多半都有过这种经历明明布局阶段已经把模拟区和数字区切得清清楚楚布线的时候却发现一根信号线不知道怎么就溜进了本该封锁的区域结果音频底噪往上窜、射频指标往下掉最后只能推翻重来。Allegro里的Route Keepout就是用来治这种病的——它本质上是一块“物理禁区”画在哪儿哪儿就不允许布线。这篇博文就围绕Allegro中Route Keepout的创建、属性配置与布线权限精细控制展开结合我在实际项目里用到的方案和踩过的坑给同样被布线和规则折腾的朋友一份可以直接参考的操作记录。先说清楚这篇文章适合谁正在用Cadence Allegro做PCB设计尤其是AD、RF、电源混合板卡的工程师以及刚接触Constraint Manager对区域约束Area体系还不太熟悉的入门者。全文不讲虚的只讲怎么画、怎么配、怎么查、怎么避坑。1. Route Keepout到底是什么先搞清楚它管什么、不管什么1.1 一个最典型的翻车现场我接过一块多通道数据采集板前端是24bit ADC后端是DSP和DDR。第一版布局非常漂亮模拟电源和数字电源也做了分割可一到布线阶段就失控为了绕开几个挡路的电容一条I2C信号直接从ADC下方穿越还把时钟线带进了模拟输入端的包地圈里。结果采样噪声一路飙到十几个LSB怎么调软件滤波都拉不回来。后来把那段线从物理上斩断强制从禁区外绕噪声立刻降回3个LSB以内。这个案例让我彻底明白布局阶段的“隔离”只是纸面规划只有把隔离落到Allegro的区域约束上规则才能真正约束布线工具和人脑。而Route Keepout就是最简单直接的一种“落纸面”方式。1.2 三种最常见的Route Keepout应用场景Route Keepout不是只用来圈模拟区的它的典型应用场景可以归纳成三类应用场景解决什么问题典型位置模拟/射频敏感区保护防止数字信号、开关噪声串入模拟回路ADC/DAC下方、RF前端、音频Codec周边结构件避让给螺丝孔、定位柱、压接座留出走线禁区避免短路或装配干涉板边安装孔四周、金手指附近、屏蔽罩内平面完整性与阻抗保护防止走线跨越参考平面分割槽造成阻抗突变和回流噪声电源层/地层分割线两侧的投影区域这三种场景的约束强度不一样。模拟区往往要求“全层禁布”连GND过孔都要看情况结构避让区却常常允许特定网络比如接地过孔穿过平面完整性保护则更精细——不是不允许走线而是不允许“横跨分割带”的走线。所以直接用全局Route Keepout固然省事但多数时候我们需要的是“部分禁、部分放”的精细控制这就引出后面的主题。1.3 别和Package Keepout、Prohibit搞混Allegro的Area体系里除了Route Keepout还有Package Keepout和Prohibit。很多人一开始根本分不清出了错还找不到原因。Route Keepout只管布线禁止走线和打过孔不限制器件摆放。Package Keepout禁止器件实体进入该区域常用于整体结构避让、RF模块净空等。Prohibit综合性禁区同时限制器件、布线、过孔、铜箔等多项内容优先级最高。我的习惯是能用Route Keepout解决的绝不用Package Keepout能用Package Keepout解决的绝不上Prohibit。原因很简单约束范围越大后续调整越痛苦。你要拆一颗限高电容结果整片区域都动不了那就尴尬了。在设计规则层面不同Area的重叠区域会按“较严格”的约束生效但我不建议刻意用多层嵌套区域去做叠加规则一多排查起来非常费劲。2. 基础配置创建Route Keepout并让它立即生效2.1 创建区域的两种入口与避坑创建Route Keepout最基础的路子是菜单Setup → Areas → Route Keepout然后在Options里选择Rectangle矩形或Polygon多边形直接在板框内拖出闭合区域。对于不规则的禁布区建议用多边形贴合度更高如果是从结构DXF导入的板框也可以把DXF图元放在Board Geometry层作为参考然后手动描边。另一种更快的方法是直接利用现有的Shape边界。很多工程师的板框本身就是一条闭合的Shape在需要沿板边做禁布的时候右键选择Shape执行复制然后把复制的Shape属性改成Route Keepout区域再整体向内缩一个间距效率远高于重新描一遍。创建时有几个细节值得注意。第一画的时候不要在Board Geometry层以外顺手画到别的层去否则后面找起来很头疼。第二闭合边界务必做一次“确认无自交”检查否则后续DRC会报一堆奇怪的Shape错误。第三命名规范务必从第一天就建立起来比如RK_TOP_ANALOG、RK_BOT_SHIELD这对后期定位问题非常有帮助。2.2 设置层属性别让禁区变成全层封锁新手最常见的错误之一是画完Route Keepout后没有主动设置作用层结果所有布线层全部瘫痪。Allegro中Route Keepout区域创建后默认会作用于所有信号层但通常我们只需要禁掉某几层比如TOP层禁布、BOTTOM层放行。选中Keepout区域右键打开Property Editor属性编辑器找到与Layer相关的属性项把作用层改成指定层或者通过选项面板勾选需要应用的具体层。Allegro 17.x之后的版本交互更直观直接在Options面板里选层即可16.6或者更老的版本则需要在属性编辑器里手动改。这里我强烈建议养成一个习惯每创建一个Route Keepout第一件事就是确认它的层属性不要默认就ALL除非你真的需要全层封锁。另外不要忽视内层。很多板子在TOP和BOTTOM做了禁布却在内层忘掉结果电源分割槽附近被内层走线横向穿越照样能把噪声耦合到敏感信号上。内层的Keepout设置方式与表层完全一致只是层属性要选到对应的内层名称。2.3 区域叠加的优先级问题我在多个项目里验证过多个Route Keepout区域互相重叠时Allegro的处理原则是让“更严格”的约束生效。比如一个区域允许GND网络过孔另一个更小范围的区域禁布所有网络那么重叠区域会按禁布全部网络处理。这个特性看似好用实际是坑。因为一旦规则叠加多了你在界面上看到的DRC结果很难解释为什么这个GND过孔在左边能打往右挪0.5mm就报错所以我的建议是能用一个大区域覆盖就不要拆成三个小区域再去叠。区域之间的边界最好保持至少10mil以上的距离否则边缘的DRC检查会非常容易虚报尤其是当你开了细小的网格显示时像素级的重叠很难用肉眼发现。2.4 创建后怎么确认它真的生效画完Route Keepout不等于万事大吉。最快的验证方法是进入交互布线命令Route→Connect快捷键通常为R把鼠标移到禁区上方观察走线是否被自动“弹开”。如果仍然能正常走线那就要检查一是区域层属性是否选对了二是Constraint Manager里的在线DRCOn-line DRC开关是否打开三是该区域是否处于可激活状态。还可以用Display → Element选中Keepout区域查看它的Class和Subclass、Net关联等属性。如果属性面板里显示类型是Route Keepout且层列表里包含你期望的层那基本就配置对了。再配合一个Display → Status查看DRC状态就能确认禁区是否在实时检查范围内。3. 精细化权限控制让指定网络“合法”穿行禁区3.1 先想清楚你要的不是“全禁”而是“分级授权”禁区如果连GND过孔都禁止那地平面的回流路径反而会被切断导致辐射和共地阻抗问题加倍。所以真正可落地的方案是给不同网络分配不同权限电源网络、GND网络可能被允许进入禁区连接螺钉孔或散热过孔而普通信号网络则必须绕行。这个思路叫“分级授权”。在Allegro里实现分级授权有两个入口区域属性里的网络关联Net Association以及Constraint Manager里的Region Spacing规则。前者适合快速白名单后者适合做更复杂的间距要求实际项目中两者经常配合使用。3.2 在Route Keepout属性里配置Net Association选中一个Route Keepout区域右键属性编辑器找到网络关联Net Association相关字段可以把允许穿行的Net或Net Class加进去。加上之后这些网络在该区域内可以正常走线和打过孔而不受禁布限制未加入白名单的网络则继续被拦截。举一个实际案例某电源板上有一个安装孔周围要做Keepout避免信号线靠近但需要打4个接地过孔把上层GND和底层GND缝合起来。我的做法是在Route Keepout的Net Association里只加入GND这个网络类其他信号线保持禁入。这样信号线被挡在外面GND过孔却能正常排布地平面缝合一点不受影响。这个白名单机制还有个额外好处交互布线时只要你当前走的网络在白名单里Allegro就不会弹出“飞出Keepout”的提示鼠标很丝滑地穿过走的是其他网络时系统会自动把走线往禁区外推。肉眼可见的差异极大调板效率也能提升不少。3.3 用Constraint Manager的Region规则做更细的间距控制仅靠白名单只能管“能不能走”管不了“走多近”。如果你希望在禁用区域内部允许的网络还要满足特定的间距约束比如走线与过孔间距加大到10mil以上那就需要动Constraint Manager。打开Constraint Manager的Routing → Spacing Constraints找到对应RegionRoute Keepout区域会自动出现在Region列表中然后为这个区域单独设置Spacing规则。你可以创建一套Special Constraint SetSCS指定白名单网络在该区域内的间距值非白名单网络在区域内的约束则继续保持禁布或更高的间距要求。理解这一层很关键Route Keepout本身是“物理禁布”而Region Spacing是“规则约束”。两者叠加之后你等于拥有了一张可以精确控制“谁能进、谁不能进、进去之后间距多大”的权限地图。对于阻抗敏感的高速链路比如DDR数据线跨过分割槽你可以用这套机制做到“允许穿过但必须垂直穿越、且两侧保持参考地过孔阵列”比单纯禁布要高明得多。3.4 分层授权同一个区域不同层不同政策有的设计需求是同一块区域TOP层完全禁布BOTTOM层却要放行。比如板子的反面正好是按键或插座需要在禁区内布置按键引线。这时候不要用一个区域属性去纠结直接创建两个Route Keepout区域一个层属性设置为TOP不关联任何网络另一个层属性设置为BOTTOM同时把需要放行的网络加入Net Association。或者更简单的操作先把区域复制一份选中其中一个修改层属性。我用这个方式处理过很多次“上禁下放”的场景比反复在属性编辑器里改层的速度快得多也好排查。要注意的是复制粘贴后两个区域完全重叠肉眼看起来像只有一个区域容易误删其中一个。建议选中后立即改层并重命名在Options或Find面板里用Class和Subclass过滤器区分。3.5 和动态铜箔的配合别让Keepout把地平面挖成孤岛Route Keepout对动态铜箔的影响是直接的铜箔会自动避让禁区在禁区内形成“无铜区”。如果地平面被整片挖空薄弱区域的地回路会变得又细又长产品EMI性能可能比不做Keepout还差。解决办法很简单给对应的地网络做好Net Association并且把铜箔的连接方式设置为全连接Full Contact或至少保证过孔和焊盘能可靠连接。我见过一个项目Keepout把BOTTOM层一个螺丝孔附近的地挖掉一大块导致散热过孔全部悬浮板厂反馈阻抗测试不过。后来我把GND网络加入白名单又在铜箔属性里把避让模式调成允许对应网络填充问题就解决了。这里有个小经验每次调整Route Keepout后记得重新执行一次动态铜箔的Update通常快捷键是Display → Update Shapes否则铜箔显示区域还可能停留在上一次的状态让你误以为Keepout没生效。4. 实战复盘一块混合信号板卡的禁区规划与验证4.1 项目背景与禁区规划表这里复盘一块我经手的便携式音频采集卡板卡大约80mm×60mm4层板叠层为TOP/GND/PWR/BOTTOM。板上有模拟调理电路、一颗高性能ADC、一颗DSP、电源管理单元、若干结构定位孔。布局完成后我拉了一张禁区规划表这是整板布线前最重要的一张表区域名称位置尺寸/形状解决的问题禁布内容RK_TOP_ANALOGADC正下方18mm×12mm矩形阻挡DSP数字信号从ADC下方穿越TOP层所有信号线允许GND过孔RK_BOT_ANALOGADC背面18mm×12mm矩形防止BOTTOM层开关电源线从ADC下方经过BOTTOM层所有走线允许GND过孔RK_SHIELD_GND屏蔽罩内11.2mm圆形屏蔽罩焊接区下方保持完整地平面除GND外的所有网络RK_MTG_HOLE四个安装孔周围孔径4.1mm禁布半径8mm防止螺柱与走线短路TOP层所有网络BOTTOM层允许GND过孔这张表的用途很直接画禁区的人往往是我自己和后续布线、检查的人拿到表以后不需要再去猜“为什么这里不能走线”只需要对照每一项执行即可。关于尺寸计算我简单说一下思路安装孔禁布半径一般取孔径加40~50mil的安全余量模拟区尺寸则按ADC封装外扩100~150mil再结合BGA或QFN出线空间反推不要让Keepout离引脚太近导致布线通道直接归零。4.2 配置过程步骤记录实际操作时我按以下顺序执行每一步都有明确目的。第一步先把结构DXF导入Allegro放到Board Geometry层的OUTLINE_NOTE子层作为定位底图。这样画Keepout时可以直接捕捉结构孔的圆心和板边不用自己推算相对坐标。第二步对照规划表在TOP层画出模拟区的Route Keepout矩形。我习惯先用矩形快速框定范围再在需要避让螺钉孔的地方用多边形局部修边减少操作次数。第三步修改Keepout的层属性和网络关联。选中最开始的模拟区设置层为TOPNet Association里加入GND复制出一份到BOTTOM层层属性改为BOTTOM同样加入GND。这里尤其要注意GND在Allegro里通常是一个全局网络类但如果你的电源网络有多路需要先把它们归到同一Net Class或分别添加否则后续DRC会提示白名单缺失。第四步在Constraint Manager里确认DDR等高速信号在模拟区附近的Region间距规则。虽然模拟区和数字区离得远但DSP的时钟线绕线时可能靠近模拟禁区边界我单独把DDR Group在这个Region里的线到线间距设到10mil避免翻车。第五步执行在线DRC检查。在Allegro主界面点击Display → Status看有没有新报出的Route Keepout相关DRC。如果有打开DRC Browser过滤出Route Keepout类别逐条分析。正常情况下配置完禁区后再跑一遍DRC错误列表应该是干净的。第六步创建剩余的结构孔禁区和屏蔽罩无铜区。这四个区域是独立的按表逐个画出来修改层属性加入GND白名单然后再次更新动态铜箔。4.3 实际效果与参数复盘整板布线完成后我做了几项验证第一用DRC Browser过滤Route Keepout类错误信号网络进入禁区的错误数为0第二GND过孔在禁区内数量符合预期四个安装孔附近都有2~4个缝合孔第三BOTTOM层电源走线没有一条斜穿模拟禁区的记录。这块板子后来进入EMI预测试底噪比第一版下降了约80%ADC采样抖动也明显好转。最直观的变化其实是布线阶段因为禁区提前画好我布DSP到ADC之间的数据线时自动绕行引导大大减少了手动调整走线的次数整体布线时间缩短了四分之一左右。这就是“区域画得越清晰布线越省心”的具体体现。5. 常见问题与排查技巧踩过的坑一次说清5.1 为什么设置了Route Keepout线还是能走进去这是被问得最多的一个问题90%的情况出在三处。第一区域层属性没设对。画完看属性面板如果作用层是ALL而你以为只禁TOP层那其他层当然自由。这种情况选中区域修改层属性即可。第二在线DRC没开。很多人把On-line DRC关闭或者过滤了Route Keepout类别这样交互布线时Allegro不会做实时避让线自然能强行拉进去。路径在Setup → User Preferences → DRC或直接看主窗口右侧的在线检查状态栏确认Route Keepout检查是勾上的。第三网络白名单里包含了该网络。如果你创建的Keepout当时为了放行GND把整个Net Class都加了进去而某根信号线因为命名不当也混进了同一个Class那它当然可以穿越禁区。排查方式是打开Constraint Manager的Net Class列表确认每个Class包含的网络再回头看Keepout的Net Association。5.2 Route Keepout为什么会把地平面挖成孤岛前面提过Route Keepout会让动态铜箔自动避让如果这个区域需要允许地网络填充必须在Net Association里把GND加进去。但还有种情况你已经加了GND白名单铜箔却仍然被挖空。这时请检查铜箔属性里的Isolated开关。如果Isolated被打开铜箔会强制在区域内保持净空即使允许该网络通过也不会填充这个属性常用于完全无铜的射频净空区不适合普通地缝合场景。另一个容易忽略的点是Allegro里Route Keepout的动态避让不仅针对走线还针对Shape内部的动态铺铜。每次改动Keepout边界后一定要手动执行Update Shapes否则铜箔不会自动更新会保留旧边界状态看着就像铺铜错误。5.3 Keepout区域在光绘文件里看不到怎么办Route Keepout属于约束层默认不会出现在普通的光绘输出层里。如果你希望板厂或者协作同事能明确看到禁布要求有两个做法一是在Artwork Control Form里把对应的Route Keepout层加进某个工艺层或文档层输出一份带禁布区域的PDF/DXF供检查二是把Keepout的边界复制一份到Manufacturing层的自定义子层并在装配图和叠层说明里标注。我个人的建议是单纯依赖光绘里的禁布区域并不保险。最可靠的方式是出一张“禁布规划图”把各区域的位置、层、允许网络标注清楚随板厂工程文件一起发出去。实际打样中板厂工程师更看重文字和DXF的提示而不是光绘里那些默认不输出的约束层。5.4 Route Keepout和Package Keepout又搞混了怎么办有一种很典型的报错你明明只是想禁止走线结果画成Package Keepout然后发现元器件怎么放都放不进去或者丝印被覆盖。反过来你想限制某个器件不能摆进禁区却画了Route Keepout器件照样摆进去毫不在意。我的排查策略很简单选中区域查看Display → Element确认它的Class是Route Keepout还是Package Keepout。如果是Shape对象也可以看属性里的Cmd或Kind字段。为了避免这种问题我从源头上就做了两层保险一是命名时带上类型前缀二是把两类区域放到不同的图层子类下比如Route Keepout统一归Route Keepout/ALLPackage Keepout统一归Package Keepout/ALL筛选时就不会混。5.5 大批量修改Keepout边界有什么高效办法如果你需要把一整排Keepout同时往外扩10mil或者统一调整层属性逐个点击Shape再拉顶点会很痛苦。我的做法是在Find面板里勾选Shape类型用框选把所有目标区域选出来然后右键属性编辑器批量修改层属性、网络关联等字段。不过批量修改时注意有些属性在多个Shape同时选中时不会显示需要拆分处理。如果涉及大量结构件孔也可以借助Skill脚本批量导入坐标自动生成Keepout区域。我不会在这里贴完整脚本因为不同版本的Allegro API有差异但你完全可以在Capture User工具或后台Record脚本里把创建区域的命令录下来再循环执行坐标列表效率比GUI手工画高一个量级。前提是明确每个孔对应的Keepout直径和允许网络做好参数映射。5.6 版本差异导致的菜单找不到怎么办Allegro 16.6、17.4、23.1之间的菜单和面板有不少差异尤其属性编辑器的入口变化很大。很多人按老教程找不到Setup → Areas → Route Keepout其实新版本里这个功能没有消失只是被移到了不同的菜单逻辑下。我的建议是直接按F11或CtrlF打开搜索命令框输入Route Keepout系统会直接列出可执行的菜单项和命令名。这个方法比翻菜单快得多也几乎不受版本差异影响。另外建议你按照自己的工作习惯把常用区域创建、Update Shapes、DRC过滤等命令设定为快捷键例如我把Route Keepout分配给了R K的缩写别名把Update Shapes分配给了U S习惯了之后手感和效率都提升明显。最后说一点我的个人体会Route Keepout看起来只是一个简单的区域约束但它背后代表的是整个PCB设计流程里的“空间权限管理”。如果你只在Constraint Manager里写间距数值不把物理禁区画到板上约束就是一张纸上的数字对实际布线毫无约束力反过来如果禁区画得又多又乱没有任何命名规范和图层规划最后连你自己都会怀疑这块区域到底在保护什么。我的习惯是布局完成、正式布线之前花半小时把整板的禁布区全部规划好每一个区域都带上明确的命名前缀、层属性、网络白名单和用途注释。这套规则越清晰后面布线、DRC、板厂沟通都会省心很多。最后再分享一个小技巧如果要从结构DXF的闭合曲线生成Route Keepout别在GUI里一段段描。先把DXF导入到Board Geometry层确认线条闭合后选中这些线段用Shape → Compose Shape直接生成闭合Shape再把Shape的属性改成Route Keepout区域精度高、速度快还能保持和结构件完全一致的外形。这个方法我在多块带异形屏蔽罩和异性安装孔的板子上都用过实测下来比手工描边稳定太多。
返回列表