
简介针对Cadence IC617平台迁移需求该PDF笔记系统整理了将旧版CDB工艺库数据转换为OA格式的完整流程面向IC514等旧工具链用户及需要在新版Virtuoso中运行老工艺库的版图设计工程师。内容涵盖cdb2oa工具的命令行用法、Conversion Toolbox的启动与设置步骤并重点解析运行OA可执行文件时遇到“OA executable on CDB data”警告的原因及处理方法。整个压缩包仅含1个PDF文件大小697KB轻量易读适合快速查阅。目前已有1551人学习下载。笔记通过图文方式展示了从打开virtuoso、编辑保存Library Path到启动CDB to OpenAccess Translator完成转换再将生成的流程库复制回原PDK目录的全过程同时提醒用户注意数据兼容性检查和验证避免因CDB与OA格式差异导致设计数据丢失。对需要迁移老旧工艺库的设计工程师具有直接参考价值。1. 老工艺库在 IC617 上打不开CDB 转 OA 这件事躲不掉手里只有 IC514 时代工艺库的人第一次把 PDK 挂到 IC617 上几乎都会翻车。打开 virtuoso 的瞬间CIW 窗口甩出一段提示ddUpdateLibList: It appears that you are trying to run an OA executable on CDB data然后 Library Manager 里那个库灰着点开全是空的。这不是库坏了也不是 license 问题是数据格式不匹配——IC514 时代用的 CDB 数据库IC617 默认只认 OAOpenAccess格式新旧两套格式之间不会自动兼容必须用工具把数据从 CDB 转换到 OA 才能继续用。这一篇就把整个转换流程拆开写从 cds.lib 里哪一行在报错、怎么备份、怎么用 GUI 里的 CDB to OpenAccess Translator、转换失败怎么排查到最后怎么验证库真的能读。适合手里只有旧工艺库、要往 IC617 迁移的模拟设计或版图工程师也适合刚接触 virtuoso、对 CDB 和 OA 还没概念的新手照着走一遍。整套操作不需要重新画任何东西只是把库的格式做一次搬家但搬之前弄错顺序老库可能真的救不回来。2. 转换前先别急着点菜单备份、确认格式、理清 cds.lib2.1 CDB 和 OA 差在哪为什么 IC514 的库在 IC617 上会报警CDB 是 IC514 那一代 virtuoso 使用的数据库格式库目录里能看到prop.xx、cell.xx、sch.xx这类描述单元的文件目录结构偏扁平。OA 则是后来 virtuoso 6.x 默认的 OpenAccess 数据库一个库是一个以.oa结尾的目录内部用统一的索引文件管理 cellview。IC617 自带的 virtuoso 是 OA executable它启动时会去读用户指定的 cds.lib把里面的库逐个加载成 OA 格式的 library一旦发现某个库目录里躺的是 CDB 文件就会直接拒绝加载。原文里那个报错信息虽然被复制粘贴了三遍核心其实就一句Library xxx contains file /home/.../prop.xx which is CDB data。prop.xx 是 CDB 库的标识文件它存在就说明这个库目录不是 OA 结构。OA 工具不会去猜你怎么转换只会拒绝运行。所以转换这件事的本质是把prop.xx那套旧数据结构翻译成.oa目录结构而不是在 virtuoso 里点两下“刷新”就能解决的玄学问题。2.2 动手前先备份用 tar 把整个 PDK 目录压一份很多人在这一步跳过去觉得“我就转个格式不会动原库”。但 GUI 转换工具在某些版本里会把输出写到当前工作目录也可能因为权限问题半路中断更常见的是转换完成后为了替换原 PDK手动删了旧目录才发现新目录少了一层路径。备份是整个流程里唯一的后悔药压一份 tar 再动手后面不管怎么折腾都有底。cd /home/eda tar czhf pdk_backup_$(date %Y%m%d).tar.gz xxx_035_PDK这条命令先切到 PDK 的上一级目录再打包整个 PDK 文件夹。-h参数很关键PDK 里经常有软链接指向别处的模型文件不加-h的话 tar 会只存一个链接文件解出来是断的加上它会把链接指向的真实内容一起打进去。$(date %Y%m%d)让备份文件名带上当天日期避免覆盖上一次的备份。打包前顺手看一眼磁盘剩余空间老 PDK 可能只有几百 MB但有些带 extracted 模型的 PDK 能到几个 GBdf -h确认一下再执行更稳妥。2.3 认识 cds.lib哪一行在报错哪一行决定转换范围转换工具读的不是原理图也不是版图而是一份 cds.lib。这份文件就是 virtuoso 的 Library Path File里面用DEFINE把库名和路径绑在一起。报错里提到的路径正是从 cds.lib 里解析出来的。DEFINE v35mm /home/eda/xxx_035_PDK/v35mm INCLUDE /home/eda/xxx_035_PDK/cds.lib第一行把库名v35mm指向旧 PDK 目录virtuoso 加载时走进这个目录看到的是prop.xx于是判定这是 CDB 库。第二行是把 PDK 自带的 cds.lib 内容引入用户级配置文件。转换工具执行时会读这份 cds.lib找出里面所有DEFINE的库逐个做 CDB 到 OA 的翻译。所以 cds.lib 决定了三件事转哪些库、原库在哪、转换后的库将来要从哪里被加载。理解这一层之后后面所有操作就都围绕这份文件展开。转换前确认 cds.lib 里列出的库路径是否都真实存在路径写错的话转出来的可能是空库甚至直接报Cannot open cds.lib。路径不要用相对路径Virtuoso 的工作目录一变相对路径就全废了我处理过的这类问题里一半以上是相对路径惹的祸。3. GUI 转换实操Conversion Toolbox 里选对 cds.lib 就成功了一半3.1 第一步在 home 目录生成一份可写的 cds.lib从终端进到 home 目录再启动 virtuoso这一步不是习惯问题而是为了让用户级 cds.lib 落在 home 下。很多 PDK 自带的 cds.lib 是只读的转换工具要往里面写转换结果直接用只读文件会失败另一些 PDK 的 cds.lib 放在安装目录里你没有写权限。所以在 home 下生成一份用户级 cds.lib后续所有修改都在自己地盘里做。操作路径是正常启动 virtuoso 后在 CIW 窗口里点菜单Edit - Library Path File - Save As把文件保存到/home/eda/cds.lib。保存之前virtuoso 已经按默认或环境变量指定的路径加载了库列表所以这份新文件里会继承启动时能看到的那些库定义。保存完CIW 底部会提示 library path file 已更新。这一步容易被忽略的动作是确认 home 下没有遗留的旧 cds.lib尤其是之前用过 IC514 的人home 里可能还留着一份指向 CDB 路径的老文件。如果存在virtuoso 启动时会先读它后面你改了另一份文件也没用。处理办法很简单把旧文件改名备份再重新 Save As 一份。3.2 第二步启动 CDB to OpenAccess Translator 并指定库转换工具在 GUI 里的入口是Tools - Conversion Toolbox - CDB to OpenAccess Translator路径别记混它不在 File 菜单下也不是 Library Manager 里能触发的。点开之后会出现一个对话框里面关键字段是 cds.lib 文件选择直接指向 PDK 自带的原始 cds.lib。为什么这里选 PDK 的 cds.lib而不是 home 下刚生成那份因为转换工具要按原始库路径找到所有待转换的库PDK 自带的 cds.lib 里记录的是工艺库最完整的DEFINE列表home 那份是用户级配置可能只包含部分库。选好后点 OK工具开始逐库转换界面没有任何进度条是正常的看终端输出或生成的 log 文件即可。转换时间取决于库大小同一套 PDK 的小库可能几秒就完带 PCELL 的大库要等一两分钟。GUI 转换的本质是调用后台的 cdb2oa 可执行程序只是把命令行参数包装成了对话框。所以 GUI 卡住或没反应时不用反复点按钮去查 log或者干脆跳到第四章用命令行方式处理。3.3 第三步转换完成后检查 .oa 目录与 log 文件转换完成后回到启动 virtuoso 的目录理论上会看到转换好的库目录命名通常是原库名加.oa后缀。有些版本会生成v35mm.oa有些是v35mm_oa差别来自工具小版本不影响使用。验证这一步是否成功看两样东西ls -la /home/eda/xxx_035_PDK/v35mm/ | head find /home/eda -maxdepth 2 -type d -name *.oa pwd第一条命令看原目录是否还在原目录不会因为转换而消失如果原目录没了说明你可能在权限或路径上出错。第二条命令在当前目录下找出所有转换产生的.oa目录确认转换输出确实落盘。pwd是为了确认你当前到底在哪个目录因为转换结果默认写在启动 virtuoso 时的工作目录里不是写在源库所在目录这个细节最容易让人以为转换失败。转换过程中生成的 log 文件也要看一般会在工作目录下生成类似cdb2oa.log的文件打开后能看到每个库的转换状态。末尾出现done、complete之类的字样基本就是成功如果 log 里反复出现某个库无法打开那多半是 cds.lib 里 DEFINE 路径写得有问题或者原库目录里有 cellview 损坏单个坏单元会影响整个库的转换。4. 常见排查转换失败、库仍旧 CDB、prop.xx 报错的处理顺序4.1 转完还是打不开Library Path File 指向了旧库现象转换明明显示成功home 下也生成了.oa目录但重启 virtuoso 后CIW 继续报OA executable on CDB data库还是打不开。原因virtuoso 启动时读的 cds.lib 里DEFINE v35mm指向的还是原始 PDK 目录那个目录里的prop.xx还在。转换只是生成了新库并没有修改原始库路径virtuoso 按旧路径加载看到的自然还是 CDB 数据。解决把 cds.lib 里的 DEFINE 路径改成转换输出的.oa目录。改完保存重启 virtuoso 即可。DEFINE v35mm /home/eda/v35mm.oa注意改成绝对路径。这里踩过坑的人很多以为转换工具会自动更新 cds.lib实际上不会工具只负责生成新库不负责重新接线这一步必须手动做。不想改 cds.lib 的话还有另一种常见做法把旧的 PDK 目录整个删掉把转换好的.oa目录复制到原路径下并改成原名。原文里用的就是这个思路先删后复制等价于让 cds.lib 不用改也能加载到 OA 数据。4.2 报错里的 prop.xx 到底删不删现象转换完成、库里数据也能看到但 CIW 每次启动还是弹警告说prop.xx是 CDB data建议移除。原因原 PDK 目录下残留着prop.xx即使 cds.lib 已经指向.oa目录virtuoso 的启动扫描过程仍可能扫到旧目录里的 CDB 标志文件并报警。这种情况多发生在库目录层级较深、或者用户把新旧目录混放在同一路径下时。解决先确认你要用的库已经能从.oa目录正常打开再处理旧文件。删除前做好备份我一般把旧目录改名而不是直接删mv /home/eda/xxx_035_PDK/v35mm /home/eda/xxx_035_PDK/v35mm_cdb_bak这样既让 virtuoso 不再扫到 CDB 数据又留了退路。千万不要反过来——先删 prop.xx 再转换那样原始 CDB 数据会不完整转换工具读库时直接失败。记住一个顺序先转换成功再删旧库顺序错了就会把库弄坏。4.3 命令行版 cdb2oa适合批量与脚本化现象GUI 里的 Translator 按钮点了没反应或者转换到一半界面卡死终端里也没有任何输出只能强制结束进程。多发生在远程 X 转发环境或服务器上没装图形库时。原因GUI 工具依赖 X Window 显示远程操作时图形会话不稳定或者对话框被隐藏、进程在等待输入但界面渲染不出来。解决直接用命令行调用 cdb2oa不经过 GUI也适合以后写脚本批量转多个库。先找到工具位置which cdb2oa正常情况下会在 virtuoso 安装目录的tools/dfII/bin下。找不到时先确认 virtuoso 的环境变量 source 了没通常需要执行工具的cshrc或setup脚本。调用方式直接传 cds.lib 路径cdb2oa /home/eda/xxx_035_PDK/cds.lib有些版本支持-lib参数指定只转某一个库不传则默认转换 cds.lib 里所有 DEFINE 的库。执行期间终端会滚动日志结束后的产物和 GUI 方式完全一致。这里提醒一句网上有些文章写的cdb2oa -i input.cdb -o output.oa不是这工具的用法cdb2oa 接受的是 cds.lib 文件路径不是单个 cdb 文件照那个写会直接报参数错误。不同小版本对参数的解析略有差异遇到不认识参数时用cdb2oa -help看当前版本的真实选项。4.4 不同版本工具共用同一库时的权限坑现象库转换完自己的账号打开正常换了一台机器、或者另一个同事的账号打开virtuoso 直接报没有权限或者库显示为空。原因转换生成的.oa目录属主是你自己权限默认755或700其他用户没写权限还有可能是之前 tar 备份时保留了错误的属主信息解包后所有人的权限都乱了。解决转换完顺手把目录属主和权限修正一遍别等别人来报障chown -R $USER:engroup /home/eda/v35mm.oa chmod -R gw /home/eda/v35mm.oa第二行的含义是把组写权限补上适用于多人共用库的团队环境。如果 PDK 原本就装在共享盘上还要确认共享盘本身支持文件锁不然多人同时打开同一个 OA 库时会出现 lib 损坏的报错那种报错和转换无关属于文件系统层面的限制只能换本地盘或换支持 POSIX 锁的共享文件系统。5. 验证跑通重开 Virtuoso用 SKILL 命令确认库真能读5.1 放回原 PDK 路径前先做最小验证不要急着把.oa目录复制回原 PDK 路径先留在 home 下用最直接的方式验证它能不能被 virtuoso 正常加载。打开 Library Manager确认v35mm出现在库列表里点开之后能看到 cellview 列表每一个 cell 下有 schematic、layout、symbol 等视图说明目录结构对上了。这个阶段如果库列表里没有v35mm先回 cds.lib 看 DEFINE 路径写对没有很多时候只是路径末尾多了一个斜杠或少了一层目录。5.2 用 dbOpen 检查库可读性Library Manager 能展示不代表每个 cell 都能读更可靠的检查是在 CIW 命令行里直接调 SKILL 函数打开一个具体 cell报错会精确到库名或单元名dbOpen(v35mm nmos layout r)执行后如果返回类似db:0x...的对象句柄说明库、单元、视图都能被正常读取这是转换成功最硬的证据。如果报Cant find library v35mm说明 cds.lib 没生效检查当前 virtuoso 加载的 library path file 是不是你改的那份如果报Cant find cell说明库能读但具体 cell 没转出来回到转换 log 里查那个单元是否被跳过。5.3 一张表转换各阶段该看到什么阶段该看到的现象常见误判转换后查目录原库目录仍在home 下出现.oa目录以为主库目录不变就是没转重启 virtuosoCIW 不再报OA executable on CDB data警告消失但库为空是 DEFINE 指错路径Library Managercellview 列表正常展示只有几个 cell 列出其余缺失查 log 的 skip 记录dbOpen 检查返回句柄不报错报错停留在Cant find library时先查 cds.lib验证的收尾动作是把转换好的库放回原 PDK 路径。先备份旧库目录再把.oa目录复制到 PDK 里并改回原库名同时把 cds.lib 的 DEFINE 路径同步更新。从那以后我每次迁移 CDB 工艺库都强制走一遍备份、GUI 转换、命令行兜底、dbOpen 验证整套流程跑完才敢把库放回正式路径。以后你的同事拿着一份 IC514 老库来找你时至少不用再跟着报错信息猜格式问题了希望帮到你。本文还有配套的精品资源点击获取