news 2026/11/4 21:22:39

IC617 CDB转OA实战:cdb2oa迁移Virtuoso PDK库

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
IC617 CDB转OA实战:cdb2oa迁移Virtuoso PDK库

简介:这份 PDF 文档面向正在使用 Cadence IC617、需要复用旧工艺库的模拟版图工程师与 PDK 维护人员,针对早期 CDB 格式库无法在新平台直接打开的问题,梳理 cdb2oa 数据迁移的关键环节。内容围绕转换工具的使用思路、Virtuoso 中 Library Path 的保存位置、转换后库在 home 目录下的确认与回填 PDK 的注意事项展开,并对 “run an OA executable on CDB data” 一类告警给出排查方向,帮助读者理解 CDB 与 OA 数据不兼容的成因。资源包仅含 1 个 PDF 文件,大小约 697KB,篇幅短小,适合具备基础 Virtuoso 操作经验、希望快速完成旧库迁移的中级读者作为速查手册。已有 1557 人学习,说明该问题在 IC617 平台切换中具有普遍性。读者可据此建立从转换、目录检查到 Virtuoso 验证的完整认知,减少因库格式不匹配导致的反复试错,提高旧工艺库复用与平台迁移效率。

1. 从一条 ddUpdateLibList 警告说起:IC617 读不了旧 CDB 库

IC617 下把数据从 CDB 转换为 OA,最常被搜到的工具就是 cdb2oa。旧工艺 PDK 在 IC514 上能打开,换到 IC617 后 Virtuoso 一启动就弹Warning: ddUpdateLibList: It appears that you are trying to run an OA executable on CDB data,很多人第一反应是库坏了、PDK 装错了,其实多数时候只是库格式还停在 CDB,而 IC617 的启动程序按 OA 方式去读。这个坑在旧工艺迁移、老项目复现、实验室环境升级里非常常见,装不好轻则库打不开,重则把唯一一份 PDK 覆盖掉。下面按环境核对、备份、图形化转换、cdb2oa 命令、避坑、验证的顺序,把这套转换流程走一遍。

2. 环境与版本核对:IC617、OA 与 cdb2oa 到底要哪些前置

2.1 先确认 Virtuoso 和 cdb2oa 来自同一套 IC617

动手前先别急着点转换按钮,先确认当前 shell 找到的virtuoso和cdb2oa是同一套 IC617 安装目录里的。旧机器上经常出现 PATH 里同时挂着 IC514 和 IC617,virtuoso启动的是 IC617,cdb2oa却来自旧路径,转换到一半报奇怪的库错误,这种翻车最难查。我一般会先看which,再看cdb2oa -h能不能正常输出帮助,帮助都出不来就说明环境变量或 license 还没通。

# 确认当前 shell 实际调用的 Virtuoso 和 cdb2oa 路径 which virtuoso which cdb2oa # 看 cdb2oa 当前版本支持哪些参数,不同 IC617 小版本参数名可能不同 cdb2oa -h 2>&1 | head -40 # 只做检查,不在这里硬编码 license 地址 echo "CDS_INST_DIR=$CDS_INST_DIR" echo "CDS_LIC_FILE=$CDS_LIC_FILE" echo "LM_LICENSE_FILE=$LM_LICENSE_FILE"

which的作用是确认 PATH 顺序,避免 IC514 的旧工具抢先被调用。cdb2oa -h用来确认转换工具本身可执行,同时看清当前版本认哪些参数;不同 IC617 小版本对-cdslib、-lib、-out这类参数名可能略有差异,先看帮助比照抄旧笔记稳。CDS_INST_DIR是安装根目录,CDS_LIC_FILE和LM_LICENSE_FILE是 license 入口,只检查不写死,避免把不存在的 license 服务器带进脚本。

注意:如果which cdb2oa输出为空,不要继续往下走。常见做法是先把 IC617 的tools/bin加进 PATH,再重新开一个终端确认,别在旧终端里反复source到变量互相覆盖。

2.2 IC514 的 CDB 库和 IC617 的 OA 库差在哪

