Lab1教學講義 Layout tool 國立交通大學電機系 超大型積體電路導論 2011 秋 前言 • 本講義為交通大學電機系所開設之超大型 積體電路導論的助教所編,只涵蓋實驗課 所需的部分,自己看就好不要轉發以免貽 笑大方。 • 2011/11/08由該課助教孫至鼎編寫。 綱要 一、起始設定 二、Layout tool - Schematic 三、Layout tool - Layout 四、Layout驗證 五、Lab1作業相關解說 本次實驗流程 1. 2. 3. 4. 5. 6. 7. 8. 使用軟體設計並繪出電路圖(Schematic),將完成的電路圖輸出為spice 檔案。(此處為介紹Schematic的用法,實際上spice file通常是自己寫) 用Hspice模擬你的spice檔案並確認其正確性,有誤則修改。 確認spice code無誤後用Virtuoso繪製該電路的Layout。 畫Layout。 DRC驗證。(Design Rule Check) LVS驗證。(Layout Versus Spice) 使用PEX (Parameter EXtraction) 萃取出你畫的Layout的實際RC並轉出 新的spice file。 模擬新的spice file並觀看其波形,因為多了現實的RC,所以波形的結 果會較接近現實(也就是波形比較差)。 起始設定 (1) 1. 2. 3. 4. 5. 6. 7. 連上工作站 登入帳號 cd vlsilab 進入vlsilab資料夾 mkdir lab1 創建lab1資料夾 cd lab1 進入lab1資料夾 icfb & 開啟Virtuoso 出現以下視窗即可開始操作,有warning可以不用管它。 另外一個 What’s New in … 的視窗可以直接關掉。 起始設定 (2) - 載入display resource file 這個步驟沒做或是沒成功會嚴重影響到後面的實驗。 (Layout會沒顏色) 每開一個新資料夾都要做一次,做過不用再做。 點選Merge後 在出現的視窗 點選OK 起始設定 (3) - 載入display resource file 點選Add後這裡會出現你選擇的檔案 路徑 這裡直接照打,要把display.drf merge到現在的目錄下。 (也就是lab1之下) Create New Library (1) 這裡會開啟一個Library,之後不論是Schematic或Layout都會附屬於其下。 Create New Library (2) Schematic (1) - 建立Schematic 輸入你要用的Cell name 拉開選單選擇 Composer-Schematic 點選你剛才開好的Library 接著File -> New -> Cell View Schematic (2) Schematic 的操作視窗 Schematic (3) - 擺放元件 在視窗上按 i 或是點選左側 點Browse選擇元件 : Library : analogLib View : symbol Cell : nmos4、pmos4、vdd、gnd… 注意 : 是nmos4不是nmos 圖示。 Schematic (4) - 編輯元件參數 點選元件後 按 q 可編輯 元件參數 Model name其實可以 隨意輸入,不過為了 區別方便,這裡輸入 NM代表是nmos。 PM代表是pmos。 Multiplier輸入1 Width nmos輸入500n pmos輸入1u Length 接輸入180n Schematic (5) - 設置 IO 在視窗上按 p 或是點選左側 圖示。 輸入pin的名字 拉下選單選擇 input / output 設定完後點選Hide擺放pin Schematic (6) - 接線 按 w 或是點選左側圖示 完成inverter接線。 完成後要點選 確認並儲存你的電路。 沒錯誤就不會跳出任何視窗。 也可以看下列視窗的訊息。 Schematic (7) - 操作注意事項 在按鍵盤delete刪除元件時,注意右下角是否為 是的話此時只需左鍵單點,元件就會被消除,要跳脫則按Esc。 配置元件時,點滑鼠右鍵可變換元件方向。 配置pin時,如出現Invalid pin expression,點選pin視窗的Default即可。 pmos的Body連到vdd,nmos的Body連到gnd。 Schematic (8) - 轉換Schematic為spice file 回到icfb視窗,選擇CDL轉換spice file Schematic (9) 選好Library Cell View後這幾格會自動填上 輸入你想輸出的spice file name 檔案名稱 .sp 按OK後出現成功訊息代表轉換完成 Schematic (10) 回到工作站視窗,開啟剛才轉出的inv.sp 內容物如左,這麼長一串只有下面是電路。 這裡你需要做幾件事情 : 把 .PARAM用 * 註解掉,不然跑hspice模擬可能 會出錯。 將MOS的PM & NM改為 P_18 & N_18 這裡要說明 : 你在畫Schematic時MOS的 model name不管打甚麼,輸出一定是寫NM/PM 所以hspice模擬時要記得改掉。 Schematic (11) - 在 inv.sp 後方加上 : .global vdd! gnd! .lib ‘ cic018.l的路徑 ’ TT 呼叫名為inverter的subckt並定義其腳位名 Xinv in out inverter Vdd vdd! gnd! dc = 1.8v Vin in gnd! Pulse 1.8 0 0ns 1ns 1ns 9ns 20ns .tran 1ns 50ns .probe tran .option post .op .end 這裡不多做說明,有疑問請見Lab0教學講義 Schematic (12) 執行 hspice inv.sp 模擬並觀看波形,如果波形正確即可開始畫layout。 註 : 看波形前要先確認hspice是不是concluded,出現aborted代表有誤。 接下來是開心的layout。 日後的作業spice只是基礎,真正花時間的是layout。 layout (1) - 建立layout 選擇之前創的Library 之前建立的cell 拉下選單選擇 Virtuoso layout (2) - 操作環境設定 layout (3) 繪製layer方法 : 點選Layer種類 按 r 在視窗上點左鍵後移動游標再點一次左鍵 這裡會 顯示你 畫的方 塊的長 寬。 視窗左下角 layout (4) - inverter結構 Drain Source Body in Gnd out Gate p+ n+ Gate p+ n+ p - substrate PIMP NIMP PO1 DIFF ME1 Vdd NW p+ n+ layout (5) - 各層的連接 contact、via 各種layer之間的連結是靠contact和via,講白話點就是兩層要溝通的話之 間要畫上contact或via(視材質而定)。 大致情形如下 上 下 ME1 ME1 ME2 ME3 Contact Contact VIA1 VIA2 PO1 DIFF ME1 ME2 注意 : PO1和DIFF之間不須打contact 更高層的Metal依此類推 layout (6) - layout 熱鍵 r : 擺置layer m : 搬移 c : 複製 s : 伸縮 k: 尺 Shift + k : 消除尺規 Ctrl + z : zoom in Shift + z : zoom out f : 顯示合適大小 Esc : 解除熱鍵 熟悉各種熱鍵能大幅縮短畫layout的時間 於是你可以完成inverter如右圖 DIFF L=180n layout (7) CONT PO1 W=1u PIMP NIMP ME1 NW 繪圖建議 : 在畫較大的電路圖時 畫一個段落就要做一次DRC驗證 (DRC後面會教) W=500n layout (8) - 標Label : 最後你要標上Label,Label就是layout的input/output 通常Label都是標在metal上,標在ME1就用相對應的 M1_TEXT,記住不要選成ME1,兩個顏色一樣,不好除錯 選擇好後按 L Label名稱 (要對應到sp檔裡的subckt port名稱) 字體大小 1為最小 如此可完成 一個完整的 inverter Label的+字 標記一定要 打到對應的 Metal上 layout (10) Layout之後會和spice file裡的subckt做比較,日後你們自己寫 .sp檔記得要 將要比對的電路寫成subckt,subckt的port也要和layout的label一致。 DIFF的寬度就是MOS的參數W,大小要一致。 PO1的寬度就是MOS的參數L,大小要一致。 各種layer的長寬和間距皆有限制,同學可以自行嘗試,後面會給幾個基 本的限制。 做一個段落記得要按左上角的 存檔,不然都是做白工。 Layout驗證 (1) - DRC design rule check 這裡是讓你找儲存好的設定檔 沒有就點Cancel (你設定好後可以儲存設定檔 這樣下次再做DRC可以少做點事) Layout驗證 (2) - DRC 選擇DRC rule file 在calibre/Calibre_DRC下 選擇你現在的工作資料 夾(譬如現在是lab1) Layout驗證 (3) - DRC 可自行定義輸出檔案名 不過沒有必要更改 Inputs不用更改 設定完後按Run DRC 出現視窗詢問是否 Overwrite選Yes Layout驗證 (4) - DRC DRC驗證無誤就會是 綠色的勾。 有錯則會告訴你哪裡有 錯。 Layout驗證 (5) 點兩下會告訴你哪裡錯 錯誤資訊 像這個錯誤是CONT距離邊界太近(>=0.12um) Layout驗證 (6) - DRC 一些基本的DRC規則 CONT固定大小0.23um*0.23um DIFF CONT與DIFF邊界最小距離0.12um DIFF CONT與PO1的最小距離0.14um CONT和ME有邊界最小距離 ME1和ME1有最小距離 NW有最小距離 …等等還有很多,請自行嘗試 trial & error Layout驗證 (7) - LVS layout vs spice 這裡是讓你找儲存好的設定檔 沒有就點Cancel (你設定好後可以儲存設定檔 這樣下次再做LVS可以少做點事) Layout驗證 (8) - LVS 選擇LVS rule file 在calibre/Calibre_LVS下 選擇你現在的工作資料 夾(譬如現在是lab1) Layout驗證 (9) - LVS Netlist即是你和layout 做比對的spice檔案, 這邊是inv.sp 日後可能不只 一個Cell,要選對 Layout驗證 (10) - LVS LVS輸出的report檔, 你可以不用改檔名。 注意 : Run LVS之前先將和layout做比對的 .sp檔 的 .lib ‘…...’ TT 用 * 註解掉 不然會發生錯誤。 Layout驗證 (11) 看到笑臉表 示比對結果 正確。 Layout驗證 (12) - LVS 有錯表示你畫的layout和 Spice不符合,檢查你的 Layout是否長寬比不對, 或是電路少畫了某些部分 (譬如說ME的連線) 或是少畫了NW (少畫NW會導致短路) 須知 : DRC可以把所有bug 都改正後再重做DRC 但是LVS建議改完一個bug 就重作LVS,因為LVS的錯誤 通常是由同一個錯誤引發 的連鎖錯誤。 Layout驗證 (13) - LVS 同上一頁所述,LVS的bug很有可能源自於同一個錯誤,所以最好改完一 處就重做一次檢驗,譬如說5~6個錯誤可能只要改一個地方就解決了。 我個人紀錄是一個bug導致正好100個錯誤訊息。 LVS的debug難度高於DRC,因為DRC的錯誤會直接指給你看哪裡有錯。 LVS的錯誤比較抽象,有時候你連錯誤訊息都看不懂,雖然還是有跡可循 。最根本的辦法就是不要畫錯。 重做LVS時,要先做DRC。 也就是說你只要更改了電路,就要進行DRC LVS 驗證。 Layout驗證 (14) - PEX Parameter Extraction 這裡是讓你找儲存好的設定檔 沒有就點Cancel (你設定好後可以儲存設定檔 這樣下次再做PEX可以少做點事) Layout驗證 (15) - PEX 選擇PEX rule file 在calibre/Calibre_PEX下 注意 : 這裡和DRC、LVS不同,不是選擇工作資料夾,而是選擇包含Rule.rce Rule_08KA.rc Rule_20KA.rc三個檔案的資料夾。在這裡是Calibre_PEX,不過萃取 出的spice file就會擺在Calibre_PEX裡面,如果你覺得不方便,可以把上述三個 檔案複製到你的工作資料夾。 Layout驗證 (16) - PEX 選擇你的 Top Cell 選擇你的 .sp檔案 Layout驗證 (17) - PEX 輸出的spice file檔名 其實可以不用改,作 為和原本 .sp檔的區別 雖然副檔名不是 .sp也 可以跑hspice,但是非 .sp 副檔名用vi開會沒 顏色,建議加上.sp 照上面設定,R+C意思是萃取的參數只包含R和C Layout驗證 (18) - PEX Exclude 打上 vdd! gnd! 按下Run PEX,可能會有很多warning,多半可以不用在意。 輸出的新的檔案inverter.pex.netlist擺在你之前選的PEX Run Directory下 Layout驗證 (19) - PEX 萃取出的結果 inverter.pex.netlist.sp 可以看到多了一大堆 參數,RC參數在這兩 個include進來的檔案 裡面。 直接在下面加上模擬 即可。 注意subckt的port。 Layout驗證 (20) - PEX 用PEX產生的檔案跑模擬,出來的結果會比較接近真實(比較差)。 比較波形圖我就不放上來了,同學自行體會。 這說明了layout會影響結果,在同樣的功能下,你畫得比別人粗糙就會直 接導致較差的結果(譬如說面積變大或是Delay增加)。 Lab1課程部分到這裡結束,後面有Lab1assign的講解。 提醒 : 只要layout電路有做更動,一定要照 DRCLVSPEX 步驟重做。 Layout (1) 這邊介紹一些畫layout有用的方法 - s k的使用 譬如說我的PO1寬度不夠(L = 0.18um) 用 k 標出正確的尺寸 按s選擇PO1並拉長 修改完成 - c 的使用 複製CONT CONT會大量使用,又有固定規格(0.23*0.23um) 按c 點選要複製的東西並移動 複製完成 Layout (2) - AV NV AS NS V : view S : select A : All N : Non 點選會一次變換全部layer的狀態 在layer上點右鍵可變換 select 點左鍵可恢復可見 左邊小方格有顏色表示會顯示,沒顏色表示不會顯示在視窗上; 右邊正常表示可選擇,灰色則表示無法被選取。 CONT : 可見可選取 NWR : 可見不能選取 SAB : 不可見 (看不到你自然選不到) 所以沒有不可見能選取這種事 這在debug上很好用 Lab1assign (1) - Lab1assign步驟 1 - 用Schematic畫出一inverter,轉成spice檔後用hspice模擬觀看其波形。 2 - 用layout tool畫一最小尺寸的inverter,用PEX轉出spice檔後用hspice模 擬並觀看其波形。 3 - 寫出45級inv串接成的ring oscillator spice檔,用hspice模擬確認正確性 4 - 用layout tool畫出 ring oscillator並至少經過LVS驗證其正確性 5 - 寫出ring oscillator 接上 super buffer 的 spice檔。(輸出接16pf的電容) 6 - 用layout tool畫出 ring oscillator + super buffer,用PEX輸出spice檔案, 用hspice 模擬觀看其波形。(輸出接16pf的電容) Lab1assign (2) - 各步驟解說 1 - 用Schematic畫出一inverter,轉成spice檔後用hspice模擬觀看其波形。 (1)要做的其實就是前面的實驗內容。 照前面的步驟做就行,結報要交一張inverter的Schematic圖。 Lab1assign (3) - 各步驟解說 2 - 用layout tool畫一最小尺寸的inverter,用PEX轉出spice檔後用hspice模 擬並觀看其波形。 用layout畫出一個最小尺寸的inv。 這和前面的實驗步驟也差不多,差別在最小尺寸。 前面實驗用的是WN = 500n WP = 1u,實際上可以更小,但是有最小限制 ,inv整體面積能畫得多小看個人,但是WN 和WP 一定要達到最小,最小 是多少自己去畫就知道了。另外要維持2WN = WP。 結報要交最小inv的layout圖,計算面積,Scope圖*2(with PEX & no PEX) Scope圖要測量Tpd 50% 50% Lab1assign (4) - 各步驟解說 3 - 寫出45級inv串接成的ring oscillator spice檔,用hspice模擬確認正確性 用spice寫出45個inv串接而成的ring oscillator,用hspice模擬確認你有沒有 寫對。 由於ring oscillator是自行震盪,因此你只要用 .ic v(節點) = 0v 標明 initial condition就會自己跑了,不用輸入pulse。 標明並計算你的ring oscillator的輸出頻率。 Lab1assign (5) - 各步驟解說 4 - 用layout tool畫出 ring oscillator 並至少經過LVS驗證其正確性 用 layout 畫出 ring oscillator,並經DRC LVS 驗證你的layout有沒有錯。 Lab1assign (6) - 各步驟解說 5 - 寫出ring oscillator 接上 super buffer 的 spice檔。(輸出接16pF的電容) 用spice寫 ring oscillator 接上 super buffer,並在super buffer的輸出端 接上一 16pf 的電容。 ( Co super buffer的輸出節點 0 16p) 用hspice模擬。 結報要交Scope圖*1。 測量ring oscillator輸出到super buffer輸出的延遲。 (Tpd 50% 50%) Lab1assign (7) - 各步驟解說 6 - 用layout tool畫出 ring oscillator + super buffer,用PEX輸出spice檔案, 用hspice 模擬觀看其波形。(輸出接16pf的電容) 用 layout畫出 ring oscillator + super buffer,經DRCLVSPEX後輸出 .sp檔 在super buffer 的輸出端掛上一個16pF的電容。 用hspice模擬。 結報要交Scope圖*1。 測量ring oscillator輸出到super buffer輸出的延遲。(Tpd 50% 50%) Layout圖*1 計算面積。 Lab1assign (8) - 計算面積的方法 長 Area = 長 * 寬 你的電路 也是你的電路 不管中間有多少空隙,面積要用最長的來算 畫得很爛 寬 Lab1assign (9) Tpd 50% 50%測量方法 開scope把兩個訊號拉在同一格內,用Measurement tool 量 Delay Lab1assign (10) 關於ring oscillator和super buffer設計自行看Lec 9。 – 你不知道就做不出來的事 – Mos輸出電容的找法 : 如果你沒找出 Mos的輸出電容就沒辦法計算 super buffer的級數。其實當你在跑 hspice模擬時視窗跳出的一大堆字 裡面就有顯示Mos的gdsb電容。 Mos的輸入電容是cgtot,輸出電容是 cdtot。 W double 約等於 電容值 double。 Lab1assign (11) – 你不知道就做不出來的事 – Super buffer 的電容一級要做得比一級大,可是我畫layout時沒辦法畫這 麼大,或是一個MOS畫得很大很不好,該怎麼辦 ? 事實上super buffer要的是電容,所以你可以用並聯來增加電容。 Ex : 兩個cg = 1fF的電容並聯 = 2fF,依此類推。 這次的講義到這邊完全結束,大家自己加油。 References [1] 我自己 [2] 前代講義