EDA - APR
===
在這個篇章會介紹innovus的使用方式,以及有無I/O pad的APR資料準備與流程。
innovus初步使用說明
---
1. 在Terminal執行`Rinnovus`開啟innovus
2. 開CPU使用上限,設為8,記得每次重開innovus都要設定


innovus讀寫方式
---
### 讀檔


### 存檔
第一次存檔前需在apr的根目錄下新增DBS(Design Block System)資料夾,再在這資料夾下存檔,檔名建議命為"目前做到的步驟.enc",例如做完了floor plan可將檔名命為 "floor_plan.enc",若下一步的power plan有問題就能將這個檔案讀回來重做。


APR流程說明
---
由於不是每次APR完都要直接將晶片下線,因此分為兩種匯入io file的方式,如以下兩張圖,差別在於晶片有無power pin,流程上的差異為io file的匯入時機。
* with I/O Pad

* without I/O Pad

APR的目的是將合成完或是DFT後的電路實體佈局與繞線,首先需要先規劃好IO Pad的擺放方式,接下來會分為8個步驟做講解。
Input File
===
這步驟是在準備APR所需資料分為四種
* Gate Level Netlist : 合成後 or DFT後 的.v檔
* Timing Costraint : 合成產的sdc檔
* I/O Pad : 晶片腳位的擺放順序與使用的pad款式,副檔名為 .io
* Technology File : .global檔
io file
---
依照電路的後續使用,這個檔案分成兩種產生方式:
* [直接下線](https://hackmd.io/@linda8832825/rJwsP8O3A)
* [與其他電路做串接前後級後再下線](https://hackmd.io/@linda8832825/SysQO8u30)
global file
---
global file儲存著步驟一Input File的所有檔案,若下一步的Floorplan有問題則可以直接重新Import這個檔案再繼續做Floorplan,建檔詳細流程可以看[這篇](https://hackmd.io/@linda8832825/SJaTR0ChA)。
Before Floorplan
===
1. Import global file
2. 開高CPU數
3. 命名VDD、VSS,建立一個檔案命名為"Global_Net.tcl",這檔案包含了SRAM的power,檔案內容如下
```=tcl=1
clearGlobalNets
globalNetConnect VDD -type pgpin -pin VDD -instanceBasename *
globalNetConnect VDD -type pgpin -pin VDDCE -instanceBasename *
globalNetConnect VDD -type pgpin -pin VDDPE -instanceBasename *
globalNetConnect VSS -type pgpin -pin VSS -instanceBasename *
globalNetConnect VSS -type pgpin -pin VSSE -instanceBasename *
```
4. 執行`source Global_Net.tcl`
5. 將module解開

Floorplan + Powerplan
===
這個步驟會將擺放元件跟拉power的順序交錯執行,故步驟很多整理在[這篇](https://hackmd.io/@linda8832825/HJHw64_60)。
Clock Tree Synthesis
===
這步驟是做為了確保所有元件能同步工作,平衡的clock tree可以減少偏移與延遲,詳細的步驟在[這篇](https://hackmd.io/@linda8832825/BJgVL6NK6A)。
Routing
===
Before Routing
---
在routing前要加 Tie Hi/Lo Cell,流程如下
1. Place->Tie Hi/Lo Cell->Add..

2. 選這兩個

3. 由於我的設計中不需要Tie Cells,所以加不上去

Routing
---
1. Route->NanoRoute->Route..

2. 依照下圖的設定後Apply

3. 上圖中的Diode Cell Name可以使用以下指令找其他可用的cell name

After Routing
---
在繞線完後要檢查Timing,而沒過的話一樣可以ECO。
1. Timing->Report Timing

2. Setup和Hold time都需要測

3. 如果沒過的話可以Optimize
4. ECO->Optimize Design

5. Apply

Add Core Filler
---
在繞線完後就完成了晶片設計,而cells中間會有空隙,因此要加入core filler來填補,提供物理結構的完整性,步驟如下。
1. Place->Physical Cell->Add Filler..

2. 第一排的Select請照第三步的做,如果加完core filler後出現DRC錯誤請往前讀檔後勾選"Do DRC",第一次做不用勾"Do DRC"。

3. 將右邊lists中沒有重複的項目都加入到左邊

4. 放很大可以看到core filler

Design for Manufacturing
===
在輸出檔案之前要Verify,這部分是為了檢查有無DRC等等的錯誤,流程可以看[這篇](https://hackmd.io/@linda8832825/HJHw64_60#Verify)的Verify段落。
Output File
===
再來是要輸出檔案做後續的DRC、LVS、Post-Layout Simulation和Custom Simulation了,而輸出檔案的方法寫在[這篇](https://hackmd.io/@linda8832825/HJFMfi96R)。
:::danger
如果我有哪裡寫錯或是做不好的請告訴我 :woman-bowing:
完成之後小休一下回到前面進行[下一步](https://hackmd.io/dzfWsm7iQ6aeVqjeko-Hlg?both#DRC),你超棒的:facepunch:
:::