CDB 是旧一代库格式,IC514 时代大量工艺库、cellview、CDF 配置都按 CDB 组织;IC617 的 Virtuoso 可执行程序按 OA 方式启动,遇到库目录里还带prop.xx这类 CDB 标记文件,就会在ddUpdateLibList阶段报警。这个警告不是“库内容全坏了”,而是“启动程序用 OA 的方式读到了 CDB 的壳”。转换的目标不是把每个 cellview 手工另存,而是让 cdb2oa 或 Conversion Toolbox 把整库转成 OA 目录结构,再让cds.lib指向新库。

检查项旧 CDB 环境(IC514 时代)IC617 目标环境
库格式CDBOA
启动表现可读旧库OA executable 读 CDB 数据时报警
转换入口无或旧脚本Conversion Toolbox / cdb2oa
库目录标记prop.xx等 CDB 文件data.dm等 OA 标记
配置入口cds.lib指向库路径cds.lib仍是指向入口,库本身要换成 OA

这张表不是让你背概念,而是排查时对着看。启动日志里出现prop.xx,先怀疑库还是 CDB;cds.lib里DEFINE的路径没改,Virtuoso 就还会去读旧目录。转换工具做的是库级迁移,不是简单改后缀,所以输出目录、库名、cds.lib三者必须对得上。

2.3 目录、权限和 license 的最小检查

转换过程会往输出目录写大量文件,输出目录所在磁盘要有足够空间,当前用户要有读写权限。不要直接在原 PDK 目录里让工具覆盖写,常见做法是新建一个空的工作目录,把转换结果先落到那里。license 方面,cdb2oa和 Virtuoso 启动通常共用一套 license 配置,但转换工具可能有自己的 feature 检查;如果virtuoso能开、cdb2oa一跑就退出,先看日志里是不是 license 没拿到。

# 建一个干净的转换工作目录,别拿原 PDK 当输出目录 WORK=/home/eda/cdb2oa_work mkdir -p "$WORK/out" "$WORK/log" chmod u+rwx "$WORK" # 看磁盘空间,转换整库时空间不够会中途失败 df -h "$WORK" # 看原 PDK 大小,备份前心里有数 du -sh /home/eda/pdk_old

WORK是工作根目录,out放转换结果,log放日志,分开是为了失败时能整目录回滚。df -h看剩余空间,du -sh看原 PDK 体积,这两个数差太多就别急着转。权限用chmod u+rwx只保证当前用户可写,不建议图省事chmod -R 777,后面复制回 PDK 时权限混乱更难查。

3. 转换前的备份与 cds.lib 整理:别让原 PDK 成为唯一副本

3.1 先冻结旧 PDK,再做可回滚备份

转换前最重要的一步不是启动工具,而是备份。旧 PDK 往往是实验室或项目里唯一一份,转换工具一旦把输出目录指到原库,或者复制回时手滑覆盖,没有后悔药。我一般会先cp -a一份带时间戳的备份,再确认备份目录能读,才动原库。备份不要放在原 PDK 子目录里,避免被cds.lib的INCLUDE或后续复制操作带进去。

set -e OLD_PDK=/home/eda/pdk_old STAMP=$(date +%Y%m%d_%H%M) BACKUP=/home/eda/pdk_backup_$STAMP # -a 保留权限、时间戳和符号链接,别用普通 cp cp -a "$OLD_PDK" "$BACKUP" # 确认备份目录存在且可读 test -d "$BACKUP" && echo "备份完成: $BACKUP" du -sh "$BACKUP"

set -e让命令一旦失败就停,避免备份没完成还继续往下跑。STAMP用时间戳区分每次备份,cp -a保留原权限和链接关系,旧 PDK 里常有符号链接,普通cp容易把链接展开成实体文件。test -d和du -sh是备份后的最低确认,别只看命令没报错就认为备份好了。

注意:备份盘和原 PDK 不要放在同一块即将写满的磁盘上。转换整库时输出目录可能比原库大,空间不够时先清工作目录,不要删备份。

3.2 把 cds.lib 复制到工作目录,别让工具直接改原文件

cds.lib是 Virtuoso 找库的入口,里面用DEFINE把逻辑库名映射到实际路径。转换工具读的是cds.lib,但不同工具对原文件的写行为不一样,稳妥做法是先在 Virtuoso 的 Library Path 编辑器里Save As一份到工作目录,或者直接复制一份出来,让转换工具读副本。项目里常见的操作是打开 Virtuoso 后进入 Library Path 编辑界面,把当前库路径另存到 home 下的工作目录,再拿这份cds.lib去选。

