OA實(shí)戰(zhàn):用cdb2oa遷移舊PDK到IC617)
簡(jiǎn)介這份PDF文檔面向需要將舊版CDB工藝庫遷移到IC617平臺(tái)的Cadence模擬與版圖工程師聚焦cdb2oa數(shù)據(jù)轉(zhuǎn)換及Virtuoso環(huán)境下的庫路徑處理定位為舊工藝庫兼容遷移的實(shí)操參考。文檔圍繞CDB轉(zhuǎn)OA的實(shí)際流程展開涵蓋轉(zhuǎn)換工具調(diào)用、庫路徑保存、轉(zhuǎn)換后庫的檢查與驗(yàn)證并對(duì)ddUpdateLibList等常見警告給出排查思路適合具備一定Virtuoso使用基礎(chǔ)、正處理舊工藝庫兼容問題的讀者參考。資源包共1個(gè)PDF文件大小約697KB輕量便于隨查隨用。目前已有1556人學(xué)習(xí)下載。通過這份材料讀者可系統(tǒng)了解CDB與OA格式不兼容時(shí)的處理路徑掌握轉(zhuǎn)換前后的檢查要點(diǎn)減少舊庫在IC617中無法運(yùn)行的問題并借鑒轉(zhuǎn)換后庫復(fù)制與驗(yàn)證的實(shí)踐思路對(duì)舊工藝庫報(bào)錯(cuò)、庫列表更新異常及轉(zhuǎn)換后數(shù)據(jù)完整性確認(rèn)等場(chǎng)景也給出排查脈絡(luò)可減少反復(fù)試錯(cuò)。1. 舊 PDK 掛上 IC617 就報(bào) OA executable on CDB dataCDB 與 OA 到底差在哪里把 IC5141 時(shí)代的工藝庫直接指到 IC617 的 Virtuoso 里CIW 里十有八九先彈出一行Warning: ddUpdateLibList: It appears that you are trying to run an OA executable on CDB data接著庫是灰的、cellview 打不開、器件欄里空空如也。問題并不在于 Virtuoso 裝壞了也不在于 license 掉了原因是你手上這份 PDK 還停在 CDB 格式而 IC617 只認(rèn) OA。cdb2oa 就是干這件事的把整個(gè)工藝庫的 layout、schematic、symbol 和 CDF 參數(shù)一起翻譯成 OA 庫讓舊工藝庫在新平臺(tái)上重新跑起來。適合手上積壓了不少老工藝庫、又必須把設(shè)計(jì)環(huán)境升級(jí)到 IC617 的人如果你只是臨時(shí)查一個(gè)舊版圖那就別動(dòng)庫另開一臺(tái)機(jī)器更省事。2. 轉(zhuǎn)換前的三件準(zhǔn)備備份、cds.lib 副本與磁盤余量真正讓轉(zhuǎn)換失敗得更徹底的往往是一開始就對(duì)著 PDK 原目錄動(dòng)手。cdb2oa 不是一個(gè)具備事務(wù)性的工具它沒有回滾中途斷掉之后原位留下的庫就會(huì)同時(shí)帶有 CDB 與 OA 兩套特征之后不管你怎么重跑都容易得到莫名其妙的結(jié)果。所以準(zhǔn)備工作比轉(zhuǎn)換本身更值得花時(shí)間。2.1 先分清 CDB 庫和 OA 庫在磁盤上長(zhǎng)什么樣不用打開 Virtuoso 也能判斷一個(gè)庫是什么格式。CDB 庫的根目錄下會(huì)有prop.xx、master.tag、data.dm這幾個(gè)特征文件每個(gè) cell 是一個(gè)目錄里面放的是老式二進(jìn)制庫文件OA 庫的根目錄同樣有data.dm但 cell 目錄里換成了layout.oa、sch.oa、symbol.oa這類按 view 分開的文件prop.xx和master.tag都不應(yīng)該再出現(xiàn)。報(bào)錯(cuò)信息里那句contains file prop.xx which is CDB data本質(zhì)就是 Virtuoso 在庫根目錄掃到了 CDB 的標(biāo)記文件于是判定整個(gè)庫不屬于 OA。我一般先跑一遍掃描把 PDK 里到底有幾個(gè)庫需要轉(zhuǎn)換、分別藏在哪個(gè)子目錄搞清楚順便確認(rèn)沒有漏掉符號(hào)鏈接指向的庫# 在 PDK 根目錄下掃一遍有 prop.xx 的就是 CDB 庫需要轉(zhuǎn)換 cd /path/to/pdk find . -maxdepth 3 -name prop.xx -printf %h\n | sort -u # 順手看看哪些庫目錄其實(shí)是軟鏈接轉(zhuǎn)換時(shí)要特別對(duì)待 find . -maxdepth 3 -type l -ls這條find的-printf %h是打印文件所在目錄而不是文件本身直接得到庫路徑比-name后自己截字符串省事。第二步列軟鏈接很關(guān)鍵cdb2oa 遇到指向別處的符號(hào)鏈接時(shí)行為不完全一致有的版本會(huì)老老實(shí)實(shí)跟進(jìn)去有的版本會(huì)直接報(bào)cannot open library提前知道總比事后猜好。注意轉(zhuǎn)換是單向的我沒見過可靠的反向工具能把 OA 庫退回 CDB。備份是這件事里唯一的回退手段不要省。2.2 把 Library Path File 存一份副本到 homecdb2oa 的入口是一個(gè)cds.lib輸出默認(rèn)落在你運(yùn)行轉(zhuǎn)換時(shí)的當(dāng)前目錄。直接拿 PDK 里那份正式cds.lib去跑等于讓轉(zhuǎn)換結(jié)果和原庫混在同一個(gè)目錄樹下一旦出錯(cuò)清理起來非常麻煩。常規(guī)做法是先把庫路徑文件另存一份到自己的 home在副本上做文章轉(zhuǎn)完再回填。圖形界面的路徑是啟動(dòng)virtuoso 進(jìn) CIW 菜單Edit→Library Path在彈窗里選File→Save As把文件保存到 home 目錄文件名隨意比如cds_conv.lib確認(rèn)后OK。存出來的文件內(nèi)容長(zhǎng)這樣DEFINE 某工藝庫 /path/to/pdk/某工藝庫 DEFINE 某模擬庫 /path/to/pdk/某模擬庫 INCLUDE /path/to/pdk/cds.lib要留意最后那行INCLUDE。它會(huì)把 PDK 原版cds.lib的內(nèi)容整段并進(jìn)來于是同一個(gè)庫名被定義了兩次。Virtuoso 解析庫路徑時(shí)按先到先得處理重復(fù)定義的第二條基本不生效這就是后面明明轉(zhuǎn)好了卻還報(bào)舊錯(cuò)的根源。手工把INCLUDE行刪掉或注釋掉只保留你真正要轉(zhuǎn)的那幾個(gè)DEFINE是最穩(wěn)妥的做法。庫多的時(shí)候我會(huì)讓副本只留待轉(zhuǎn)庫轉(zhuǎn)完一批再追加下一批一次只推進(jìn)一小步。2.3 環(huán)境自檢工具在不在、盤夠不夠、版本對(duì)不對(duì)動(dòng)手前有三件事值得花兩分鐘確認(rèn)。第一cdb2oa是不是在 PATH 里、-help能不能正常輸出——有些站點(diǎn)是整套 Virtuoso 裝在共享目錄、靠環(huán)境腳本掛進(jìn)來的換個(gè)終端窗口就找不到了。第二磁盤余量。轉(zhuǎn)換會(huì)在旁邊完整生成一份 OA 庫工藝庫動(dòng)輒幾個(gè) GBdf -h看一眼目標(biāo)分區(qū)留出至少兩倍庫體積的空間跑到一半No space left on device是最難受的失敗方式。第三版本一致性同一臺(tái)機(jī)器上裝多套 Virtuoso 時(shí)各自內(nèi)置的 OA 版本不一樣A 機(jī)器轉(zhuǎn)出來的庫拿到 B 機(jī)器上打不開是常有的事團(tuán)隊(duì)里最好先約定用哪一套環(huán)境做轉(zhuǎn)換。# 1) 工具是否可用 which cdb2oa cdb2oa -help | head -30 # 2) 目標(biāo)分區(qū)余量對(duì)比一下庫體積 du -sh /path/to/pdk df -h /path/to/pdk ~ # 3) 確認(rèn)當(dāng)前 shell 用的是哪套 Virtuoso 環(huán)境 echo $CDS_INST_DIRCDS_INST_DIR是 Virtuoso 安裝根目錄的環(huán)境變量很多站點(diǎn)靠它切換版本。三行命令跑完你對(duì)能不能轉(zhuǎn)、在哪兒轉(zhuǎn)、轉(zhuǎn)完放哪兒就有底了。這一步看著瑣碎但它能擋掉后面一半的返工。3. 跑 cdb2oaConversion Toolbox 圖形流程與命令行等價(jià)寫法準(zhǔn)備工作做完轉(zhuǎn)換本身其實(shí)很快。圖形界面和命令行兩條路都能走通界面適合第一次摸清楚流程命令行適合重復(fù)執(zhí)行和寫進(jìn)腳本。兩條路跑的是同一套引擎日志格式也一樣學(xué)會(huì)看日志比學(xué)會(huì)點(diǎn)按鈕更值錢。3.1 圖形界面Conversion Toolbox 的三個(gè)必填項(xiàng)在已經(jīng)打開 Virtuoso 的 CIW 里進(jìn)Tools→Conversion Toolbox在工具箱里選CDB to OpenAccess Translator彈出的對(duì)話框里核心只有三個(gè)輸入待轉(zhuǎn)換的cds.lib路徑、要轉(zhuǎn)的庫名、以及輸出目錄。把 2.2 存到 home 的那份cds_conv.lib填進(jìn)第一欄庫名從下拉里挑輸出目錄給一個(gè)干凈的臨時(shí)目錄比如~/cdb2oa_work確認(rèn)后點(diǎn)OK就開始跑。界面會(huì)顯示進(jìn)度轉(zhuǎn)換時(shí)間完全取決于庫的規(guī)模幾十個(gè) cell 的小庫一兩分鐘就結(jié)束上千個(gè) cell 加上大量 pcell 的完整工藝庫跑上半小時(shí)也不奇怪。這期間別去動(dòng) PDK 目錄也別在同一個(gè)輸出目錄里再開一個(gè)轉(zhuǎn)換任務(wù)兩個(gè)進(jìn)程往同一處寫結(jié)果不可預(yù)期。提示轉(zhuǎn)換期間 Virtuoso 界面可能會(huì)短暫無響應(yīng)這是正常的不要急著點(diǎn)關(guān)閉。真的卡死了再看日志最后一行停在哪里比反復(fù)重啟有用。圖形界面跑完之后進(jìn)輸出目錄確認(rèn)一眼應(yīng)該能看到一個(gè)和原庫同名的目錄根目錄下不再有prop.xx與master.tag而是data.dm加一堆 cell 目錄。到這一步格式轉(zhuǎn)換在技術(shù)上已經(jīng)完成剩下的活是驗(yàn)證和回填。3.2 命令行寫法cdb2oa 的常用參數(shù)命令行更適合批量操作和留痕。各版本cdb2oa的參數(shù)名略有出入動(dòng)手前先跑一次cdb2oa -help確認(rèn)下面這套是我在 IC617 環(huán)境下一直用的寫法# 建獨(dú)立工作目錄輸出會(huì)落在當(dāng)前目錄下 mkdir -p ~/cdb2oa_work cd ~/cdb2oa_work # 轉(zhuǎn)換單個(gè)庫cdslib 指副本lib 指庫名log 單獨(dú)留檔 cdb2oa \ -cdslib ~/cds_conv.lib \ -lib 某工藝庫 \ -log cdb2oa_某工藝庫.log # 退出碼為 0 只代表進(jìn)程正常結(jié)束不代表所有數(shù)據(jù)都轉(zhuǎn)成功 echo exit code: $?幾個(gè)參數(shù)的含義值得說清楚。-cdslib必須指向你準(zhǔn)備好的那份副本它決定了工具從哪里讀取庫路徑-lib是庫名必須與cds.lib里DEFINE后面的名字一字不差大小寫敏感寫成目錄名就會(huì)報(bào)找不到庫。-log強(qiáng)烈建議每次都指定并帶上庫名批量轉(zhuǎn)換時(shí)日志混在一起排查起來會(huì)非常痛苦。還有一個(gè)參數(shù)是-replace作用是輸出目錄里已經(jīng)存在同名庫時(shí)覆蓋重建。第一次轉(zhuǎn)換千萬別加它會(huì)讓工具跳過覆蓋確認(rèn)直接寫入萬一你輸出目錄填錯(cuò)填成了 PDK 目錄原始 CDB 庫當(dāng)場(chǎng)就沒了。等流程跑順、確認(rèn)路徑無誤之后重復(fù)執(zhí)行時(shí)再加能省掉手工清理的步驟。# 只有確認(rèn)輸出目錄絕對(duì)正確、且是重復(fù)執(zhí)行時(shí)才加 -replace cdb2oa -cdslib ~/cds_conv.lib -lib 某工藝庫 -log cdb2oa_r2.log -replace3.3 日志怎么讀哪些 warning 可以放過哪些必須停轉(zhuǎn)換日志是唯一能告訴你哪些數(shù)據(jù)沒過來的東西但它的信息量很大從頭讀會(huì)淹掉。我的做法是先按級(jí)別篩# 先看有沒有 ERROR再看 WARNING 的分布 grep -nE ^ERROR cdb2oa_某工藝庫.log | head -20 grep -cE ^WARNING cdb2oa_某工藝庫.log grep -nE ^WARNING cdb2oa_某工藝庫.log | awk -F: {print $3} | sort | uniq -c | sort -rn | head第三條命令把 warning 內(nèi)容去重計(jì)數(shù)一眼就能看出是某一個(gè) pcell 反復(fù)報(bào)警還是幾百條各不相同的告警。前者通常只影響單個(gè)器件后者往往意味著整類數(shù)據(jù)遷移有問題需要停下來查。實(shí)踐中可以把日志分成三檔處理。INFO級(jí)全部放過那是進(jìn)度信息。WARNING里關(guān)于 CDF 參數(shù)缺失、pcell 回調(diào)解析失敗、某個(gè) cellview 被跳過的逐條記錄下來這些是后面 CDF 參數(shù)丟失的直接原因?qū)儆诒仨毧吹槐赝5念悇e。真正出現(xiàn)ERROR、或者日志在某一行之后不再增長(zhǎng)、進(jìn)程退出碼非零那就停刪掉輸出目錄從頭來不要在殘缺結(jié)果上繼續(xù)往下做。4. 回填 PDK 并驗(yàn)證從 ls 到放一顆器件轉(zhuǎn)換成功不等于能用。我見過太多次日志干干凈凈、庫也能打開結(jié)果一放器件 CDF 參數(shù)全是空的或者版圖打開發(fā)現(xiàn) tech file 沒綁上?;靥钸@一步的價(jià)值在于把問題攔在替換之前——舊庫還在原地隨時(shí)可以退回去。4.1 替換前先做只讀驗(yàn)證第一層驗(yàn)證在文件層面純ls就能做不用開 Virtuoso# 期望沒有 prop.xx / master.tag有 data.dm 和若干 cell 目錄 cd ~/cdb2oa_work ls -d 某工藝庫 find 某工藝庫 -maxdepth 1 -type f -printf %f\n | sort find 某工藝庫 -maxdepth 1 -type d | wc -l # cell 數(shù)量和原庫對(duì)一下 # 抽查幾個(gè)關(guān)鍵 cell 的 view 是否齊全 ls 某工藝庫/某nmos器件/最后一條最關(guān)鍵一個(gè) MOS 器件的 cell 目錄里symbol、layout、schematic、auLvs、cdsTerm這些標(biāo)準(zhǔn) view 應(yīng)該都在。如果只有l(wèi)ayout而沒有symbol說明轉(zhuǎn)換在某個(gè)環(huán)節(jié)跳過了數(shù)據(jù)回填之后你會(huì)在原理圖里找不到這個(gè)器件。cell 數(shù)量也要跟原 CDB 庫比一比差得太多就是沒轉(zhuǎn)全。第二層驗(yàn)證是把新庫臨時(shí)掛到一個(gè)干凈的cds.lib下打開完全不動(dòng) PDK 原目錄mkdir -p ~/oa_verify cd ~/oa_verify cat cds.lib EOF DEFINE 某工藝庫 /home/你的賬號(hào)/cdb2oa_work/某工藝庫 EOF virtuoso 這樣打開的 Virtuoso 只認(rèn)識(shí)新庫不會(huì)被 PDK 里其他舊庫干擾出問題也污染不到正式環(huán)境。在 Library Manager 里展開庫、雙擊幾個(gè) cellview 看能不能正常打開是最快的判定方式。4.2 回填先改名不要直接刪源文章里的做法是把 home 下轉(zhuǎn)換好的庫復(fù)制回 PDK、覆蓋原目錄。我更傾向于把刪除換成改名留檔成本和刪一次差不多但留下了后悔的機(jī)會(huì)cd /path/to/pdk # 舊庫改名留檔不刪日期后綴方便以后追溯 mv 某工藝庫 某工藝庫.cdb.bak.$(date %Y%m%d) # 把轉(zhuǎn)換結(jié)果整體搬進(jìn)來-a 保留權(quán)限和時(shí)間戳 cp -a ~/cdb2oa_work/某工藝庫 ./某工藝庫 # 確認(rèn)目錄結(jié)構(gòu)回來了 ls -ld 某工藝庫 ls 某工藝庫 | headcp -a里的-a等價(jià)于-dR --preserveall會(huì)把符號(hào)鏈接、權(quán)限、時(shí)間戳原樣帶過去這在 PDK 場(chǎng)景下很重要——工藝庫里的文件權(quán)限經(jīng)常是只讀的用普通cp -r搬過去之后會(huì)被umask改掉后面想改都改不了。搬完之后還要檢查 PDK 自己的cds.lib。因?yàn)閹炷夸浢麤]變、路徑也沒變正常情況下一行都不用改。但如果 PDK 里有多個(gè)cds.lib根目錄一個(gè)、子目錄一個(gè).cdsinit里又INCLUDE了第三個(gè)同樣會(huì)出現(xiàn)重復(fù)定義。用一條命令把所有定義點(diǎn)找出來grep -rn DEFINE[[:space:]]*某工藝庫 /path/to/pdk --includecds.lib --include*.cdsinit同時(shí)確認(rèn) home 里那份臨時(shí)的cds_conv.lib已經(jīng)不再被任何啟動(dòng)腳本INCLUDE。我吃過這個(gè)虧驗(yàn)證用的臨時(shí)路徑忘了清啟動(dòng)時(shí)新庫被臨時(shí)路徑搶先定義PDK 里明明換好了打開還是老樣子白白查了一下午。4.3 用一顆器件跑通最后一公里cd /path/to/pdk virtuoso 進(jìn)了 Virtuoso 之后按順序做四件事Library Manager 里確認(rèn)庫出現(xiàn)在列表中且能展開打開一個(gè)器件的 symbol看管腳名和圖形是否正常新建一個(gè) schematic從器件庫里把這個(gè) MOS 放進(jìn)去雙擊器件打開屬性框看寬長(zhǎng)比、模型名、m 值這些 CDF 參數(shù)是不是都在。最后那一步是整個(gè)流程里唯一能驗(yàn)證 CDF 轉(zhuǎn)換是否成功的動(dòng)作也最容易被跳過。CDF 參數(shù)丟失在文件層面完全看不出來——.oa文件該有的都在庫也能打開就是屬性框空著。等你在仿真階段才發(fā)現(xiàn)模型名傳不進(jìn)去排查成本就完全不同了。版圖側(cè)同理打開一個(gè)器件 layout確認(rèn) tech file 綁上了LSW里有層次、能正常打孔否則后面 DRC 會(huì)一路報(bào)錯(cuò)。5. 常見問題cdb2oa 轉(zhuǎn)換里最容易翻車的五類5.1 路徑與權(quán)限類現(xiàn)象一轉(zhuǎn)換跑到一半報(bào)cannot open library或者日志里某個(gè)庫直接跳過。原因通常是兩種庫目錄里存在指向別處的符號(hào)鏈接工具跟不進(jìn)去或者 PDK 是從共享盤只讀掛載的轉(zhuǎn)換過程需要往庫目錄里寫臨時(shí)文件寫不進(jìn)去就中斷。解決辦法是先把這個(gè)庫整體復(fù)制到本地可寫目錄再轉(zhuǎn)用cp -aL而不是cp -a——-L會(huì)把符號(hào)鏈接解引用成真實(shí)文件把鏈接指向的內(nèi)容一并搬過來之后再無鏈接依賴。轉(zhuǎn)完把結(jié)果搬回去時(shí)再用cp -a保持原有結(jié)構(gòu)。現(xiàn)象二轉(zhuǎn)完回填啟動(dòng) Virtuoso 仍然報(bào)prop.xx which is CDB data而且報(bào)的是新庫?;究梢詳喽ㄊ莄ds.lib里同一個(gè)庫名定義了兩次第一次還指向舊目錄。Virtuoso 取先出現(xiàn)的定義你看到的新庫其實(shí)根本沒被加載。用 4.2 里那條grep -rn DEFINE把所有定義點(diǎn)列出來逐個(gè)清理重點(diǎn)查.cdsinit、cds.lib里的INCLUDE行、以及你自己驗(yàn)證時(shí)留下的臨時(shí)文件。5.2 數(shù)據(jù)與版本類現(xiàn)象三庫能打開器件能放但屬性框里 CDF 參數(shù)是空的。原因在于老 PDK 的 CDF 回調(diào)里大量使用了 CDB 時(shí)代的寫法轉(zhuǎn)換工具無法解析全部回調(diào)只能在日志里留一條WARNING然后跳過。這種情況在純模擬工藝庫里非常普遍。解決方法分兩步先在日志里把所有 CDF 相關(guān)的告警撈出來定位到具體 cell再用 CDF Editor 手工補(bǔ)參數(shù)或者在允許的前提下聯(lián)系 PDK 提供方索取 OA 版本的 CDF 定義直接導(dǎo)入。器件數(shù)量超過幾十個(gè)時(shí)手工補(bǔ)不現(xiàn)實(shí)第二條路才是正解?,F(xiàn)象四轉(zhuǎn)換后的庫在同事機(jī)器上打不開或者打開后 layout 一片空白。多數(shù)是 OA 版本不一致。不同版本的 Virtuoso 內(nèi)置的 OA 版本不同高版本寫的庫在低版本上讀會(huì)出問題。解決辦法是團(tuán)隊(duì)內(nèi)統(tǒng)一轉(zhuǎn)換環(huán)境別各轉(zhuǎn)各的如果一定要跨版本就在轉(zhuǎn)換工具里把目標(biāo) OA 版本顯式設(shè)成兩邊都支持的那個(gè)轉(zhuǎn)換時(shí)多花幾分鐘比事后返工劃算。5.3 中斷與殘留類現(xiàn)象五轉(zhuǎn)換被 Ctrl-C 打斷或機(jī)器斷連輸出目錄里一半 OA 一半 CDB。別試圖手工清理拼接。cdb2oa 不具備事務(wù)性中斷后留下的目錄里可能既有轉(zhuǎn)換完成的.oa文件又有沒處理完的中間狀態(tài)你無法靠文件名判斷哪些是完整的。唯一正確的處理是rm -rf整個(gè)輸出目錄從干凈狀態(tài)重來。這也是 2.2 強(qiáng)調(diào)在獨(dú)立工作目錄轉(zhuǎn)換的原因——原始 CDB 庫全程保持只讀任何時(shí)候都能重新開一局。6. 多庫批處理把 cdb2oa 包進(jìn)腳本加一道轉(zhuǎn)換后自檢一個(gè)完整 PDK 往往掛著十幾個(gè)庫逐個(gè)點(diǎn)界面不現(xiàn)實(shí)寫成腳本一次推完更省事。核心思路很簡(jiǎn)單從cdslib里把所有DEFINE行抽出來逐個(gè)調(diào)用轉(zhuǎn)換日志按庫名分開存。#!/bin/bash # batch_cdb2oa.sh把一個(gè) cds.lib 里的庫逐個(gè)轉(zhuǎn)成 OA set -u CDSLIB${1:?用法: batch_cdb2oa.sh cds.lib} WORK${2:-$HOME/cdb2oa_work} mkdir -p $WORK cd $WORK || exit 1 # 只取 DEFINE 行INCLUDE / SOFTINCLUDE / ASSIGN / UNDEFINE 一律跳過 grep -E ^[[:space:]]*DEFINE[[:space:]] $CDSLIB | awk {print $2} | while read -r lib; do echo 正在轉(zhuǎn)換: $lib # 失敗不中斷記下來最后統(tǒng)一看 cdb2oa -cdslib $CDSLIB -lib $lib -log cdb2oa_${lib}.log || \ echo !! 轉(zhuǎn)換失敗: $lib查 cdb2oa_${lib}.log doneset -u讓未定義變量直接報(bào)錯(cuò)而不是靜默變成空值避免cdslib傳錯(cuò)時(shí)把庫轉(zhuǎn)到奇怪的地方。循環(huán)里故意不exit一個(gè)庫失敗不影響其余庫繼續(xù)跑跑完統(tǒng)一看日志比中斷在第一處更有效率。awk {print $2}取第二個(gè)字段是庫名第一個(gè)是DEFINE第三個(gè)是路徑。轉(zhuǎn)換完之后再跑一道自檢一行都不用開 Virtuoso# 庫根目錄還有 prop.xx 就說明這個(gè)庫沒轉(zhuǎn)成功 cd $WORK for d in */; do [ -e $5glq3a94yprop.xx ] echo 仍是 CDB: $d || echo OK: $d done配合下面這張清單基本能把回填前的風(fēng)險(xiǎn)擋掉大半檢查項(xiàng)做法通過標(biāo)準(zhǔn)格式已切換找?guī)旄夸浻袩oprop.xx、master.tag兩者都不存在cell 數(shù)量一致對(duì)比新舊庫的一級(jí)目錄數(shù)差值在個(gè)位數(shù)以內(nèi)關(guān)鍵 view 齊全抽查 MOS、電阻等器件的 cell 目錄symbol/layout/schematic都在日志無致命錯(cuò)grep -E ^ERROR日志無輸出CDF 可用Virtuoso 里放一顆器件看屬性框參數(shù)完整、模型名正常這套流程我現(xiàn)在每次動(dòng) PDK 都會(huì)完整走一遍打包備份、改 home 里的cds.lib副本、轉(zhuǎn)換、只讀驗(yàn)證、mv舊庫再回填一步都不跳。早年間圖快直接在 PDK 原目錄上跑轉(zhuǎn)換中途磁盤寫滿一個(gè)用了三年的工藝庫當(dāng)場(chǎng)變成半 CDB 半 OA 的狀態(tài)最后是靠一臺(tái)沒人動(dòng)過的備份機(jī)才救回來。從那以后我就認(rèn)一個(gè)理格式轉(zhuǎn)換這種事寧可多花二十分鐘做備份和驗(yàn)證也不要在出事之后找后悔藥。希望幫到你。本文還有配套的精品資源點(diǎn)擊獲取