资讯动态

IC617旧PDK迁移:CDB转OA与cdb2oa避坑

发布时间:2026/10/27 5:06:26 来源:尧图企业网站定制
简介一份面向Cadence Virtuoso IC617使用者的实操型PDF文档聚焦旧工艺库从CDB数据迁移到OpenAccess格式这一常见痛点早期在IC514上使用的PDK放到IC617中打开时常出现ddUpdateLibList相关警告提示正在对CDB数据运行OA可执行程序导致库无法正常加载。文档围绕cdb2oa转换展开兼顾命令行调用与Conversion Toolbox中CDB to OpenAccess Translator两种方式说明如何指定cds.lib、将转换结果保存到home目录并回填至原PDK同时给出重启Virtuoso后的检查验证思路涉及库路径设置、文件替换和常见警告处理适合模拟电路与版图设计工程师、PDK库维护人员参考。压缩包内仅1个PDF文件约697KB篇幅精简、便于随查随用可作为工艺库升级与环境迁移时的排错参照对需要把旧工艺库升级到IC617的读者能减少反复试错成本并快速定位转换失败原因。目前已有1556人学习。1. 别急着删库IC617 打开旧 PDK 先撞上的那行 CDB 警告从旧机器整目录拖过来的 0.35um 工艺库在 IC514 上跑了几年都相安无事换到 IC617 上执行virtuoso CIW 窗口先刷出一屏Warning: ddUpdateLibList: It appears that you are trying to run an OA executable on CDB data. Library oldpdk035 contains file /home/user/pdk/oldpdk035/prop.xx which is CDB data.库还能在 Library Manager 里列出来但符号一打开就报错原理图里器件参数读不出来。原因不复杂IC617 走的是 OpenAccessOA数据模型而老工艺库存的还是 CDB 格式一个 OA 的可执行程序去读 CDB 的数据必然对不上。把 CDB 转换为 OA 就是这道坎的解法用 IC617 自带的 cdb2oa 和 Conversion Toolbox 就能做完不必重装 PDK。这套流程适合手上压着旧工艺库、又必须升到 IC617 的版图与电路开发者也适合要给整个组做环境迁移的运维。2. 装什么版本IC617 的 OA 环境与 cdb2oa 工具链盘点动手转换前先把环境摊开看一遍。我见过太多人一上来就开转换工具跑到一半发现 virtuoso 版本不对、cdb2oa 根本不在 PATH 里白白浪费一个下午。这一章的目标只有一个确认你机器上的 IC617 是完整安装转换工具确实落地了环境变量在打开终端那一刻就生效。2.1 IC617 最小环境清单与版本对照转换这件事对版本其实不挑只要是 IC617 自带的工具链就行但下面这几样必须齐。缺一样转换中途就会以各种看不懂的报错收场。组件版本/形态用途检查命令Virtuoso 主程序IC617IC6.1.7 系列启动 CIW、Library Manager 与转换工具virtuoso -W看版本横幅cdb2oa随 IC617 一起安装真正执行 CDB 到 OA 的数据转换which cdb2oa转换工具箱Conversion Toolbox图形化驱动 cdb2oa看进度和日志CIW 菜单 Tools 下可见旧工艺库CDB 格式含prop.xx被转换的源数据ls pdk/prop.xx重新打开 Virtuoso 的方式命令行virtuoso 验证转换结果CIW 无 CDB 警告判断一个库到底是 CDB 还是 OA最省事的办法是看目录里有没有prop.xx这个属性文件。有这个文件基本可以判定是 CDB 库转换之后它应该消失如果转换完prop.xx还躺在里面IC617 就会继续抛前面那行警告这一点在后面的避坑章节还会再提。版本上唯一要注意的是别混装。机器上如果同时存在 IC514 和 IC617两个版本的环境变量、license 端口、库路径很容易串味。我一般会把它们写进两个独立的 shell 脚本用哪个 source 哪个绝不在同一个.bashrc里同时 export。提示转换前先在 CIW 里Help - About确认一次版本别只信which virtuoso指过去的那个。2.2 环境变量与 Virtuoso 启动把 PATH 和库路径配到位转换工具是从 Virtuoso 里调起来的所以 Virtuoso 本身必须先能干净启动。下面这份环境脚本是我在 IC617 上惯用的最小集合写进~/eda/ic617.sh每次开新终端 source 一下。# ~/eda/ic617.sh —— IC617 最小启动环境 export CDS_INST_DIR/opt/eda/IC617 # IC617 安装根目录按实际路径改 export PATH$CDS_INST_DIR/tools/bin:$CDS_INST_DIR/tools/dfII/bin:$PATH export CDS_LIC_FILE5280lic-srv # license 端口服务端按实际改 export CDS_Netlisting_ModeAnalog # 网表模式模拟流程保持 Analog export CDS_LOG_PATH$HOME/cds_log # 日志集中放转换出错时好翻 mkdir -p $CDS_LOG_PATH cd $HOME/work virtuoso CDS_INST_DIR是整棵安装树的根PATH 里那两个 bin 目录缺一不可——tools/bin放的是 cdb2oa 这类独立可执行程序tools/dfII/bin放的是 virtuoso 主程序。CDS_LIC_FILE写成端口主机的形式端口不对 Virtuoso 会直接起不来而不是报权限错误这点很容易误判。CDS_LOG_PATH是给自己留的后路转换这种一次性操作日志散落在各个目录里等于没有日志。启动之后先别急着开工具在 CIW 里敲一句getVersion()能正常返回版本号说明 license 和环境都对上了。这一步花三十秒能省掉后面半小时的排查。2.3 确认 cdb2oa 与转换工具箱就位在终端里直接验证一次# 确认可执行文件位置与帮助信息 which cdb2oa cdb2oa -h 21 | head -20 # 确认 Conversion Toolbox 的菜单脚本存在 ls $CDS_INST_DIR/tools/dfII/etc/tools/ | grep -i convwhich cdb2oa有输出说明 PATH 配对了cdb2oa -h能把参数列表打出来说明动态库加载没问题——如果这里报error while loading shared libraries那就是LD_LIBRARY_PATH没带上 IC617 的库目录export LD_LIBRARY_PATH$CDS_INST_DIR/tools/lib:$LD_LIBRARY_PATH补上再试。第三条是看转换工具箱的菜单描述文件在不在这个目录名在不同小版本里可能叫conv或conversiongrep -i conv是为了两种情况都能命中。三条都过了环境这一关就算过了。接下来的活是把源数据收拾干净。3. 转换前的准备备份、cds.lib 收敛、保存到 home转换工具做的事情本质上是「读 cds.lib 找到库逐个 cell 重写成 OA 结构」。它认的是 cds.lib 里的绝对路径路径写错、库定义分散在好几个文件里、或者没备份就让它直接往原目录写都是翻车的起点。这一章的三件事顺序不能换。3.1 备份 PDK一条 tar 命令换来后悔药先说最要紧的。转换工具默认会往库目录里写东西中途中断还可能留下半成品。我见过有人转换失败后直接删了prop.xx想「手动修复」结果整个工艺库的参数全丢只能找原厂重新要一份。# 整库打包文件名带上日期别覆盖历史备份 mkdir -p /home/user/backup cd /home/user/pdk tar -czf /home/user/backup/oldpdk035_$(date %Y%m%d).tar.gz oldpdk035 # 顺手记一份转换前的目录指纹转完可以对比 find oldpdk035 -maxdepth 2 -type d | sort /home/user/backup/oldpdk035_tree_before.txt第一行建备份目录第二行tar -czf把整个 PDK 目录压成一个包$(date %Y%m%d)保证同一天多次备份不会互相覆盖——我一般一天之内动手两次以上就会加时分比如$(date %Y%m%d_%H%M)。第三条目录树快照看着多余实际很有用转换完拿diff一比哪些子目录被新建、哪些被清空一目了然比翻日志快。备份包建议放到另一个磁盘或者至少另一个挂载点别和 PDK 放同一个分区。同一分区上做备份等于没备份。3.2 收敛 cds.lib把库路径改成绝对路径、把 prop.xx 摆到明面上cds.lib 是这个流程的核心输入。转换工具打开时只要这个文件它顺着里面的DEFINE和INCLUDE一条条找库。所以先把它收敛成一份「扁平」的清单全绝对路径、少用嵌套 INCLUDE、一眼能看完。原文件里常见这种写法-- 转换前路径混用、INCLUDE 套 INCLUDE INCLUDE ./../common/tech.lib DEFINE oldpdk035 ./oldpdk035 DEFINE analogLib $CDS_INST_DIR/tools/dfII/etc/cdslib/artist/analogLib SOFTINCLUDE /home/user/pdk/extra.lib收敛之后-- 转换后工艺库单独列路径全部绝对 DEFINE oldpdk035 /home/user/pdk/oldpdk035 DEFINE oldpdk035_tech /home/user/pdk/oldpdk035_tech -- 系统库保持指向安装目录别拷进 PDK 里 DEFINE analogLib /opt/eda/IC617/tools/dfII/etc/cdslib/artist/analogLib DEFINE basic /opt/eda/IC617/tools/dfII/etc/cdslib/basicDEFINE 库名 绝对路径是唯一需要转换工具看懂的行把相对路径./oldpdk035改成绝对路径是为了避免「你在 A 目录启动工具、工具却按 B 目录解析相对路径」这类玄学问题。系统库analogLib、basic保持指向安装目录不要拷进 PDK 里否则转换工具可能顺手把它们也当源库处理白白多跑一遍。INCLUDE尽量展开成DEFINE实在要保留就换成SOFTINCLUDE——INCLUDE找不到文件会直接中止SOFTINCLUDE找不到只是跳过转换场景下后者更抗造。改完cds.lib之后把 PDK 根目录下的prop.xx位置记下来ls -l /home/user/pdk/oldpdk035/prop.xx。它存在说明这个库确实是 CDB 数据转换是必须做的它不存在而警告还在那多半是 cds.lib 指到了另一个残留目录。3.3 在 Virtuoso 里 Save As 把 cds.lib 存到 home 目录这一步是原流程里最容易被跳过、又最容易出错的地方。转换工具默认从当前工作目录找 cds.lib而多数人是在 PDK 目录下启动 Virtuoso 的直接改库目录里的那份文件等于把源数据和配置文件绑死在一起。正确做法是先让 Virtuoso 认识库再把这份路径清单另存一份到 home 目录CIW 菜单路径 Tools - Library Manager Library Manager 窗口 - File - Save As 目标目录选 /home/user文件名写 cds.lib OK存完之后确认一下# 检查 home 下的 cds.lib 内容与时间戳 ls -l /home/user/cds.lib grep -c ^DEFINE /home/user/cds.libgrep -c数一下 DEFINE 条数和你预期认识的库数量对得上说明保存的是完整清单而不是被过滤过的子集。这一步的实质是把「库路径定义」从 PDK 目录里剥离出来转换工具读的是 home 下这份写出去的 OA 库也落在独立目录里源数据保持只读状态——这才有回滚的余地。注意Save As 之后别再回头改 PDK 目录里那份旧的 cds.lib。两份文件同时存在时转换工具读到哪份完全取决于你从哪个目录启动很容易出现「改了半天没生效」。4. 跑通转换Conversion Toolbox 图形流程与 cdb2oa 命令行前面三章都是铺垫这一章是真正把 CDB 数据变成 OA 数据的动作。图形界面适合第一次做、需要盯着进度命令行适合批量、适合写进脚本。两条路我都走过先说图形这条。4.1 启动 Conversion Toolbox打开 CDB to OpenAccess Translator在 home 目录下启动 Virtuoso这是有讲究的——转换工具会以启动目录为基准解析相对路径在 home 下启动输入的 cds.lib 和输出的库目录都在可控范围内。cd /home/user virtuoso 起来之后在 CIW 里依次点CIW - Tools - Conversion Toolbox Conversion Toolbox 窗口 - CDB to OpenAccess TranslatorConversion Toolbox 里挂着好几个转换器CDB 到 OA、LEF 到 OA 之类认准CDB to OpenAccess Translator这一项。如果菜单里根本看不到 Conversion Toolbox回到 2.3 节检查那个etc/tools目录多半是安装时没勾选转换组件得让管理员补装。4.2 路径选取 cds.lib 并开始转换打开转换器后只有一个关键输入cds.lib 的路径。填 3.3 节存到 home 的那份CDB to OpenAccess Translator 面板 Input cds.lib : /home/user/cds.lib 输出选项 : 保持默认输出到各库同级目录 点 OK / Apply 开始点下去之后会弹一个进度窗口逐个库、逐个 cell 地转换。这个阶段最忌讳两件事一是手动 CtrlC 打断二是同时用 Virtuoso 打开同一个库。中断会在库目录里留下半写状态的文件再转一次可能报「目标已存在」同时打开则可能撞文件锁。等待期间可以另开一个终端盯日志# 盯转换日志的尾部看当前在转哪个库 tail -f $CDS_LOG_PATH/cdb2oa*.log日志里正常会出现Converting library 库名、Converting cell cell 名这类行。如果某一行之后长时间没有新内容别急着判断卡死先看ps -ef | grep cdb2oa进程还在跑就继续等进程没了但窗口没关说明已经异常退出转去第 5 章排查。转换完成后回到 home 目录会看到一个或多个新生成的非 CDB 库目录名字通常带后缀或与源库同名但位于输出路径下。原流程里下一步是把它复制回原 PDK# 先删旧库再把转换好的库拷进去 cd /home/user/pdk mv oldpdk035 oldpdk035_cdb_bak # 不直接 rm留一份可回滚 cp -r /home/user/oldpdk035 ./oldpdk035 # 拷回原位 ls -l oldpdk035/prop.xx # 应该提示 No such file第一行用mv而不是rm -rf是把旧库「挪走」而不是「销毁」出问题还能挪回来。第三条ls是用它报错来验证——prop.xx不存在了才说明这个库真的变成 OA 结构了。如果它还在说明拷贝时把旧文件一起带过来了重新拷一次别手软。4.3 命令行 cdb2oa批量与脚本化场景图形界面一次只能盯着一个库组里要迁五六个旧 PDK 的时候我一般直接用 cdb2oa。基本形态是这样# 单库转换-i 指定源库目录-o 指定输出目录-log 落日志 cdb2oa \ -i /home/user/pdk/oldpdk035 \ -o /home/user/oa_out/oldpdk035 \ -log /home/user/cds_log/cdb2oa_oldpdk035.log # 批量把要转的库列进清单循环跑 for lib in oldpdk035 oldpdk018 analog_legacy; do cdb2oa -i /home/user/pdk/$lib \ -o /home/user/oa_out/$lib \ -log /home/user/cds_log/cdb2oa_$lib.log || echo $lib 转换失败 /home/user/cds_log/failed.txt done-i指向被转换的库目录-o是输出目录两者分开写是刻意的——失败时源数据完好无损重跑不用重新备份。-log指定日志路径批量循环里每个库一份独立日志出问题能直接定位到库而不是翻一锅粥。|| echo ... failed.txt是失败兜底某个库转失败不会中断整批事后看failed.txt就知道该回头处理谁。关于参数名不同小版本之间cdb2oa的选项拼写并不完全一致有的版本用-cdslib指定 cds.lib、有的用-i直接给库目录。动手前花十秒钟跑一次cdb2oa -h比照着你机器上的实际输出来写别照抄别人博客里的参数——这条血泪经验值一次通宵。4.4 收尾核对目录结构、文件类型与权限转换和回填做完先别开 Virtuoso 庆祝。花两分钟核对三件事# 1. 目录里没有 CDB 残留 find /home/user/pdk/oldpdk035 -maxdepth 1 -name prop.xx -o -name *.cdb # 2. 关键子目录还在 ls /home/user/pdk/oldpdk035 | head -20 # 3. 权限对普通用户可读 ls -ld /home/user/pdk/oldpdk035第一条find同时找prop.xx和*.cdb输出为空才算干净。第二条看子目录是否完整——一个正常的工艺库至少要有 symbol、layout、techfile 相关的目录少了哪个后面打开就会缺东西。第三条看权限如果转换时用了sudo生成的文件属主可能变成 root普通用户进去只能读不能存后面 Check and Save 会失败。真遇到了就chown -R user:group oldpdk035修回来。5. 避坑与排查五条踩坑记录转换流程本身不复杂坑都在边角上。下面五条是我和同事在 IC617 上真实撞过的每条按现象、原因、解决写照着对号入座能省不少时间。5.1 转换完成但 Virtuoso 依旧报 OA executable on CDB data现象明明跑完了转换重新打开 VirtuosoCIW 里还是那行ddUpdateLibList: It appears that you are trying to run an OA executable on CDB data库名和文件路径一模一样。原因两种可能。一是prop.xx没被清掉转换工具只处理数据不会主动删除这个标记文件二是 Virtuoso 启动时读的 cds.lib 不是你以为的那份DEFINE oldpdk035还指在旧目录上。解决先find 库目录 -name prop.xx找到就删掉再启动找不到就grep oldpdk035 ~/cds.lib确认路径确实指向转换后的新目录。两个方向都排掉警告才会消失。5.2 转换工具选了 cds.lib 就卡在 0%进度条不动现象面板上路径填好了点 OK 之后进度条一直停在 0%日志里连第一行Converting library都没出现。原因多数情况是 cds.lib 里的INCLUDE指到了一个不可达的路径工具在解析阶段就挂了少数情况是库目录权限不足工具读不到目录内容又没把错误抛到界面上。解决把 cds.lib 里的INCLUDE全展开成DEFINE再试一次同时ls -l 库目录确认当前用户有读和执行权限。如果 cds.lib 里定义了网络路径或已卸载的挂载点先把那一行注释掉——工具不会跳过它会一直等。5.3 库能打开了但 symbol 打不开、器件参数全空现象Library Manager 里能看到库和 cell 名双击 symbol 报错或者打开后图形框架在、参数编辑框里一片空白。原因转换时只迁了主库配套的 techfile 库或者参数定义所在的附属库没跟着转。原流程里DEFINE只写了一条主库路径附属库被漏在外面。解决回到 cds.lib把 PDK 相关的库全部列进DEFINE重新跑一遍转换参数仍然缺的话需要单独 attach 一次 techfile。这一步我一般会在转换前就把 PDK 目录下所有cds.lib里出现的库名列全逐条确认别靠记忆。5.4 拷回 PDK 后新库「好像没生效」现象明明已经把转换好的库拷进 PDK 目录替换了旧库打开 Virtuoso 看到的还是旧数据、旧 cell。原因一是 Virtuoso 进程没完全退出.CDS之类的缓存还在内存或临时目录里二是拷贝时cp -r把源目录嵌套进去了实际路径变成oldpdk035/oldpdk035工具读的还是外层那份。解决先ps -ef | grep virtuoso杀掉残留进程再启动然后ls oldpdk035/oldpdk035检查有没有多套一层有就挪出来。拷贝这类操作我习惯用cp -rT src dst-T会把目标当目录内容处理不会意外嵌套。5.5 转换跑到一半中断之后再转就报目标已存在现象转换中途因为磁盘满或误操作中断重跑时提示输出目录已存在或某个 cell 写入失败。原因中断留下了半成品目录工具认为目标已占位不肯覆盖。解决df -h先确认磁盘空间通常中断就是空间不够引起的不解决空间问题重跑多少次都一样。空间够了就把输出目录整个删掉重来——rm -rf /home/user/oa_out/oldpdk035然后从 4.3 节的命令重新跑。源库有备份在这一步没什么心理负担。6. 装完怎么验证让转换后的 OA 库在 IC617 里真正跑起来转换做完不等于跑通。我判断一套 PDK 是否迁成功看的是「从 PDK 目录启动 Virtuoso 之后一个完整的 cell 能不能走完打开、编辑、保存三步」。下面这套验证流程五分钟左右能走完。先在 PDK 目录下启动而不是 homecd /home/user/pdk virtuoso 启动目录换成 PDK是为了验证「日常使用场景」——同事打开 Virtuoso 就是从库目录进的在 home 下验证通过、到 PDK 下报错的情况并不少见。启动后先看 CIW没有任何ddUpdateLibList字样才算第一关过了。接着打开 Library Manager找到oldpdk035右键Properties看库的属性里数据格式一项。这里显示为 OpenAccess 才算真正迁完如果还标着 CDB说明前面某一步的回填没落到位。然后挑一个典型 cell 做完整动作。挑的时候别挑最简单的 inverter挑一个带参数化器件、带 symbol 和 layout 的单元覆盖度更高验证项操作通过标准库格式Library Manager 右键 Properties显示 OpenAccess符号打开双击 cell 的 symbol 视图图形完整无报错弹窗参数读取编辑器件属性CDF 参数有值、可修改版图打开打开 layout 视图层次正常展开无缺失 reference保存回路改动后 Check and Save无 errorCIW 无异常输出版图那一项最容易出问题。转换后的库如果 techfile 没挂上layout 能打开但图层显示全灰DRC 也跑不了。真遇到了就在 Virtuoso 里Tools - Technology File Manager重新 attach 一次 PDK 自带的 techfile然后重开 layout 确认。最后一步别省故意改一个无关紧要的参数执行 Check and Save再关掉重开确认改动还在。这一步验证的是写权限和库结构完整性——转换出来的库如果属主不对或者某些子目录是只读的打开能看、保存就失败而这个问题在只读浏览时完全暴露不出来。提示验证用的 cell 改完记得还原别把测试改动带到正式库里。从那以后我每次迁 PDK不管转换工具报告多成功都强制走一遍「PDK 目录启动 → 属性看格式 → symbol 和 layout 各开一个 → Check and Save」这条链。工具有它的判断人有人的判断两边对上了才算真的跑通。希望帮到你。本文还有配套的精品资源点击获取

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