资讯详情

资讯详情

Allegro跨层器件对齐实战:从坐标校准到Skill脚本

做双面高密度板的人八成都在 Allegro 里碰到过同一个问题顶层一个芯片底层一个滤波电容设计时总觉得位置差不多结果贴片回来一测要么屏蔽罩压到器件要么结构孔和连接器错开小半毫米。这类问题归根到底就是“跨层器件没有真正对齐”。一开始我也以为对齐就是把两层板上的东西摆到同一个坐标点上直到有次返工才算把Allegro里不同层器件对齐的几个核心门道摸清楚。这篇文章会把我实际用过的几种方法按场景拆开讲覆盖手工坐标对齐、Align菜单批量调整、视觉辅助手段、以及用Skill脚本处理大批量器件的思路。适合正在用Allegro做PCB Layout的工程师尤其是刚从其他EDA转过来、对Allegro的坐标体系和参考点逻辑还不熟的人。读完你至少能明白一件事跨层对齐不是“看着差不多”而是把原点、单位、镜像关系三条线全部统一。1. 跨层对齐之前先搞清对齐对象和基准1.1 跨层对齐的三种典型对象跨层器件对齐并不是一种操作就能覆盖所有场景。最常见的三种情况基准和处理方式都不一样。第一种是正反面背靠背布局。典型的例子是双面贴片板上的主控和存储芯片为了缩短走线、改善散热希望两个封装在板上的投影位置完全重合。这种对齐要的是“坐标一致”同时考虑两个器件各自的原点定义否则就算X/Y坐标一模一样装配时还是会错位。第二种是连接器和结构件。很多板子在顶层放了一个Type-C座底层对应位置要挖空或者放加强钢板。这种对齐关注的是“结构限位”器件本身并不重叠但某个特征点必须落在同一个坐标上比如连接器外壳中心或者定位柱。第三种是内部层焊盘与表层器件配合。埋盲孔板里内层焊盘、盘中孔、表层BGA出线之间经常有严格的共位关系。这种对齐不能只靠肉眼必须通过坐标来锁定。不同对象适合不同抓取点器件原点是工程坐标Pin 1适合管脚关键的器件Body Center适合视觉判断。跨层对齐前先想清楚这一层后面操作才不会反复返工。1.2 对齐前必须统一的两个参数单位与原点Allegro里所有器件坐标都在同一个绝对坐标系里但如果我们自己把单位搞混或者设计原点不统一准确率会大打折扣。首先是单位。Allegro设计界面里可以切mil和mm很多人在对齐时惯用mil因为栅格、封装尺寸基本都是mil整数。但别忽略精度设置在Design Parameter Editor里的Accuracy选项如果设成了整数输入0.5mil这种值会被系统舍入。不同单位的换算还会带来另一个坑——从mm参考图纸里抄坐标到mil单位设计里结果差了0.02mil可能无所谓差出0.2mil就可能影响连接器装配。我的习惯是先固定成mil、精度2位全程不切来切去。其次是原点。设计原点Drawing Origin和用户原点User Origin在Allegro里是两回事。跨层对齐最好都基于同一个Drawing Origin不要用User Origin作为参照后又不记录它的偏移量。有的设计用板框左下角做原点有的用板中心做原点只要全流程统一就行。最怕的是一个人用左下角另一个人用板中心那顶层底层器件的绝对坐标比较就全乱了。1.3 清理器件原点避免“原点陷阱”很多人的对齐操作问题出在器件自己的原点上。Allegro里每一个Symbol都有原点Origin但封装库设计者未必把原点放在几何中心有些放在Pin 1有些放在某一角。这就导致一个很常见的现象选中两个器件执行水平对齐屏幕上看到它们整齐了但读取坐标后发现一个器件的Pin 1在(1000, 500)另一个的Pin 1在(1200, 800)怎么算都不在同一条中心线上。原因就是两个封装的Origin相对Pin 1的位置不同。所以对齐之前建议用Show Element看一下选中器件的Symbol Origin坐标并且统一选择器件的同一个参考点来做输入。如果封装库本身不规范就在编辑器里把原点改到想要的基准位置再更新进版图。这一步虽然麻烦但能省掉后面所有“看不见的误差”。2. 先用手工坐标对齐最笨但最可控的办法2.1 Move命令下的ix/iy精确位移手工坐标对齐的核心命令是Move。很多人只知道用鼠标拖动却忘了命令窗口里可以直接输入相对位移和绝对坐标。选中顶层器件按M进入Move状态命令行输入ix 2000器件沿X方向精确移动2000mil输入iy 1500沿Y方向移动1500mil。这个操作比鼠标拖拽稳定太多——尤其在两层器件距离很远时鼠标拖过去经常撞到其他器件而坐标输入一步到位。跨层对齐最常用的是绝对坐标输入Move状态下命令行输入x 1000 1000当前抓取点会被移动到(1000, 1000)。举个例子顶层连接器中心坐标是(2500, 1800)底层对应加强片要放在同一位置那就选中底层器件确认抓取点选的是Symbol Origin输入x 2500 1800器件就精确到位了。这里还要分清x和ix的区别。x后面跟的是绝对坐标ix是相对当前位置X方向偏移iy是Y方向相对偏移。很多人输错就输在这里该用相对位移时用了绝对坐标器件直接飞到设计区域边缘去在界面上还看不出来。2.2 Pick From抓取方式的选择Move命令的Options面板里有一项Pick下拉菜单默认可能是Sym Origin也可以是Pin、Body Center等。对齐这种操作我是强烈建议把抓取点固定成Symbol Origin。为什么强调这个因为在跨层对齐里你真正希望重合的往往是“器件的同一个特征点”而这个特征点最好就是Symbol Origin。如果两个封装的原点定义不一致你用Body Center抓取可能视觉上很居中但工程坐标完全对不上。比如一个晶振封装Origin定义在左下角另一个滤波座封装Origin定义在中心。两者要在底层和顶层背靠背放置如果都按Origin抓取晶振的左下角会和滤波座的中心重合显然不是你要的结果。所以每次做对齐前右键Move命令下的抓取点检查当前使用的是什么必要时切换成Symbol Origin然后通过Symbol Editor把原点统一到你需要的参考点。2.3 手工对齐的注意事项手工对齐看着简单但有几个小细节容易坑人。第一坐标输入后不要急着Done先缩放界面确认器件确实到了预期位置。有时移动完成后器件紧贴在板框边缘甚至跑到设计区域外这时再输入一次绝对坐标拉回来就行。第二命令行里的空格和逗号。Allegro命令窗口接受x 1000 1000这种空格分隔如果你顺手写成x 1000,1000系统可能不认或者当成非法输入。这个细微差异导致很多人以为命令失灵其实只是格式问题。第三先旋转再移动。如果器件还要旋转180°我建议先执行M输入r 180旋转再输入ix 0 0或者绝对坐标到位。因为旋转时默认绕当前抓取点旋转先移动再旋转容易导致中心偏移还要重新算一次坐标。这样操作稳定得多。3. 用Align菜单做批量对齐快且规整3.1 Align工具在哪能干什么当需要对一批器件做整齐排列时手工每个输坐标就太慢了。Allegro提供了一个对齐工具——一般显示在Edit工具栏的对齐图标不同版本位置略有差异菜单路径通常在Edit下。它可以实现水平左对齐、水平右对齐、垂直顶部对齐、垂直底部对齐、垂直居中、水平居中以及等间距分布。这个工具在单层内部整理器件时非常好用比如一排测试点、一排拨码开关选中后点一下水平居中全部器件瞬间对齐到同一条基准线。跨层使用时我的典型操作是先把底层一组器件内部用Align整理整齐然后用Move命令把这组器件整体平移到目标坐标。Align负责“内部关系”Move负责“外部位置”两者配合效率最高。3.2 多器件等间距分布Align工具不只是对齐还能做等间距分布。选中多个Bottom层器件在Align选项里切换成等距分布模式设定间距值Allegro会按照中心距或者边距把器件均匀排开。比如一排8个LED灯间距要求是100mil选中后直接设置参数比手动一个个ix 100要快得多。这里有一个选择集过滤的细节点击Align命令前尽量在Find面板里只勾选Symbols防止误选到Via或者Clines。选择器件时可以右键用Temp Group框选再在Options里决定以哪个器件作为基准点。基准点选错了整个排列都会整体偏掉所以每次对齐前先想清楚哪个是“参考不动”的器件。3.3 Align容易踩的坑Align最容易被忽略的问题是固定属性的器件不会参与移动。如果一个器件被标记为FixedAlign操作时它会留在原地其他器件会靠向它结果往往出乎意料。所以做批量对齐前先检查有没有器件带Fixed属性如果有要么取消要么有意识地把它当作基准。另一个坑是混合封装原点不一致。Align的“对齐”通常基于器件的Origin或者Body Center如果一组器件里有的Origin在Pin 1有的在中心那么Aligh之后看着整齐的直线实际工程坐标还是参差不齐。这个问题不会在屏幕上暴露但会和结构图、装配图产生矛盾。我的经验是涉及跨层对齐的器件统一先检查并修正封装原点再用Align工具。4. 视觉辅助与镜像层显示让“看不见的那一面”现身4.1 用颜色和透明度同时显示两层跨层对齐时最大的困难不是坐标计算而是看不到另一面的器件到底在哪。Allegro可以同时打开TOP和BOTTOM的显示关键是颜色区分要明确。我一般会把顶层Etch设为深蓝色底层Etch设为亮橙色然后把两层的Symbols、Pin、Silkscreen分别显示出来。在Color/Visibility面板里每一层右侧通常可以调节透明度把当前层调成半透明状态两层器件就能同屏比较。这个视觉辅助最大的用处是快速判断“重叠区域是否在预期范围”例如底层一个去耦电容是否完全避开了顶层屏蔽罩的位置。但必须提醒视觉辅助只能用来粗判不能用来看“差不多”就行。因为屏幕上是透视叠层两层器件的实际高度差、装配干涉都看不出来。终极确认还是要靠坐标值。4.2 切换视角观察底层器件Allegro有翻转视图的功能可以从正面视角切到背面视角看Bottom层器件。翻转之后要注意屏幕上的左右方向看起来是反的但器件坐标仍然是绝对坐标系的值。很多人在这里被绕晕翻转后看到一个底层器件在屏幕右侧以为它X坐标很大实际上它的X坐标并没有变只是视图方向变了。所以在翻转视角下做判断前我会随手用Show Element选中目标器件看一下坐标值。靠屏幕方向感去猜是最容易出错的方式。另一个实用技巧是翻转前后都保持同一比例的显示缩放否则视觉间距容易误导。4.3 在辅助层上画基准线用辅助线做对齐是很老的技巧但至今最直观。在Board Geometry层或者单独的No-Connector层画一条基准线把这条线的端点坐标记下来器件的对齐就有了明确的参照物。我会在需要对齐的位置画一个十字标记十字中心就是目标坐标然后直接把器件移动到十字中心。这种方法比记一串坐标数字更不容易出错尤其当板子上有多处对齐点时辅助线本身就能当图纸用。栅格也是辅助对齐的好工具。把栅格大小临时改到0.1mil或者0.5mil移动器件时可以精确吸附到想要的位置。改栅格从Setup菜单进入对Grid的设置里可以单独设置非电气层栅格。实际操作中配合栅格和辅助线跨层器件的位置偏差基本可以控制在0.1mil以内。5. Skill脚本批量对齐跨层器件数量大时的终极大招5.1 为什么需要脚本人工逐个移效率低当板子上有几十对甚至上百对跨层器件需要背靠背对齐时人工操作方法再熟练也会让人崩溃。比如一块模块板上顶层和底层各放了30个BGA电容要求一一对应手工每个器件都做“选中、Move、输入坐标、确认”的动作不仅慢而且很容易漏掉某一个。Skill脚本的价值就在这里可以读取每一个器件的坐标按照预先写好的对应关系批量修改底层器件的位置和旋转角度。这种操作的效率和准确性是手工完全无法比拟的。当然脚本本身也有风险写不好会把一堆器件搞乱所以一定要理解脚本边界并备份原文件。5.2 一个示例批量将底层器件对齐到顶层器件的X/Y下面是一个示意脚本思路是把所有顶层器件和底层器件分别选出来按下标一一对应把底层器件的坐标改成顶层器件的坐标旋转角度加180度。这个脚本只做演示实际生产前需要根据你的封装库和对应关系调整。axlCmdRegister(alignb2t alignb2t) defun( alignb2t () let( (topsyms botsyms i) topsyms axlGetSelSet(axlSelect(?name symbols ?layer TOP)) botsyms axlGetSelSet(axlSelect(?name symbols ?layer BOTTOM)) if( length(topsyms) ! length(botsyms) then axlUIViewMessage(顶层和底层器件数量不一致) return() ) i 0 foreach( s botsyms s-xy topsyms[i]-xy s-rotation topsyms[i]-rotation 180.0 i i 1 ) axlRefresh( nil ) axlUIViewMessage(跨层对齐完成) ) )注意一点这个脚本按“选择集的顺序”一一对应如果你的板子里顶层和底层的器件不是按位号顺序一一配对的结果会完全错乱。所以实际使用时更可靠的方式是按位号匹配即用sym-name或者某种RefDes规则找到对应器件而不是按下标顺序。5.3 脚本执行前的三步检查第一备份文件。运行脚本改坐标之前一定先另存一个版本。搞乱了直接回到备份文件不至于在错误数据上反复修。第二先打印后改写。我写这类脚本的习惯是先跑一个只读脚本把每个底层器件和顶层器件的坐标、位号、旋转角度全部打印出来人工比对一遍确认配对关系正确再执行真正的写入操作。不要一上来就sym-xy ...。第三验证单位。脚本里的坐标数值都遵循当前设计的单位。如果设计单位是mil脚本里就不要混入mm的数值。用脚本批量修改前也要检查当前Accuracy设置避免赋值后坐标被舍入成整数。6. 跨层对齐常见问题与排查技巧6.1 器件坐标看着是对的但板厂回来还是偏了这个问题出现过很多次不是Allegro的问题而是对底层器件坐标的理解出了偏差。Allegro里顶层和底层共享同一个绝对坐标系一个器件放在顶层(1000, 1000)那么在底层同样位置也应该是(1000, 1000)这一点没问题。问题是如果要从底层视角输出装配图或者用镜像视图和结构图核对视觉方向翻转后很多人会把X坐标换算错。例如板宽4000mil底层器件在底层视角看起来像在X3000的位置但实际坐标其实是X1000。排查方法就是不要看视角只读Show Element里的绝对坐标。只要坐标值一致板厂做出来就不会偏。还有一个容易忽略的因素是底层器件镜像属性。跨层背靠背对齐时底层器件的旋转角度通常要相对顶层器件做180度翻转。如果只对齐了坐标、忘了调整旋转贴片回来器件引脚方向会完全相反。检查方法在Find面板选中底层器件看Properties里的Mirror字段是否为“YES”再核对旋转角度。6.2 命令窗口输入坐标无效这种情况我遇到最多的是顺序问题。Move命令输坐标之前必须先选中器件并进入Move状态命令窗口出现当前操作的提示后再输入坐标。如果先输坐标再选器件Allegro会认为你要输入的是一个无效命令。其次检查分隔符。x 1000 1000中间是空格不是逗号。很多人从其他软件的坐标输入习惯带逗号过来在Allegro里就会吃瘪。再有就是数字的单位如果当前设计精度是整数输入了带小数的坐标系统可能提示找不到位置。把Accuracy调高一级通常就能解决。最后检查坐标是否超出设计范围。如果把器件移动到设计区域之外窗口里可能什么都看不见界面像死机一样。这时候按右键选Cancel或者输入zoom fit把视图缩放到全板就能看到器件飞到哪里了。6.3 对齐后相邻器件DRC爆红跨层对齐之后器件在电气上重合可能没问题但三维空间上可能打架。顶层一个高电容底层一个高电感坐标对齐后正好顶在一起DRC当然会报。这种问题不是坐标对齐的错而是布局时没有考虑器件高度和封装冲突。解决办法是给特定区域设置Package Keepout或者使用Constraint Manager里的Same Net Spacing规则对叠层器件的物理间隙做约束。如果设计要求它们必须背靠背那就确认两个器件的高度之和不超过允许厚度否则只能调整封装位置或者改用矮封装。另外背靠背的两个器件如果共用焊盘或者热焊盘要检查热过孔是否冲突。跨层对齐后这些细节都会被DRC暴露出来别急着忽略每一项报错都对应一种真实风险。6.4 不同单位显示导致微偏差有的设计从参考PDF里抄坐标源文件是mmAllegro里当前是mil直接输入数值显然不对。更隐蔽的是精度问题mil到mm的换算经常出现无限小数如果你在一个精度只有1位的mil设计里输入坐标系统会把0.0001mil的小数舍入掉多个器件分别舍入后累计误差可能在装配阶段爆发。我的做法是切换单位后先检查精度选项把mil精度设成2位或更高再从源文件抄坐标时先换算好再输入不要直接在命令行里写mm数值让系统换算。每次做完跨层对齐用Show Element抽查5到6个器件的坐标确认所有关键点的数值都和你预期一致。这个抽检动作很慢但能救回很多后面的返工。最后再分享一个偏门但实用的小技巧如果两个器件只差零点几个mil完全不用重新输入绝对坐标选中器件后用Move命令输入ix 0.5或者iy -0.3这种微调比从大坐标里数数字快得多而且不容易写错参数。我自己习惯是先建好基准辅助层、统一抓取点、确认单位精度再Move定大坐标、Align整理组内关系、最后用ix/iy做微调。整套流程跑顺手后跨层器件对齐基本不会再让人返工。
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →