简介:针对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 默认只认 OA(OpenAccess)格式,新旧两套格式之间不会自动兼容,必须用工具把数据从 CDB 转换到 OA 才能继续用。
这一篇就把整个转换流程拆开写:从 cds.lib 里哪一行在报错、怎么备份、怎么用 GUI 里的 CDB to OpenAccess Translator、转换失败怎么排查,到最后怎么验证库真的能读。适合手里只有旧工艺库、要往 IC617 迁移的模拟设计或版图工程师,也适合刚接触 virtuoso、对 CDB 和 OA 还没概念的新手照着走一遍。整套操作不需要重新画任何东西,只是把库的格式做一次搬家,但搬之前弄错顺序,老库可能真的救不回来。
2. 转换前先别急着点菜单:备份、确认格式、理清 cds.lib
2.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 能到几个 GB,df -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 g+w /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...的对象句柄,说明库、单元、视图都能被正常读取,这是转换成功最硬的证据。如果报Can't find library "v35mm",说明 cds.lib 没生效,检查当前 virtuoso 加载的 library path file 是不是你改的那份;如果报Can't find cell,说明库能读但具体 cell 没转出来,回到转换 log 里查那个单元是否被跳过。
5.3 一张表:转换各阶段该看到什么
| 阶段 | 该看到的现象 | 常见误判 |
|---|---|---|
| 转换后查目录 | 原库目录仍在,home 下出现.oa目录 | 以为主库目录不变就是没转 |
| 重启 virtuoso | CIW 不再报OA executable on CDB data | 警告消失但库为空,是 DEFINE 指错路径 |
| Library Manager | cellview 列表正常展示 | 只有几个 cell 列出,其余缺失,查 log 的 skip 记录 |
| dbOpen 检查 | 返回句柄,不报错 | 报错停留在Can't find library时先查 cds.lib |
验证的收尾动作是把转换好的库放回原 PDK 路径。先备份旧库目录,再把.oa目录复制到 PDK 里并改回原库名,同时把 cds.lib 的 DEFINE 路径同步更新。从那以后我每次迁移 CDB 工艺库都强制走一遍:备份、GUI 转换、命令行兜底、dbOpen 验证,整套流程跑完才敢把库放回正式路径。以后你的同事拿着一份 IC514 老库来找你时,至少不用再跟着报错信息猜格式问题了,希望帮到你。
本文还有配套的精品资源,点击获取