一块板子上八路相同的Buck电源,Layout时如果一路一路地摆,一个下午基本就报销了。尤其碰到多通道模块,比如四路ADC前端、八路LED驱动、六相电机驱动,每路器件位置、走线走向几乎一模一样,纯手工布局不仅慢,还容易摆着摆着就乱了——位号对不上、间距不统一、DRC一片飘红。
用AD22的Room复制功能就能把这件事从按小时算压缩到按分钟算。它的思路很简单:先把其中一个通道调成标准模板,然后把这个通道的布局、走线、Room边界、类归属、规则约束一次性复制给其余所有通道。Altium Designer把这个动作留在了Design -> Rooms -> Copy Room Formats(设计 -> 区域 -> 复制区域格式)里,快捷键一路按下来也就几秒钟。这篇文章我不会只讲命令在哪,会从原理图多通道怎么搭、Room怎么建、复制时勾选项怎么选,到复制后器件乱跑、走线没复制过去这类坑,全部过一遍。适合正在画多路电源板、采集板、驱动板,以及任何被重复布局折磨过的PCB工程师。
1. 为什么多通道布局总耗费大半天:Room复制到底解决什么问题
1.1 多通道模块的真实应用场景
先对号入座,看看你手头是不是这类板子:
- 多路BUCK电源板,比如1颗主控配8颗相同的DC-DC,每颗周边全是电感、电容、反馈电阻、续流二极管,电路结构一模一样。
- 多路信号采集卡,比如16通道ADC前端,每个通道都是运放+RC滤波+ESD保护,布局要严格对称。
- LED阵列驱动板,8路恒流驱动,每一路从驱动IC到LED接口之间的走线长度、器件位置都要一致,不然亮度不匀。
- 电机驱动模块,三相桥或六相桥,每个半桥的MOS管、驱动电阻、吸收电容完全重复。
这些板子的共同点是:原理图里是同一份模块被实例化了好多次。在原理图上你只需要画一次模块,然后告诉AD“这个模块给我重复8份”,它就是多通道设计。到了PCB阶段,AD会自动给每一路单独分配一个容器,这个容器就是Room。
1.2 手工重复布局的代价
不夸张地说,老一辈Layout工程师刚接触这类板子时,主流做法是框选第一个通道的器件,Ctrl+C复制,然后切换到一个新位置,Ctrl+V粘贴,再逐个改位号、重新拉飞线。这么做有几个非常痛的问题:
第一是慢。一个通道哪怕只有20个器件,8个通道就要重复操作8次,每次还要处理飞线重新连接、走线重新调整,光对位号对飞线就能耗掉半天。
第二是容易错。手工复制后,器件位号后缀对不上、网络名字符串对不上、有的器件漏复制,等制板回来debug时,才发现第5通道的C55电容没放,或者R32的封装被贴错了,这种错误埋得很深,查出来的时候真的是欲哭无泪。
第三是改版痛苦。原理图改了一版,多通道结构变了,PCB上每个通道都得重新来一遍。如果当初是手工复制布局的,改版时所有通道的位置都得手动同步,回到地狱模式。
第四是没有规则同步。手工复制只能复制器件本身,带不过去的是类成员关系、布线规则约束、Room边界,而这些正是保证“8个通道行为一致”的关键。
1.3 Room复制的核心逻辑
Room在AD里的本质,是对PCB上某个物理区域内一组器件和布线的“容器描述”。多通道设计导入PCB后,每个通道天然会生成一个Room,它记录了三件事:这个区域在哪、区域里有什么、这些器件遵循什么约束。
Room复制功能做的,就是把“母版通道”里这几类信息整体搬运到其他通道:
- Room定义,包括位置、形状、尺寸,复制后每一路的物理边界都对齐。
- 组件布局坐标,每个器件在母版Room里的相对位置,被等比映射到目标Room里。
- 布线信息,母版里的走线、过孔、铜皮,只要网络能对应上,全部复制过去。
- 类归属与规则,比如每一个通道的电源网络、地网络都归到同一个Net Class,复制后自动带过去。
这等于把一个通道的所有设计成果,在其他通道上“重播”了一遍。但这里有个前提:目标Room里的器件和网络名称,必须和母版Room能对应上。AD之所以能做到,靠的就是多通道设计里自动生成的后缀机制——通道0的网络叫VOUT_0,通道1的也演化成VOUT_1,一一对得上,复制才有依据。
2. 准备工作:原理图侧的多通道设计与Room创建
2.1 多通道原理图怎么画:Repeat是关键
想让Room复制真正好用,源头不在PCB,而在原理图。你最好在原理图上就让AD知道“这是同一个模块的多个实例”,而不是自己在PCB里手工框一堆区域。
最常见的做法在层次原理图的Sheet Symbol(图纸符号)里写Repeat关键字。假设你有一个模块原理图叫PSU_Module.SchDoc,那么在父图纸里放一个Sheet Symbol,把它的Designator写成:
Repeat(PSU_Module, 0, 7)这里的PSU_Module是模块名称,0是起始通道号,7是结束通道号,合起来就是“重复8个模块”。保存并编译工程后,AD就会把这一个Sheet Symbol展开成8个通道,原理图层次结构里能看到PSU_Module_0一直到PSU_Module_7。
模块内部如果网络名叫VOUT,展开后会自动变成VOUT_0、VOUT_1……VOUT_7。器件的位号也会自动带后缀,比如R1在通道3里会变成R1_3。这样生成的多通道结构,PCB导入后网络和位号天生配套,Room复制才能一路通畅。
如果不想画层次原理图,也可以偷懒:把一个模块原理图复制成8个独立页面,手动把里面的网络名改成带通道后缀的名字,相当于自己手工模拟Repeat效果。但是说实话,一旦通道数量超过4个,手动弄网络后缀能让你怀疑人生,后期改动也是灾难。我的建议是别省这一步,直接用Repeat。
2.2 从原理图更新到PCB:Room是怎么生成的
原理图侧多通道结构准备好之后,打开PCB文档,执行Design -> Update PCB Document(设计 -> 更新PCB文档),在ECO工程变更对话框中逐项检查。
正常情况下,ECO列表里会出现很多“Add Rooms”的条目。AD会根据多通道结构,在PCB上生成对应的Room对象,名字一般是ROOM_PSU_Module_0、ROOM_PSU_Module_1这样的格式,同时也会把每路的器件放入对应的Room里。
如果你把工程选项Project Options -> Multi-Channel里的“Component Naming”设为Alphabetical,位号会变成R1_A、R1_B这种字母后缀;默认一般是Numeric,即R1_0、R1_1。选哪种都行,关键是原则:源Room和目标Room的后缀命名规则必须一致,否则复制时器件对应不上。
更新完成后,PCB上可能会出现一堆Room相互重叠的情况,这很正常,只要每个Room里都包含了自己的器件就行。先不用管它们,我们要开始正式干活了。
2.3 创建Room的三种方式与Room属性设置
不是所有布局场景都有多通道原理图,也有的工程师习惯先画好PCB再做区域规划。这时候可以手动创建Room。AD里创建Room的途径有好几条,我列一下实际用过的:
- 方式一:Design -> Rooms -> Place Rectangular Room。鼠标直接画一个矩形区域,最简单粗暴。画完之后,选中Room,在Properties面板里指定它包含哪些器件,或者手动把器件拖进去。
- 方式二:先框选板上的一组器件,然后执行Tools -> Placement -> Rooms -> Create Rectangular Room from selected components。AD会根据选中的器件包围盒自动生成Room,器件与Room的从属关系也自动建立好了,这个方式在建模块布局时尤其好用。
- 方式三:在PCB面板里把对象类型切换为Rooms,列出所有Room,再通过右键菜单执行New Room或Duplicate Room。
手动创建的Room,需要自己确认Room的“Component Rule”(器件约束)。这个选项在Room的属性面板中,里面可以设置“Component Constraint”,我建议在布局阶段选“All Components Stay Inside Room”或者中文界面的“所有元件保持在房间内部”。这样可以防止复制布局后器件跑出边界。等布局定型、准备删除Room之前,再把这个约束关掉或者解除Rooms。
3. Room复制完整实战:8通道电源模块布局实操
3.1 第一步:把母板通道调整到标准状态
接下来进入正文,以一个8通道BUCK电源板为例子。原理图已经用Repeat(PSU_Module, 0, 7)生成了8个通道,PCB上也已经有了ROOM_PSU_Module_0到ROOM_PSU_Module_7这8个Room。
先调整通道0,也就是母版通道。一定不要先急着复制,要把通道0的布局调到“你希望8个通道都长这样”的状态。比如:
- 输入电容靠近输入端口,输出电容贴住电感,反馈电阻网络上没有明显绕线。
- 电源芯片的去耦电容尽量靠近电源引脚,走线先经电容再进芯片。
- 所有器件使用对齐工具:选中器件后,用Align Left、Align Top、Distribute Horizontally,把水平和垂直方向都对齐。
- 调整好器件间距,让同类器件之间的间距一致,方便后面整体复制。
如果希望复制的时候把走线也复制过去,那么母版通道的布线也要在这时候完成。不要指望着复制后再慢慢补线,那样复制功能的价值就少了一大半。8路BUCK的功率走线、信号走线、过孔,尽可能在通道0里一次画好、调好。
布线时注意,走线不要穿出通道0的Room边界。Room复制走线时,是以母版Room内的走线为对象的,如果你把线拉到了别的Room里,复制时AD会提示网络归属冲突,复制结果也会不理想。
3.2 第二步:执行Copy Room Formats的操作细节
母版通道搞定后,选中ROOM_PSU_Module_0,然后执行Design -> Rooms -> Copy Room Formats,或者直接用快捷键D,R,C。这个快捷键不是摆设,按熟了你就能感受到什么叫一气呵成。
鼠标会变成十字光标,并且提示“Select Target Room”。这个时候有两种选择目标Room的方式:
- 方式A:单击目标Room,一次复制一个通道。
- 方式B:右键或按Tab打开目标选择对话框,在对话框里会列出当前所有Room,你可以勾选ROOM_PSU_Module_1到ROOM_PSU_Module_7,如果你有8个通道,直接点“All Rooms”按钮全选,然后一次复制到剩余7个通道。
我强烈建议在通道数量多且结构完全一致时,直接用All Rooms批量处理。这样一步就把7个目标全复制了,比你一个个点要高效得多。
执行复制后,会弹出一个Copy Room Formats对话框,里面有一堆选项。下面这个表格是我平时的勾选习惯,照着选就能避开大部分坑:
| 勾选项 | 作用 | 我的建议 |
|---|---|---|
| Room Definition | 复制Room的位置、形状、尺寸 | 勾选,复制后所有通道边界统一对齐 |
| Component Placement | 复制器件布局坐标 | 必选,不选等于没复制 |
| Routing | 复制母版通道的走线、过孔、铜皮 | 母版已布线时勾选,否则不勾 |
| Class Membership | 复制网络类/器件类归属 | 勾选,保证8个通道规则一致 |
| Component Rules | 复制Room的器件约束规则 | 建议勾选,防止器件跑飞 |
需要注意的是,对话框里的选项并不是固定的,不同版本AD排列可能略有差异,但核心就是上面几项。如果只复制布局不复制走线,就把Routing那一项取消勾选,等8个通道布局全定下来之后再用其他工具一次布所有线。
3.3 第三步:复制完成后的整体后处理
点击OK后,回到PCB界面,你会看到8个Room里的器件已经按母版通道的布局自动排列好了。如果母版通道里布过线,走线也会跟着复制过来,连过孔位置都一模一样。
但此时大概率不是最终状态。有一项我每次都会做:统一调整通道与通道之间的间距。虽然Room Definition复制了母版的边界,但通道间的大间距还是要根据板卡结构去定。此时有几个方法:
- 选中Room,按M键(Move),用键盘方向键微调整个Room的位置,Room内的器件会跟着整体移动,因为它们的Component Rule还在约束状态。
- 如果Room尺寸没有完全包住器件,选中Room后执行Design -> Rooms -> Adjust Room Size,Room会自动缩放到正好包住内部所有器件。
- 用Edit -> Align -> Space Horizontally或Space Vertically,把多个Room按等间距排列。选中所有Room后,一次性分布均匀,这样通道间距就能严格统一。
我之前在一款8路电源板上,就是先把通道0调好,复制到所有通道后,用Space Horizontally把8个Room等距排开,5分钟搞定整板布局骨架,剩下的只是外围电路的连线。
3.4 第四步:DRC检查与Room去留
复制完成后,跑一遍完整的DRC(Design -> Run Design Rule Check)。
重点检查这几类错误:
- Un-Routed Net,看有没有网络因为复制不完整而断开,尤其是Room外的跳线网络。
- Component Clearance,看通道复制后器件间是否产生了新的间距冲突。
- Room Conflict,检查Room边界是否重叠、器件是否跑到Room外。
如果报错集中在某一个通道,那很可能是这个通道的网络名或者位号后缀没和母版对应上,回到原理图检查通道结构。如果只有零星问题,直接在PCB上手工修正即可。
复制完布局和布线之后,Room要不要删?我的习惯是不急着删。保留Room的好处是后续做整体调整时,可以很方便地通过“Select Devices inside Room”选中一个通道的全部内容,或者在工程重定义规则时直接用Room界定范围。等板子所有布局布线都送出去打样前,再统一删除Room对象,免得DRC里提示Room相关的错误。
4. 常见问题排查与避坑实录
4.1 复制后器件全部跑到原点或重叠
这是刚上手Room复制时最容易遇到的状况。症状表现为:复制完,目标Room里的器件全跑到了坐标(0,0)附近,或者堆叠成山。
排查方向有三个。第一,检查目标Room里的器件是否真实存在。如果目标Room是空的,或者器件还没被正确分配到Room里,复制布局时AD找不到对应的对象,自然就会产生奇怪结果。第二,检查Component Rule是否勾选。如果只勾了Component Placement却没勾Component Rules,器件坐标被复制了,但Room对器件的约束关系没有建立,AD会把这些器件当成无约束对象丢到默认位置。第三,检查源Room内是否有器件在边界外。母版通道里如果有器件落在Room外,复制时这部分相对坐标关系会错乱。
解决方法是:先把所有Room设置为“所有元件保持在房间内部”,再对母版通道执行一次Adjust Room Size,确保母版里每个器件都被Room包含,然后再复制。
4.2 布局复制过去了,走线一条没过来
复制了好几次,器件位置整整齐齐,但是走线就是一条都不出现。这种问题八成出在Routing选项和网络对应关系上。
第一种可能性是你在Copy Room Formats对话框里没勾Routing。这个选项默认不一定勾选,一定记得展开Routing相关选项并打钩。
第二种可能性是母版通道走线还没完成,或者走线并不完全在源Room内。复制走线的规则是以Room边界为准的,穿出边界的走线会被切断或忽略,导致目标Room里的走线缺了一块。
第三种可能比较隐蔽:目标通道的网络名和源通道对不上。比如通道3的网络在原理图里改过名,或者重复原理图时网络后缀没自动生成,AD找不到对应的网络,自然不会复制走线。这个时候去原理图里检查这个通道模块的网络标注,尽量让所有通道网络名格式保持一致。
4.3 位号后缀与网络名不匹配导致复制失败
多通道的位号后缀、网络后缀是Room复制能正常工作的根基。我见过一个项目,工程师把其中一个通道原理图改了器件编号方式,导入PCB后,这个通道的位号是C1_3,其他通道却是C3_0、C3_1这种风格,Copy Room Formats时直接报找不到对应器件。
正确的做法是多通道结构在原理图阶段就要统一规范。如果用了Repeat,器件的后缀由工程选项里的Component Naming控制,所有通道自动遵循一个规则。如果你想让位号更可读,可以把Component Naming改成$Component_$Channel之外的其他格式,比如“$Component-$Channel”,但关键是一旦定下来就不要中途随手改。
如果你是在PCB界面手动复制的不同模块,也务必保证源模块和目标模块的位号文字规则一致,比如通道A以_A结尾,通道B也以_B结尾,否则复制时网络映射必然失败。
4.4 器件不在Room边界内,框不跟随
Room复制后,器件正确排列了,但Room的框还是原来那个又小又歪的矩形,甚至有的器件明显在框外,跟没约束一样。
这通常是Room Definition没勾选引起的。如果复制时没选Room Definition,目标Room就保留了复制前的旧边界,当然包不住新器件。解决方法是复制前把Room Definition一并勾上,复制后再执行Adjust Room Size,让房间边界自动贴合器件。
另外,Room里的“Component Rule”也不要设成Locked(锁定),否则复制后你想整体移动Room里的器件时会发现拖不动。Room的约束选项建议保持为“Stay Inside Room”或者“Allow Floating”,等最后布局定型再锁定。
4.5 多根走线间距不统一,怎么快速调成等间距
复制完之后,经常有同学发现通道内部几根平行走线间距不齐,比如数据线组,有的是8mil、有的10mil、有的12mil,看着就难受。这里顺带分享一个AD22里比较高效的调间距方法。
- 按住Shift,依次点选需要调整间距的多根平行走线(也可以直接框选)。
- 在Place(放置)菜单里选择Interactive Multi-Route(交互式多走线),或者用快捷键P,M进入多线模式。
- 拖动任意一根走线时,其他走线会跟着联动,此时按Tab键,在弹出的属性面板里设置走线的线宽和线间距,例如都设成10mil。
- 如果在拖拽过程中发现线序错乱,按Shift+R循环切换推挤模式,AD会自动重新整理平行走线的顺序。
这个功能特别适合Room复制后的整体走线后处理。8个通道复制完之后,只要你调一个通道的线距,其他通道还在原地不动,那就把这个通道再作为母版,重新复制一次Routing,一样能统一。
4.6 常见问题速查表
| 问题现象 | 可能原因 | 解决方法 |
|---|---|---|
| 复制后器件跑到原点 | 目标Room为空或Component Rule未勾选 | 检查Room归属,勾选Component Rules并重建约束 |
| 走线复制不过来 | Routing未勾选或网络名不匹配 | 勾选Routing,检查网络后缀一致性 |
| 复制后整体重叠 | Room Definition未勾选或通道间距未重新排列 | 勾选Room Definition,后用Align工具重新等距排布 |
| 器件在Room外 | Room边界未同步 | 复制后执行Adjust Room Size |
| DRC报Room Conflict | Room重叠或器件越过边界 | 统一调整Room位置,必要时删除Rooms |
5. Room复制的进阶玩法与个人实操心得
5.1 跨板卡布局复用:不只是“同一块板子”
Room复制不局限于同一块PCB内部。当两个PCB之间的网络名能对上,甚至可以在不同板卡之间复制布局格式,比如你在A板调好了一个开关电源模块的布局,B板用的是同样的方案,完全可以把A板这个Room复制到B板。
具体做法是:把A、B两块PCB都打开,并保证两块PCB在同一个工程下(或者都把网络名规划成可对应)。在A板选中源Room,执行Copy Room Formats,然后切换到B板,鼠标点击B板的目标Room。AD会把器件的相对位置、走线拓扑、类归属都映射过去。跨板复制时,两个板卡的器件位号网络名可以不同,但网络名必须有一一对应的关系,比如A板的VIN对B板的VIN_5V,A板的GND对B板的GND,否则复制不到东西。
这个功能在方案快速衍生、项目平台化复用的时候特别好用。之前我们做个系列产品,四块板卡都用同一套电源方案,我在第一块板上把电源模块布局调到最佳,后面三块板直接Copy,每块至少省了两个小时的重复工作。
5.2 和PCB类与规则绑定一起用
Room复制能不能发挥最大价值,取决于你愿不愿意把规则体系搭好。我的经验是:先建网络类,再建Room,最后再把类与Room绑定。
比如8路BUCK,所有输入电容的正端网络都叫VIN_x,先把这些网络全部放进一个Net Class叫PWR_IN。然后每个通道的Room都设置好Component Rule和布线规则。复制的时候勾上Class Membership,通道1的PWR_IN_1、通道2的PWR_IN_2就自动继承了同一个Net Class的所有布线规则,比如铜皮间距、线宽。
这样做的好处非常明显:后续改规则只需要改Net Class里面的参数,整板8个通道同步生效,不用一个个Room去单独设置。Room复制复制的不只是图像,更是一整套约束逻辑。
5.3 我的最佳工作流建议
最后我把这套流程压缩成一个清单,也是我自己日常最顺手的工作顺序:
- 原理图阶段使用Repeat生成多通道,统一命名规则。
- 导入PCB后,先检查Room是否全部生成,器件是否都进入对应Room。
- 集中精力调整通道0的布局与布线,把它当成唯一需要手工完成的通道。
- 用D,R,C启动Copy Room Formats,一次复制到所有目标通道。
- 复制后检查Class Membership、Room边界、器件约束是否符合预期。
- 用Align和Interactive Multi-Route统一通道间距与线距。
- 跑DRC,修正个别差异点。
- 保留Room直到布局布线全部完成,收尾前删除Rooms并做最终检查。
这套流程看起来平淡,实际上每一条都是从项目里踩坑踩出来的。前面几次用Room复制时,我也是先手工布局、再复制,结果发现走线复制不过来、器件跑飞、Room混乱,翻来覆去查了快一天,最后才发现是网络名和勾选项的问题。但只要把上面这套步骤理顺,多通道模块布局真的就像“复制粘贴”一样简单。
最后再分享一个小技巧:在Copy Room Formats对话框中选择目标Room时,别傻傻地用鼠标挨个点。把Room面板调出来,按Shift或Ctrl多选,或者直接用“All Rooms”按钮,然后一次性应用。通道多了以后,这种批量思维才是真正提效的地方。