EDA - Memory Compiler
===
此篇是在介紹如何在EDA cloud上使用Memory Compiler,並在RTL、SYN、DFT與DRC階段產生所需檔案的步驟
製程:40nm
使用SRAM種類 : Single Port SRAM
RTL Level
---
指令範例 :

step 1 : 從資料夾一直往下點看要用的東西在哪,因為用terminal ls 不會出現
step 2 : 在想生出SRAM的資料夾下使用terminal輸入以下指令
```=
/cad/CBDK/CBDK_TN40G_Arm/CBDK_TSMC40_core_Arm_v2.0/CIC/Memory/sram_sp_hde_rvt_hvt_rvt/r11p2/bin/sram_sp_hde_rvt_hvt_rvt &
```
step 3 : 設定SRAM參數
* Instance Name : SRAM的名子
* Number of Words : SRAM的位址數,40nm最少為256
* Number of Bits : 每個位址的bits數
* Frequncy : 預設就是1
* Multiplexer Width : 8

step 4 : update
step 5 : generate 會產生六個不同溫度跟電壓的ps檔
step 6 : 將ps轉成pdf以供閱讀
```
ps2pdf sram的.ps檔
```
step 7 : SARM的Utilities -> Generate Menu

step 8 : generate 出要使用的SRAM.v檔

::: info
在RTL模擬時要+notimingcheck,SRAM才不會有timing violation錯誤
:::
SYN Level
---
這步驟需要產合成要用的db檔,由RTL階段的lib檔所產生,依照後須需求產所需的db檔就好,我是只產ss與ffg
ff:高溫高壓
ss:低溫低壓
ff_g:更強的ff,power會更好
指令範例:

```=
read_lib sram_v_40k_nldm_ff_0p99v_0p99v_125c_syn.lib
write_lib -format db USERLIB_nldm_ff_0p99v_0p99v_125c -output sram_128_ff.db
USERLIB...複製上一行出來的名稱
```
DFT Level
---
產TertraMax 所需的tv檔
前面設定需與RTL Level的設定一樣

APR Level
---
產Stream GDS所需的SRAM的GDS檔
1. 複製這個路徑下的lef2gds.pl和lef2gds.tech到自己sram的資料夾

2. 我的SRAM名稱是sram_v_40k與sram_k_35k,分別使用以下指令將lef轉檔成gds檔
`perl lef2gds.pl sram_v_40k.lef`
DRC Level
---
產生spec檔
其他設定需與[RTL Level](https://hackmd.io/RAoIane0RqaoftqnlBD0cg?both#RTL-Level)的設定一樣

---
:::info
在整個design流程中會在不同階段需要產SRAM所需的相關檔案,但由於RTL可能會寫著寫著而更動SRAM的尺寸,建議在SRAM的命名上多加注意,並一步一步產生所需檔案,加油! :facepunch:
:::