# 复制一份 cds.lib 到工作目录,原文件先不动 cp -a /home/eda/pdk_old/cds.lib /home/eda/cdb2oa_work/cds.lib # 看当前 cds.lib 里有哪些库定义,注意 DEFINE 后面的绝对路径 grep -nE '^\s*(DEFINE|INCLUDE|SOFTINCLUDE)' /home/eda/cdb2oa_work/cds.lib

cp -a保留原文件属性,grep -nE把DEFINE、INCLUDE、SOFTINCLUDE行连行号列出来。DEFINE后面两个参数分别是逻辑库名和库目录绝对路径,转换时要确认逻辑库名就是你要转的那个,路径指向旧 CDB 库而不是空目录。INCLUDE和SOFTINCLUDE说明配置被拆到别的文件里,别只改主文件就以为改全了。

3.3 新建干净的输出目录,库名和路径先对齐

转换工具的输出目录必须是空的,或者至少不能混着上一次的 OA 库。常见翻车是同一个out目录反复用,第一次转一半失败,第二次工具看到目录里已有同名库,行为就变得不可预测。我一般按库名和时间戳建输出目录,转换成功后先检查目录结构,再决定复制回 PDK 的哪一层。

# 输出目录按库名隔离,避免多次转换互相污染 LIB_NAME=myOldLib OUT=/home/eda/cdb2oa_work/out/${LIB_NAME}_$(date +%Y%m%d_%H%M) mkdir -p "$OUT" echo "本次输出目录: $OUT" # 确认输出目录是空的 find "$OUT" -mindepth 1 -maxdepth 1 -print

LIB_NAME要和cds.lib里DEFINE的逻辑库名一致,不要自己另起一个名字去转,否则复制回 PDK 后cds.lib对不上。OUT带时间戳,失败后直接换目录重来,不用清理旧结果。find打印输出目录第一层内容,空目录应该没有输出;如果有东西,先确认是不是上一次的残留。

4. 用 Conversion Toolbox 跑通 CDB 到 OA:图形界面与 cdb2oa 命令两条路

4.1 从 PDK 目录启动 Virtuoso,再开 Conversion Toolbox

图形化转换对第一次做 CDB 转 OA 的人更友好,因为能直接看到读的是哪份cds.lib、输出到了哪个目录。先在 PDK 目录下启动 Virtuoso,让当前工作目录和库路径关系清楚,再进Tools菜单找Conversion Toolbox,选择CDB to OpenAccess Translator。路径选第 3 章复制出来的cds.lib副本,不要直接选原 PDK 里那份还没备份的配置。

# 在 PDK 目录启动 Virtuoso,方便确认当前 cds.lib 和库路径 cd /home/eda/pdk_old virtuoso &

cd到 PDK 目录是为了让 Virtuoso 启动时读到的相对路径和cds.lib里的定义一致。virtuoso &放后台启动,终端还能继续看日志。启动后不要急着点转换,先在 Library Path 编辑器里确认cds.lib指向的是旧库路径,再打开 Conversion Toolbox。

图形界面里的操作顺序可以按下面走:

  1. Tools菜单进入Conversion Toolbox,选择CDB to OpenAccess Translator。
  2. cds.lib选/home/eda/cdb2oa_work/cds.lib,也就是第 3 章复制的副本。
  3. 输出目录选第 3 章建好的空OUT目录,不要选原 PDK 目录。
  4. 库名勾选要转的旧库,确认逻辑库名和cds.lib里的DEFINE一致。
  5. 点OK后看转换日志窗口,不要关掉 Virtuoso,等它跑完。

转换过程中最容易被忽略的是日志。工具界面可能只显示“完成”,但日志里会列出哪些 cellview 跳过、哪些文件没转。常见做法是等结束后先看输出目录第一层有没有data.dm这类 OA 标记,再find查有没有prop.xx残留。图形界面只是入口,真正判断成功与否还是看目录和日志。

4.2 转换完成后先检查输出目录,再复制回 PDK

转换结束后,输出目录里应该出现以库名命名的 OA 库目录。先别直接覆盖原 PDK,先确认输出目录结构、文件数量和日志没有硬错误。项目里常见的做法是先把原库改名备份,再把新库复制回原路径,这样cds.lib里的DEFINE不用大改,Virtuoso 启动时直接读新库。

# 先看转换输出目录第一层结构 OUT=/home/eda/cdb2oa_work/out/myOldLib_20240101_1010 find "$OUT" -maxdepth 2 -type d -print | head -20 # 查有没有 CDB 残留标记,有就说明没转干净 find "$OUT" -maxdepth 3 \( -name 'prop.xx' -o -name '*.cdb' \) -print # 查 OA 标记文件是否出现 find "$OUT" -maxdepth 2 -name 'data.dm' -print

find第一组只看目录层级,确认库目录和 cell 目录已经生成。第二组查prop.xx和*.cdb,有输出就别急着复制回 PDK,说明转换结果里还混着 CDB 文件。第三组查data.dm,它是 OA 库常见标记之一,有它至少说明新库结构已经落盘。三步都过了再做复制,比直接cp覆盖稳。

# 原库先改名备份,再把新库复制回原路径 cd /home/eda/pdk_old mv myOldLib myOldLib.cdb.bak.$(date +%Y%m%d_%H%M) cp -a "$OUT/myOldLib" ./myOldLib # 确认原路径下已经是新库 ls -ld /home/eda/pdk_old/myOldLib find /home/eda/pdk_old/myOldLib -maxdepth 2 -name 'prop.xx' -print

mv把旧 CDB 库改名,保留在原 PDK 目录里但不被cds.lib引用;cp -a把新 OA 库复制回原逻辑路径,这样cds.lib里的DEFINE不用改。复制后ls -ld看目录属主和权限,find再查一次prop.xx,如果又出现,说明复制源不对或者原库没移干净。不要用rm -rf直接删原库,改名备份就是留给自己的后悔药。

4.3 命令行 cdb2oa 的批处理写法与参数取舍

图形界面适合第一次转换,批量或重复转换时命令行更省事。摘要里常见的cdb2oa -i input.cdb -o output.oa是单文件示意写法,整库转换通常要指定cds.lib、库名和输出目录,具体参数以cdb2oa -h为准。我一般先在一个小库上跑通命令,再放到批处理脚本里,避免参数写错把大库转一半。

# 变量按实际路径替换;out 目录必须是空目录 CDS_LIB=/home/eda/cdb2oa_work/cds.lib LIB_NAME=myOldLib OUT_DIR=/home/eda/cdb2oa_work/out/${LIB_NAME}_cli LOG=/home/eda/cdb2oa_work/log/${LIB_NAME}_cdb2oa.log mkdir -p "$OUT_DIR" "$(dirname "$LOG")" # 如果 -h 里没有 -cdslib/-lib/-out,按当前版本帮助调整参数名 cdb2oa -cdslib "$CDS_LIB" -lib "$LIB_NAME" -out "$OUT_DIR" 2>&1 | tee "$LOG"

CDS_LIB指向第 3 章复制出来的cds.lib副本,LIB_NAME必须和DEFINE里的逻辑库名一致,OUT_DIR每次新建空目录,LOG用tee同时输出到终端和文件。-cdslib、-lib、-out是常见参数名,但不同 IC617 小版本可能不同,执行前先用cdb2oa -h核对。命令跑完后先grep日志里的error、failed、skip,再看输出目录,不要只看退出码。

# 转换后先扫日志关键字,再决定是否复制回 PDK grep -iE 'error|failed|skip|cannot|license' "$LOG" || echo "日志未见明显错误关键字" # 查输出库是否含 OA 标记和 CDB 残留 find "$OUT_DIR" -maxdepth 2 -name 'data.dm' -print find "$OUT_DIR" -maxdepth 3 \( -name 'prop.xx' -o -name '*.cdb' \) -print

grep -iE忽略大小写扫错误关键字,没有匹配时用|| echo给出提示,避免脚本因为grep返回 1 就中断。find两组检查和图形化转换后一样:先确认 OA 标记,再确认没有 CDB 残留。命令行转换的优势是可重复,但前提是输出目录和日志都按库名隔离,否则第二次跑会很难判断结果属于哪一次。

5. 避坑与排查:cdb2oa 转换中最容易翻车的五处

5.1 现象:转换后库目录里还是 cdb 文件

现象是转换工具显示完成,但进输出目录一看,里面还能找到prop.xx或*.cdb,Virtuoso 启动仍然报警。原因通常是cds.lib选错,工具读的是另一份指向旧库的配置;或者输出目录不是空的,工具把结果写到了上次残留的目录里;还有一种情况是库名勾选错了,转的是同 PDK 里另一个已经转过的库。解决时先回到第 3 章的grep,确认cds.lib副本里DEFINE的路径就是旧 CDB 库,再换一个全新的空输出目录重跑。

# 重新确认 cds.lib 副本里的库定义 grep -nE '^\s*DEFINE\s+myOldLib\s+' /home/eda/cdb2oa_work/cds.lib # 换全新输出目录重跑,避免旧结果污染 NEW_OUT=/home/eda/cdb2oa_work/out/myOldLib_retry_$(date +%Y%m%d_%H%M) mkdir -p "$NEW_OUT" find "$NEW_OUT" -mindepth 1 -maxdepth 1 -print

grep只匹配myOldLib的DEFINE行,确认路径没有指向备份目录或空目录。NEW_OUT用新时间戳,find确认目录为空再跑转换。重跑后如果还有prop.xx,不要再反复覆盖原 PDK,先把结果目录整个移到一边,回头查转换日志里有没有skip或cannot convert。

5.2 现象:Virtuoso 启动仍报 OA executable on CDB data

现象是库已经复制回原路径,Virtuoso 一启动还是弹ddUpdateLibList警告,警告里仍然带着旧库名和prop.xx路径。原因常见有三种:cds.lib里还有另一条DEFINE指向旧 CDB 目录;原库改名后没改干净,启动路径又读到了备份目录;复制回的新库里混进了旧库的prop.xx。解决时先grep整个cds.lib和包含文件,把所有指向旧路径的DEFINE找出来,再确认原路径下只有一套库。

# 扫 cds.lib 和常见包含文件里所有 DEFINE 行 grep -RInE '^\s*DEFINE\s+' /home/eda/pdk_old/cds.lib /home/eda/cdb2oa_work/cds.lib 2>/dev/null # 查原路径和新库目录里是否还有 CDB 标记 find /home/eda/pdk_old/myOldLib -maxdepth 3 \( -name 'prop.xx' -o -name '*.cdb' \) -print

grep -RIn会连文件名和行号一起输出,方便确认是哪份配置还在指旧路径。find查原路径下的 CDB 标记,如果有,先把它们移到备份目录,不要直接删到不可恢复。确认cds.lib只剩一条指向新 OA 库的DEFINE后,重新开一个终端启动 Virtuoso,旧终端里的环境变量可能还指着旧库。

5.3 现象:转换中途退出或日志里 license 报错

现象是cdb2oa跑几秒就退出,日志里出现 license、feature 或 cannot connect 之类关键字;图形界面则可能卡在启动转换工具那一步。原因通常是当前 shell 的CDS_LIC_FILE或LM_LICENSE_FILE指向了旧版本配置,或者转换工具需要的 feature 没被 license 覆盖。解决时先确认virtuoso能正常启动,再单独跑cdb2oa -h,如果帮助都出不来,先修环境变量和 license,不要怪库。

# 检查当前 license 变量和 cdb2oa 可执行性 env | grep -E 'CDS_LIC_FILE|LM_LICENSE_FILE' || true cdb2oa -h >/dev/null 2>&1 && echo "cdb2oa 可执行" || echo "cdb2oa 启动失败,先查 license 和 PATH" # 看转换日志里的 license 关键字 grep -iE 'license|feature|connect|cannot' /home/eda/cdb2oa_work/log/*.log 2>/dev/null || true

env | grep只查看当前 shell 的 license 变量,不在文章里写死具体服务器地址。cdb2oa -h是最小可执行性检查,帮助都出不来就别继续转库。日志grep用来定位 license 关键字,|| true防止没有日志时脚本中断。常见做法是先把 license 环境修到virtuoso和cdb2oa都能启动,再重新跑转换。

5.4 现象:复制回 PDK 后层次、CDF 或参数丢失

