第四章:创建可复用模块——从现有设计中提取模块、设置模块原点与参考点、模块命名规范
各位工程师朋友,大家好。今天我们来聊聊模块复用里最基础也最关键的一步——怎么把一块已经调好的电路,变成可以随时调用的“乐高积木”。
说实话,我刚入行那会儿,觉得复用就是复制粘贴。结果呢?每次粘贴完都要改半天坐标、调半天原点,反而比重新画还慢。后来我才明白,真正的复用,是从创建模块的那一刻就开始规划的。
4.1 从现有设计中提取模块
提取模块,说白了就是把PCB上的一坨走线、过孔、器件,打包成一个独立的“子电路”。Allegro里叫它“Module”,也就是我们常说的复用模块。
操作其实不复杂,但有几个坑我得先提醒你。
4.1.1 提取前的准备工作
在动手提取之前,先问自己三个问题:
- 这个模块是否完整? 电源、地、时钟、复位,一个都不能少。我曾经提取过一个DDR模块,结果忘了把端接电阻包进去,后面复用的时候补得我头皮发麻。
- 模块边界是否清晰? 最好用Outline或Route Keepin把模块区域圈出来。我习惯在Board Geometry里画一个矩形,标注为“MODULE_BOUNDARY”。
- 器件是否都在模块内? 检查一下,有没有器件半截在外面?如果有,要么挪进来,要么放弃它。
4.1.2 提取操作步骤
好,准备工作做完,我们开始动手。Allegro里提取模块的路径是:
菜单栏 → Place → Design Reuse → Module Definition → Create
然后会弹出一个对话框,让你选择要包含的对象。我建议你按这个顺序选:
- 先选器件(Symbols)—— 按住Ctrl键,逐个点选,或者用鼠标框选。
- 再选走线和过孔(Clines, Vias)—— 同样框选。
- 最后选铜皮(Shapes)—— 如果有的话。
选完之后,右键点击“Complete”。系统会让你给模块起个名字,并选择保存路径。嗯,这里就要说到命名规范了。
4.2 模块命名规范
命名这件事,看似简单,但我在项目里见过太多“test1”、“final_v2”、“真的不改了”这种名字。等到项目后期,想找个模块,翻半天不知道哪个是哪个。
我个人习惯的命名格式是这样的:
| 字段 | 说明 | 示例 |
|---|---|---|
| 项目代号 | 3-4位字母缩写 | PJX |
| 模块功能 | 英文缩写,清晰明了 | DDR4 |
| 版本号 | V+数字,从01开始 | V01 |
| 修订状态 | R(Released)或D(Draft) | R |
举个例子:PJX_DDR4_V01_R.mdd
你看,一眼就知道这是哪个项目、什么功能、第几版、是否发布。比“模块1.mdd”强太多了吧?
PJX_DDR4_V01_20250315_R.mdd。这样即使版本号忘了改,也能通过日期追溯。别问我怎么想到的——问就是吃过亏。
4.3 设置模块原点与参考点
这是复用模块里最容易出问题的地方。原点设不好,放模块的时候能把你逼疯。
4.3.1 原点的作用
模块原点,就是模块被放置时,鼠标抓取的那个点。你想想看,如果原点设在模块正中间,那放的时候鼠标指哪,模块中心就在哪。如果原点设在左下角,那鼠标指哪,模块左下角就在哪。
我个人强烈建议:把原点设在模块的几何中心。为什么?因为这样旋转、镜像的时候,模块不会“跑偏”。
4.3.2 设置原点的步骤
在Allegro里,设置模块原点是在提取模块之后做的:
菜单栏 → Setup → Change Drawing Origin
然后鼠标点在你想要设为原点的位置。我一般会先在模块中心画一个十字标记(用Line工具),然后捕捉那个十字的交点。
4.3.3 参考点的妙用
除了原点,Allegro还允许你设置多个参考点(Reference Point)。这玩意儿有什么用呢?
举个例子。我有一个8层的DDR模块,每次放到板子上,都要确保它离板边至少5mm。如果我把参考点设在模块最左边沿,那放的时候直接让参考点对齐到板边+5mm的位置就行了。不用算来算去。
设置参考点的方法:
菜单栏 → Place → Design Reuse → Module Definition → Define Reference Point
然后点选你想要的位置。我一般会设3个参考点:
- 左下角 —— 用于对齐板边
- 中心 —— 用于常规放置
- 关键接口 —— 比如连接器的第一个引脚
4.4 避坑指南:我踩过的那些坑
讲了这么多理论,来点实战经验吧。这些都是我这些年真金白银换来的教训。
4.4.1 坑一:模块里的网络名冲突
有一次,我把一个电源模块提取出来,放到另一个板子上。结果发现,模块里的“VCC”网络和板子上的“VCC”网络连到一起了——但这两个VCC电压不一样!
解决办法: 提取模块时,把模块内部的网络名加上前缀。比如电源模块的网络叫“PWR_VCC”,而不是“VCC”。这样放到任何板子上都不会冲突。
4.4.2 坑二:模块里的器件位号重复
这个更常见。你把模块A放到板子上,模块A里有个R1。然后你又放了一个模块B,模块B里也有个R1。好了,两个R1冲突了。
解决办法: 在提取模块时,勾选“Auto Rename Refdes”选项。Allegro会在放置模块时自动给器件重新编号。或者,你可以在模块里用“R_?”、“C_?”这样的通配符位号,放置时系统会自动分配。
4.4.3 坑三:模块里的走线层不一致
我曾经从一块6层板里提取了一个模块,放到另一块4层板里。结果模块里有些走线在5层、6层,而4层板根本没有这些层。走线直接消失了。
解决办法: 提取模块前,确认目标板子的层叠结构。如果层数不同,要么重新走线,要么在模块里只用前几层(比如TOP和BOTTOM),避开内层。
4.5 实战:完整提取一个模块
好,我们来走一遍完整的流程。假设我要从一块板子上提取一个USB转串口模块。
- 圈定范围: 在Board Geometry层画一个矩形,标注“USB_UART_MODULE”。
- 检查完整性: 确认模块包含FT232芯片、晶振、电容电阻、USB座子,以及所有连接走线。
- 提取模块: Place → Design Reuse → Module Definition → Create,选中所有对象。
- 命名: 保存为
PJX_USB_UART_V01_R.mdd。 - 设置原点: Setup → Change Drawing Origin,点选模块几何中心。
- 设置参考点: 在USB座子的第一个引脚处设一个参考点。
- 验证: 新建一个空白PCB,Place → Design Reuse → Place Module,选择刚才保存的模块,看看能不能正常放置。
4.6 小结
创建可复用模块,说白了就是三个步骤:提取、命名、设原点。但每一步都有细节,细节决定成败。
我个人觉得,模块复用最大的价值不是“省时间”,而是“保质量”。一个经过验证的模块,放到任何板子上都是可靠的。你不需要重新检查它的时序、阻抗、EMC——因为之前已经查过了。
嗯,下一章我们会讲怎么把这些模块组合起来,形成完整的布局。到时候你会发现,有了模块库,布局就像搭积木一样简单。
今天就到这里。有问题欢迎在群里讨论,或者直接找我。咱们下章见。