階:仿真、PDK管理、CDL導(dǎo)入與SKILL腳本實戰(zhàn))
簡介面向模擬與混合信號IC設(shè)計初學(xué)者與從業(yè)者這份Cadence Virtuoso教程系統(tǒng)梳理了從軟件啟動到版圖驗證的完整操作流程。內(nèi)容覆蓋Linux環(huán)境下virtuoso調(diào)用、設(shè)計庫與原理圖新建、繪圖工具及常用快捷鍵并深入展開DC仿真環(huán)境設(shè)置、觀察結(jié)果與狀態(tài)保存同時講解版圖繪制、DRC與LVS后端驗證方法可直接支撐實際項目中的典型設(shè)計任務(wù)。壓縮包為1個PDF文件約7.76MB便于離線閱讀與打印。目前已有18878人學(xué)習(xí)下載適合剛接觸Virtuoso工具鏈或需要系統(tǒng)化復(fù)習(xí)的讀者。相較于零散的網(wǎng)絡(luò)資料本教程目錄結(jié)構(gòu)清晰從入門操作逐步遞進(jìn)到后端驗證提供大量步驟化說明能幫助用戶快速上手減少摸索成本。1. 為什么電路設(shè)計老手最后都回到 Virtuoso從原理圖到流片的完整鏈路帶過幾個項目的新人最容易在第一次接觸 Cadence Virtuoso 時懵掉——界面是上個世紀(jì)的風(fēng)格菜單層級深得離譜連放一個電阻都要選半天庫。但做模擬電路設(shè)計久了你會發(fā)現(xiàn)從原理圖編輯、DC/AC/Transient 仿真、版圖繪制到 DRC/LVS 和后仿整個鏈路幾乎全在 Virtuoso 這個環(huán)境里閉環(huán)。學(xué)校里常用的 Multisim 或 Tina 仿得再開心到了真正要流片驗證、面對 foundry PDK 的時候還是得回到 Virtuoso 來。很多人把 Virtuoso 和 Allegro 搞混——Allegro 是畫 PCB 的Virtuoso 是畫芯片版圖和做電路仿真的兩者都是 Cadence 家的工具但領(lǐng)域完全不同。這篇教程不打算把界面按鈕逐個念一遍而是按一條能落地的路徑走先把一個最小電路仿真跑通再解決多工藝庫管理和 CDL 網(wǎng)表導(dǎo)入最后把高頻報錯一個個拆掉再用 SKILL 腳本把重復(fù)勞動干掉。適合剛拿到 PDK 不知道怎么下手、仿真報錯不知道從哪查、在兩個工藝庫之間反復(fù)橫跳切不干凈的人。2. 從零跑通第一個原理圖仿真工藝庫、PDK 與模型庫三者別搞混2.1 工藝庫、PDK、模型庫各自干什么這三個概念是 Virtuoso 里所有混亂的根源。很多教程把“安裝 PDK”和“加載模型庫”混著說導(dǎo)致新人以為掛上 cds.lib 就能仿真結(jié)果一跑就報“cell not found”或者“器件未定義”。工藝庫Library是 Virtuoso 里存放 CellView 的容器你在 Library Manager 里看到的每一個名字本質(zhì)上是一個目錄里面按 cell 和 view 組織數(shù)據(jù)。PDK 則是 foundry 或第三方提供的完整開發(fā)套件包含器件符號symbol、CDF 參數(shù)組件描述格式、Spectre 模型文件、DRC/LVS rule deck、技術(shù)文件等等。安裝 PDK 后它會在你的工作目錄里生成一個或多個工藝庫。模型庫Model Library則是一份文本文件通常是.scs或.lib后綴里面寫了各個器件的 SPICE 模型參數(shù)仿真器靠它算出管子電流。三者之間的關(guān)系一句話PDK 裝好后映射成工藝庫仿真時把工藝庫里配套的模型文件掛到 ADE 環(huán)境里。常見做法是從 foundry 的支持網(wǎng)站或公司的 CAD 部門拿到 PDK 壓縮包解壓后運行安裝腳本。安裝腳本會問你安裝路徑、工藝名、工具版本兼容性等我一般會建一個干凈的目錄比如~/tech每個工藝單獨占一個子目錄后面切工藝時不會互相污染。2.2 cds.lib 的環(huán)境語法與啟動配置Virtuoso 能不能看到某個工藝庫完全取決于啟動目錄下的cds.lib。這個文件里用DEFINE關(guān)鍵字把邏輯庫名映射到物理路徑語法很直白# 把 gpdk090 這個庫名映射到當(dāng)前目錄下的 gpdk090 子目錄 DEFINE gpdk090 ./gpdk090 # 系統(tǒng)自帶的模擬基本庫 DEFINE analogLib $CDS_INST_DIR/tools/dfII/samples/analogLib # 另一個工藝庫 DEFINE tsmc180 /home/user/tech/tsmc180注意幾個點。第一DEFINE后面的路徑必須是絕對路徑或者相對當(dāng)前啟動目錄的路徑寫錯一個字符 Virtuoso 根本不會啟動那個庫而且報錯信息經(jīng)常是含糊的“Cannot open file”。第二analogLib是系統(tǒng)自帶的包含vdc、vsin、gnd、res這些基礎(chǔ)符號必須保留。第三當(dāng)你新開一個工作目錄時最穩(wěn)妥的做法是復(fù)制一份公共的cds.lib到本地再增刪而不是從頭手寫。我吃過一次虧手動寫的 cds.lib 漏掉了display.drf對應(yīng)的技術(shù)文件定義結(jié)果版圖編輯器里所有圖層顏色都是黑的查了半天。.cdsinit文件同樣重要它是 Virtuoso 啟動時自動加載的 SKILL 腳本里面通常配置了默認(rèn)的庫路徑、快捷鍵、加載一些自定義菜單。如果.cdsinit寫了不兼容的 SKILL 代碼Virtuoso 會啟動失敗或者界面異常。遇到啟動問題可以用virtuoso -nograph先跑起來看 CIW 里的報錯。2.3 創(chuàng)建原理圖并放置器件環(huán)境配好后開始在 Library Manager 里建庫和 cell。右鍵新建 Library指定一個物理路徑然后在這個庫下新建 CellView 選schematic。一進(jìn)來就是 Schematic Editor 窗口左側(cè)工具條上有元件添加、連線、打 pin、移動、復(fù)制等主要功能。放置器件時建議先把基礎(chǔ)電源和地符號從analogLib里放進(jìn)來再從 PDK 工藝庫里放 MOS 管、電阻、電容。PDK 庫里的器件通常以nmos4、pmos4、res、cap這類名字命名放上去后按q鍵或者菜單 Edit - Properties 打開屬性編輯。這里有個關(guān)鍵參數(shù)Model Name。這個參數(shù)決定了仿真時用模型文件里的哪一段模型例如nfet、pfet。如果 Model Name 填成空白仿真就會報“器件未定義”。連線時注意Virtuoso 的 wire 工具會自動識別兩個 pin 是否同電位線頭必須吸附到 pin 的紅色小方塊上才算連好。很多新手連完線發(fā)現(xiàn)仿真報“節(jié)點短路”或者“浮空節(jié)點”就是因為線沒吸上或者有重復(fù)名字的 label。放置器件后還要用 Pin 工具把輸入輸出標(biāo)出來。比如一個最簡單的反相器需要vin、vout、vdd、gnd四個 pin。所有 pin 的名字要全局唯一否則導(dǎo)出網(wǎng)表時會出現(xiàn)節(jié)點名沖突。完成這些后按Check and Save原理圖會用幾何和電氣規(guī)則做檢查如果有 pin 浮動、短路或者非法連接CIW 里會列出問題條目。2.4 ADE L 仿真設(shè)置模型庫與仿真器選型原理圖保存后從 Schematic Editor 菜單 Launch - ADE L 打開仿真環(huán)境。ADE L 是 Virtuoso 里最常用的仿真入口雖然老但穩(wěn)定。第一件事是選擇仿真器Setup - Simulator/Directory Host常見選spectre。Spectre 是 Virtuoso 自家的 SPICE 級仿真器收斂性和速度在模擬電路里口碑不錯PDK 的模型文件也基本都適配它。如果項目要求 hspice 或 ultrasim也可以切換但模型文件格式要對應(yīng)。然后配置模型庫Setup - Model Libraries把 PDK 提供的模型文件添加進(jìn)去。不同的 foundry 文件命名習(xí)慣不同常見的像xx180_spectre.scs、model.typ這種。添加后可以在窗口里選中文件在 Section 里指定typ或min/max角仿真器會按對應(yīng)角加載模型參數(shù)。這里最容易翻車一次掛了兩個工藝的模型文件Spectre 會在加載時報模型名重復(fù)定義或者直接讓某些器件找不到模型。接下來在 Analyses 里選擇仿真類型。做 DC 時要選dc設(shè)置掃描變量和范圍做 AC 要設(shè)置掃描頻率點和輸入源做瞬態(tài)要設(shè)置Stop Time和Max Step。Stop Time 取決于電路工作周期比如 1MHz 時鐘就至少跑到 5us。Max Step 設(shè)太大波形會失真設(shè)太小仿真極慢我一般先讓 Spectre 自動決定步長等發(fā)現(xiàn)問題再手動收緊。2.5 跑通最小仿真的操作序列最小可仿真的例子建一個 PMOS 和 NMOS 組成的反相器輸入接方波脈沖源輸出接一個電容負(fù)載。下面是啟動 Virtuoso 以及加載腳本的常用命令序列# 進(jìn)入工作目錄 cd ~/work/inverter # 啟動 Virtuoso后臺運行 virtuoso # 如果只需要跑仿真不用圖形界面 virtuoso -nograph啟動后在 CIW 窗口的菜單里依次操作File - New - Library 創(chuàng)建庫在 Library Manager 里右鍵新建 Cell 并打開 schematic放置器件并連線Launch - ADE L 配置模型庫和分析跑仿真。這套流程第一次走通常會卡在模型庫路徑上遇到“cadence仿真器件未定義”的報錯優(yōu)先去 Model Libraries 檢查路徑和 Section 是否選對而不是懷疑原理圖畫錯了。3. 多工藝庫與 PDK 管理裝多個工藝庫、切換工藝、避免器件事例錯亂3.1 同一套 Virtuoso 掛多個工藝庫的場景做項目經(jīng)常需要對比不同代工廠的工藝比如 TSMC 180nm、SMIC 55nm或者學(xué)校/公司自己封裝過的測試工藝。每個 PDK 都會在 cds.lib 里注冊自己的工藝庫名幾套工藝同時掛在同一個工作目錄下技術(shù)上完全可行也是 Virtuoso 被設(shè)計出來的常見用法。最常見的場景有兩種。一種是課題組或公司買了多套 PDK每個流片項目用一到兩個工藝需要在同一個環(huán)境里切換。另一種是同一個工藝有多個版本比如 PDK 從 v1.3 升到 v1.4老的版本又不能立刻刪掉需要并存一段時間做對比仿真和版圖驗證。這兩種場景下cds.lib 里多個DEFINE同時存在并不會沖突真正沖突的是仿真模型庫和器件屬性。3.2 多 PDK 安裝的目錄規(guī)劃與記錄安裝多個 PDK 時目錄規(guī)劃比安裝本身更重要。我見過有人把 PDK 解壓到家目錄的任意位置三個月后自己都不知道 gpdk090 裝在哪。建議強制自己在~/tech下按工藝名歸檔結(jié)構(gòu)如下表工藝庫名物理路徑模型文件DRC/LVS 文件gpdk090~/tech/gpdk090./models/spectre/gpdk090.scs./rule/gpdk090.drctsmc180~/tech/tsmc180./models/spectre/tsmc180.scs./calibre/tsmc180.ruleDEFINE就按表里的物理路徑寫在 cds.lib 中。除了這個表我還建議把 PDK 版本號、收到日期、安裝人名字寫進(jìn)~/tech/README.md。原因很實際PDK 文件經(jīng)常有 bug fix 升級沒有記錄就不知道當(dāng)前用的哪個版本仿真結(jié)果對不上時很難溯源。3.3 切換工藝時最容易錯的三處配置切換工藝絕不是改一下 cds.lib 里的路徑就完事的。實際項目中最容易漏的是以下三處。第一處是 ADE 里的模型庫還掛著上一個工藝的文件。即使 cds.lib 里同時定義了多個工藝庫ADE L 的 Model Libraries 也不會自動更新它記錄的是上一次手動添加的絕對路徑。切換工藝后如果不手動替換模型文件并點 ApplySpectre 仍然用舊模型跑新電路結(jié)果完全不可信。第二處是原理圖里器件引用的是舊庫。你在 tsmc180 工藝下畫的原理圖里面放置的nmos4是 tsmc180 庫里的實例CDF 參數(shù) w、l 的單位、默認(rèn)閾值電壓都是 tsmc180 的規(guī)格。把這個庫再切到 gpdk090 跑仿真必須先確認(rèn)所有器件的庫名已經(jīng)替換成 gpdk090。直接在 Virtuoso 里做全局替換容易出錯我一般會選中整個原理圖檢查所有 instance 的 libraryName 屬性。第三處是 CDF 參數(shù)的緩存。切換庫后某些參數(shù)沒有刷新導(dǎo)致仿真結(jié)果出現(xiàn)“這個管子寬長比明明沒變但電流變了”這種玄學(xué)現(xiàn)象。遇到這種情況最有效的辦法是退出 Virtuoso清掉~/.cadence或者安裝目錄下的cdsLibCache相關(guān)緩存文件再重新啟動。不要舍不得那點緩存Virtuoso 重啟后會自動重建。3.4 裝多工藝庫的正規(guī)步驟與驗證先明確一點多個 PDK 的安裝方式隨著 foundry 不同差異很大有 tar 包解壓后手工注冊的也有直接跑install腳本的。最常見的做法是每個 PDK 獨立安裝到各自目錄然后在公共cds.lib里追加DEFINE。# 假設(shè)從 foundry 拿到 tsmc180_pdk_v1.4.tar.gz mkdir -p ~/tech cd ~/tech tar xvf tsmc180_pdk_v1.4.tar.gz # 解壓后進(jìn)入安裝目錄查看安裝說明 cd tsmc180_pdk_v1.4 ls -la # 多數(shù) PDK 提供一個 setup 或 install 腳本 ./install安裝腳本通常會驗證 Cadence 工具版本和操作系統(tǒng)如果版本不對直接拒裝。這時不要繞過檢查強行裝因為部分 PDK 的 techfile 格式與老版本 Virtuoso 不兼容硬裝會帶病運行后面 DRC/LVS 各種報錯。安裝完成后驗證方式很簡單重新打開 Virtuoso在 Library Manager 里能看到對應(yīng)工藝庫展開后的 cell 列表再新建一個 schematic 放一個 MOS 管按q看 CDF 參數(shù)是否正常。如果 cell 列表是空的或者器件屬性框空白說明 PDK 沒完全注冊成功。另一個驗證點是 CSD 里跑一次 DC 仿真確認(rèn)器件模型能正常加載并給出合理的工作點。3.5 防呆機制用腳本檢查當(dāng)前生效的模型庫多工藝庫最容易出的事故是“電路是 A 工藝模型掛的是 B 工藝”。仿真不報錯結(jié)果完全不能用。我后來習(xí)慣在每次跑仿真之前用 SKILL 腳本把當(dāng)前 ADE 視圖綁定的模型庫路徑打印出來; 打印當(dāng)前 ADE 仿真環(huán)境綁定的模型庫路徑 asimVar asiGetEnvOption(asiGetCurrentEnv() modelFiles) printf(當(dāng)前模型庫: %L\n asimVar)把這個腳本放到 CIW 的 load 文件里每次啟動自動執(zhí)行。如果模型庫路徑里同時出現(xiàn)多個工藝名直接停下來檢查。這算是用工具對抗記憶力的一個土辦法但確實省過我好幾次返工血淚經(jīng)歷。4. 從 CDL 網(wǎng)表到原理圖拼接導(dǎo)入映射關(guān)系的三個關(guān)鍵設(shè)置4.1 什么場景需要向 Virtuoso 導(dǎo)入 CDL 文件拿到一份 CDLCircuit Description Language網(wǎng)表是芯片設(shè)計里很常見的場景。來源通常是代工廠給的驗證網(wǎng)表、上一級設(shè)計團(tuán)隊從版圖提取的底層網(wǎng)表或者第三方 IP 提供的參考網(wǎng)表。CDL 本質(zhì)上是一種 SPICE 子電路描述格式定義了子電路內(nèi)部所有器件的連接關(guān)系、寬長比和模型名。Virtuoso 里做 CDL 導(dǎo)入是為了把文本網(wǎng)表恢復(fù)到可視化的原理圖方便人工檢查、對比 LVS 結(jié)果或者在這個基礎(chǔ)上做 ECO 修改。菜單路徑是 File - Import - CDL。導(dǎo)入工具會根據(jù)映射規(guī)則把 CDL 里的器件和端口轉(zhuǎn)換成原理圖里的符號與 pin。我剛?cè)胄袝r面對一個 200 多個管子的 CDL 網(wǎng)表直接導(dǎo)入后報錯幾十條當(dāng)時完全不知道問題出在哪。后來發(fā)現(xiàn)導(dǎo)入 CDL 的關(guān)鍵不在網(wǎng)表本身而在導(dǎo)入前的三個準(zhǔn)備symbol 庫、device map 文件、層次選項。4.2 device map 文件的寫法與常見映射規(guī)則CDL 網(wǎng)表里的器件名和 Virtuoso 工藝庫里的 cell 名經(jīng)常不一致。比如網(wǎng)表里寫M1 VIN VOUT VDD GND PMOS_1P8Virtuoso 庫里對應(yīng)的是pmos4Cadence 不可能自動識別這個對應(yīng)關(guān)系必須靠一個映射文件把這些名字串起來。device map 文件的語法很簡單每行一條映射。用文本示例M MNS nmos4 M MPS pmos4 R RPD res C CGS cap第一列是網(wǎng)表里出現(xiàn)的器件類型關(guān)鍵字比如M表示 MOSR表示電阻C表示電容。第二列是這個器件在網(wǎng)表里的具體模型名第三列是 Virtuoso 工藝庫里的目標(biāo) cell 名。有的模型名與具體型號綁定比如PMOS_1P8這時可以按具體模型名做映射有的網(wǎng)表里所有 PMOS 共用一個模型名就只寫一條。還有一個容易忽略的映射是二極管和 BJT。網(wǎng)表里D開頭的是二極管BJT 則用Q開頭。映射文件里漏掉這些類目導(dǎo)入時器件會直接變成“Unknown”原理圖上出現(xiàn)一堆空框子。4.3 導(dǎo)入時的層次選項與 symbol 庫選擇CDL 導(dǎo)入時有一個“Hierarchy”設(shè)置決定是按層次結(jié)構(gòu)生成原理圖還是全部展開成一張平圖。對頂層電路來說我一般選 “Replace” 模式并把層次打散這樣每個子電路對應(yīng)一張 schematic檢查和修改都方便。但如果整個網(wǎng)表非常龐大子電路數(shù)量多展開后管理難度很大這種情況可以保持層次或按模塊分別導(dǎo)入。symbol 庫選擇也很關(guān)鍵。默認(rèn)情況下導(dǎo)入工具會嘗試從當(dāng)前庫的 symbol view 找符號放置。如果工藝庫里的 symbol view 是有的導(dǎo)入后器件會正確顯示。但有些 PDK 的 symbol 存放路徑不同導(dǎo)入時找不到 symbol則器件會變成一個方框。解決辦法是手動打開器件屬性重新指定 symbol library name。4.4 CDL 導(dǎo)入后怎么驗證結(jié)果正確導(dǎo)入成功不代表結(jié)果正確。有一個我沿用很久的驗證習(xí)慣導(dǎo)入并保存 schematic 后再從 Virtuoso 里 Menu - File - Export - CDL 重新導(dǎo)出網(wǎng)表然后與原始 CDL 文件做文本 diff。用 bash 的 diff 或者直接可視化對比diff -u original.cdl exported.cdl cdl_diff.txt如果 diff 出來只有空行、注釋或大小寫差異說明導(dǎo)入基本正確。如果出現(xiàn)器件類型、節(jié)點連接或者寬長比數(shù)字對不上趕緊回查 device map 和 CDF 參數(shù)。注意 CDL 導(dǎo)出時 Virtuoso 可能會把節(jié)點重排所以 diff 前可以用grep先過濾掉.SUBCKT和.ENDS的空白行差異重點比較器件行和參數(shù)行。這個驗證步驟一定不要省因為導(dǎo)入過程本身不保證“無損”。尤其是網(wǎng)表里包含多個子電路同名端口時導(dǎo)入成 schematic 后 pin 的名字可能被自動加后綴導(dǎo)出去就和原始網(wǎng)表對不上了。我第一次做 CDL 導(dǎo)入后直接跑 LVS卡了兩天才發(fā)現(xiàn)是導(dǎo)入時把vdd!和vdd當(dāng)成了兩個節(jié)點導(dǎo)致大面積開路。后來養(yǎng)成了每次導(dǎo)入前先比網(wǎng)表的習(xí)慣這類返工再沒發(fā)生過。4.5 CDL 導(dǎo)入失敗的四個常見報錯CDL 導(dǎo)入報錯第一位的是 “unable to find symbol for device”原因就是映射文件的第二列或第三列寫錯。解決方法是打開映射文件確認(rèn)模型名和工藝庫里的 cell 名完全一致包括大小寫Virtuoso 的 CDL 導(dǎo)入對大小寫是敏感的。第二位是 “too many pins” 或者 pin 不匹配。原因是 CDL 網(wǎng)表里某個子電路的端口順序、數(shù)量和工藝庫 symbol 的 pin 順序不一致。這種情況下需要檢查網(wǎng)表子電路段和 level 設(shè)置多半是頂層找錯了子電路。第三位是導(dǎo)入時出現(xiàn) “invalid instance parameter”。網(wǎng)表里寫了w2u l0.5u但映射到的 Virtuoso cell 根本沒有w這個 CDF 參數(shù)。要檢查是不是映射錯了器件比如把電阻映射成了 MOS參數(shù)自然對不上。第四位是導(dǎo)入后原理圖里器件大量重疊連線全部亂飛。這屬于導(dǎo)入設(shè)置問題可以在導(dǎo)入前把 “Keep source text” 關(guān)掉或者導(dǎo)入后使用 Schematic Editor 的 “Clean Up” 工具重新排布。5. Virtuoso 仿真常見問題排查清單器件未定義、不收斂與模型庫錯掛5.1 “cadence仿真器件未定義”的真正原因仿真報器件未定義是 Virtuoso 使用者遇到頻率最高的錯誤之一。具體的 CIW 報錯長這樣*Error* identity of instance I0.M1 is not defined看起來像是原理圖里的符號丟了但實際上絕大多數(shù)情況不是畫圖的問題而是模型庫沒加載或者加載錯了角。排查順序固定三步。第一步打開 ADE L 的 Setup - Model Libraries看當(dāng)前是否已經(jīng)添加了對應(yīng)工藝的模型文件文件路徑后是否勾選了正確的 Section。比如 gpdk090 工藝的模型文件里定義了nfet、pfet如果你選了min角而網(wǎng)表里的器件模型名只在typ角下存在報錯就是未定義。第二步回看原理圖中器件的 Model Name 屬性與模型文件里的模型名做對比注意大小寫和多余空格。第三步查看 CDF 參數(shù)里是否有額外的前綴或后綴有些 PDK 會要求模型名自動加版本號你肉眼看到的與仿真器實際調(diào)用的不一致。如果三步做完還是報未定義檢查模型文件本身是否完整——用文本編輯器打開.scs文件搜一下報錯的模型名是否存在。常見的情況是 PDK 安裝不完整或者有人復(fù)制文件時漏掉了模型庫的一部分。5.2 瞬態(tài)仿真不收斂的逐步收緊方案瞬態(tài)仿真不收斂是模擬電路的“玄學(xué)”重災(zāi)區(qū)報錯信息通常在 CIW 里顯示為Convergence problem at time xxx而且每次報錯的時間點還可能不一樣。不收斂的原因可以分為三類。第一類是電路本身有問題比如節(jié)點懸空、兩個電壓源直接并聯(lián)、電容沒有初始電荷形成退化節(jié)點。這類問題需要用 DC 工作點分析先跑一次看哪個節(jié)點電壓是 NaN 或明顯不合理。第二類是仿真器數(shù)值參數(shù)太緊比如reltol設(shè)得太小、gmin默認(rèn)值被改過算法在非線性區(qū)段無法收斂。第三類是瞬態(tài)信號本身變化太劇烈例如一個上升沿 1ps 的信號作用在千歐級電阻和皮法級電容上步長被迫壓縮到飛秒級仿到某個點步長再也縮不下去。我的調(diào)試順序是先把tran的maxstep從默認(rèn)值改小一個數(shù)量級比如1n改成100p看是否步長不再崩潰如果還不行打開 ADE 的 Options - Simulation 相關(guān)設(shè)置把gmin從1e-12調(diào)到1e-9cmin調(diào)到1e-18給仿真器一個“虛假”的最小時空常量幫助它越過奇異點。這兩招都不奏效時檢查初始條件。許多振蕩器和鎖相環(huán)電路在瞬態(tài)開始時會有一段漫長的建立過程如果Stop Time從 0 開始計算導(dǎo)致初期步長被壓縮成本巨大可以設(shè)置仿真從穩(wěn)定的 DC 工作點開始或者手動給定某些節(jié)點的初始電壓。我最常用的一招是給大概率參與振蕩的節(jié)點先設(shè)一個IC VDD/2讓仿真器不需要自己猜啟動狀態(tài)。5.3 多工藝庫切換后器件庫名殘留導(dǎo)致 LVS 失敗多工藝庫切換后原理圖里可能殘留舊工藝庫的器件引用這個錯誤隱蔽性極強。現(xiàn)象是仿真能跑因為模型文件統(tǒng)一換了新工藝但導(dǎo)出 CDL 時器件引用的庫名還是舊庫導(dǎo)致導(dǎo)出的網(wǎng)表里出現(xiàn)舊庫的 model name。LVS 對不上或者新工藝的 DRC/LVS deck 報“模型不存在”。原因是你在畫新工藝原理圖時從舊原理圖復(fù)制了一段電路里面所有 instance 都帶著舊庫的 libraryName。Virtuoso 復(fù)制粘貼并不會自動更新庫名它只會原樣復(fù)制 cell 名如果兩個工藝庫里的 cell 名恰好都有nmos4就蒙混過關(guān)了如果新庫里沒有這個 cell 名CIW 會報錯。解決方式是在原理圖中全選器件用 Edit - Search 或 Skill 腳本逐個檢查inst~libName。也可以用庫管理器把舊庫臨時從 cds.lib 里注釋掉并重啟 Virtuoso原理圖里失效的 instance 會變成高亮紅框一眼就能看出來。我一般用兩種方法結(jié)合先注釋舊庫確保原理圖全綠再恢復(fù)舊庫防止其他項目的庫依賴被破壞。5.4 模型庫文件路徑變更后仿真結(jié)果異常一個很常見的坑是模型庫文件被人移動或重構(gòu)目錄后cds.lib 里的 DEFINE 路徑?jīng)]變但 ADE 的 Model Libraries 仍指向舊路徑。此時仿真會直接報文件找不到不算隱蔽。隱蔽的則是相對路徑問題。有的 PDK 模型文件內(nèi)部用相對路徑引用了子文件比如include xxx.scs如果你用絕對路徑加載主模型文件但當(dāng)前工作目錄不在原目錄下子文件便找不到。解決方式是打開主模型文件查看 include 路徑要么把工作目錄切到模型文件所在目錄要么把主模型文件中的相對路徑全部改寫成絕對路徑。5.5 Virtuoso 啟動黑屏或卡死的排查思路啟動黑屏或者長時間無響應(yīng)多數(shù)不是 Virtuoso 本身壞了而是環(huán)境變量和顯示配置問題。先區(qū)分是真實卡死還是渲染慢用virtuoso -nograph啟動如果 CIW 能正常加載完所有 SKILL 腳本并進(jìn)入命令提示說明邏輯層正常問題出在圖形界面。圖形界面黑屏常見于遠(yuǎn)程 X11 轉(zhuǎn)發(fā)未開或字體路徑混亂。檢查DISPLAY環(huán)境變量是否指向正確xhost 是否授權(quán)。字體問題則表現(xiàn)為整個窗口文字全是方框或亂碼解決辦法是安裝或配置字體路徑或者在.cdsinit里指定中文字體。如果啟動過程中在某個 SKILL 腳本處卡住備份并臨時移走.cdsinit用干凈的默認(rèn)配置啟動再反向排查腳本中哪一行阻塞了。6. 用 SKILL 腳本把 Virtuoso 用出效率批量改參數(shù)、自動加載模型庫Virtuoso 里的 SKILL 腳本是很多人進(jìn)階的一道坎但它帶來的效率提升很直接。比如反復(fù)打開 ADE 手動添加模型庫、逐個檢查原理圖中所有 MOS 管的寬長比這類重復(fù)操作完全可以用腳本批量完成。在 CIW 窗口里輸入load(myscript.il)就能加載一個腳本文件語法類似 Lisp入門可以不知道太多高階特性只要會用foreach遍歷和printf輸出就夠日常用了。我寫過最常用的一個腳本是批量打印原理圖里所有 MOS 管的寬長比用于快速核對設(shè)計約束; 批量打印當(dāng)前原理圖中所有 nmos4/pmos4 的寬長比 foreach(inst geGetEditCellView()~instances inst~cellName nmos4 || inst~cellName pmos4 when(inst~cellName nmos4 || inst~cellName pmos4 printf(Inst: %s W%.2f L%.2f\n inst~name inst~w inst~l) ) )代碼的邏輯很簡單geGetEditCellView()獲取當(dāng)前打開的原理圖 cellview~instances取出所有 instance 的鏈表foreach遍歷每個實例when里判斷 cell 名是否為 MOS 管再打印w和l兩個 CDF 參數(shù)的數(shù)值。這里的%.2f是格式化輸出保留兩位小數(shù)。需要說明的是inst~w這種訪問方式依賴 PDK 的 CDF 參數(shù)名有些 PDK 用的是w/l有些用Width/Length。不確定參數(shù)名時先選一個器件按q看屬性框里顯示的準(zhǔn)確字段名再改腳本。另一個值得寫腳本的場景是批量給器件加 model name。有些電路網(wǎng)表從文本導(dǎo)入后器件 Model Name 是空的逐個按q修改非常痛苦。用 SKILL 寫一個遍歷腳本按 cell 名統(tǒng)一賦值; 把原理圖中所有 nmos4 的模型名批量設(shè)置為 nfet foreach(inst geGetEditCellView()~instances when(inst~cellName nmos4 inst~modelName nfet ) )注意最后要執(zhí)行一次geCheck(geGetEditCellView())或者直接手動 Check and Save讓修改結(jié)果寫回數(shù)據(jù)庫。腳本執(zhí)行后最好從 CIW 里看一遍輸出的printf信息確認(rèn)修改數(shù)量符合預(yù)期避免腳本誤傷其他器件。我自己的習(xí)慣是把常用的腳本放到.cdsinit末尾自動加載比如啟動后自動添加 PDK 模型庫路徑。但注意自動加載腳本如果包含對庫路徑的硬編碼一旦工藝庫目錄變化Virtuoso 啟動就會報錯。所以更穩(wěn)妥的方式是把腳本里涉及的路徑用外部配置文件讀取或者直接手動在 ADE 環(huán)境里確認(rèn)。腳本能省時間但前提是你清楚它每一步在做什么否則出了問題反而更難調(diào)試。希望這篇教程能幫你在 Virtuoso 的使用路上少翻幾次車把時間花在電路本身而不是和工具較勁。本文還有配套的精品資源點擊獲取