现象是库能打开,cellview 也在,但器件参数、CDF 表单或某些层次显示不对。原因通常不是 cdb2oa 把 cellview 转坏了,而是旧 PDK 的 CDF 和 techfile 初始化脚本没有跟着新库加载;转换工具主要处理库和 cellview 结构,PDK 的 CDF 配置往往还在原 PDK 的 SKILL 初始化或 techfile 里。解决时先拿一个小库做对照转换,确认原库能打开、新库能打开,再比对 CDF 参数,不要一上来就转整个 PDK。

# 先在小库上做对照转换,减少一次性影响范围 SMALL_LIB=testOldLib SMALL_OUT=/home/eda/cdb2oa_work/out/${SMALL_LIB}_small mkdir -p "$SMALL_OUT" # 小库转换命令示例,参数仍以 cdb2oa -h 为准 cdb2oa -cdslib /home/eda/cdb2oa_work/cds.lib -lib "$SMALL_LIB" -out "$SMALL_OUT" 2>&1 | tee /home/eda/cdb2oa_work/log/${SMALL_LIB}.log

SMALL_LIB选一个 cell 数量少、依赖简单的旧库,SMALL_OUT单独建目录,日志单独存。小库转换后先在 Virtuoso 里打开一个 cellview,检查 CDF 参数和层次,再决定是否转大库。CDF 丢失时不要急着重转,先确认 PDK 初始化脚本是否加载、cds.lib是否还指向旧 techfile 路径,很多“转换丢参数”其实是 PDK 环境没带全。

5.5 现象:同一库多次转换后目录混乱

现象是同一个库转了两三次,out目录里出现多个同名库,复制回 PDK 时不知道哪个是最新,cds.lib也出现重复DEFINE。原因是输出目录复用了,或者复制回 PDK 时没有把旧 OA 结果移走。解决时按库名和时间戳隔离输出目录,复制回 PDK 前先ls确认原路径只有一套库,cds.lib里同名库只留一条DEFINE。

# 列出工作目录下所有转换结果,按时间排序 ls -1dt /home/eda/cdb2oa_work/out/myOldLib_* 2>/dev/null | head -10 # 查 cds.lib 里同名库是否重复定义 grep -nE '^\s*DEFINE\s+myOldLib\s+' /home/eda/pdk_old/cds.lib /home/eda/cdb2oa_work/cds.lib 2>/dev/null

ls -1dt按修改时间倒序列出转换结果,最新的一般在最上面。grep查同名库是否有多条DEFINE,有重复就只保留指向当前 OA 库的那条,其余注释掉或移到备份配置。目录混乱时不要靠猜,先按时间戳和日志对上是哪一次转换,再把不用的结果移到out/_trash之类目录,别直接删到无法追溯。

6. 装完怎么验证:用三个检查确认 IC617 真的读的是 OA 库

6.1 启动日志里不再出现 CDB 警告

转换和复制完成后,从 PDK 目录重新启动 Virtuoso,把终端输出重定向到日志,等几秒再grep关键字。这个检查最直接:如果还出现ddUpdateLibList、OA executable on CDB或prop.xx,说明cds.lib或库目录还有 CDB 残留。注意要在新终端里跑,旧终端可能还带着之前的 PATH 和库路径。

cd /home/eda/pdk_old virtuoso > virtuoso_verify.log 2>&1 & sleep 8 grep -iE 'ddUpdateLibList|OA executable on CDB|prop\.xx' virtuoso_verify.log || echo "启动日志未见 CDB 警告"

sleep 8是给 Virtuoso 留启动时间,机器慢就加到 15 秒。grep没有匹配时返回非零,用|| echo给出明确提示。日志里如果只有普通加载信息,没有 CDB 关键字,再进下一步。

6.2 库目录检查:有 data.dm,没有 prop.xx

光看启动日志不够,还要直接查库目录。旧 CDB 库常见prop.xx,新 OA 库常见data.dm。下面这组检查可以做成脚本,每次转换后跑一遍。

LIB_DIR=/home/eda/pdk_old/myOldLib find "$LIB_DIR" -maxdepth 2 -name 'data.dm' -print find "$LIB_DIR" -maxdepth 3 \( -name 'prop.xx' -o -name '*.cdb' \) -print

第一条查 OA 标记,第二条查 CDB 残留。期望结果是第一条有输出、第二条没有输出。如果第二条有输出,先别在 Virtuoso 里保存任何 cellview,把残留文件移到备份目录,再重新检查cds.lib指向。

