4. PCB 设计导入:从 Allegro / Altium / ODB++ 到 SIwave
做信号仿真这么多年,PCB 导入这一步看着简单,实际踩过的坑可不少。图纸过不来、叠层丢了、网络名乱掉……每次遇到这种问题,我都得折腾半天。所以今天这篇,咱们就把三种主流导入路径掰开揉碎讲清楚。
4.1 从 Allegro 导入 .brd 文件
Allegro 是目前高速设计圈用得最多的工具,SIwave 对它的支持也最成熟。我个人习惯直接拖 .brd 文件到 SIwave 窗口,或者走 File → Import → Allegro/APD。它会弹出一个 Assistant 窗口,帮你一步步走完。
导入过程中,SIwave 会自动调用 EDB 转换引擎。它会帮我们做三件事:
- 叠层映射:自动识别板厂的 stackup 信息,生成 SIwave 的 layer stack 表。
- 网络提取:把所有的 net 和 component 信息读进来,保持与原理图一致。
- 铜皮修复:自动填补小缝隙、锐角碎片——这些东西做直流压降分析时会出问题。
我记得有一次,客户给的 .brd 文件有几十块碎片状的铜皮,DC IR drop 仿真跑完,结果惨不忍睹。后来我仔细看了 log,发现有 warning 说「unresolved copper fragment」。从那以后,我每次导入都会先扫一遍 Message Window。
4.2 从 Altium Designer 导入 .pcbdoc
Altium 的用户也不少。这里要注意:SIwave 并不直接读 .pcbdoc 文件,你需要先导成 ODB++ 格式,或者用 Altium 的 Export → ANSYS EDB。
具体操作路径是这样的:
- 在 Altium 中打开你的 PCB 项目。
- File → Export → ODB++,选择导出目录。
- 在 SIwave 中 File → Import → ODB++,选中刚才的 .tgz 或文件夹。
为什么要走 ODB++?说白了,ODB++ 是业界通用的制造数据格式,几乎所有 EDA 工具都认。你想想看,如果直接转 proprietary 格式,很多第三方工具根本读不了。ODB++ 虽然多了一步,但兼容性是最好的。
4.3 从 ODB++ 和 IPC-2581 导入
ODB++ 和 IPC-2581 其实是两种不同的中间格式,但处理方式很相似。SIwave 对 ODB++ 的支持更好一些,IPC-2581 偶尔会遇到材质参数丢失的情况。
| 特性 | ODB++ | IPC-2581 |
|---|---|---|
| SIwave 支持版本 | 全版本支持 | 2019 及以上版本 |
| 叠层信息 | 自动完整读取 | 需手动补 dielectric Dk/DF |
| 铜皮细节 | 保留 polygon 和 fill | 部分工具会展开成 line |
| 推荐使用场景 | Allegro / Altium / Mentor | Cadence / Zuken 等 |
我个人更倾向用 ODB++,除非客户指定要 IPC-2581。有一次我用 IPC-2581 导入一个 28 层的背板,所有 dielectric 厚度全变成 1 mil,简直是灾难。后来我用 ODB++ 重新导一遍,叠层完全正确。所以,如果你手上有两个选项,优先走 ODB++。
4.4 导入后的必做检查清单
图纸进来了,不代表万事大吉。我一般会花 5 分钟做一次「健康检查」。你可以把这个清单贴在显示器旁边:
- 叠层检查:SIwave 的 Stackup 编辑器里,每一层顺序、厚度、Dk、Df 是不是和板厂文件一样?特别要注意 copper roughness 模型有没有自动匹配。
- 网络完整性:走 Circuits → Net Manager,看看是否有 unexpected net,或者某个重要的 net 消失了。我遇到过 power net 因为命名不规范被当成普通信号线。
- 过孔检查:有无 floating via、stub 过长。SIwave 的 Via Overview 表格一眼就能看出问题。
- 铜皮连续性:用 SIwave 自带的「Merge Copper」工具跑一遍,特别是电源平面,很容易有微小的分割缝隙。
核心原则:导入后的数据质量,直接决定你后续的仿真准确度。我从不把「能跑出结果」当作标准。每次导入完毕,我都会手动比对至少 3~5 条关键信号的回流参考层——只有这一步确认了,我才敢开始设置激励源。
4.5 常见报错与解决思路
做了这么多项目,有些报错我闭着眼睛都能猜出原因。下面列几个最常遇到的:
| 报错信息 | 原因 | 解决方式 |
|---|---|---|
| Unsupported database version | Allegro 版本不匹配 | 在 Allegro 中 Save As 到 17.4 |
| Missing layer mapping | 叠层文件损坏或未嵌入 | 重新导出 ODB++ 并勾选全部 layer |
| Copper entity error | 铜皮碎片或自交叉 polygon | 运行 SIwave 的 Copper Check Utility |
| Net count mismatch | 规则区域被忽略导出 | 检查 Altium 导出选项中的 keep-in which region |
嗯,最后一句提醒:永远保留原始设计文件的副本。 导入再方便,也架不住源文件被误改。我习惯把 .brd / .tgz 和导入后的 .siw 文件放在同一个文件夹,版本号加上时间戳。出了事,随时能回头。你想想看,要是真弄到一半发现数据不对,重新导入也比重新画板子快太多了。