# 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連接至學校工作站。

緊接著連線到機台(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操作過程
設計圖:

設計要求:
- 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(下圖右半部)

最後利用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 &
```
波型如下:

最後開啟.lis檔計算 fequency 跟duty cycle 有沒有符合
```
vim pre.lis
```


由上圖可知,vout的f=0.5GHz,duty cycle 為73.6%
### virtuoso part
我們藉由pre.sim 模擬後可以知道對應的W和L,以及mos連接方式。藉此可以畫出layout如下:

接者我們要跑DRC(操作過程如講義所述),確定我們設計的形式有符合規範。
結果為:

通過。
接者要跑LVS(操作過程如講義所述),驗證這個layout產出的積體電路與其原始電路設計 pre.sp 之間的差異有無異常。
結果為:

通過
最後要跑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 &
```
波型如下:

最後開啟.lis檔計算 fequency 跟duty cycle 有沒有符合
```
vim post.lis
```


由上圖可知,vout的f約為0.5GHz,duty cycle 為77.6%
### 比較 pre.sim 和 post.sim

首先週期和duty clock部分都有符合,但可以發現Post波型的部分較慢,我覺得原因可能是virtuoso會考慮寄生電容。
## HW2_bonus操作過程
設計圖:

設計要求:
- 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(下圖右半部)

最後利用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 &
```
波型如下:

最後開啟.lis檔計算 fequency 跟duty cycle 有沒有符合
```
vim pre_bonus.lis
```


由上圖可知,vout的f約為1.25GHz,duty cycle 約為73%
### virtuoso part
我們藉由pre.sim 模擬後可以知道對應的W和L,以及mos連接方式。藉此可以畫出layout如下:

接者我們要跑DRC(操作過程如講義所述),確定我們設計的形式有符合規範。
結果為:

通過。
接者要跑LVS(操作過程如講義所述),驗證這個layout產出的積體電路與其原始電路設計 pre.sp 之間的差異有無異常。
結果為:

通過
最後要跑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 &
```
波型如下:

很明顯設計不好。就沒有繼續驗證。
### 比較 pre.sim 和 post.sim

首先週期的部分有符合,但是沒有降到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