6.3 打开一个 cellview 做读档和另存验证

最后一步是实际打开一个 cellview,看层次、CDF 参数和符号是否正常。不要直接保存原库,先另存到一个测试库或复制一份 cellview 再保存。我一般会挑一个含器件参数的小 cell,打开后看 CDF 表单能不能正常弹出,再另存到测试库,确认保存不报错。这个动作能抓到“库能启动但保存失败”的问题。

检查项命令或动作期望
启动日志grepCDB 关键字无ddUpdateLibList警告
OA 标记find -name data.dm有输出
CDB 残留find -name prop.xx无输出
cellview 读档Library Manager 打开小 cell层次和 CDF 正常
另存测试复制到测试库保存不报库格式错误

如果另存时报错,先回滚到第 3 章的备份,再检查转换输出目录是不是混了旧库。回滚命令不要临时手写,按备份时间戳来:

cd /home/eda/pdk_old mv myOldLib myOldLib.oa.bad.$(date +%Y%m%d_%H%M) mv myOldLib.cdb.bak.20240101_1010 myOldLib

mv先把有问题的 OA 库移到一边,再把之前备份的 CDB 库改回原名。回滚后重新启动 Virtuoso,确认旧库还能打开,再从头排查转换步骤。从那以后我每次动 PDK 前都先跑一遍备份和cds.lib检查脚本,哪怕只是改一个DEFINE路径,也不省略。这套转换检查清单和cds.lib模板我整理在资源入口里,拿到后先按第 2 章核对版本,再照第 3 章备份,别一上来就覆盖原 PDK。希望帮到你。

本文还有配套的精品资源,点击获取

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/11/4 21:22:19

Qwen-Image-2.1 实测:7B 模型如何用 RGBA 原生输出省掉抠图

1. 为什么我会盯上 Qwen-Image-2.1 这个 7B 小模型第一次看到 Qwen-Image-2.1 这个版本号的时候,我其实没太当回事。7B 参数量的图像模型,放在 2026 年这个时间点,听起来像是"够用但不出彩"的定位。真正让我决定花一个周末认真测它…

作者头像 李华
网站建设 2026/11/4 21:21:00

数据库约束:原理、类型与最佳实践

1. 约束的本质与价值数据库约束就像交通规则对于城市道路的意义。我在处理某电商平台订单系统时,曾遇到因缺少约束导致的数据灾难——某次促销活动后,数据库中出现大量订单金额为负数、收货地址为空的异常记录。这正是缺乏有效约束的典型后果。约束的核心…

作者头像 李华
网站建设 2026/11/4 21:20:48

GRP-U8行政事业版退账记账错乱:四张核心表SQL排查修复

简介:面向用友 GRP-U8 管理软件行政事业版的使用者与二次开发人员,这份 doc 文档聚焦数据库表结构梳理,帮助读者从大量数据表与函数中快速锁定影响账务的核心对象。文档指出,日常维护真正有价值的仅四张表:GL_Yeb 余额…

作者头像 李华
网站建设 2026/11/4 21:19:12

Spring Boot中Redis读写分离架构实现与优化

1. Redis读写分离架构解析Redis作为高性能内存数据库,在实际生产环境中常常面临读多写少的场景。当单节点Redis实例无法满足业务需求时,读写分离架构成为提升系统吞吐量的有效方案。这种架构通过将写操作集中在主节点(Master),读操作分散到多…

作者头像 李华
网站建设 2026/11/4 21:19:01

Java网络编程:Socket套接字与TCP/UDP实战

1. Java网络编程基础与核心概念网络编程是现代软件开发中不可或缺的重要技能,它使得不同主机上的进程能够进行数据交换和通信。在Java生态中,网络编程主要围绕Socket套接字技术展开,这是实现跨进程通信的基础设施。1.1 网络通信的基本要素任何…

作者头像 李华
网站建设 2026/11/4 21:17:10

STM32整数插补法:用累加器实现亚微秒级运动控制

简介:本资源是一份面向嵌入式开发工程师与STM32初学者的实践型技术资料,聚焦于利用STM32微控制器实现步进电机高精度直线运动控制,核心解决运动控制中轨迹离散化、速度平滑调节与位置误差抑制等关键问题,适用于自动化设备、机器人…

作者头像 李华