ARTICLE DETAIL

资讯详情

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

Cadence Allegro Sub-Drawing全攻略:跨项目PCB复用与导出导入实战

Cadence Allegro Sub-Drawing全攻略:跨项目PCB复用与导出导入实战 做PCB设计的人几乎都遇到过这种痛一个平台电路调好了、布线也搞定了结果隔壁项目要用同款电源方案总不能重新摆一版器件再拉一遍线。Cadence Allegro里的Sub-Drawing功能就是专门解决这类跨板卡、跨项目复用问题的。它能把一块板子里选中的器件、布线、铜皮、甚至约束规则原封不动搬到另一块板上是实实在在的提效工具。这篇内容我不打算只给你念一遍菜单操作而是把Sub-Drawing从原理到实战、从导出到导入、从正常流程到报错排查整个捋一遍。老工程师用这个功能顺风顺水是因为他们知道背后哪些环节容易出意外哪些步骤必须按顺序来。我会把这些经验一并写出来适合刚接触Allegro的板级工程师也适合已经在用但被导入后器件乱飞、网络名冲突、动态铜皮消失这些问题折磨过的人。1. Sub-Drawing功能概览与适用场景1.1 功能定位它到底能干什么Sub-Drawing的中文直译是“子绘图”在Allegro里它对应两条命令Export Sub-Drawing和Import Sub-Drawing。从操作逻辑上理解你可以把它看成是PCB编辑器内部的“复制—粘贴”升级版。普通的复制粘贴是板内复制Sub-Drawing则是把一段设计数据序列化成一个小文件再在任何一块板卡中反序列化还原实现跨项目搬运。这个文件的后缀名通常是.clp全称是Cadence Layout Plus? 实际叫法不用太纠结。.clp文件本质上是一段ASCII码的文本记录里面存的是你选中元素的坐标、属性、走线线段、过孔位置、铜皮轮廓、器件位号引用等信息。因为它是文本格式所以你可以用文本编辑器打开查看里面记录了导出时的设计单位mils还是mm、原点和各元素的相对坐标。正是基于这种文本化存储Sub-Drawing才能在不同板卡之间传递不依赖原始PCB文件。很多工程师容易把Sub-Drawing和Module模块复用搞混实际上两者差别很大。Module是把一组布局布线固化成.psm文件需要在Symbol库路径中配置侧重于“复用整个子模块”Sub-Drawing则更灵活可以只复制一根走线、一块铜皮、几个过孔或者任意选中集合侧重于“按需选择、即时搬运”。1.2 适用场景什么时候值得用它我总结了三个最典型的场景大家可以对号入座。第一平台化设计中的电路复用。一个公司往往有标准化电源方案或核心处理器方案一块板子调通后新项目希望沿用这套布局布线。直接在原板上通过Sub-Drawing框选整块电源区域导出后再导入新板几分钟就能把几十个器件和密密麻麻的走线搬过去比从头画效率高出一个数量级。第二多人协作时的设计合并。团队里有人负责DDR部分有人负责电源部分最后要把各自的设计合到同一块板子上。每人把自己的部分存成Sub-Drawing文件主设计者用Import分别导入再统一处理重叠和冲突即可。这种情况下Sub-Drawing是协作交付的标准格式之一。第三相似板卡之间的局部移植。比如一个产品有高配版和低配版两者共用大部分电路只有少数功能模块不同。用Sub-Drawing把公共部分从高配版导出导入低配版时只需处理差异部分能避免大量重复劳动。1.3 与其它复用手段的对比复用手段文件格式适用范围优点缺点Sub-Drawing.clp跨项目复制任意选中元素灵活可按需框选网络名冲突需手动处理Module复用.psm完整子模块复用符号化库管理方便需提前做Module改动不灵活Design Reuse.ddr跨工程逻辑复用保留布线信息和连接关系配置复杂对库要求高整体另存.brd整板复制简单粗暴新项目板框和器件差异大时不好改从表格可以看出Sub-Drawing的优势在于“轻量”和“随意”。不需要提前规划哪些模块要复用随时框选随时导出适合快速响应设计变更。2. 实操前置准备环境与文件处理2.1 版本与语言环境检查我习惯在动手之前先确认两个环境变量一是Allegro版本二是.brd文件的版本状态。Sub-Drawing本身跨版本兼容性尚可但我强烈建议导出和导入使用相同的大版本。比如16.6导出、17.2导入多数情况下没问题但遇到复杂铜皮或者特殊约束时偶尔会有属性丢失的情况。同一个大版本之间最稳妥。另外要提一句Allegro默认界面是英文菜单路径是Export和Import开头的选项别在中文汉化包里翻半天找不到。汉化包的翻译偶尔不统一什么“导出子图”“导入子绘图”都出现过对不上号反而耽误时间。认准英文菜单最靠谱。2.2 导出前的数据库检查这是很多人忽略的关键步骤。在框选导出之前先对当前板卡做一个数据库检查命令是File - Audit - Database Check或者直接用菜单Place - Fix如果板子上有未修复的DRC标志可以顺便处理一下。具体操作上我会分两步走Database Check勾选Update All DRC运行一次检查确保没有严重的数据库错误。如果Audit报告里出现大量Open Connection或Broken Symbol先修完再导出否则.clp文件里记录的元素索引可能是错的导入到新板卡后会出现“找不到封装”“走线悬空”等怪问题。用File - Properties查看板卡当前的单位设置。Sub-Drawing导出时会记录单位如果源板是mm目标板是mil导入时坐标会做一次换算。换算本身没问题但如果你在导出时选择了一个参考坐标而这个坐标在目标板上对应位置刚好有器件导入后会有细微错位。所以导出前把单位统一成自己设计常用的单位能省不少事。做完这两步检查再继续后面会顺畅很多。2.3 框选与命名规范Sub-Drawing命令支持两种选择方式一种是直接用鼠标左键框选矩形区域另一种是用临时Group的方式把需要复用的元素预先分组然后一次选中。复杂设计里我更推荐后者因为实际板卡上你要复用的区域往往不是规则矩形可能是整块电源区域带着弯弯曲曲的边界。操作路径是Edit - Group创建临时组然后框选或点选需要包含的元素保存组。之后在Export Sub-Drawing时用组的名称来快速选中。好处是选中的内容精确可控不会误带到旁边的外围电路。.clp文件命名也是有讲究的我建议按“项目名_功能块_版本号”的格式来。比如PowerModule_V1.2.clp一看就知道是电源模块的1.2版本。实际项目里我在一个产品系列中最多累积过几十个.clp文件如果不规范命名导入时完全分不清哪个是哪个后期维护就是灾难。3. 核心实战跨项目子图导出与导入全流程3.1 导出Sub-Drawing的完整步骤这部分是基本功但我把每一步都写清楚因为细节决定成败。第一步打开源板卡执行File - Export - Sub-Drawing。第二步程序会跳出一个控制面板提示你选择需要导出的元素。面板底部有Selection Settings可以配置过滤条件比如只选Clines走线、只选Vias过孔、只选Symbols器件、只选Shapes铜皮。实际使用中我几乎从不单独选某一类直接用All On让工具导出所有可视元素。第三步在板卡上用鼠标框选你要导出的区域。如果之前建了临时Group这里可以直接输入组名来精确选定。第四步选定后面板中会列出选中元素的数量统计比如选了12个Symbols8个Nets多个Clines等。此时还需要指定一个参考点也就是导出文件中的坐标原点。我习惯选择“板的左下角原点”或者某个关键器件的第一引脚焊盘位置。参考点一旦确定导入时所有元素的坐标都会相对于这个点计算参考点选得好导入后对齐就简单。第五步点击Write弹出保存窗口命名.clp文件并保存。整个过程看起来简单但有几个操作习惯要养好。导出前先打开原点可见性Display - Origin Display打开Origin即显示图表符号否则你看不到参考点在哪就不知道导出的内容是相对谁的。另外框选时尽量选大一点把该带的铜皮、地过孔都包含进去宁可多选一点再在新板删除也比少选导致功能缺失强。3.2 坐标对齐与参考点选择这是Sub-Drawing能不能用得爽的核心技术点。很多教程会告诉你“导出时点一下板子选参考点导入时再点一下目标板对应位置就行”这句话说起来轻巧做起来全是坑。我举一个真实案例。有一次我要把一个DDR模块从A板导入B板B板板框位置和A板完全不同。我搞了个偷懒做法在A板上随意点了DDR区域附近的一个过孔作为参考点导入B板时也随手点了B板上对应区域的一个点。结果导入后整个模块虽然在线路上有连接但整体位置和丝印完全不在期望坐标还得整体移动。后来我总结了一套固定打法在源板上定位一个“绝对参考对象”比如板上的定位孔、安装孔或者某个特殊器件的原点。把这个点在Options中加上坐标标注作为导出参考点。在目标板上预先规划好这个功能块要放置的坐标。用Placement List或者手动测量确定一个安装孔/器件位的实际坐标值。导入时键盘输入目标坐标而不是鼠标点击。Import Sub-Drawing面板上有个Offset和Point选项手动填坐标让导入的元素以精确的位置落位。这套打法尤其适合多块子板拼系统板的场景。比如一个主控板里要拼一块算力子卡子卡上的连接器位置是固定的你只要确保导入时连接器中心落在目标坐标上整块功能块就自动对齐。手动输入坐标虽然比鼠标点选多敲几下键盘但定位精度是微米级的想要位置可控就不要怕这点麻烦。3.3 导入Sub-Drawing的完整步骤导入流程和导出是对称的但仍有一些特殊选项需要留意。第一步打开目标板卡执行File - Import - Sub-Drawing。第二步点击浏览按钮选择之前导出的.clp文件。第三步指定放置位置。你可以用鼠标点击也可以输入坐标。这里我强烈建议输入坐标原因上面已经讲过了。第四步勾选导入选项。重点看这几个Replace Nets / Merge Nets网络名冲突时的处理策略稍后详细说。Strip Net Names如果需要去掉网络名只是复用图形成来参考可以勾选。Import Symbols / Import Shapes决定是否一并导入器件封装和铜皮。一般保持勾选。第五步点击Import等待进度条走完。第六步打开Display - Show Rats检查导入后飞线状态确认网络连接是否存在。这里有一个非常容易翻车的地方导入后很多元素可能跑到板框外面去了或者在原点附近堆成一团。别慌这不是导入失败而是参考点、目标坐标没对上。选中所有导入的内容用Edit - Move整体移动或者直接在命令栏输入x 0 0把内容拉到原点再重新定位。3.4 需要一并复用的附属资料Sub-Drawing文件本身只记录图形和位置信息但不包含封装库定义和PCB库。这导致一个问题如果目标板卡的本地库路径里没有对应的封装文件.dra/.psm导入时Allegro会弹出一堆“Symbol Not Found”警告并且部分器件会变成灰色占位符。所以在做跨项目导入之前先检查两件事目标板卡的库路径中是否包含源板用到的所有封装。可以在Setup - User Preferences - Library路径里添加源板的封装目录。目标板卡的焊盘库路径是否完整。焊盘文件后缀是.pad/.ssm如果缺失导入的器件引脚会异常。如果公司里建立了统一的封装库服务器这个问题基本不存在。但如果是小团队长期依赖各自本地库跨项目复用Sub-Drawing前先同步一次封装库能省掉后面大量报错的查错时间。4. 关键参数与原理分析为什么这些选项这么重要4.1 网络名冲突的处理导入Sub-Drawing时最常遇到的问题就是网络名冲突。源板上的一个网络叫VCC_5V目标板已有同名网络或者源板上有3.3V_A目标板上有3.3V_B这两种情况处理逻辑完全不同。同名网络的冲突通常不是问题。Sub-Drawing导入时会把源板元素连接到目标板的同名网络上相当于两根网络合并。这在大多数场景下正是我们想要的你想把源板的电源滤波电路搬运到目标板本来就要让它接到目标板的电源网络上。真正需要小心的是“不同名但实际同一个功能”的网络冲突。比如源板叫VCC_DDR目标板叫VCC_DDR_1两边的DDR电源其实想连到一起但网络名对不上。导入时如果选择Replace Nets新导入的网络名会覆盖目标板的对应网络可能导致目标板上原本连到VCC_DDR_1的元素全部掉飞线。如果选择Merge Nets则导入进来的网络会合并到目标板同名网络上原有连接不受影响。我的经验是导入前先看一遍源板的网络名心里有个底。如果发现和原有板子差异大优先用Merge Nets如果目标板上确实没有对应网络再用Replace Nets把源板的网络名带进来。这种决策不能拍脑袋每次导入前我都会花两分钟列出关键网络对照表防止导入后影响原有板卡的连接关系。4.2 器件位号重复与自动标注Sub-Drawing导入后如果目标板上已经存在R102、C203这些位号新导入的器件可能会产生位号冲突。Allegro会尝试自动重新编号但自动机制并不聪明常常会把新导入器件的位号强制改成R102A、C203B这种带后缀的临时形态后期还得手动整理。更稳妥的做法是导入前就把源板上要复用到的器件位号统一改成不与目标板冲突的编码区间。比如目标板现有位号在R100-R500范围那么把源板要导入的电阻电容改成R1000的编号再导出。虽然麻烦但导入后不需要清理位号对于严谨量产的项目来说这个前处理反而是效率最高的。4.3 铜皮与动态铜皮的优先级处理铜皮是Sub-Drawing导入后最容易出现“视觉正常但电气错误”的部分。Allegro的铜皮有两种形态动态铜皮Dynamic Shape和静态铜皮Static Shape。动态铜皮会自动避让走线、过孔和器件焊盘静态铜皮不会。Sub-Drawing导出时默认会把铜皮的形状和优先级一并写入.clp文件但在跨项目导入时目标板上如果有其他铜皮叠放在同一区域就会出现优先级冲突。严重时新导入的铜皮会和原有铜皮互相咬合形成闭合的短路线。我建议导入后立即执行如下检查选中所有新导入的Shape用Edit - Properties查看其优先级Dynamic Shape优先级值1-127数值越大优先级越高。和原板卡上已有铜皮的优先级做对比确认没有低级铜皮压住高级铜皮的情况。导入后执行一次Shape - Select Shape on Layer逐层检查。遇到铜皮冲突时最可靠的办法是先把导入区域的铜皮全部选中删除然后重新执行Shape - Polygon基于新的位号和连接关系重新绘制一遍铜皮。虽然看起来多了一步但相比被短路问题折磨半天重画铜皮反而效率更高。4.4 层叠结构差异带来的隐藏风险这个坑埋得比较深我摔过一次之后才长记性。源板是6层板层叠顺序是L1-L6目标板是4层板层叠顺序是L1-L4。源板的Sub-Drawing文件里内层走线和电源铜皮的层号记录的是L2/L3/L5导入目标板时这些层号会被映射到目标板的同名层或最近层但映射逻辑并不总是对的。尤其当源板使用负片层Internal Plane时导入到正片设计的目标板上铜皮连接属性可能完全失效。正确做法是在导入前先确认目标板的层叠结构、层名、层类型都与源板一致。如果层名对不上先在Cross-sectionSetup - Subclasses里修改目标板层名让两边对齐。层叠不一致的板子尽量不要硬用Sub-Drawing搬运内层内容把内层元素在源板上转成静态图形再导出导入到目标板后用Shape操作重建才是可控的方式。5. 常见问题与排查技巧实录5.1 找不到Export/Import Sub-Drawing菜单不少人在Allegro里翻遍了File菜单都找不到Sub-Drawing选项其实原因非常简单菜单未启用。Allegro的菜单项可以自定义企业在部署时可能把部分菜单项隐藏了。排查步骤执行File - User Preferences搜索menu查看menu_file是否被设置为某个自定义菜单文件。如果有用默认的allegro.men恢复或者直接在命令栏输入menufile命令重新加载默认菜单。提示部分版本里Sub-Drawing菜单在File - Export下是一个子菜单而不是直接显示。如果看不到鼠标悬停在Export上看看有没有展开箭头。在16.6版本里这个隐藏菜单坑了很多人。5.2 导入后器件位置偏移、整体乱跑我碰到的绝大多数导入偏移问题都不是Sub-Drawing工具本身的bug而是参考点选择失误。导出时选了板子左下角为参考点导入时点了目标板右上角的一个点那么导入内容的偏移量就是两个位置的差值。解决方法是在导入面板中将放置点坐标明确输入为00让导入内容落在绝对原点再基于原点准确移动。如果这样还偏就要怀疑.clp文件里的坐标单位出了问题。用文本编辑器打开.clp文件查看开头部分的单位声明确认是不是导出时用了mm导入板卡却是mil导致所有坐标被放大或缩小了。5.3 导入后网络名冲突导致大量飞线正常导入后飞线应该显示正常如果突然出现几百根飞线大概率是网络合并策略没选对或者源板上的网络在新板上不存在导致系统把所有导入网络视为未连接网络。排查流程先查Find面板把所有未连接飞线的高亮网络名列出来。对比源板网络表看看哪些网络“变成”了未连接。如果同名网络在目标板本来就有连接但导入后飞线还在试试Tools - Derive Connectivity重新生成连接关系。另一个冷门原因是源板上用了XML格式的网络名比如带下划线和斜杠的层级网络而目标板创建较早不支持这种命名导入时网络名被截断或替换。这种场景下只能回源板把网络名简化后重新导出。5.4 动态铜皮导入后消失或报错动态铜皮导入后凭空消失通常是Shape参数不兼容导致的。跨版本操作时旧版本的.clp文件记录了新的动态Shape参数目标板版本解析不了就可能丢弃该Shape。另一种情况是Shape边界存在自相交导入时数据库检查失败。碰到这种问题先看命令行窗口的报警信息如果提示“Shape self intersection”就在源板上用Shape - Check参数重新验证Shape边界。如果只是想让导入后的铜皮快速恢复可以临时在Sup_Edge层画一个矩形覆盖原有区域再执行Shape - Compose Shape把矩形和边界合并成新铜皮。这不是标准做法但在紧急交付时可以救命。5.5 导入后约束规则丢失Sub-Drawing导入的默认行为是不覆盖目标板的约束规则Constraint。这就导致一个现象源板DDR走线等长约束是300mil导入后走线还在但规则表里没有对应约束新布线时根本不会触发等长检查。要解决这个问题需要在导出时额外处理约束。Allegro的Physical和Spacing约束是在Constraint Manager里定义的Sub-Drawing不支持直接写入。我的做法是在源板上把需要复用的约束集导出为.raw文件在目标板重新导入约束再导入Sub-Drawing。如果两边网络名一致约束会自动关联到新导入的网络。6. 进阶技巧与个人长期实践心得6.1 三个让Sub-Drawing更好用的隐藏技巧第一个技巧是结合临时Group和Command脚本使用。在导出前建好组然后用script文件记录整个导出和导入过程可以把重复的搬运操作变成一键式。尤其适合在企业内部做标准模块库每个功能块对应一个.clp文件加一段导入script新项目启动时运行script自动导入所有标准模块省时省力。第二个技巧是主动使用Move命令的“Copy”模式来模拟Sub-Drawing。某些场景下你只是想把一块区域的布线复制到相邻位置做两组并行总线。这时候用Edit - Move选中区域后按CtrlC切换为复制模式能快速实现局部复制。注意移动复制时选择Multiple Copy才能保留原始位置的元素。这个操作本质是板内复制和Sub-Drawing的跨板能力各有用处。第三个技巧和版本管理有关。.clp文件应纳入版本管理文件名配套的README里记录导出的源文件版本、参考点坐标、封装库版本。这部分工作看似文案但当你三个月后回头找“那个电源模块的Sub-Drawing”时会发现记录不仅帮你定位到正确文件还避开了旧封装库带来的坑。6.2 我在真实项目里的踩坑复盘有一次给一块光模块板子做电源复用我直接从老项目框选了整个LDO区域导出导入新板后没有检查铜皮结果动态地铜皮的thermal relief连接方式在新板的负片层里失效导致一批板子批量生产后出现电源纹波偏大。最终排查下来是via连接方式从全连接变成了热焊盘连接散热不均匀导致的。那次之后我定了一个规矩Sub-Drawing导入之后必须逐层检查形状属性Shape属性面板里的Thermal Relief设置绝不偷懒。还有一次是团队协作时同事把DDR模块的.clp文件发给我我导入后发现有大量DRC错误。查了半天发现他是在没保存的情况下导出的数据库中有一部分元素位置数据已经过期。这种低级错误唯一的预防手段就是导出前先CtrlS保存然后运行一次Database Check。所以现在我自己导出任何.clp前都会强迫症一样地按三下保存、检查数据库、再执行导出。6.3 后续扩展把Sub-Drawing纳入标准化设计流程我建议所有需要频繁做平台化产品或系列化板卡的团队都建立一套标准化复用库。不一定是架构上的复杂系统只要在服务器上开一个“复用模块”目录每个模块维护好.clp文件、封装库同步、约束文件和版本记录就能显著缩短新项目的PCB设计周期。具体的落地做法是把Sub-Drawing和Allegro的Design Reuse配合使用。Design Reuse负责逻辑层复用Sub-Drawing负责物理层复用两者结合既能保证原理图一致性又能实现布局布线最大化复用。我在团队内部推动的一个简单流程是原理图层面用Design Reuse保持网络拓扑一致PCB层面用Sub-Drawing快速铺回路最后用Constraint Manager做统一检查。这样既不会丢失电气逻辑也不会在物理设计上重复劳动。最后再分享一个小技巧如果你每次导入后都要花时间修网络名可以在源板导出前用Logic - Net Rename把网络批量改成新项目需要的名字再执行导出。这样导入到目标板时网络名基本可以直接对上省掉Merge/Replace的纠结。这个小操作可能在很多人眼里微不足道但在反复迭代的项目里它能省下不少时间和精力。
返回列表