よし、これは何?
このページは、 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 は data が flip-flopに到着した後の 15.664 ns である 22.129 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のように、無視すると実際の問題を引き起こす可能性があります。
この場合の解決策は、 global networkの clock を input clockにロックする PLL を clock pathに追加することです。これは事実上、数ナノ秒早くプルすることを意味し、問題を確実に解決します。
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との違いに注意してください)。
これは、同じ clock の 0 nsから output delayを差し引いた時間と比較されます。 timing constraint の min output delay は負 (-3 ns) であることを思い出してください。これが、計算で正の数として表示される理由です。
推定 jitter、 0.035 nsも追加されます (同じ 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の定義です。