首页 / 资讯中心 / 文章详情

Cadence Allegro 17.x降16.6转换工具安装与验证指南

Cadence Allegro 17.x降16.6转换工具安装与验证指南 ★ FEATURED ARTICLE
简介面向需要在不同Cadence Allegro版本间协作的PCB设计人员这套17.x降级到16.6的转换工具主要解决高版本工程在旧版环境中无法直接打开和编辑的兼容性问题适合跨团队交付或维护旧项目的工程师使用。压缩包共83个文件、约15.79MB包含52个xml配置与映射数据、19个dll运行库、4个exe程序以及txt说明、dat、env、cmx等辅助文件构成一套可执行的转换工具集合。已有15806人学习下载反映出该版本迁移场景受到一定关注。读者可借助其中的程序与配置了解降版本流程围绕数据解析、格式转换、特性映射和错误处理等环节完成工程迁移并在16.6环境下复核设计规则与兼容性减少重复搭建和手工排查成本。1. 十七版的板子打不开Allegro 17.x 降 16.6 的转换工具装在哪一步上周接手一块外协回来的板子对方用 17.4 出的图我这边产线和仿真环境还压在 16.6。双击 .brd弹窗只有一句话This file was created by a newer version of Allegro。改后缀、换 viewer、导 IDF 全试过没用。Cadence Allegro 17.x 降版本到 16.6 的转换工具就是为这一步准备的它做的不是“改个版本号”而是把 17.x 的数据库整个读出来按 16.6 能认的对象重建一遍。工具装不对最常见的下场是转换“成功”了打开一看铜皮没了、层叠错位、约束全丢比打不开更耽误事。这篇写给要接 16.6 老项目、手上却只有 17.x 环境的 PCB 和硬件同学从装到验证一步步走完。2. 装前对表17.x 与 16.6 的数据库差异和运行环境清单动手之前先把两件事弄清楚否则后面每一步都在猜。一是 .brd 为什么不能靠改后缀解决二是这套转换工具在你机器上到底依赖什么。这两件事弄明白了安装路径、环境变量、参数怎么填基本都是顺着推下来的。2.1 改后缀没用两个版本的 .brd 不是同一种东西.brd 不是一个文本文件它是一个二进制数据库里面有对象表、对象 ID、字段长度、字符串池、索引区。17.x 这一代往里加了不少 16.6 解析器根本不认识的东西新的动态铜皮参数集、更细的约束管理器结构、3D 模型引用、部分层的扩展属性。16.6 打开文件时先读头部的版本标识再按自己的表结构去解析一旦碰到未知的对象 tag直接判定文件非法连“部分打开”的机会都不给。所以降版本的本质是重建不是翻译。转换工具内部走的是一条固定链路先用 17.x 的运行时把源文件完整读进内存再按内置的对象映射表逐类降级遇到 16.6 没有对应物的对象就丢弃并在日志里记一笔最后用 16.6 的写库逻辑重新生成一份数据库并写入正确的版本标识。这个链路里任何一步被打断写出来的都是一份半成品——头部版本号写了、对象没写完16.6 打开就报 database has errors比直接拒绝更难看。常见的错误做法有三个我都见人踩过直接把 .brd 后缀改成别的再改回来什么都不会发生用第三方 viewer 打开再另存存出来还是 17.x 的库在 16.6 里用 Import 去导多数对象根本进不来。这些路子绕不开数据库结构这道墙工具该装还是得装。提示转换前一定保留原始 17.x 文件工具是覆盖式输出中途失败时源文件目录不要放工作目录里。2.2 转换工具的运行环境与依赖清单这份工具不是绿色单文件它要借 Allegro 的运行时去读写数据库所以机器上必须已经有能跑起来的 16.6 和 17.x。我一般按下面这张表逐项打勾缺哪一项就在安装前补上不要等报错了再回头找。项目要求说明操作系统Windows 10 64 位老机器上的 16.6 多为 32 位安装17.x 是 64 位两者共存没问题Allegro 16.6已安装且能独立启动转换后的验证、部分后处理依赖它Allegro 17.x已安装且能独立启动提供读取 17.x 数据库的运行时授权本机有可用的 Allegro 许可工具启动时会去取没有就停在自检阶段磁盘源文件体积的 3 倍以上中间文件、日志、输出各占一份路径全英文、无空格、无中文工具链里有多处按空格切参数的地方运行库VC 运行库齐全缺库的表现是双击闪退没有任何报错版本对应关系也值得提前看一眼源版本越高能保住的东西越少。17.0 和 17.2 的库跟 16.6 差异相对小17.4 因为对象模型改动更多转换时丢的东西也更多。下面这张表是我自己总结的经验值具体到每一块板还要看它用了哪些高级特性。源版本转换难度主要丢失项建议17.0低少量扩展属性基本可直接用17.2中部分动态铜皮参数、3D 引用转完核对铜皮17.4较高高级约束、铜皮参数、部分层属性转完必须重跑 DRC2.3 安装包解压后先认文件别急着双击拿到包先解压到一个临时目录把结构看清楚再往正式路径挪。包内通常分三块主程序目录、配置模板目录、脚本与批处理目录。主程序是转换入口配置文件决定转换行为脚本负责把工具挂到 Allegro 的菜单上或者做批量封装。路径作用是否需要改bin/主程序与动态库不改整体搬迁conf/配置模板含 downrev.ini改按项目复制一份script/菜单注册与批处理脚本按需改路径doc/参数说明与映射表只读log/默认日志输出建议改到工作盘看清结构再动手的好处是后面出问题你能快速判断是主程序没起来、配置没生效还是脚本路径写错了。这三类故障的表现完全不一样混在一起排查最费时间。3. 安装与部署把转换工具落到本机并接上 Allegro安装这一章的核心不是“复制文件”而是让三个东西互相认识工具、Allegro 运行时、你的工作目录。路径规划错了后面全是玄学问题。3.1 目录规划不要装在 Program Files 里我一般把这类工具统一放在一个独立的 EDA 工具盘下路径短、全英文、不带空格。Program Files 有权限问题桌面路径带中文用户名D 盘根目录又容易被各种同步盘扫。定好一个根后面所有配置都相对它来写。:: 建目录路径按自己的盘符调整规则只有一条全英文、无空格 mkdir D:\eda\allegro_downrev mkdir D:\eda\work\brd_17x mkdir D:\eda\work\brd_16x mkdir D:\eda\work\log :: 把解压出来的 bin、conf、script、doc 整体挪进去 xcopy /E /I /Y D:\temp\downrev_pkg\* D:\eda\allegro_downrev\这段做完目录结构应该是D:\eda\allegro_downrev\bin、conf、script平级。工作目录单独放在D:\eda\work下源文件、输出、日志三分离好处是批量转换失败时你能一眼看出是哪个环节没产物而不是所有东西混在一个文件夹里互相覆盖。注意目录名里有空格时工具内部拼接命令行会少引号表现是“参数缺失”但命令看起来完全正确这类问题最难查。3.2 环境变量三个必须设的一个可选的工具靠环境变量找运行时和配置不设也能启动但会去猜路径猜错了就是一连串看不懂的报错。我习惯在系统变量里加三条再补一条可选的日志级别。:: 三个必设变量 setx ALG_DOWNREV_HOME D:\eda\allegro_downrev setx ALG_WORK_ROOT D:\eda\work setx ALG_CONF_DIR %ALG_DOWNREV_HOME%\conf :: 可选日志级别调试期开 DEBUG稳定后改 INFO setx ALG_LOG_LEVEL INFOALG_DOWNREV_HOME是工具根目录主程序靠它找同级的 conf 和 docALG_WORK_ROOT是默认工作区配置里写相对路径时以它为基准ALG_CONF_DIR单独抽出来是为了同一个工具能跑多套配置——比如一套给 17.2 的板子一套给 17.4 的板子参数不一样。ALG_LOG_LEVEL设成 DEBUG 时日志会大到几十兆只在排查阶段开。设完变量要重开一个命令行窗口才生效很多人设完直接在原来的窗口里测发现没反应又回头怀疑变量名写错了。setx写的是注册表只对新进程有效这一点记牢能省半小时。3.3 挂到 Allegro 菜单让工具在需要的地方出现工具有两种用法命令行直接跑或者挂进 Allegro 的菜单里画图时右键就能调。后者更适合设计同学前者适合批量。挂菜单靠的是启动时加载的脚本通常放在工具的 script 目录下内容是一段注册指令指向主程序路径。# menu_downrev.il —— 注册到 Allegro 菜单路径改成自己的 axlCmdRegister(downrev16 downrevRun) procedure(downrevRun() let((srcFile outDir cmd) srcFile axlCurrentDesign() outDir strcat(getShellEnv(ALG_WORK_ROOT) /brd_16x) cmd strcat(getShellEnv(ALG_DOWNREV_HOME) /bin/downrev.exe -i srcFile -o outDir -cfg getShellEnv(ALG_CONF_DIR) /downrev.ini) shell(cmd) ) )这段逻辑很简单注册一个叫downrev16的命令执行时取当前打开的板子路径拼出完整的转换命令行交给系统去跑。axlCurrentDesign()拿的是当前设计getShellEnv读的就是上一步设的环境变量——这也是为什么变量必须设在系统级而不是临时窗口里。脚本要放在 Allegro 启动时会扫描的目录具体位置以你本机 16.6 和 17.x 的安装约定为准放错位置的表现是菜单里始终不出现这个命令。如果不想动菜单直接用命令行也完全可以第 4 章的批量脚本就是纯命令行路线。两条路线共用同一份配置文件不存在行为差异。3.4 首次启动自检先看它认不认环境装完别急着转正式文件先用-v之类的自检参数跑一次。多数这类工具都带一个版本与环境打印开关输出里会列出工具版本、找到的运行时路径、读到的配置目录、授权状态。:: 自检确认运行时和配置都被正确识别 D:\eda\allegro_downrev\bin\downrev.exe -env输出里重点看三行Runtime Path 指向的必须是你本机真实存在的 17.x 安装目录Config Dir 必须等于ALG_CONF_DIRLicense 一栏必须是 OK 或者可用的状态。任何一行不对先解决它不要往下走。我见过的最典型情况是 Runtime Path 指到了一个已经卸载的旧版本目录工具能启动一读文件就崩报错还全是底层库的名字。4. 配置转换参数一份能跑通的 downrev 配置配置决定转换的“取舍”。默认模板能跑但跑出来的板子往往缺点东西原因是模板按最保守的方式处理遇到拿不准的对象一律丢弃。想让它按你的项目来就得知道每个开关在管什么。4.1 配置文件逐项拆解; downrev.ini —— 转换主配置按项目复制一份再改 [General] SourceVersion 17.4 ; 源库版本17.0 / 17.2 / 17.4填错会直接拒绝 TargetVersion 16.6 ; 目标版本固定 16.6 WorkDir D:/eda/work ; 工作目录必须无空格无中文 Overwrite false ; 输出同名文件是否覆盖调试期建议 false [Convert] RebuildShape true ; 铜皮强制重建false 时容易出空心铜 DropUnsupported true ; 丢弃 16.6 不支持的对象并记日志 KeepNetClass true ; 保留网络类约束能救回来一部分 RebuildDRC false ; 转换期不跑 DRC留给 16.6 里手动跑 TearDrop keep ; 泪滴处理keep / drop [Output] Dir D:/eda/work/brd_16x LogDir D:/eda/work/log LogLevel INFO ; DEBUG 只在排查时开 Report true ; 生成转换报告列出丢弃对象清单逐项说一下取舍逻辑。SourceVersion必须跟源文件实际版本一致填低了工具会用错映射表结果是一堆本来能保住的对象被当成未知类型丢掉填高了直接解析失败。RebuildShape我建议永远开 true17.x 的动态铜皮参数 16.6 认不全不重建就是一块空壳打开看着有轮廓实际没有填充。DropUnsupported和Report是一对前者负责丢后者负责告诉你丢了什么。两个都开转换完先看报告比打开板子肉眼找问题快得多。KeepNetClass是能救约束的少数开关之一网络类保住了16.6 里的线宽线距规则还能重建一部分。RebuildDRC我一般设 false。转换阶段跑 DRC 意义不大因为约束还没在 16.6 里重新生效跑出来的结果全是噪声白白消耗时间。留到 16.6 里打开板子、确认层叠和规则后再跑结果才可信。TearDrop设 keep 还是 drop看你的板子。有泪滴的板子在版本转换后泪滴形状经常对不上焊盘keep 之后需要人工看一眼drop 更干净但要重新补。我一般先 drop转换稳定后再说。提示配置文件里所有路径统一用正斜杠反斜杠在部分解析器里会被当转义符吃掉表现为“路径不存在”但文件明明在那。4.2 单文件转换先把一块板子跑通配置写好先拿一块不太重要的板子试。命令行参数不多记住输入、输出、配置三件套就够。:: 单文件转换完整路径参数按行读更清楚 D:\eda\allegro_downrev\bin\downrev.exe ^ -i D:\eda\work\brd_17x\demo_board.brd ^ -o D:\eda\work\brd_16x\demo_board.brd ^ -cfg D:\eda\allegro_downrev\conf\downrev.ini ^ --log D:\eda\work\log\demo_board.log-i是源文件必须存在且是真的 17.x 库-o是输出文件目录不存在时有的版本会自动建有的直接失败我习惯事先建好-cfg指向配置文件不写就用工具自带的默认模板行为会和你预期的不一样--log单独指定日志方便一次转多块板时按文件名对号入座。跑完先别打开输出文件先看日志尾部。正常结束会打印一行统计读入对象数、转换成功数、丢弃数、耗时。丢弃数是关键指标17.2 的板子一般在几十到几百之间17.4 可能上千。数量级明显不对比如一块小板上万说明映射表用错了多半是SourceVersion填错。4.3 批量转换串行跑别贪并发一堆板子要转的时候最容易犯的错是开多进程并发。这类工具会去抢同一个授权并发数一高就互相踢表现是随机某几块板失败重跑又好了非常迷惑。我一般串行跑失败重试两次把失败名单单独记下来。#!/usr/bin/env bash # 批量降版本串行执行失败重试两次失败清单单独落盘 SRCD:/eda/work/brd_17x OUTD:/eda/work/brd_16x LOGD:/eda/work/log CFGD:/eda/allegro_downrev/conf/downrev.ini TOOLD:/eda/allegro_downrev/bin/downrev.exe mkdir -p $OUT $LOG : $LOG/failed.txt for f in $SRC/*.brd; do name$(basename $f .brd) ok0 for try in 1 2; do $TOOL -i $f -o $OUT/$name.brd -cfg $CFG \ --log $LOG/$name.log { ok1; break; } echo retry $try: $name $LOG/retry.txt sleep 3 done [ $ok -eq 0 ] echo $name $LOG/failed.txt done echo done, failed: $(wc -l $LOG/failed.txt)这段脚本的逻辑很直白遍历源目录下所有 .brd对每个文件最多尝试两次中间停三秒让授权释放成功的直接过两次都失败就写进 failed.txt。最后打印失败数量用来判断是整体环境问题还是个别文件问题——如果失败清单里是连续的一批文件名基本可以断定是授权或者运行时掉了而不是文件本身的问题。sleep 3不是凑数转换进程退出后授权释放有延迟紧接着跑下一个容易撞上。批量任务我宁可多花十几秒也不想第二天早上看到一半文件是坏的。5. 避坑与排查五条踩过的记录下面这几条都是我在真实转换里撞过的按现象、原因、解决三段记遇到同类问题可以直接对号。5.1 转换成功打开铜皮是空的现象日志显示成功16.6 打开后铜皮区域只有轮廓没有填充DRC 一片红。原因17.x 的动态铜皮参数 16.6 不支持工具按原样搬运了参数16.6 读不懂就当成未填充状态。解决配置里RebuildShape true让工具在输出阶段按 16.6 的规则重建铜皮。打开后再手动执行一次铜皮 smooth把边界收敛一遍。这一条踩过一次之后我配置模板里这个开关就没关过。5.2 转换到一半退出日志只有一行现象大板子转换到 60% 左右进程消失日志里最后一行停在某个对象类型上没有任何错误信息。原因工作目录或者源文件路径里带了中文或空格工具内部拼接命令行时被截断读到一个不存在的路径就退出了。解决把所有路径换成全英文短路径源文件先复制到工作目录再转。这类问题的迷惑性在于小文件能过大文件才崩让人误以为是内存不够。5.3 16.6 打开报 database has errors现象文件能双击加载到一半弹出数据库错误板子打不开。原因转换过程被中断过头部版本标识已经写入对象数据没写完。常见于手动 CtrlC或者磁盘写满。解决删掉输出文件重转转换期间不要中断。磁盘空间按源文件的 3 倍预留中间文件比你想的大。5.4 批量跑一半集体失败现象前二十块正常后面全部失败错误提示都跟授权有关。原因并发或者连续调用导致授权被占满后面的进程拿不到许可直接退出。解决改成串行两次尝试之间留几秒间隔。工具本身没有排队机制得靠脚本控制节奏。5.5 层叠和阻抗规则对不上现象板子打开了层数对但层叠顺序和阻抗规则跟原图不一致。原因约束管理器的结构在两个版本间差异较大转换只做了对象级映射规则语义没法完全对齐。解决转换后手工核对层叠表把阻抗规则按 16.6 的方式重建一遍。这一步没法省我一般把它写进转换后的检查清单跟 DRC 一起做。6. 装完怎么验证拿一块已知的板子做回归工具装好、参数配好最后一步是证明它真的能跑通而不是“看起来跑通了”。我的做法是固定一块已知的基线板——层数、器件数、网络数都记录在案的那种——每次改配置或者换工具版本都先拿它跑一遍用固定清单逐项对。验证不看感觉看数字。转换前后各导一份器件与网络清单直接比数量层叠表逐层对铜皮看填充率最后在 16.6 里跑一次 DRC看违规数量是否在可解释范围内。检查项怎么查合格标准器件数导出器件清单比对与源文件完全一致网络数导出网络清单比对差值不超过手工添加的测试点层数与层序打开层叠管理器逐层一致介质厚度可对铜皮视图检查填充无空心、无碎片DRC16.6 内跑一次违规项均可解释光绘出一次 Gerber 比对层数与命名规则正确比对清单可以用一段简单脚本处理把两份清单排序后 diff差异行直接打印出来几十块板也能批量做。#!/usr/bin/env bash # 比对转换前后的器件清单差异直接输出 diff (sort before_devices.txt) (sort after_devices.txt) device_diff.txt # 行数为 0 视为通过非 0 时逐行看是新增还是丢失 if [ ! -s device_diff.txt ]; then echo PASS: 器件清单一致 else echo CHECK: 有差异见 device_diff.txt fi这段没什么技巧就是把两份清单排序后求差集。-s判断文件是否为空为空说明完全一致。注意排序要统一否则同一个器件因为顺序不同会被当成差异白折腾半天。真正要盯的是铜皮和 DRC 这两项。数量类的东西脚本能替你判断铜皮填充和规则语义不行必须在 16.6 里打开看一眼尤其是 17.4 转下来的板子铜皮参数丢得最多。从那以后我每次装这类转换工具都会先拿基线板走一遍完整回归通过之后才敢碰正式项目文件。工具装没装对不是看它能不能启动而是看它转出来的板子在目标版本里能不能直接投产。希望这套流程能帮到你少在“转换成功但打不开”这种坑里耗时间。本文还有配套的精品资源点击获取
阅读完成 · 觉得有帮助?
咨询建站