# VLSI HW2 姓名:劉祐瑋 學校:國立清華大學 學號:110020015 ## 目錄 - [完成度](#完成度) - [環境設定](#環境設定) - [基本操作參考資料](#基本操作參考資料) - [HW2 操作過程](#HW2操作過程) - [HW2_bonus 操作過程](#HW2_bonus操作過程) - [The hardness in this assignment](#The_hardness_in_this_assignment) - [Conclusion_and_Feedback](#Conclusion_and_Feedback) - [Reference](#Reference) ## 完成度 HW2: 100% 完成 HW2_bonus : 最後post.sim 的圖不完美,沒時間在改好,但virtuoso都有做完,只是設計沒有如pre.sim一樣的效果。 ## 環境設定 首先利用Mobaxterm連接至學校工作站。 ![](https://hackmd.io/_uploads/Bkx9YdpW6.png =50%x) 緊接著連線到機台(X記得要大寫,不然無法使用wv) ``` ssh -X ic53 ``` 再來初始化source,等等才能使用hspice、waveview以及Virtuoso ``` source /users/cad/synopsys/CIC/hspice.cshrc source /users/cad/synopsys/CIC_new/customexplorer.cshrc source /users/cad/cadence/CIC/ic.cshrc source /users/cad/mentor/CIC/calibre.cshrc ``` 設定 Rule.rce 裡的 Rule_20KA.rc 和 Rule_08KA.rc 這兩個檔要改成絕對路徑(約在 300 多行左右)。 ## 基本操作參考資料 sp檔指令說明: https://hackmd.io/Y92TbIvNTYCb0o3FEj1ftg#sp%E6%AA%94%E6%8C%87%E4%BB%A4%E8%AA%AA%E6%98%8E virtuoso 操作說明:如eeclass上課ppt說明(https://eeclass.nthu.edu.tw/course/homework/28815) ## HW2操作過程 設計圖: ![image](https://hackmd.io/_uploads/BJfcGxNN6.png) 設計要求: - The input are two 50% duty cycle clock signals, va and vb. - The output signal is a 75% duty cycle clock signal, vout. - va is a 1G Hz clock, vb is a 0.5G Hz clock, and vout is a 0.5G Hz clock. ### pre_sim part 寫.sp檔 OR_gate's CMOS Implement: 我們可以根據nmos和pmos原理來設計出or gate ! 我設計的想法設計出 nor gate(下圖左半部)再接上inverter(下圖右半部) ![](https://hackmd.io/_uploads/Syri0Zp-6.png) 最後利用code實現上圖(in2->B, in1->A, OR->Q): ``` *** OR *** .subckt OR2 in1 in2 OR vdd vss Mn1 out in1 vss vss n_18 w=1u l=0.18u Mn2 out in2 vss vss n_18 w=1u l=0.18u Mn3 OR out vss vss n_18 w=1u l=0.18u Mp1 node1 in1 vdd vdd p_18 w=2.5u l=0.18u Mp2 out in2 node1 node1 p_18 w=2.5u l=0.18u Mp3 OR out vdd vdd p_18 w=2.5u l=0.18u .ends ``` 以上為示意code,實際以pre.sp為準。 Simulation: 先在.sp檔中利用X、V指令來呼叫subckt和給予input, vdd, vss的值,加上模擬方式跟時間。(詳細內容請看 pre.sp) 接著利用 HSPICE程式產生出相對應的檔案 ``` hspice –i <inputFile.sp> –o <outputFile.lis> ``` 會產生以下五種檔案: - .tr0檔:這是Transient Analysis(瞬態分析)的輸出文件,用於記錄電路在不同時間點上的響應數據,通常是電流和電壓隨時間的變化。 - .st0檔:這是Steady-State Analysis(穩態分析)的輸出文件,用於記錄電路在穩態條件下的狀態,包括節點電壓、電流值等。 - .pa0檔:這是AC Analysis(交流分析)的輸出文件,記錄了電路對不同頻率的交流訊號的反應,通常以振幅和相位的形式表示。 - .lis檔案:這是HSPICE的模擬日誌文件,用於記錄模擬過程中的詳細信息,包括警告、錯誤和其他模擬參數的設定。 - .ic0檔:這是Initial Conditions(初始條件)的輸出文件,用於記錄模擬的初始狀態,包括電路元件的初始電壓和電流值。 其中的.tr0檔可利用waveview觀察波型 ``` wv pre.tr0 & ``` 波型如下: ![image](https://hackmd.io/_uploads/Sy2UmWVV6.png) 最後開啟.lis檔計算 fequency 跟duty cycle 有沒有符合 ``` vim pre.lis ``` ![image](https://hackmd.io/_uploads/ryNaBeNVp.png) ![image](https://hackmd.io/_uploads/HJG58xNET.png) 由上圖可知,vout的f=0.5GHz,duty cycle 為73.6% ### virtuoso part 我們藉由pre.sim 模擬後可以知道對應的W和L,以及mos連接方式。藉此可以畫出layout如下: ![image](https://hackmd.io/_uploads/BkOqDlEET.png) 接者我們要跑DRC(操作過程如講義所述),確定我們設計的形式有符合規範。 結果為: ![image](https://hackmd.io/_uploads/H1NXde4ET.png) 通過。 接者要跑LVS(操作過程如講義所述),驗證這個layout產出的積體電路與其原始電路設計 pre.sp 之間的差異有無異常。 結果為: ![image](https://hackmd.io/_uploads/B1v0dgN46.png) 通過 最後要跑PEX(操作過程如講義所述),產出我們寫post.sp所需要的檔: - hw2.pex.netlist.pex - hw2.pex.netlist - hw2.pex.netlist.HW2.pxi 這三個檔描述了電路的樣子。 ### post_sim part 一樣要寫.sp檔然後與pre.sp相似,唯一不同的是我們的.subckt 要改成 layout 所產生的檔,所以不用打.subckt而是要加上.include。 ``` .include "hw2.pex.netlist 的絕對路徑" ``` 接著利用 HSPICE程式產生出相對應的檔案 ``` hspice –i <inputFile.sp> –o <outputFile.lis> ``` 其中的.tr0檔可利用waveview觀察波型 ``` wv post.tr0 & ``` 波型如下: ![image](https://hackmd.io/_uploads/HkI2XbVET.png) 最後開啟.lis檔計算 fequency 跟duty cycle 有沒有符合 ``` vim post.lis ``` ![image](https://hackmd.io/_uploads/H1ie3eEVa.png) ![image](https://hackmd.io/_uploads/HJG58xNET.png) 由上圖可知,vout的f約為0.5GHz,duty cycle 為77.6% ### 比較 pre.sim 和 post.sim ![image](https://hackmd.io/_uploads/HJSkEWVEa.png) 首先週期和duty clock部分都有符合,但可以發現Post波型的部分較慢,我覺得原因可能是virtuoso會考慮寄生電容。 ## HW2_bonus操作過程 設計圖: ![image](https://hackmd.io/_uploads/BJfcGxNN6.png) 設計要求: - The input are two 50% duty cycle clock signals, va and vb. - The output signal is a 75% duty cycle clock signal, vout. - va is a 1.25G Hz clock, vb is a 2.5G clock, and vout is a 1.25G Hz clock. ### pre_sim part 寫.sp檔 OR_gate's CMOS Implement: 我們可以根據nmos和pmos原理來設計出or gate ! 我設計的想法設計出 nor gate(下圖左半部)再接上inverter(下圖右半部) ![](https://hackmd.io/_uploads/Syri0Zp-6.png) 最後利用code實現上圖(in2->B, in1->A, OR->Q): ``` *** OR *** .subckt OR2 in1 in2 OR vdd vss Mn1 out in1 vss vss n_18 w=1u l=0.18u Mn2 out in2 vss vss n_18 w=1u l=0.18u Mn3 OR out vss vss n_18 w=1u l=0.18u Mp1 node1 in1 vdd vdd p_18 w=2.5u l=0.18u Mp2 out in2 node1 node1 p_18 w=2.5u l=0.18u Mp3 OR out vdd vdd p_18 w=2.5u l=0.18u .ends ``` 以上為示意code,實際以 pre_bonus.sp 為準。 Simulation: 先在.sp檔中利用X、V指令來呼叫subckt和給予input, vdd, vss的值,加上模擬方式跟時間。(詳細內容請看 pre_bonus.sp) 接著利用 HSPICE程式產生出相對應的檔案 ``` hspice –i <inputFile.sp> –o <outputFile.lis> ``` 其中的.tr0檔可利用waveview觀察波型 ``` wv pre_bonus.tr0 & ``` 波型如下: ![image](https://hackmd.io/_uploads/rySor-NET.png) 最後開啟.lis檔計算 fequency 跟duty cycle 有沒有符合 ``` vim pre_bonus.lis ``` ![image](https://hackmd.io/_uploads/By1RSb4Ea.png) ![image](https://hackmd.io/_uploads/HJG58xNET.png) 由上圖可知,vout的f約為1.25GHz,duty cycle 約為73% ### virtuoso part 我們藉由pre.sim 模擬後可以知道對應的W和L,以及mos連接方式。藉此可以畫出layout如下: ![image](https://hackmd.io/_uploads/ry9XLZN4T.png) 接者我們要跑DRC(操作過程如講義所述),確定我們設計的形式有符合規範。 結果為: ![image](https://hackmd.io/_uploads/r1NNLZE4T.png) 通過。 接者要跑LVS(操作過程如講義所述),驗證這個layout產出的積體電路與其原始電路設計 pre.sp 之間的差異有無異常。 結果為: ![image](https://hackmd.io/_uploads/HkJHI-NNp.png) 通過 最後要跑PEX(操作過程如講義所述),產出我們寫post.sp所需要的檔: - hw2_bonus.pex.netlist.pex - hw2_bonus.pex.netlist - hw2_bonus.pex.netlist.HW2_BONUS.pxi 這三個檔描述了電路的樣子。 ### post_sim part 一樣要寫.sp檔然後與pre_bonus.sp相似,唯一不同的是我們的.subckt 要改成 layout 所產生的檔,所以不用打.subckt而是要加上.include。 ``` .include "hw2_bonus.pex.netlist 的絕對路徑" ``` 接著利用 HSPICE程式產生出相對應的檔案 ``` hspice –i <inputFile.sp> –o <outputFile.lis> ``` 其中的.tr0檔可利用waveview觀察波型 ``` wv post_bonus.tr0 & ``` 波型如下: ![image](https://hackmd.io/_uploads/S1VsIWVN6.png) 很明顯設計不好。就沒有繼續驗證。 ### 比較 pre.sim 和 post.sim ![image](https://hackmd.io/_uploads/H1LlPZEVp.png) 首先週期的部分有符合,但是沒有降到0,我覺得原因可能是放電速度太慢又充電了。因為virtuoso會考慮寄生電容。 ## The_hardness_in_this_assignment 雖然完成了本次HW2,但在這次的設計中也遇到幾個困難如下: - power 問題:我們必須考慮power要完美那就要設計得非常剛好,不能隨便的設計,不過我也還沒有抓到訣竅。 - 寄生電容/電阻: 之前作業在寫spice時較少考慮到寄生電阻和寄生電容,但在這次中就顯得很重要,所以我在bonus的部分才沒有設計好。 - 面積布局: 利用virtuoso 可以對mos的面積來定義,在跑DRC發現diff區域 n 跟 p不能超過20um ,所以我們要適當調整擺放位置及大小。 ## Conclusion_and_Feedback 從這次的作業,我學到了如何利用mos來設計layout,不同以往的,上一份是寫hspice,但在這次我們是利用virtuoso來畫layout,學習如何布局以及考慮到更深層的設計細節,希望有機會可以進一步的摸索。 ## Reference workbook- https://eeclass.nthu.edu.tw/course/homework/28815 HackMD- https://hackmd.io/@you8132/HkP2TkNEp