画完一块密度不低的板子,layout发给我的时候信心满满,结果我把那块板导入HyperLynx准备做SI仿真,叠层是空的、铜皮碎了一地、电容电阻位号全对不上。那一刻你就知道,不是板子画错了,是数据交换这一步出了问题。Allegro原生格式想直接喂给HyperLynx,远没有想象中那么顺利,所以我后来一直习惯用ODB++作为两者之间的桥。这篇文章就给你完整捋一遍这套流程——从Allegro怎么导、HyperLynx怎么接,到中间那些高频报错怎么一步步拆,全部是实际跑过、踩过坑之后沉淀下来的东西。
1. 为什么我坚持用ODB++中转,而不是直接导入BRD或网表
很多工程师的第一反应是:HyperLynx不是能直接读Allegro的BRD吗?为什么要多此一举。这个想法没毛病,但只对了一半,实际工程里会撞上不少麻烦。先把ODB++到底解决了什么说清楚,后面流程才容易理解。
1.1 原生BRD导入HyperLynx的四大痛点
HyperLynx确实提供了对Cadence数据库的直接读取路径,尤其是BoardSim模式。但在真实项目里,这条路经常走不通,原因集中在几个方面:
版本匹配问题相当闹心。Allegro的BRD文件结构随版本变化很大,HyperLynx不是每个版本都能无缝打开你手上的PCB。有时候你装的是HyperLynx VX.2.13,对方发来一个Allegro 17.4打的板子,老版本HyperLynx直接提示文件版本过高,或者打开后个别对象丢失。为了一个导入升级工具,实在不划算。
公司环境里,license和服务器的限制也很现实。HyperLynx默认有Cadence接口,但这个接口是否在当前license特性里开放,很多人都没注意过。经常遇到就是license里根本没勾选BoardSim对Allegro的原生支持,只有遇到了报错才知道。
数据库透明度的差异。BRD文件直接导入,HyperLynx会尝试解析Allegro内部数据库结构。一旦数据库里面含有它不认得的自定义属性、特殊shape或者某些特殊padstack定义,这些对象要么被忽略,要么被错误映射,结果就是你在Allegro里看到的板子,进了HyperLynx完全变了样。
数据不完整。BRD虽然包含完整物理数据,但很多SI仿真需要的信息它并不直接携带。举个例子,每层之间介质材料的介电常数、损耗角正切、层压厚度,这些在Allegro里通常只存在于Cross-section的参数栏,直接导入后HyperLynx经常读不到,最后全部需要重新敲一遍。
1.2 ODB++格式的核心价值
ODB++最初由以色列的Valor公司推出,后来被Mentor收购,现在归西门子EDA体系管理,已经成为PCB制造和装配领域事实上的标准交换格式,IPC的IPC-2581是它最近的竞争对手,但在EDA工具互连上ODB++的普及度明显更高。
这个格式最大的特点是把PCB的全部设计数据打包成一个有完整目录结构的数据库:每一层图形、钻孔、叠层材料、网络表、器件封装、焊盘定义,全部按照固定规则存放。你可以把它理解成你把板子整体打包成一个"可读的数据库快照",而不是像Gerber那样一个图层一个文件,还需要额外配钻孔文件、装配图、网表才能凑齐全部信息。
对Allegro导出到HyperLynx这个场景来说,ODB++的优势非常直接:
中性格式不受工具版本号影响,Allegro 16.6导出的ODB++,HyperLynx VX.2.x或者更新版本都能稳定读取。
叠层和材料参数会进入统一的文件结构,导入后HyperLynx能解析到的信息量比BRD直读高不少。
网络名、器件位号、padstack命名都有明确的存储位置,映射错误率低。
所有数据都打包在一个.tgz压缩包里,邮件、网盘、工作流管理都方便。
1.3 适用场景的判断
我不是说ODB++在所有情况下都优于直读BRD。如果项目非常赶,而且你能确认HyperLynx license和版本完全支持当前Allegro版本,BRD直读当然最快。但凡是以下情况,我都建议优先走ODB++:
- 双方使用的工具版本跨度比较大
- 板子里使用了大量动态铜皮、混压结构、埋盲孔
- 需要反复迭代,希望有一个格式稳定、不随工具升级变化的中转文件
- 团队里不止一个人在做仿真,大家需要共用同一个基础数据包
一句话总结:ODB++是给"数据交换不稳定"这个问题兜底的方案。下面开始正题。
2. 导出前的工程检查:别等报错了才回头看板子
这一步是整套流程里最容易被人忽略的。很多人一打开Allegro就想直接File > Export > ODB++,然后拖着一堆隐患把问题带到了HyperLynx侧。实际上,ODB++导出报错的根因,十有八九都能追溯到Allegro数据库本身的一些问题。
2.1 数据库健壮性检查:DBDoctor与DBCheck
Allegro用久了,数据库里难免有一些"脏数据"。这些脏数据在你自己打开板子时看不见摸不着,但导出ODB++时会被完整地序列化进文件里,进而引发问题。
我在导出前一定会做两件事:
先关掉PCB板子,用DBDoctor(一般在安装目录的tools/bin下)对BRD做一次完整检查。这个工具会把数据库内部的索引、指针、对象关系全部捋一遍,如果发现异常会自动修复或提示你处理。
重新打开板子后,执行Display > Status,看右上角的DB Check是否为绿色通过状态。如果显示有错,不要跳过,直接在Command窗口输入
dbcheck,把数据库错误清零再做后续操作。
这么做不是玄学。ODB++出口器在枚举网络、封装、图层时,一旦遇到数据库里的孤儿对象(orphan)或者断裂的引用,生成过程就会中断,报一个很笼统的错误码,定位起来相当痛苦。提前把数据库清理干净,能帮你砍掉一半以上的导出故障。
2.2 动态铜皮与Shape的预处理
如果你板子上有大量动态铜皮(dynamic shape),ODB++处理这些对象的时候偶尔会出幺蛾子。具体表现是导出的数据里shape的边界正确,但是void(挖空)信息丢失,或者某个动态铜皮没有正确归属到它对应的网络。
我的建议是导出前把所有shape都检查一遍:
- 执行Shape > Select Shape or Void/Cavity,在Options面板里开启"Select all on layer",逐层翻一遍,确认没有悬空shape。
- 凡是使用动态铜皮的地方,检查它的Net属性是否和预期一致。有些动态铜皮是通过copy命令产生的,容易带上源对象的net,改过之后忘了重新assign。
- 如果板子上有大量需要压平的铜皮,优先考虑使用Decompose Shape功能,把动态shape转成静态shape再导出。这步操作不会改变电气连接,但会让ODB++出口器处理起来稳定很多。
有工程师担心转静态shape之后不好改版,你可以输出完ODB++之后用Undo恢复,或者在整个处理流程之前先把BRD另存一份副本,在副本上做转换。
2.3 叠层与材料参数完整性确认
ODB++里的叠层信息,包括每层名称、类型(signal/plane/mixed)、厚度、介质材料、介电常数、损耗因子等,都是从Allegro的Cross-section(Setup > Cross-section)里读取的。如果Cross-section没有填全,导出的ODB++里对应字段就是空的,到了HyperLynx侧你再手工建模,极其痛苦。
我整理了一个检查表格,每次导出前对照看一遍:
| 检查项 | 确认标准 | 遗漏后果 |
|---|---|---|
| 每层厚度 | 所有层"Thickness"字段不为0 | HyperLynx叠层厚度错误,阻抗计算偏差 |
| 介质层材料 | 明确填写FR4、Megtron6等材料名称 | 导入后材料列表为空,无法定义介电常数 |
| 介电常数 | 各介质层Dk值已填写 | 时延计算错误,波形完全不正常 |
| 损耗角正切 | 高频板材料务必填写 | 损耗仿真失真 |
| 铜箔粗糙度 | 对高速通道有影响时填写 | 损耗偏乐观,实测对不上 |
还要特别注意"No Plane"类型的功能层:如果某个内层被定义为No Plane,ODB++导出后HyperLynx可能无法识别它属于plane层,导致平面完整性分析时少了一层参考平面。我的做法是在Allegro里把每个内层都明确为Plane或Mixed,不要用No Plane占位。
3. Allegro侧ODB++导出完整操作
板子检查完,下面就到了实际操作环节。这里我分版本说,因为Allegro 16.6和17.2以后的ODB++导出界面完全不一样,网上不少教程混着写,照着做容易一头雾水。
3.1 两个版本的导出入口差异
在Allegro 16.6及更早版本里,ODB++出口是通过一个单独的插件完成的,菜单路径是File > Export > ODB++ Inside,弹出的窗口是独立的ODB++ Inside操作界面。这个窗口里,你需要先选工作目录,再填输出文件名,点Generate之后会自动调用后台进程生成压缩包。
进入17.2之后的版本,Cadence把ODB++集成进了主菜单,路径仍然是File > Export > ODB++,但弹出的对话框变成了统一风格的导出设置面板。你可以选择输出ODB++格式,也可以选择输出ODB++(X)之类的扩展变体,一般默认格式就够用。Candence 17.4里这个菜单进一步优化,多了更多预设模板,但核心选项没变。
无论哪个版本,导出前都需要确认一点:工作目录里不要有任何中文字符,路径上也尽量不要带空格和特殊符号。ODB++后台转码程序对路径的处理非常脆弱,这是我在多个版本里反复确认过的经验。建议直接在D盘或E盘建一个odb_export之类的纯英文目录专门用来导文件。
3.2 导出对话框关键参数逐项解读
下面是Allegro 17.2/17.4导出ODB++对话框里最重要的几个参数,每一项我都说明它的含义和推荐设置:
Export Directory / Output File:输出目录和文件名。文件名建议用"板名_版本号_日期"的单段式命名,例如
MB_DDR5_V12_20241110。千万不要用DDR5 Board (Final) v12这种带空格和括号的名字,否则后续解析文件列表时容易出问题。Units:单位选项。保持和你的Allegro设计一致即可,一般用mil或者mm。这里有个小陷阱:如果你在Allegro里用mil画图,导出时选了mm,坐标精度在转换过程中会出现四舍五入,高密度板子比如BGA区域焊盘间距很小,这种微小偏差会被放大。推荐导出时选择跟设计一致的单位。
Suppress Unconnected Pads:是否移除未连接的焊盘。默认是关闭,我建议导出时开着。未连接pad进入HyperLynx后会形成多余的寄生电容节点,影响仿真精度,尤其对高速信号过孔处的Stub分析影响明显。如果你需要做精确的过孔反焊盘分析,可以在HyperLynx里再单独处理。
Netlist Options:网络表相关选项。这里有一个"Export Assignments"的选项,建议勾选,它会把Allegro里的net class、net group等约束信息一并带出去,HyperLynx里做规则检查时能省不少事。
Thermal Relief / Anti-Pad:热焊盘和反焊盘处理。保持默认的Convert to shape,别选Remove,否则内层plane连接关系会发生变化,电源完整性仿真时参考平面会莫名其妙出现断路。
Merge Layer with Same Net:合并相同网络的层。这个选项需要留意:如果板子上有两个内层都是GND,且中间没有隔离介质,勾选合并后会把它们当一层处理。但大多数叠层设计里每层都有独立介质,勾不勾问题不大。我建议保持默认不勾,避免不必要的层合并。
3.3 生成输出文件与验证
点击Generate之后,系统会执行后台转码,耗时从几十秒到几分钟不等,取决于板子规模和电脑性能。整个过程不要打开其它大型软件去挤占内存,否则容易出现"ODB++ Inside terminated unexpectedly"的弹窗。
生成成功后,在工作目录里会看到一个以你的输出文件名命名的.tgz压缩包。部分版本还会生成一个同名的文件夹,里面是解压后的目录结构。这个目录结构本身就是ODB++格式的"真身",.tgz只是便于传输的打包形式。
验证数据是否完整的技巧:打开生成目录,你应该能看到如下关键子目录(不同版本名称略有差异):
matrix/——板框、层叠、图层定义steps/——图形数据,每个step下还有layers/目录netlist/——网络连接关系input/——原始图形和器件数据fonts/、wheels/等辅助目录
如果netlist/目录为空或者里面没有数据文件,说明网络表没有正确导出,这是最严重的故障级别,一定要回Allegro排查再重新导出。正常情况下,netlist目录里会有一个netlist_data文件,里面是每个网络及属性。
4. HyperLynx导入ODB++与仿真前准备
拿到ODB++压缩包之后,HyperLynx侧的导入也有讲究。很多人以为像打开Gerber一样直接双击文件就行,实际上HyperLynx对ODB++有一套自己的导入向导,用对了,后面仿真数据才会完整。
4.1 新建项目与导入入口
在HyperLynx板级仿真环境里(也就是BoardSim,不要打开LineSim),通过File > New Project创建新项目。弹出的向导会让你选择项目的信号来源,这里选"Use an existing board layout"之类的外部数据选项,然后在下拉列表里找到ODB++对应的类型。
我用的HyperLynx VX.2.6版本里,文件类型过滤器有ODB++(tgz)这样的选择项,直接选它,然后定位到你的压缩包即可。如果你拿到的是解压后的ODB++目录,同样可以选择该目录下的odb.tgz文件,这个文件是目录结构的入口,不能不选。
导入过程中,HyperLynx会弹出几个确认页面,比如单位、精度、层叠映射方式。这里单位要再次确认和你Allegro里的单位一致,尤其是板子尺寸较大时,单位错误会让坐标整体偏移。
4.2 叠层材料与电气参数的二次确认
ODB++的叠层信息导入后,HyperLynx通常能正确读取层数和厚度,但材料本身的电气参数(Dk、Df、电导率)不一定能全部同步过来。原因很简单:ODB++标准中,材料名是一个字符串,至于FR4到底对应Dk=4.2还是Dk=4.6,取决于PCB制造商的实际来料和设计规范,工具无法替你决定。
所以导入完成后,一定要打开HyperLynx的Stackup Editor,把每一层的介质参数重新核对一遍,尤其是高速信号相邻层的Dk值和损耗角正切。这里我有个习惯:导出的ODB++里如果Allegro叠层Dk填的是4.4,但根据板厂反馈实际材料Dk是4.2,我就在HyperLynx侧手动改成4.2。因为HyperLynx的阻抗计算和时延估算完全依赖这套参数,你在这里多花两分钟,后面波形仿真结果的可靠性完全不一样。
4.3 器件模型关联与提取前检查
ODB++本身只包含几何位置和封装信息,不会包含芯片的IBIS模型。HyperLynx需要你手动为每个器件分配模型,这一步无法自动完成,但可以批量操作。
在BoardSim的器件列表里,你可以按位号前缀批量选中同类器件,比如所有U开头的器件,然后统一关联IBIS模型文件。关联模型之前,建议先检查ODB++导入后的引脚编号是否和IBIS模型的引脚编号一致。很多芯片封装在Allegro里用的是A1、A2这样的引脚名,而IBIS模型里可能定义成1、2这样的数字序号,不一致会导致模型关联时大面积报错。
我在实际项目中遇到过一次:一个BGA648封装的FPGA,Allegro里封装引脚名是A1~W28这种坐标式命名,IBIS里却用的是连续数字。最后只能写一个脚本做映射表,批量转换引脚名称后再关联,才把模型怼上去。所以导入完成后,建议优先抽查几个关键器件的引脚匹配情况。
5. 高频报错完整排查链路
这一节应该是你从搜索引擎点进来的最初原因。我把过去几年碰到过的ODB++相关报错做了个整理,按出现频率排序,每一条都给出完整排查路径,而不是只扔一句"重装软件"就完事。
5.1 导出阶段报错:Return Code 1与非法字符溯源
现象:Allegro执行ODB++导出时报错,提示类似"ODB++ Inside exited with Return Code 1"或"Error while generating ODB++ database",没有更多细节。
根因:这个报错十次里有七八次是数据库中存在ODB++标准不允许的字符。ODB++对命名规范有严格约束,网络名、器件位号、padstack名称、图层名称中不能出现空格、括号、星号、问号等特殊字符,也不能以数字开头(部分版本约束)。
排查链路:
- 先在Allegro的Command窗口执行
tools命令或者打开Find面板,逐个检查网络名。 - 实际操作中,大量网络是通过原理图导入的,一些网标里可能带了非法字符比如
VCC(3.3V),括号就是罪魁祸首。 - 检查器件位号:很多从老库调出来的封装位号可能包含
-,比如U1-1,这种在ODB++里也可能报错。 - 图层名检查:你在Artwork里自定义的图层名如果有空格,比如
Top Solder Mask,ODB++映射时容易出问题。
解决:把非法字符替换成下划线。在Allegro里可以用Edit > Properties或者批量重命名功能处理。我遇到过最离谱的一次是板子上有个网络名叫VCC_1.8V_(注意末尾有个下划线),ODB++把它解析成空字符串导致报错,删掉末尾下划线后立即恢复正常。
5.2 导入后叠层为空或层数错乱
现象:HyperLynx成功导入ODB++,但打开Stackup Editor发现叠层列表是空的,或者层数比实际少了一半。
根因:这个问题的根源几乎都在Allegro的Cross-section设置。常见情况是某些层被设置为No Plane或者Skip层,或者介电层没有安排介质材料,ODB++导出时把这些层过滤掉了。
排查链路:
- 回到Allegro,打开Setup > Cross-section,逐行检查每一层的Type、Material、Thickness。
- 特别注意"Dielectric"类型层:如果在Allegro里相邻的信号层之间没有插入介质层,ODB++会把这两个信号层直接合并,HyperLynx里自然层数不对。
- 检查是否存在隐藏层,比如被设置为"Unused"的功能层。某些板子在改版时会把原来的第4层改为Unused,但物理上它仍然存在,ODB++导出后HyperLynx会把它丢掉,层数就少了一层。
解决:把Unused层重新指定为signal或plane,并在Thickness里填上实际板厚,重新导出即可。如果是介质层缺失,需要回到叠层设计里把介质补上。这里要注意介质层数必须等于"信号层数-1"或"信号层数-2"(取决于是否有core结构),如果介质数量对不上,HyperLynx导入后叠层结构一定是错的。
5.3 动态铜皮丢失与网络断开
现象:ODB++在HyperLynx里打开后,某个电源平面的铜皮大面积消失,或者铜皮边界异常,与该网络连接的过孔全部变成孤立节点。
根因:动态铜皮的边界不好。ODB++出口器处理动态shape时,依赖shape的边界多边形和void数据。如果你的动态铜皮边界没有完全闭合,或者边界自相交,导出后shape数据就会被丢弃。还有一种情况是dynamic shape的优先权设置问题,Allegro里高优先级的shape会覆盖低优先级shape,如果两个网络的大铜皮叠在一起,ODB++导出时可能只保留其中一个。
排查链路:
- 在Allegro里执行Shape > Select Shape or Void/Cavity,全选所有铜皮,检查是否有shape显示为未闭合状态。
- 使用Display > Element选择有问题的铜皮,查看它的Boundary数据,看孤岛数量是否异常。
- 重点检查混合层(Mixed Layer)上同一网络是否有多个重叠的动态shape。
解决:最简单的方法是先对每个网络执行Shape > Select Shape,然后使用Shape > Merge Shapes把同网络分散的铜皮合并成整块。如果是因为priority冲突,需要把低优先级的shape重新指派一个更高的priority值。合并完成后在Allegro里显示的铜皮边界应该非常干净,这时再导出ODB++基本就不会丢了。
5.4 焊盘偏移、丢失与封装名问题
现象:HyperLynx导入后,部分器件的焊盘位置相对于板框发生了明显偏移,甚至整个封装直接丢失。
根因:封装原点(Origin)不统一。ODB++标准要求器件封装必须有明确的参考原点,Allegro里各个封装的原点位置往往五花八门:有的在pin1,有的在封装中心,有的在左下角。虽然AD和Allegro在导出时会尝试补偿,但遇到设计不规范的老库封装,补偿逻辑就会出错。
排查链路:
- 在Allegro里打开封装编辑界面(File > Open,类型选Package Symbol),查看每个封装的Symbol Origin设置。
- ODB++导出时,所有封装的原点会被统一映射到全局坐标系。如果某个封装的body center和symbol origin偏差过大(比如超出封装本身尺寸),这个封装在HyperLynx里就会飞出去。
解决:批量修正不是好方案,因为有些库封装你不能乱动。我的做法是仅对有问题的那几个器件在Allegro里新建一个临时放置区,用Place > Update Symbols刷新,让系统重新计算原点后再导出。如果是需要长期使用的封装库,建议把库封装原点统一设置为pin1或几何中心,这是个一劳永逸的工程。
5.5 许可证与工作目录问题
现象:点击Export > ODB++之后,进程秒退,或者完全没反应,控制台无任何输出。
根因:这一类问题往往不在板子数据,而在环境。
- License是否包含ODB++相关特性。Allegro导出ODB++需要特定的功能授权,有些简化版license不带这个功能。
- 工作目录没有写权限,或者路径中有中文导致后台程序无法创建临时文件。
- 杀毒软件把后台转码进程拦截了。
排查链路:
- 检查工作目录:新建一个纯英文目录,设置为当前工作区。
- 用管理员身份运行Allegro,排除系统权限问题。
- 关闭杀毒软件实时防护,重新导出。
- 检查license:在Allegro启动时查看license server状态,确认已经加载了包含ODB++功能的feature。
如果以上都排查完还是不行,最后一步可以尝试在命令行手动运行ODB++出口器(路径在Cadence安装目录的tools\bin下,比如odb++_export.exe),通过命令行参数指定输入BRD文件路径,看能否绕过GUI进程拿到完整报错信息。这个方法帮我在好几台环境诡异的机器上定位到了问题根源。
6. 版本差异与团队协作中的ODB++实操心得
最后这部分算是我个人经验的沉淀,给在不同版本、不同团队环境里做这件事的朋友一些参考。
6.1 Allegro 16.6/17.2/17.4导出行为差异
Allegro 16.6的ODB++导出依赖ODB++ Inside插件,这个插件本质上是一个独立于Allegro进程运行的小工具。它的问题在于:一旦板子的数据库里有大量动态铜皮或复杂shape,插件的转码速度会非常慢,而且缺少进度条,你不知道它是在工作还是卡死了。破解办法:不要等,观察工作目录里是否在持续生成新文件,如果已经有以板名为前缀的目录在增长,说明进程正常。
Allegro 17.2之后,导出功能集成进主程序,速度提升明显,稳定性也好很多。但17.2有一个新问题:导出对话框里的选项更多了,很多人不知道默认设置下会丢失Allegro的自定义属性(property)。如果你在Allegro里定义了一些用户属性,比如公差、特殊工艺说明,需要ODB++带出去,务必在导出对话框里找到Property Mapping的选项,手动勾选需要转出的属性列表。
17.4版本在层数处理上做了优化,对埋盲孔结构的支持更完整。我实测下来,一个12层2阶HDI板,从17.2导出的ODB++到HyperLynx,埋孔的盲孔信息偶尔会丢失,但17.4导出就非常稳定。如果你的项目是HDI板且手头有17.4,优先用它导出。
6.2 与Gerber文件交叉核对的回归方法
ODB++导出之后,很多人直接就去导HyperLynx了,其实还有个很好的中间验证步骤:用ODB++做一次反向比对。
具体做法是:把同一块板子分别导出Gerber(RS-274X)和ODB++,然后打开Valor的免费ODB++ Viewer或者使用CAM350的ODB++导入功能,把两种数据叠在一起看。重点检查:
- 板框轮廓是否完全重合
- 顶层/底层走线是否一致
- 阻焊开窗、助焊层是否匹配
- 钻孔数量是否一致
这个方法能从物理层帮你确认ODB++数据没有发生图形变换错误。毕竟ODB++转码过程中,坐标换算这一步出问题的概率虽然低,但一旦发生,波及面是全局的。用Gerber做一次交叉验证,相当于给数据加了个双重保险。
我习惯的做法是导完ODB++、确认无报错后,花5分钟做这个交叉验证,再去HyperLynx做导入。看似多花时间,实际上帮我在一次使用ODB++做跨部门交付的项目里提前发现了一个全板X方向偏移0.05mm的严重问题,这个偏移在HyperLynx里几乎看不出来,但到了PCB制造端就是整体对位不良。
6.3 我常用的最终交付清单
经过多次项目磨合,我现在把ODB++交付给仿真团队或者回板厂时,都会附上一份简单的交付清单,确保后续环节一次通过:
| 序号 | 交付项 | 说明 |
|---|---|---|
| 1 | ODB++压缩包(.tgz) | 核心数据文件,命名含板名和版本 |
| 2 | 叠层参数表(Excel) | 每层材料、厚度、Dk/Df,防止工具间信息丢失 |
| 3 | 器件位号对照表 | BGA、连接器等特殊封装的位号与引脚名对照 |
| 4 | 网络关键属性说明 | 高速差分对、阻抗控制网络的清单 |
| 5 | 版本变更记录 | 本次ODB++对应的设计版本号和变更点 |
这张清单我一直沿用到现在。特别是第2项叠层参数表,因为ODB++里材料参数在跨工具传递时丢失概率最高,单独附一份Excel是成本最低的兜底手段。第3项在包含大量BGA器件时极其重要,能省掉模型关联时几小时的映射工作量。
最后说一个很多人忽略的小细节:在Allegro里导完ODB++后,不要立即对BRD做任何修改,而是过一段时间再用DBDoctor检查一遍。因为ODB++后台转码会创建大量临时进程和文件,如果立即把板子关掉或者做保存操作,偶尔会出现文件锁冲突导致BRD损坏。等个一两分钟,等后台进程完全退出后再继续操作,这是我见过不少人踩过、但官方文档从没提过的一个坑。项目赶的时候谁都着急,这个缓两分钟的节奏换来的是数据安全,非常值得。