# dv.2 (Design Condition) ###### Previous:[dv.1 (Create Design)](/@C2N2/ByWb6adLee) ###### Next:[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] ``` ---