---
# System prepended metadata

title: dv.2 (Design Condition)
tags: [EDA tool, Verilog]

---

# dv.2 (Design Condition)

###### Previous：[dv.1 (Create Design)](/@C2N2/ByWb6adLee)
###### Ｎext：[dv.3 (Design Environment)](/@C2N2/rk8C-s88xe)

---

> [!Tip] **3 種方法 設定**
> 1. **匯入 ==`.sdc` file==**
> 2. **使用 ==圖形介面== 操作 (有些 ==設定麻煩==)**
> 3. **使用 ==CMD== 操作**

---

#### ● [Synopsys Design Constraints (.sdc) <i class="ph ph-arrow-square-out"></i>](http://hackmd.io/@C2N2/rkrVNgYLxe)

> [!Note] **Design Condition：時脈、I/O介面、限制條件**
> 1. [Specify Clock](#1-時脈源-SpecifynbspClock)
>     - **Perid**
>     - **Waveform**
> 2. [Clock Uncertainty](#2-時脈不確定時間邊界-Clock-Uncertainty)
>     - **jitter**
>     - **skew**
> 3. [Clock Source Latency](#3-時脈源延遲-Clock-Source-Latency)
>     - **Source latency**
>     - **Network latency**
> 4. [Transition Time](#4-轉換時間-Transition-Time)
>     - **Input transition**
>     - **Clock transition**
> 5. [Constraint](#5-限制條件-Constraint)
>     - **Max area**
>     - **Max fanout**
>     - **Max transition**

---

## 1. 時脈源 (Specify Clock)

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

1. **開啟設定視窗：==點選時脈輸入== > ==Attributes== > ==Specify Clock==**
    <iframe src="https://drive.google.com/file/d/1lIbX0iUtDM4NK-UdtuTczEZ1e7dm2cyT/preview" height="400"></iframe>
2. **建立時脈源：**  
**==輸入時脈名稱(自訂)== > ==設定時脈週期== > ==設定轉態時間點== > ==勾選選項== > ==OK==**
    
    > [!Tip] **Don't touch network**
    > **==不允許== 合成器 ==修改== 這條 ==時脈網路==**  

    > [!Tip] **Fix hold**
    > **要求合成器 ==修正== 可能的 ==訊號時序偏移== 問題**
    <iframe src="https://drive.google.com/file/d/1VCyruZOvIX9pKqQkAbHWOBTQpocDIEbm/preview" height="400"></iframe>

### (2) 使用CMD操作

> [!Important] **設定內容**
> - **`[get_ports clk]`：針對 ==Top module== 的 ==時脈輸入 clk== 的設定**
>   - **`create_clock -name clk`：建立 ==時脈源 clk==**
>   - **`-period 10`：==時脈週期 = 10 ns==**
>   - **`-waveform {0 5}`：==上升緣時間點 = 0 ns==、==下降緣時間點 = 5 ns==**
> - **`[get_clocks clk]`：針對 ==時脈源 clk== 的限制**
>   - **`set_dont_touch_network`：==不允許修改 clk 相關的網路==**
>   - **`set_fix_hold`：==保持 clk 的訊號==**
> > ```sdc=
> > create_clock -name clk -period 10 -waveform {0 5} [get_ports clk]
> > set_dont_touch_network [get_clocks clk]
> > set_fix_hold [get_clocks clk]
> > ```

## 2. 時脈不確定時間邊界 (Clock Uncertainty)

> [!Important] **設定內容**
> - **針對 ==時脈源 clk== 的限制**
>   - **設定 ==時脈源== 在 ==$\pm$ 0.1 ns== 的時間內，==訊號不確定==**
> > ```sdc=
> > set_clock_uncertainty 0.1 [get_clocks clk]
> > ```

## 3. 時脈源延遲 (Clock Source Latency)

> [!Important] **設定內容**
> - **針對 ==時脈源 clk== 的設定**
>   - **設定 ==時脈源==~==Top module -> 時脈輸入== 的 ==延遲== 為 ==0 ns (沒有延遲)==**
> - **針對 ==時脈源 clk== 的 ==內部網路== 的設定**
>   - **設定 ==Top module -> 時脈輸入==~==內部電路 -> 時脈輸入== 的 ==延遲== 為 ==1 ns==**
> > ```sdc=
> > set_clock_latency -source 0 [get_clocks clk]
> > set_clock_latency 1 [get_clocks clk]
> > ```

## 4. 轉換時間 (Transition Time)

> [!Important] **設定內容**
> - **針對 ==Top module -> 所有 input== 的限制**
>   - **設定 ==input 訊號== 的 ==轉換時間== 為 ==0.5 ns==**
> - **針對 ==時脈源 clk== 的限制**
>   - **設定 ==時脈源 clk== 的 ==轉換時間== 為 ==0.5 ns==**
> > ```sdc=
> > set_input_transition 0.5 [all_inputs]
> > set_clock_transition 0.5 [all_clocks]
> > ```

## 5. 限制條件 (Constraint)

> [!Important] **設定內容**
> - **針對 ==所有== 的限制**
>   - **設定 ==電路== 的 ==面積上限== 為 ==0 ns (不限制)==**
> - **針對 ==Top module -> 所有 input== 的限制**
>   - **設定 ==input 訊號== 的 ==最大扇出數== 為 ==6==**
> - **針對 ==Top module -> 所有 input== 的限制**
>   - **設定 ==input 訊號== 的 ==最大轉換時間== 為 ==0.3 ns==**
> > ```sdc=
> > set_max_area 0
> > set_max_fanout 6 [all_inputs]
> > set_max_transition 0.3 [all_inputs]
> > ```

---

## ● Conmand
```sdc=
create_clock -name clk -period 10 -waveform {0 5} [get_ports clk]
set_dont_touch_network [get_clocks clk]
set_fix_hold [get_clocks clk]

set_clock_uncertainty 0.1 [get_clocks clk]

set_clock_latency -source 0 [get_clocks clk]
set_clock_latency 1 [get_clocks clk]

set_input_transition 0.5 [all_inputs]
set_clock_transition 0.5 [all_clocks]

set_max_area 0
set_max_fanout 6 [all_inputs]
set_max_transition 0.3 [all_inputs]
```

---