---
# System prepended metadata

title: dv.4 (Compiler & Save)
tags: [EDA tool, Verilog]

---

# dv.4 (Compiler & Save)

###### Previous：[dv.3 (Design Environment)](/@C2N2/rk8C-s88xe)
###### Ｎext：[dv.5 (DFT)](/@C2N2/BJcS2yi8ll)

---
## 1. Report Ports

1. **開啟 Report 視窗：==Design== > ==Report Ports==**
2. **設定輸出選項：==設定小數點精度== > ==可以產出輸出文件==**
    <iframe src="https://drive.google.com/file/d/1CxhxFxYtC-fb7Hq1hOJHxizFHO4MAtEK/preview" height="400"></iframe>

## 2. Compiler 

### (1) 使用圖形介面操作

1. **開啟合成視窗：==Design== > ==Compile Design==**
2. **設定合成品質：**
> [!Tip] **Map effort**
> - **控制 ==映射(mapping)== 的強度**
> - **決定 ==RTL -> Gate Level==，合成過程中會嘗試 ==多少種組合==**
>     - **low：==合成速度快==，但 ==效果較差==**
>     - **high：==合成速度慢==，但 ==效果較好==**

> [!Tip] **Area effort**
> - **控制 ==面積(Area) 最小化== 的強度**
> - **==縮小面積== 可能會 ==犧牲時間==**
>     - **low：==不強調縮小面積==，可能是為了 ==提升 Timing==**
>     - **high：==強調縮小面積==，但可能 ==降低 Timing==**

> [!Tip] **Power effort**
> - **控制 ==功耗(Power) 最小化== 的強度**
>     - **high：==強調降低功耗==，可能會 ==影響 Area & Timing==**
<iframe src="https://drive.google.com/file/d/1R6xJTgoTy6HZWPNDgMZfDUvduT-UlFQW/preview" height="400"></iframe>

3. **可以 ==檢視電路結構==，會發現電路變成 ==Gate Level==，沒有 ==block==**


### (2) 使用 CMD 操作

> [!Important] **指令**
> - **使用自訂 ==合成品質==：**
> ```robotframework=
> compile -map_effort high -area_effort high
> ```
> - **使用預設 ==合成品質==：**
> ```robotframework=
> compile
> ```

## 3. Report Area & Timing

### (1) 使用圖形介面操作

:::spoiler **Report Area**
1. **開啟 Report 視窗：==Design > Report Area==**
2. **設定輸出選項：==可以產出輸出文件==**
    <iframe src="https://drive.google.com/file/d/1Ljexj3w8KSo6g0kksevzbIiXK2F6Jz5D/preview" height="400"></iframe>
:::

:::spoiler **Report Timing**
1. **開啟 Report 視窗：==Timing > Report Timing Path==**
2. **設定輸出選項：==設定小數點精度 > 可以產出輸出文件==**
    <iframe src="https://drive.google.com/file/d/1BJrElazK-QERgZYaBkai7ahAtsi6jzRT/preview" height="400"></iframe>
:::

### (2) 使用 CMD 操作

> [!Important] **指令**
> - **會 ==輸出文件==：**
> ```robotframework=
> report_area > area.log
> report_timing > timing.log 
> ```
> - **直接 ==顯示在 CMD== 上**
> ```sdc=
> report_area
> report_timing
> ```

## ● Retiming

- **若 ==Timing Report== 的 ==`slack < 0` (為負)==，則需要 ==重新合成==**
- **這時候就可以使用 [Retiming 技巧 <i class="ph ph-arrow-square-out"></i>](http://hackmd.io/@C2N2/BJfZCkjIel)**
> [!Important] **指令**
> ```robotframework=
> optimize_registers
> ```


## 4. Save Design

### (1) 使用圖形介面操作

:::spoiler **DDC File**
1. **==File > Save as==**
2. **==輸入檔案名稱 > 選擇 `.ddc` 檔==**
    <iframe src="https://drive.google.com/file/d/1fRtm9B1GrJKhhR77O2FEJLY4YUsO6toT/preview" height="400"></iframe>
:::

:::spoiler **Verilog File**
1. **==File > Save as==**
2. **==輸入檔案名稱 > 選擇 `.v` 檔==**
    <iframe src="https://drive.google.com/file/d/11VG9-ZWpxOeq9-xnTUhsTlKisVtx8xYj/preview" height="400"></iframe>
:::

### (2) 使用 CMD 操作

> [!Important] **指令**
> ```robotframework=
> write -format ddc -hierarchy -output "CS_syn.ddc"
> write_sdf -version 1.0 -context verilog chip_syn.sdf
> write_sdc -version 1.7 CHIP.sdc
> write -format verilog -hierarchy -output CS_syn.v
> ```

## 5. Gate Level Simulation

```robotframework=
ncverilog testfixture.v CS_compile.v tsmc18.v +access+r
```

---

## ● Conmand
```sdc=
report_port > port.log

# compile -map_effort high -area_effort high
compile

# report_area > area.log
report_area

# report_timing > timing.log 
report_timing

# optimize_registers

write -format ddc -hierarchy -output "CS_syn.ddc"
write_sdf -version 1.0 -context verilog chip_syn.sdf
write_sdc -version 1.7 CHIP.sdc
write -format verilog -hierarchy -output CS_syn.v
```

---