
简介一份面向 IC617 迁移场景的技术资料专门解决旧版 CDB 工艺库在 Cadence Virtuoso 中无法直接加载的问题适合模拟版图设计、IC 后端工程师及维护老工艺 PDK 的开发者阅读。内容系统整理 cdb2oa 转换的完整流程包括命令行调用方式、Virtuoso 中 Library Path 的保存与指定、CDB to OpenAccess Translator 的启动步骤并重点解释转换中常见报错如 OA executable on CDB data的成因与排查思路同时给出转换后数据检查验证的建议帮助读者将 tsmc 等老工艺库稳定迁移到 OA 格式并集成到 IC617。资源打包为单个 PDF 文档体积仅 697KB非常适合离线查阅或打印对照。目前已有 1549 人学习下载其内容覆盖从 IC514 到 IC617 的工艺库升级常见痛点对正在迁移旧设计数据的工程师尤其实用。资料步骤拆解清晰包含复制回原 PDK 等关键操作提醒能让读者快速掌握 CDB 转 OA 的完整路径显著减少环境切换时的试错成本。1. 老 PDK 撞上 IC617CDB 转 OA 不是玄学是迟早要过的坎几年前从 IC514 换到 IC617 的工程师十有八九在打开 virtuoso 时见过这么一条报错Warning: ddUpdateLibList: It appears that you are trying to run an OA executable on CDB data.老 PDK 是用 CDB 格式写的IC617 的 virtuoso 是 OA 原生可执行程序二者数据格式不兼容virtuoso 宁可报错也不帮你自动转。这不是软件抽风而是 Cadence 从 IC514 到 IC617 之间做了数据模型的大迁徙——CDBCadence DataBase是旧版库格式OAOpenAccess是后来的标准库格式。本文用 cdb2oa 工具把老 PDK 完整搬到 OA让 IC617 正常启动并跑完版图验证适合手里攥着 tsmc、SMIC 老工艺库却要在新平台开工的模拟版图工程师。2. 先搞清楚你的库到底是不是 CDB拿到 PDK 后的第一轮体检启动 virtuoso 之前先把 PDK 目录翻一遍。CDB 和 OA 两种格式在文件层级上就有明显差异不需要打开任何工具就能判断。2.1 看 prop.xx 和 lib.defs一分钟判定库格式CDB 库根目录下通常会有一个prop.xx文件内容是二进制或半文本的属性描述。OA 库则不同它用lib.defs文件来声明库类型和路径OA 库目录下还会有data子目录存放实际数据。我在拿到一套老 PDK 时第一件事就是执行ls -la /home/CHEN/tsmc035mm_3d3v_5v_v2d7a_PDK/tsmc35mm/注意看输出里有没有prop.xx。有prop.xx而没有lib.defs那这套库基本就是 CDB。如果两者都有也先别高兴——有些老 PDK 是混合状态根目录是 CDB但里面个别子库已经被转成 OA这种最容易在加载时报库不匹配。再打开你的cds.lib看每个库的定义行。CDB 库常见写法是DEFINE tsmc35mm /path/to/tsmc35mm单纯一条路径没有库类型标记。OA 库的cds.lib写法也是DEFINE开头但lib.defs里会有type字段。所以最稳妥的判断方式就是进库目录看文件。2.2 Library Path File 的备份与重构很多老工程师的习惯是直接改 PDK 自带的cds.lib改坏了再从别处拷回来一来一回浪费半天。我一般先在 home 下新建一个独立的 Library Path File专门给转换验证用。打开 virtuoso 后走Edit - Library Path File - Save As把它保存到/home/CHEN/cds.lib。这一步的本质是让 virtuoso 用你指定的lib.defs和路径表去加载库而不是依赖 PDK 原始目录里的那份。注意保存时不要覆盖 PDK 里的原文件后面覆盖回写时你还要拿它当参照。2.3 转换前必须做的三笔备份备份整个 PDK 目录cp -r tsmc035mm_3d3v_5v_v2d7a_PDK tsmc035mm_3d3v_5v_v2d7a_PDK_CDB_bak备份cds.lib和lib.defs单独拷到 home 下的bak_lib_config/目录记录转换前 PDK 目录的总大小和文件数du -sh和find | wc -l转换完成后对比文件数量变化第三笔备份是很多人忽略的。cdb2oa 转换完成后OA 库目录结构比 CDB 复杂不少文件数会增加很多。如果转换后数量没有明显变化反而要怀疑转换是否真的执行了。2.4 转换工具在哪里打开IC617 的 virtuoso 里自带 Conversion Toolbox。菜单路径是Tools - Conversion Toolbox - CDB to OpenAccess Translator。这个工具本质上是调用了系统里的cdb2oa可执行程序GUI 只是帮你组织参数。启动 Conversion Toolbox 前确认你的PATH环境变量里有$CDS_INST_DIR/tools/dfII/bin否则可能出现点开菜单但是报Cannot find program cdb2oa的情况。3. 把 CDB 转成 OAGUI 操作、命令行参数与转换后的目录结构变化转换动作本身不复杂复杂的是转换前选对路径、转换后做对校验。这一章把 GUI 和命令行两种方式都写清楚你根据自己的习惯选一种。3.1 在 Conversion Toolbox 里执行转换打开Tools - Conversion Toolbox - CDB to OpenAccess Translator后界面里有一个 Target Directory 路径框。这里需要选到你的 PDK 根目录也就是cds.lib所在的那一层而不是某个具体工艺库目录。选好路径后点 OK工具会开始扫描库列表并逐库转换。转换时长取决于库的大小和数量。tsmc35mm 这种规模的单库通常几十秒到几分钟。转换过程中终端会持续输出Converting library xxx ...这样的日志。等它结束去/home/CHEN/tsmc035mm_3d3v_5v_v2d7a_PDK/tsmc35mm目录下看一眼会发现原本只有prop.xx和layermap之类文件的库目录里多了data子目录这就是 OA 数据写入完成的最直接信号。3.2 命令行跑 cdb2oa更可控、适合批量GUI 方便但如果要转多个库或者想把转换过程写进脚本直接用命令行更可控。基本调用方式不是摘要里写的cdb2oa -i input.cdb -o output.oa实际 IC617 里的 cdb2oa 是交互式或基于-lib参数运行的cdb2oa -lib tsmc35mm -cdslib /home/CHEN/tsmc035mm_3d3v_5v_v2d7a_PDK/cds.lib命令解析-lib tsmc35mm指定要转换的库名库名必须和cds.lib里的DEFINE名称一致大小写敏感-cdslib指向 PDK 根目录下的cds.lib工具会读取其中所有DEFINE行逐个检查哪些是 CDB 库、哪些是 OA 库如果库路径在cds.lib里用相对路径写的建议先cd到 PDK 根目录再执行否则可能因为相对路径解析失败导致找不到库转换完成后你会看到命令行输出类似Conversion finished for library tsmc35mm。此时不要急着关终端往下翻日志找有没有Error或Warning字样。常见但无害的警告是Warning: Could not convert layer purpose pair xxx这个多半是 PDK 里定义了技能文件不认的层号后面在 virtuoso 里重新映射 layer map 就能解决。3.3 转换参数怎么调几个有实际意义的选项参数作用我一般怎么设-lib name指定转换单个库不写则转换cds.lib下所有 CDB 库单库用全库转换时不加-cdslib path指定 cds.lib 路径必须写绝对路径别赌默认路径-log file输出日志到指定文件写上转换后逐个查日志比在终端翻页舒服得多-overwrite覆盖已存在的 OA 库数据重新转换时用首次转换不需要-readme生成转换说明文件建议打开里面会记录转换的环境变量和版本号命令行方式有个额外好处cdb2oa允许你只转某一个库GUI 方式则会一次性把cds.lib里所有 CDB 库都过一遍。如果 PDK 里有十几个库里面有一个库文件损坏GUI 会卡在损坏库上报错其他库也没转成。命令行方式可以先转核心库损坏库最后排查。3.4 转换完先别动检查目录结构变化转换结束后老规矩执行一遍对比find /home/CHEN/tsmc035mm_3d3v_5v_v2d7a_PDK -type f | wc -l和转换前记录的数字对比。CDB 转 OA 后文件数通常会翻倍甚至更多因为 OA 格式会把每个 cell 的数据拆分成多个子文件存储。如果文件数几乎没变那大概率转换没有真正成功——常见原因是路径选到了库目录的下层导致工具没找到cds.lib空跑了一遍。4. 回填 PDK转换完成后让 IC617 真正跑起来的最后一步转换产物在/home/CHEN/tsmc035mm_3d3v_5v_v2d7a_PDK/tsmc35mm目录里但此时 PDK 的其他部分——skill 脚本、layermap、display resource——还在原地。你需要把 OA 库数据复制回原 PDK 路径并把旧的 CDB 文件干掉才能让 virtuoso 以纯 OA 模式加载。4.1 删除 CDB 残留文件进入 PDK 库目录删掉prop.xx和lib.defs之外的旧 CDB 标记文件。最稳妥的做法不是逐个删而是把 CDB 相关文件批量移除cd /home/CHEN/tsmc035mm_3d3v_5v_v2d7a_PDK/tsmc35mm rm -f prop.xx rm -rf cdbprop.xx是 CDB 库的属性文件OA 库不需要它。有些老 PDK 还带一个cdb子目录里面是旧版库的数据快照也要删掉。注意如果你的 PDK 里既有prop.xx又有data目录只删prop.xx别动data。4.2 复制 OA 数据回原目录转换输出的库数据在 home 目录的临时输出路径下。把它整体复制回 PDK 库目录cp -r /home/CHEN/tsmc035mm_3d3v_5v_v2d7a_PDK/tsmc35mm/data /home/CHEN/tsmc035mm_3d3v_5v_v2d7a_PDK/原备份中的相对路径检查一下复制完成后检查tsmc35mm目录下是否同时存在data目录和lib.defs。如果lib.defs缺失手动建一个也行VERSION 3 DEFINE tsmc35mm $PDK_ROOT/tsmc35mm这段lib.defs的内容写法有讲究。VERSION 3表示 OA 库定义格式版本DEFINE行声明库名和路径。单库 PDK 手动写没问题但多库 PDK 别手动补——直接用转换工具生成的lib.defs因为里面记录了每个库的具体类型和映射关系手写遗漏了某个库又会回到老报错。4.3 进 PDK 目录重新启动 virtuoso数据回填后进入 PDK 目录启动 virtuosocd /home/CHEN/tsmc035mm_3d3v_5v_v2d7a_PDK virtuoso 启动时留意 CIWCommand Interpreter Window窗口的日志。正常情况下会有Loading OA database ...的记录而不是之前那条ddUpdateLibList警告。如果还能看到报错多半是cds.lib里还残留着 CDB 时代的路径设置。4.4 在 CIW 里验证库是否真的能被加载打开 Library Manager展开tsmc35mm这个库随便点开一个 cell。能正常打开 cellview说明库加载没问题。如果 Library Manager 里库图标是灰色的或者点开时报mismatched library type那就是转换后数据不完整回到第 2 章重新跑一遍转换与回填。5. 避坑与常见问题排查CDB 转 OA 路上的五个真实翻车现场5.1 报错信息在 CIW 里出现三次内容一样的现象打开 virtuoso 后 CIW 里连续刷出三遍一模一样的ddUpdateLibList: It appears that you are trying to run an OA executable on CDB data警告然后库加载中断。原因cds.lib里同一个库被DEFINE了三遍或者cds.lib本身有三份同名定义。常见于 PDK 自带的cds.lib和 home 下的cds.lib都定义了同一个库virtuoso 在加载每个定义时都会触发一次检查。解决打开cds.lib查重删掉多余的DEFINE行。用grep -n DEFINE tsmc35mm cds.lib找出所有定义位置逐个核对路径保留一个即可。5.2 转换完成后库目录里出现了data目录但 virtuoso 仍然报 CDB 数据错误现象转换日志显示成功data目录也在但启动 virtuoso 时依然提示prop.xx是 CDB 数据。原因cds.lib里用的是相对路径而 virtuoso 是从别的目录启动的实际加载到的库目录不是你转换过的那份。简单说就是 virtuoso 找错了库。解决把cds.lib里的相对路径全改成绝对路径。改完再用virtuoso -cdslib /home/CHEN/tsmc035mm_3d3v_5v_v2d7a_PDK/cds.lib显式指定库路径文件启动。5.3 转换后 LCD 层名丢失版图里层显示不全现象打开原有版图部分 layer 显示异常LSW 窗口里层名变乱或缺失。原因CDB 的 layer map 和 OA 的 layer map 格式不完全一致cdb2oa在转换时遇到未识别的 layer-purpose-pair 会直接跳过但不会中止转换。解决转换前先备份原 PDK 的layermap文件转换后用loadLayerMap命令在 virtuoso 里重新加载。具体做法是在 CIW 输入loadLayerMap /home/CHEN/tsmc035mm_3d3v_5v_v2d7a_PDK/tsmc35mm/layermap如果加载后 LSW 里层名仍不对打开Technology Library设置手动修正 layer mapping 再保存。5.4 转换到一半报ERROR: Library is not CDB or already converted现象不管你重启工具还是检查权限转换就是跑不动日志显示库既不是 CDB 也不是 OA。原因库目录里prop.xx和data目录同时存在但data目录是空的或损坏的。cdb2oa 认为你之前已经转过一次会拒绝重复转换。解决把data目录完整删掉只保留 CDB 状态再重新转换。rm -rf /home/CHEN/tsmc035mm_3d3v_5v_v2d7a_PDK/tsmc35mm/data然后再跑一次 cdb2oa。删除前确认你自己的版图数据已经从旧库导出备份这一步只影响库数据不影响 GDS 文件。5.5 转换后 CIW 里出现undefined function或 skill 脚本报错现象转换后 virtuoso 能启动但菜单里的部分功能失效CIW 里刷出 undefined function 相关错误。原因老 PDK 的 skill 脚本是针对 CDB 数据结构写的OA 模型下部分函数接口不兼容。这是 PDK 本身的问题不是 cdb2oa 转坏的。解决检查 PDK 脚本版本。tsmc 这类大厂 PDK 通常会同时发布 CDB 版和 OA 版脚本看看你的安装包里有没有skill或scripts目录下的 OA 版本脚本。有的话替换.il文件后重新启动 virtuoso。没有的话只能联系 PDK 提供商要脚本更新但这已经是格式转换之外的事项了。转换后 CIW 里刷出 undefined function 或 skill 脚本报错通常就按这个顺序排查先确认脚本版本再考虑脚本加载路径。6. 进阶用 cleanlib 告别 1/5 自定义继承把 CDB 转 OA 做成一条可重复的流水线CDB 转 OA 不是一次性的救命操作而是一条你在不同 PDK 上要反复走的路。老工程师的习惯是拿到任何新 PDK 都先手写一个lib.defs让它跑起来但手写文件在 OA 原生机制下就是埋雷。IC617 自带cleanlib工具专门用来重新生成库定义文件让整个转换流程可以标准化。cleanlib /home/CHEN/tsmc035mm_3d3v_5v_v2d7a_PDK/cds.lib这行命令的作用是扫描cds.lib里所有DEFINE的库检查每个库的实际格式然后重写一份干净的库定义。跑完后再打开cds.lib检查确保lib.defs里的库类型都被正确标记为 OA。我自己验证 PDK 是否转换成功从来不用打开 virtuoso 看 CIW——直接跑 cleanlib输出里没有报错就是八成稳了。然后是恢复库数据的习惯。转换后确认新版 PDK 稳定再做一次数据完整性检查cdb2oa -lib tsmc35mm -cdslib /home/CHEN/tsmc035mm_3d3v_5v_v2d7a_PDK/cds.lib -log /home/CHEN/convert_check.log检查日志里有没有再次出现Already converted的记录。出现说明上一次转换已经留下 OA 数据此时不需要再重复转换直接进 virtuoso 确认版本图能打开即可。最后说一个血泪教训。早期我给自己跑流程时转完一个库就急着把原库的prop.xx删掉结果发现 skill 脚本里有些dbOpen调用还用 CDB 接口删了prop.xx再想回退麻烦得很——没有后悔药只能重新解压安装包。从那以后我每次转换完都在 home 下留一份完整的备份目录至少保留一周不动确认新 PDK 在版图编辑、DRC、LVS 全流程都能正常跑才把备份清理掉。工具链可以自动化但数据后悔药永远要留一手。希望这一套流程能帮你在从 IC514 往 IC617 迁移的路上少踩几个坑。本文还有配套的精品资源点击获取