알겠습니다. 이게 뭡니까?
이 페이지는 SDC timing constraints에서 set_input_delay 및 set_output_delay 의 의미를 설명하는 다른 게시물 의 예제 부분입니다 .
다른 게시물에 따르면 아래 예제 뒤에 있는 timing constraints는 다음과 같습니다.
create_clock -name theclk -period 20 [get_ports test_clk] set_output_delay -clock theclk -max 8 [get_ports test_out] set_output_delay -clock theclk -min -3 [get_ports test_out] set_input_delay -clock theclk -max 4 [get_ports test_in] set_input_delay -clock theclk -min 2 [get_ports test_in]
set_input_delay -max (setup) 분석
Slack (MET) : 15.664ns (required time - arrival time) Source: test_in (input port clocked by theclk {rise@0.000ns fall@10.000ns period=20.000ns}) Destination: test_samp_reg/D (rising edge-triggered cell FDRE clocked by theclk {rise@0.000ns fall@10.000ns period=20.000ns}) Path Group: theclk Path Type: Setup (Max at Fast Process Corner) Requirement: 20.000ns (theclk rise@20.000ns - theclk rise@0.000ns) Data Path Delay: 2.465ns (logic 0.291ns (11.797%) route 2.175ns (88.203%)) Logic Levels: 1 (IBUF=1) Input Delay: 4.000ns Clock Path Skew: 2.162ns (DCD - SCD + CPR) Destination Clock Delay (DCD): 2.162ns = ( 22.162 - 20.000 ) Source Clock Delay (SCD): 0.000ns Clock Pessimism Removal (CPR): 0.000ns Clock Uncertainty: 0.035ns ((TSJ^2 + TIJ^2)^1/2 + DJ) / 2 + PE Total System Jitter (TSJ): 0.071ns Total Input Jitter (TIJ): 0.000ns Discrete Jitter (DJ): 0.000ns Phase Error (PE): 0.000ns Location Delay type Incr(ns) Path(ns) Netlist Resource(s) ------------------------------------------------------------------- ------------------- (clock theclk rise edge) 0.000 0.000 r input delay 4.000 4.000 AE20 0.000 4.000 r test_in (IN) net (fo=0) 0.000 4.000 test_in AE20 IBUF (Prop_ibuf_I_O) 0.291 4.291 r test_in_IBUF_inst/O net (fo=1, routed) 2.175 6.465 test_in_IBUF SLICE_X0Y1 FDRE r test_samp_reg/D ------------------------------------------------------------------- ------------------- (clock theclk rise edge) 20.000 20.000 r AE23 0.000 20.000 r test_clk (IN) net (fo=0) 0.000 20.000 test_clk AE23 IBUF (Prop_ibuf_I_O) 0.077 20.077 r test_clk_IBUF_inst/O net (fo=1, routed) 1.278 21.355 test_clk_IBUF BUFGCTRL_X0Y4 BUFG (Prop_bufg_I_O) 0.026 21.381 r test_clk_IBUF_BUFG_inst/O net (fo=2, routed) 0.781 22.162 test_clk_IBUF_BUFG SLICE_X0Y1 FDRE r test_samp_reg/C clock pessimism 0.000 22.162 clock uncertainty -0.035 22.126 SLICE_X0Y1 FDRE (Setup_fdre_C_D) 0.003 22.129 test_samp_reg ------------------------------------------------------------------- required time 22.129 arrival time -6.465 ------------------------------------------------------------------- slack 15.664
이 분석은 시간 0에서 시작됩니다. 그런 다음 max input delay constraint에 지정된 4 ns (clock-to-output)를 추가하고 해당 data path를 계속합니다. logic elements 의 delays 에 사용된 값은 process, 전압 및 온도의 가능한 가장 빠른 조합의 값입니다. FPGA의 자체 data path delay (2.465 ns)와 함께 총 data path delay은 6.465 ns입니다.
그런 다음 20 ns에서 다음 clock 부터 시작하여 clock path가 계산됩니다. 다시 한 번, delays 의 값은 가능한 가장 빠른 조합에서 선택됩니다. clock은 input pin 에서 flip-flop 로 이동합니다( PLL이 관련되어 있지 않기 때문에 clock network delay에 대한 보상 없음). 이 계산은 추정된 jitter 도 고려합니다("clock uncertainty" 덕분에). 전체적으로 clock path는 22.129 ns에서 끝납니다. data가 flip-flop에 도착한 후의 15.664 ns 입니다. constraint의 slack입니다.
이 분석은 set_input_delay -max constraint 에 넣을 숫자가 input pin을 구동하는 외부 장치의 최대 clock-to-output ( + 보드의 trace delay )임을 보여줍니다. 이 결론은 숫자가 data path의 시작 시간으로 사용되기 때문입니다. 위의 Path Type 에서 "Max" 부분을 주목하십시오.
set_input_delay -min (hold) 분석
Min Delay Paths -------------------------------------------------------------------------------------- Slack (VIOLATED) : -0.045ns (arrival time - required time) Source: test_in (input port clocked by theclk {rise@0.000ns fall@10.000ns period=20.000ns}) Destination: test_samp_reg/D (rising edge-triggered cell FDRE clocked by theclk {rise@0.000ns fall@10.000ns period=20.000ns}) Path Group: theclk Path Type: Hold (Min at Slow Process Corner) Requirement: 0.000ns (theclk rise@0.000ns - theclk rise@0.000ns) Data Path Delay: 3.443ns (logic 0.626ns (18.194%) route 2.817ns (81.806%)) Logic Levels: 1 (IBUF=1) Input Delay: 2.000ns Clock Path Skew: 5.351ns (DCD - SCD - CPR) Destination Clock Delay (DCD): 5.351ns Source Clock Delay (SCD): 0.000ns Clock Pessimism Removal (CPR): -0.000ns Clock Uncertainty: 0.035ns ((TSJ^2 + TIJ^2)^1/2 + DJ) / 2 + PE Total System Jitter (TSJ): 0.071ns Total Input Jitter (TIJ): 0.000ns Discrete Jitter (DJ): 0.000ns Phase Error (PE): 0.000ns Location Delay type Incr(ns) Path(ns) Netlist Resource(s) ------------------------------------------------------------------- ------------------- (clock theclk rise edge) 0.000 0.000 r input delay 2.000 2.000 AE20 0.000 2.000 r test_in (IN) net (fo=0) 0.000 2.000 test_in AE20 IBUF (Prop_ibuf_I_O) 0.626 2.626 r test_in_IBUF_inst/O net (fo=1, routed) 2.817 5.443 test_in_IBUF SLICE_X0Y1 FDRE r test_samp_reg/D ------------------------------------------------------------------- ------------------- (clock theclk rise edge) 0.000 0.000 r AE23 0.000 0.000 r test_clk (IN) net (fo=0) 0.000 0.000 test_clk AE23 IBUF (Prop_ibuf_I_O) 0.734 0.734 r test_clk_IBUF_inst/O net (fo=1, routed) 2.651 3.385 test_clk_IBUF BUFGCTRL_X0Y4 BUFG (Prop_bufg_I_O) 0.093 3.478 r test_clk_IBUF_BUFG_inst/O net (fo=2, routed) 1.873 5.351 test_clk_IBUF_BUFG SLICE_X0Y1 FDRE r test_samp_reg/C clock pessimism 0.000 5.351 clock uncertainty 0.035 5.387 SLICE_X0Y1 FDRE (Hold_fdre_C_D) 0.101 5.488 test_samp_reg ------------------------------------------------------------------- required time -5.488 arrival time 5.443 ------------------------------------------------------------------- slack -0.045
이 분석은 시간 0에서 시작됩니다. 그런 다음 min input delay constraint에 지정된 2 ns (clock-to-output)를 추가하고 해당 data path를 계속합니다. logic elements 의 delays 에 사용되는 값은 process, 전압 및 온도의 가능한 가장 느린 조합의 값입니다. FPGA의 자체 data path delay (3.443 ns)와 함께 총 data path delay은 5.443 ns에 해당합니다. 위의 빠른 분석과 비교하여 FPGA의 자체 delay이 더 크다는 것은 놀라운 일이 아닙니다.
그런 다음 가능한 가장 느린 조합으로 clock path가 계산됩니다. 이 계산은 0 ns의 동일한 clock edge 에서 시작됩니다. 결국 이것은 hold timing의 계산이므로 문제는 flip-flop 의 input 에서 데이터를 샘플링하기 전에 데이터가 변경되지 않았는지 여부입니다.
clock은 input pin 에서 flip-flop 로 이동합니다( PLL이 포함되지 않으므로 clock network delay에 대한 보상 없음). 이 계산에서는 추정된 jitter 도 고려합니다("clock uncertainty" 덕분에). setup에 대한 계산과 동일한 값을 갖지만 부호가 반대임을 유의하십시오. 같은 jitter지만 최악의 경우는 반대 방향이다.
전체적으로 clock path는 5.488 ns에서 끝납니다. 이는 0.045 ns가 너무 늦은 것입니다( data는 5.443 ns에서 변경됨). 따라서 constraint는 0.045 ns의 negative slack 와 함께 위반되었습니다.
이 분석은 set_input_delay -min constraint 에 장착할 숫자가 input pin을 구동하는 외부 장치의 최소 clock-to-output 임을 보여줍니다. 이 결론은 숫자가 data path의 시작 시간으로 사용되기 때문입니다. 위의 Path Type 에서 "Min" 부분을 주목하십시오.
2 ns 의 최소 clock-to-output이 hold constraint를 위반할 수 있다는 것은 놀라운 일입니다. 이를 가볍게 여겨서는 안 됩니다. 위반된 timing constraint와 마찬가지로 무시할 경우 실제 문제가 발생할 수 있습니다.
이 경우에 대한 해결책은 clock path에 PLL을 추가하여 global network의 clock을 input clock에 고정하는 것입니다. 이것은 효과적으로 문제를 확실히 해결하는 몇 나노초 더 일찍 끌어오는 것을 의미합니다.
set_output_delay -max (setup) 분석
Slack (MET) : 2.983ns (required time - arrival time) Source: test_out_reg/C (rising edge-triggered cell FDRE clocked by theclk {rise@0.000ns fall@10.000ns period=20.000ns}) Destination: test_out (output port clocked by theclk {rise@0.000ns fall@10.000ns period=20.000ns}) Path Group: theclk Path Type: Max at Slow Process Corner Requirement: 20.000ns (theclk rise@20.000ns - theclk rise@0.000ns) Data Path Delay: 3.631ns (logic 2.583ns (71.152%) route 1.047ns (28.848%)) Logic Levels: 1 (OBUF=1) Output Delay: 8.000ns Clock Path Skew: -5.351ns (DCD - SCD + CPR) Destination Clock Delay (DCD): 0.000ns = ( 20.000 - 20.000 ) Source Clock Delay (SCD): 5.351ns Clock Pessimism Removal (CPR): 0.000ns Clock Uncertainty: 0.035ns ((TSJ^2 + TIJ^2)^1/2 + DJ) / 2 + PE Total System Jitter (TSJ): 0.071ns Total Input Jitter (TIJ): 0.000ns Discrete Jitter (DJ): 0.000ns Phase Error (PE): 0.000ns Location Delay type Incr(ns) Path(ns) Netlist Resource(s) ------------------------------------------------------------------- ------------------- (clock theclk rise edge) 0.000 0.000 r AE23 0.000 0.000 r test_clk (IN) net (fo=0) 0.000 0.000 test_clk AE23 IBUF (Prop_ibuf_I_O) 0.734 0.734 r test_clk_IBUF_inst/O net (fo=1, routed) 2.651 3.385 test_clk_IBUF BUFGCTRL_X0Y4 BUFG (Prop_bufg_I_O) 0.093 3.478 r test_clk_IBUF_BUFG_inst/O net (fo=2, routed) 1.873 5.351 test_clk_IBUF_BUFG SLICE_X0Y1 FDRE r test_out_reg/C ------------------------------------------------------------------- ------------------- SLICE_X0Y1 FDRE (Prop_fdre_C_Q) 0.223 5.574 r test_out_reg/Q net (fo=1, routed) 1.047 6.622 test_out_OBUF AK21 OBUF (Prop_obuf_I_O) 2.360 8.982 r test_out_OBUF_inst/O net (fo=0) 0.000 8.982 test_out AK21 r test_out (OUT) ------------------------------------------------------------------- ------------------- (clock theclk rise edge) 20.000 20.000 r clock pessimism 0.000 20.000 clock uncertainty -0.035 19.965 output delay -8.000 11.965 ------------------------------------------------------------------- required time 11.965 arrival time -8.982 ------------------------------------------------------------------- slack 2.983
이 분석의 목적은 output delay을 측정하는 것이므로 clock edge에서 시작하여 flip-flop을 따라 이동한 다음 data path를 따라 이동합니다. 총 delay을 합하면 8.982 ns가 됩니다.
"Path Type"는 다음 clock (at 20 ns)를 고려하지만( 0 ns)에서 동일한 clock이 아님에도 불구하고) setup 에 대한 계산(혼동을 피하기 위해?)이라고 말하지 않습니다.
계산은 process, 전압 및 온도의 가능한 가장 느린 조합에서 발생합니다( input setup 계산은 가장 빠른 조합으로 수행되었음을 기억하십시오). clock path는 input delay에 대한 hold timing 분석의 clock path 와 매우 유사합니다. 두 계산 모두 느린 model을 기반으로 하기 때문에 이는 상당히 예상됩니다.
총 delay은 20 ns에서 다음 clock 의 시간에서 set_output_delay로 주어진 값을 뺀 값과 비교됩니다. 추정 jitter를 뺀 값(위의 경우0.035 ns ).
요약하자면 data는 8.982 ns에서 안정적인 logic state 에 도달하고, 안정되어야 하는 시간은 약 12 ns가 므로 거의 3 ns의 slack이 있습니다.
이것은 set_output_delay -max 에 사용되는 번호가 외부 장치의 input 에 대해 지정된 setup time 여야 하는 이유를 보여줍니다. 이 timing constraint는 output에서 유효한 data 까지의 총 delay 와 다음 clock의 시간 위치 간의 차이를 계산하여 검증됩니다. 이 차이가 달성 목표입니다. 이것이 바로 setup time의 정의입니다. 다음 clock전에 data가 얼마나 오래 안정적이어야 하는지.
set_output_delay -min (hold) 분석
Slack (MET) : 0.791ns (arrival time - required time) Source: test_out_reg/C (rising edge-triggered cell FDRE clocked by theclk {rise@0.000ns fall@10.000ns period=20.000ns}) Destination: test_out (output port clocked by theclk {rise@0.000ns fall@10.000ns period=20.000ns}) Path Group: theclk Path Type: Min at Fast Process Corner Requirement: 0.000ns (theclk rise@0.000ns - theclk rise@0.000ns) Data Path Delay: 1.665ns (logic 1.384ns (83.159%) route 0.280ns (16.841%)) Logic Levels: 1 (OBUF=1) Output Delay: -3.000ns Clock Path Skew: -2.162ns (DCD - SCD - CPR) Destination Clock Delay (DCD): 0.000ns Source Clock Delay (SCD): 2.162ns Clock Pessimism Removal (CPR): -0.000ns Clock Uncertainty: 0.035ns ((TSJ^2 + TIJ^2)^1/2 + DJ) / 2 + PE Total System Jitter (TSJ): 0.071ns Total Input Jitter (TIJ): 0.000ns Discrete Jitter (DJ): 0.000ns Phase Error (PE): 0.000ns Location Delay type Incr(ns) Path(ns) Netlist Resource(s) ------------------------------------------------------------------- ------------------- (clock theclk rise edge) 0.000 0.000 r AE23 0.000 0.000 r test_clk (IN) net (fo=0) 0.000 0.000 test_clk AE23 IBUF (Prop_ibuf_I_O) 0.077 0.077 r test_clk_IBUF_inst/O net (fo=1, routed) 1.278 1.355 test_clk_IBUF BUFGCTRL_X0Y4 BUFG (Prop_bufg_I_O) 0.026 1.381 r test_clk_IBUF_BUFG_inst/O net (fo=2, routed) 0.781 2.162 test_clk_IBUF_BUFG SLICE_X0Y1 FDRE r test_out_reg/C ------------------------------------------------------------------- ------------------- SLICE_X0Y1 FDRE (Prop_fdre_C_Q) 0.100 2.262 r test_out_reg/Q net (fo=1, routed) 0.280 2.542 test_out_OBUF AK21 OBUF (Prop_obuf_I_O) 1.284 3.826 r test_out_OBUF_inst/O net (fo=0) 0.000 3.826 test_out AK21 r test_out (OUT) ------------------------------------------------------------------- ------------------- (clock theclk rise edge) 0.000 0.000 r clock pessimism 0.000 0.000 clock uncertainty 0.035 0.035 output delay 3.000 3.035 ------------------------------------------------------------------- required time -3.035 arrival time 3.826 ------------------------------------------------------------------- slack 0.791
이 분석은 max output delay와 유사하지만 동일한 clock edge 에 대해 계산된 것뿐입니다(다음은 아님). 또한 process, 전압 및 온도의 가능한 가장 빠른 조합으로 계산됩니다.
이전과 유사하게 clock path는 input delay에 대한 setup timing 분석의 clock path 와 매우 유사합니다. 두 계산 모두 빠른 model을 기반으로 하기 때문에 이는 상당히 예상됩니다.
set_output_delay -max에 대한 계산과 마찬가지로 data path는 output이 안정될 때까지 clock path를 계속합니다. 이것은 3.826 ns 에서 발생하도록 계산됩니다(느린 model와의 차이점 참고).
이것은 0 ns에서 동일한 clock 에서 output delay을 뺀 시간과 비교됩니다. timing constraint 의 min output delay은 음수(-3 ns)이므로 계산에서 양수로 표시됩니다.
예상 jitter, 0.035 ns도 추가되었습니다( jitter가 동일한 clock cycle에 있기 때문에 이 계산에서 왜 jitter가 사용되는지 이해하지 못합니다).
결론: data는 3.826 ns까지 안정적이었고 3.035 ns까지 안정적이어야 합니다. 0.791 ns를 slack로 사용하면 괜찮습니다.
이것은 set_output_delay -min 에 사용되는 번호가 외부 장치의 input 에 대해 지정된 hold time이 고 부호가 반대인 이유를 보여줍니다. 이 timing constraint는 총 delay 가 이 주어진 수보다 커야 함을 요구함으로써 검증됩니다. 다시 말해, data는 clock이후 그 오랜 시간 동안 안정적이어야 합니다. 이것은 hold time의 정의입니다.