
1. 拼版需求背后的真实场景拆解1.1 为什么多PCB合并会成为高频刚需做硬件这行的朋友大概率都遇到过这种局面一个产品拆成主板、电源板、接口板三块独立PCB打样阶段分开投料没问题可一旦进入量产三套钢网、三次贴片、三道测试工序成本直接翻倍。更别提有些异形结构的产品主板和副板之间只有几毫米的间距用排针排母连接不仅占空间还容易在振动环境下接触不良。这时候拼版就成了绕不开的环节。传统做法是在CAM工具里做拼版或者干脆让板厂帮忙拼但前者需要导出Gerber再重新处理后者沟通成本高、周期长改一版就要等一天。Cadence Allegro从17.2版本开始强化的Module功能本质上就是让设计者在PCB Editor内部直接完成多板合并不用离开设计环境DRC也能实时检查。我最早接触这个功能是因为一个车载项目主板和电源板需要拼成一块大板交付两块板子有12根电源线和8根信号线需要跨板连接。当时用复制粘贴的方式试了一轮结果网络名冲突、位号重复、DRC报了几百个错光清理就花了大半天。后来改用Module方式同样的工作量压缩到半小时以内而且DRC一次通过。这个效率差距值得花时间把方法吃透。1.2 Module功能到底解决了什么问题Module在Allegro里原本是用来做模块复用的比如一个电源电路在多块板子上重复出现可以做成Module方便调用。但它的底层逻辑是“把一组器件、网络、走线、铜皮打包成一个可独立放置的单元”这个特性恰好完美匹配拼版需求。具体来说它解决了四个核心痛点。第一是网络名冲突两块板子都有VCC_3V3网络直接复制会合并成一个网络但实际它们可能来自不同的电源域Module方式可以保留各自的网络属性。第二是位号重复两块板都有R1、C1Module放置时可以自动重编号。第三是DRC规则差异主板是6层板规则电源板是2层板规则Module可以携带自己的规则集。第四是布局固定已经调好的关键模块位置不会因为拼版操作被打乱。注意Module功能在Allegro 17.2及以上版本才比较完善16.6虽然也有但限制较多建议至少用17.4版本。1.3 适合哪些人参考这套流程如果你符合以下任意一条这篇内容应该能帮到你需要把多块PCB拼成一块交付给板厂产品迭代时需要快速合并不同版本的子板团队协作中不同工程师负责不同模块需要合并验证或者单纯想学一个能提升效率的Allegro高阶技巧。不需要你是Allegro专家但至少要熟悉基本的PCB Editor操作知道什么是Class、Subclass、Constraint Manager。2. 拼版前的核心概念与准备工作2.1 Module与普通复制的本质区别很多人第一次尝试拼版时直觉反应是CtrlC、CtrlV。这个操作在Allegro里叫“Copy”它会把选中的器件、走线、铜皮原样复制到目标位置但网络名和位号会直接合并。如果两块板都有GND网络复制后它们会变成同一个GND这本身没问题但如果两块板的GND在电气上不应该连通就会埋下隐患。Module的机制完全不同。它把选中的对象打包成一个.mdd文件这个文件里记录了器件的Part Number、网络的Alias、走线的层信息、铜皮的Shape属性。放置Module时Allegro会询问你是“Reuse”还是“Create New”。选Reuse网络名保持不变但会加前缀区分选Create New则生成全新的网络和位号。这个选择权在你手里而不是被软件强制合并。用生活化的类比Copy像是把两本书的内容直接剪贴到一起页码会乱Module像是把一本书做成PDF再插入另一本书可以保留原书的页码体系也可以重新编页。2.2 拼版前的文件整理规范在开始拼版之前源文件必须做一轮清理否则后面会花更多时间擦屁股。我踩过的坑包括源文件里有未布完的飞线、有DRC未清的错误、有临时放置的测试点。这些在Module里都会被带过去到了目标板就成了垃圾。建议按这个清单过一遍DRC清零在源板上跑一次完整的DRC确保没有Error级别的违规。Warning可以暂时保留但要知道哪些是故意的。删除临时对象测试点、调试用的过孔、临时铜皮、标注文字全部删掉。确认层叠结构源板和目标板的层数可以不同但信号层的命名最好一致否则Module放置后走线会跑到错误的层。固定关键器件如果源板上有已经锁定位置的连接器、屏蔽罩在Module里会保留锁定属性放置后不会乱跑。记录网络别名如果源板用了Net Alias比如把N$1234改成了PWR_ENModule会保留这个别名但目标板如果有同名网络会冲突需要提前规划前缀。实操心得我习惯在源板文件名里加一个_MOD后缀比如PowerBoard_MOD.brd这样在目标板里调用Module时不容易选错文件。2.3 目标板的预处理要点目标板不是随便新建一个空板就能用的。首先目标板的板框要提前画好因为Module放置时需要参考坐标原点。其次目标板的层叠要设置好至少要有和源板信号层对应的层。如果源板是4层目标板是6层那Module里的走线只会出现在它原本的层上目标板多出来的层是空的这没问题。但如果源板是6层目标板只有4层那源板第5、6层的走线就会丢失。另外目标板的Constraint Manager要提前配置好。Module可以携带自己的规则但前提是目标板里已经定义了对应的规则集。如果目标板没有设置差分对规则Module里的差分走线就会失去约束。我一般会在目标板里先建一个MODULE_TEMP的Class把所有和Module相关的规则临时放在这里等拼版完成后再整理到正式的Class里。这样做的目的是避免Module的规则和已有规则打架。3. Module创建与放置的完整实操流程3.1 从源板提取Module的详细步骤打开源板文件确保处于Idle状态没有选中任何对象。然后在菜单栏找到Tools-Create Module。这时候光标会变成十字形提示你选择要打包的对象。选择对象时有几个技巧。如果整块板都要打包直接框选所有器件和走线但要注意排除板框和安装孔这些在目标板里通常不需要重复。如果只打包部分电路比如只把电源部分做成Module那就只选电源相关的器件和网络。选完之后Allegro会弹出Create Module对话框。这里有几个关键选项Module Name给Module起个名字建议用英文加下划线比如PowerStage_12V。Reference Designator Prefix位号前缀比如填PWR放置后位号会变成PWR_R1、PWR_C1避免和主板冲突。Net Name Prefix网络前缀比如填PWR_放置后网络会变成PWR_VCC_3V3。Include Testpoints是否包含测试点一般选No除非你确实需要。Include Constraint Manager Data是否包含规则数据建议选Yes这样Module会携带自己的规则。点击OK后Allegro会生成一个.mdd文件默认保存在当前工程目录下。这个文件就是Module的载体可以拷贝到其他工程里使用。注意如果源板有未放置的器件在原理图里有但PCB里没放Create Module时会提示错误。必须先把所有器件放完或者删掉未放置的器件。3.2 在目标板中放置Module的操作细节打开目标板菜单栏Place-Module-Browse找到刚才生成的.mdd文件。这时候光标上会挂着整个Module的轮廓移动鼠标可以看到它跟着走。放置时有几个关键操作参考点选择默认参考点是Module的坐标原点但你可以按F6临时切换参考点比如选一个安装孔作为对齐基准。旋转角度按R键可以旋转Module每次90度。如果需要任意角度在Option面板里输入角度值。镜像放置按F键可以镜像但注意镜像后顶层走线会跑到顶层底层会跑到顶层层叠关系会乱一般不建议镜像。放置模式在Option面板里选Reuse还是Create New。Reuse会保留原网络名但加前缀Create New会生成全新网络。放置完成后Allegro会弹出Module Instance对话框让你确认位号前缀和网络前缀。这里可以修改比如把PWR_改成PWR1_方便区分多个电源模块。我一般会先放一个Module跑一次DRC确认没有大问题后再放第二个。这样出问题时容易定位是哪个Module引入的。3.3 位号与网络自动重编号的配置方法位号重编号是拼版里最容易出错的环节。两块板都有R1放置Module后如果没处理好就会出现两个R1DRC会报Duplicate Reference Designator。Allegro提供了自动重编号工具。在Place-Module放置完成后菜单栏Logic-Auto Rename Refdes。这里有两个选项Rename和Reset。Rename是在现有位号基础上加前缀Reset是全部重新编号。我的习惯是先用Rename加前缀比如PWR_R1、PWR_C1这样能看出器件来自哪个Module。如果前缀太长导致位号超过32个字符Allegro的限制再用Reset重新编号。网络重编号类似。在Setup-Net Aliases里可以看到所有网络。Module放置后网络名会变成PWR_VCC_3V3这种格式。如果目标板已经有PWR_VCC_3V3就会冲突。这时候需要手动改前缀或者用Logic-Net Rename批量替换。实操心得我一般会在放置Module之前先在目标板里把所有网络加一个MAIN_前缀这样Module的网络加PWR_前缀后两者不会冲突。等拼版完成后再统一去掉前缀。3.4 跨板连接的实现方式拼版不只是把两块板放在一起还要处理它们之间的电气连接。比如主板和电源板之间有12V、5V、3.3V的电源线还有几根控制信号。Allegro里跨板连接有三种方式。第一种是铜皮连接在目标板里画一块铜皮把两个Module的对应网络连起来。这种方式适合大电流电源但需要手动处理Shape。第二种是走线连接直接用走线把两个Module的焊盘连起来。这种方式适合信号线但要注意走线长度和阻抗。第三种是通过连接器如果两块板原本就有连接器放置Module后连接器的焊盘会对齐直接走线即可。我一般用第二种方式因为走线可以控制阻抗也方便加测试点。具体操作是在目标板里激活Route-Connect然后依次点击两个Module的焊盘Allegro会自动生成一条飞线再手动布线即可。注意跨板连接的网络必须在两个Module里都存在。如果主板有VCC_12V电源板也有VCC_12V放置Module时选Reuse网络名会变成MAIN_VCC_12V和PWR_VCC_12V这时候需要手动把它们连起来或者用Net Alias把它们设为同一个网络。4. DRC避坑与常见问题排查4.1 拼版后DRC报错的典型类型拼版完成后跑DRC大概率会看到一堆错误。我统计过自己遇到的情况主要集中在这几类错误类型报错信息示例根本原因解决思路位号重复Duplicate Reference Designator两个Module有相同位号用Auto Rename Refdes加前缀网络冲突Net has multiple drivers两个Module的同名网络被合并检查网络前缀确保独立间距违规Clearance ViolationModule放置后器件太近调整Module位置或修改规则未连接Unconnected Pin跨板连接未完成补走线或加铜皮层冲突Wrong LayerModule走线层与目标板不匹配检查层叠设置铜皮重叠Shape Overlap两个Module的铜皮重叠调整位置或修改铜皮优先级其中最常见的是位号重复和网络冲突这两个问题在放置Module时如果前缀设置好基本可以避免。4.2 网络冲突的排查与修复流程网络冲突是拼版里最头疼的问题。两块板都有GND放置Module后如果选Reuse会变成MAIN_GND和PWR_GND这两个网络在电气上是断开的。如果它们应该连通就需要手动连接如果不应该连通那就保持独立。排查网络冲突的步骤打开Setup-Net Aliases查看所有网络名。搜索是否有重复的网络比如两个VCC_3V3。如果重复检查它们的来源是来自同一个Module还是不同Module。如果是不同Module确认它们是否应该连通。应该连通就用Net Alias设为同名不应该连通就改前缀。修改后重新跑DRC确认冲突消失。我遇到过一个坑两个Module都有RESET网络但一个是低电平复位一个是高电平复位电气上不能连通。当时没注意直接合并了结果调试时发现复位逻辑混乱。后来把其中一个改成RESET_N才解决。实操心得在放置Module之前先把所有网络名导出到Excel用VLOOKUP查重比在Allegro里一个个看快得多。4.3 位号重编号的批量处理方法位号重复的修复相对简单但批量处理时要注意顺序。如果先给Module A加前缀再给Module B加前缀两个Module的位号不会冲突。但如果先给Module A加前缀然后手动改了Module B的几个位号再跑Auto Rename可能会把手动改的覆盖掉。我的流程是放置所有Module先不跑DRC。对每个Module单独跑Auto Rename Refdes加不同的前缀。跑一次DRC确认没有位号重复。如果有重复手动改掉然后锁定这些位号避免后续操作覆盖。Allegro里锁定位号的方法是选中器件右键Properties在Reference Designator里勾选Lock。这样Auto Rename就不会动它。4.4 跨板连接导致的DRC特殊问题跨板连接时DRC可能会报Partial Route Conflict提示有网络只布了一部分。这是因为跨板连接的走线在两个Module之间Allegro认为它没有完整连接。解决方法有两种。第一种是加测试点在跨板走线的两端各加一个测试点DRC会认为网络已经终端。第二种是修改规则在Constraint Manager里把跨板网络设为Not Checked但这样会失去检查。我一般用第一种因为测试点在实际调试时也有用。加测试点的操作是Place-Testpoint-Manual然后点击走线端点。还有一种情况是Shape Overlap两个Module的铜皮重叠了。这时候需要调整铜皮的优先级或者把重叠部分挖掉。在Allegro里铜皮优先级在Shape-Global Dynamic Params里设置数字越大优先级越高。4.5 常见问题速查表问题现象可能原因快速排查方法解决方案Module放置后器件消失参考点选错器件跑到板框外按Z键缩小视图找器件重新放置选正确的参考点走线层错误源板和目标板层叠不一致检查Cross Section设置统一层叠命名或调整走线层网络名乱码前缀包含特殊字符检查前缀是否只有字母数字下划线改前缀重新放置DRC报错太多规则冲突查看Constraint Manager临时放宽规则拼版后再收紧Module无法放置目标板没有对应的层检查层叠添加缺失的层位号超过32字符前缀太长查看位号长度缩短前缀或用Reset重编号5. 效率提升技巧与版本管理建议5.1 快捷键与脚本的配合使用Allegro的快捷键可以大幅提升拼版效率。我常用的几个F6切换参考点放置Module时特别有用。R旋转Module每次90度。F镜像Module慎用。CtrlE显示/隐藏飞线检查跨板连接时用。CtrlD删除选中对象清理临时走线时用。如果拼版操作很频繁可以写一个Skill脚本自动完成“放置Module - 加前缀 - 跑DRC”的流程。Allegro支持Skill语言网上有不少开源脚本可以参考。我写过一个简单的把常用操作绑定到F7到F12效率提升明显。实操心得Skill脚本不用写得太复杂能把重复操作自动化就行。我那个脚本只有50行但每次拼版能省10分钟。5.2 拼版文件的版本管理策略拼版文件一旦多了版本管理就成了问题。我的做法是源板文件保持独立每次修改后打Tag比如PowerBoard_v1.2。Module文件从源板导出文件名带日期比如PowerStage_20250115.mdd。目标板文件拼版后的文件文件名带拼版信息比如Main_Power_Combo_v1.0.brd。备份每次拼版前把目标板另存一份命名加_backup。这样做的目的是如果拼版出问题可以快速回退到上一个版本不用重新放置Module。另外Module文件不要放在工程目录里单独建一个Modules文件夹按项目分类。这样不同项目可以复用同一个Module比如电源模块在多个产品里都用同一个。5.3 团队协作中的Module共享规范如果团队里有多个人负责不同板子Module共享就需要规范。我建议命名规范Module文件名用项目名_功能名_版本号比如Car_PowerStage_v1.2.mdd。文档记录每个Module附一个说明文件记录包含哪些器件、哪些网络、用了什么规则。版本控制Module文件纳入Git或SVN管理每次修改提交时写清楚改了什么。接口定义跨板连接的网络名要提前约定比如统一用IF_前缀避免冲突。我经历过一次因为Module版本不一致导致的返工A工程师用了旧版电源ModuleB工程师用了新版拼版后DRC报了几十个错查了半天才发现是Module版本问题。后来我们规定Module文件必须放在共享目录每次使用前确认版本号。5.4 从拼版到交付的检查清单拼版完成后交付给板厂之前建议按这个清单过一遍[ ] DRC全部清零没有Error级别违规。[ ] 位号没有重复且符合命名规范。[ ] 网络名没有冲突跨板连接已确认。[ ] 板框尺寸正确安装孔位置无误。[ ] 层叠设置与板厂能力匹配。[ ] 阻抗控制要求已标注。[ ] 拼版间距符合板厂要求一般3mm以上。[ ] 工艺边和Mark点已添加。[ ] 输出Gerber前确认所有层都已正确映射。[ ] 附上拼版说明包括哪块板对应哪个Module。这个清单我用了三年每次交付前过一遍基本没出过问题。特别是拼版间距和工艺边很多新手容易忽略导致板厂无法生产。拼版这件事说到底是把设计意图准确传递给制造环节。Module功能只是工具真正重要的是对电气连接、机械结构、生产工艺的理解。我见过太多人把板子拼在一起就交付结果板厂反馈无法加工或者贴片时器件干涉。多花半小时检查比返工三天划算得多。