Logic Synthisis on Design Compiler & Gate Level Simulation
===
合成這個階段是為了將verilog轉成元件,分成兩種做法,一個是將所有要下的commend集合在sdc檔後使用tcl檔執行,缺點是中間有錯不好抓,另一種是開DV後一行一行指令下,可即時抓錯。
此篇放的圖是在我們實驗室工作站截的圖,這篇會講述較多的GUI介面,若要看EDA cloud的操作說明請看[這篇](https://hackmd.io/@linda8832825/HJgWJnZo0)。
DC_SHELL
---
在terminal執行下列指令,產出的syn.log裡會寫有無latch和error等等的資訊。
`dc_shell -f dc_syn.tcl | tee syn.log`
下面這張圖是dc_syn.tcl的範例

DV
---
1. 複製setup檔
```=
cp /home/standard/Environment_Setup_File/synthesis_setup_for_18/synopsys_dc.setup .synopsys_dc.setup
```
2. 18是180nm製成,neg是指負緣觸發電路,可在cell_lib資料夾裡找到相關製程檔
```=
cp /home/cell_lib/CBDK_TSMC018_Arm_v4.0/CIC/Verilog/tsmc18.v ./
```
3. 修改setup檔裡的search path,可以確認路徑裡是否有需要使用到的db檔
`cd /home/cell_lib/CBDK_TSMC018_Arm_v4.0/CIC/SynopsysDC/db/`

4. 在terminal打dv

5. file -> setup

6. 確認這塊需使用的db檔都有被呼叫,不能出現像是"your_library"之類的字

7. 開verilog

8. 改error

9. 不可以有Latch

10. sdc的東西貼在下面 (可以一次貼全部)

11. dv 打compile

12. 在dv打
1. write -format ddc -hierarchy -output "主題_syn.ddc"
2. write_sdf -version 1.0 主題_syn.sdf
3. write -format verilog -hierarchy -output 主題_syn.v
4. report_area > area.log
5. report_timing > timing.log
6. report_qor > 主題_syn.qor
13. exit dv
:::success
SDC comment

set_max_fanout 20 [all_inputs] : 邏輯閘數超過20就開始拆開做訊號加強
:::
:::info
* ddc : dv compile 後將code轉成電路存在這,後面做DFT要使用的
* sdf(stander delay format) : dv產生各個 gate 的 delay time,而 net 的 delay 是在APR才會產生
* sdc(standard delay constraint) : 自己設clk等等的大小
* area.log : 只要看total cell area就好
total cell area = Combination(組合) area + Noncombinational(循序) area
net interconnect area : 線的面積不要相信

* timing.log :
slack 不能小於0,小於的話要改code

挑 path 最大且是 path 2 修改verilog
在數位電路中有四條 Timing path:
* in2reg (Path1) : input to register
* reg2reg (Path2) : register to register
* reg2out (Path3) : register to output
* in2out (Path4) : input to output ( 不可以有這條,會在APR有很大的timing violation )
* Path 1、2、3都能在後續的APR ECO掉但若能在這階段多修一點就修掉,你的晶片就能跑得更快

:::
Gate Level Simulation
---
1. 在 testbench 加入這兩行


2. 在 terminal 輸入 ncverilog testfixture.v LBP_syn.v tsmc18.v +define+SDF
(需要使用與環境檔裡相同製程規格的setup檔)