よし、これは何?
このページは、 SDC timing constraintsにおける set_input_delay と set_output_delay の意味を説明する別の投稿のサンプル部分です。
TimeQuest (Quartusの timing analyzer) は、4 つの corners で timing analysis を実行します (最大温度と最小温度、最大電圧と最小電圧の組み合わせ)。 pathごとに、 TimeQuest は slackが最悪だった corner の結果を選択します。以下の例では、これら 4 つの corners の最悪のケースが示されています。したがって、 FPGA logic elementsの delays に表示される番号は、 timing report ごとに異なります。
私の別の投稿では、以下に示すように timing reports の作成について説明しています。
その他の投稿によると、以下の例の背後にある 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) の分析
Delay Model: Slow 1100mV 0C Model +------------------------------------------------------------------------------------------------------+ ; Summary of Paths ; +--------+-----------+-----------+--------------+-------------+--------------+------------+------------+ ; Slack ; From Node ; To Node ; Launch Clock ; Latch Clock ; Relationship ; Clock Skew ; Data Delay ; +--------+-----------+-----------+--------------+-------------+--------------+------------+------------+ ; 12.341 ; test_in ; test_samp ; theclk ; theclk ; 20.000 ; 3.940 ; 7.499 ; +--------+-----------+-----------+--------------+-------------+--------------+------------+------------+ Path #1: Setup slack is 12.341 =============================================================================== +--------------------------------+ ; Path Summary ; +--------------------+-----------+ ; Property ; Value ; +--------------------+-----------+ ; From Node ; test_in ; ; To Node ; test_samp ; ; Launch Clock ; theclk ; ; Latch Clock ; theclk ; ; Data Arrival Time ; 11.499 ; ; Data Required Time ; 23.840 ; ; Slack ; 12.341 ; +--------------------+-----------+ +---------------------------------------------------------------------------------------+ ; Statistics ; +---------------------------+--------+-------+-------------+------------+-------+-------+ ; Property ; Value ; Count ; Total Delay ; % of Total ; Min ; Max ; +---------------------------+--------+-------+-------------+------------+-------+-------+ ; Setup Relationship ; 20.000 ; ; ; ; ; ; ; Clock Skew ; 3.940 ; ; ; ; ; ; ; Data Delay ; 7.499 ; ; ; ; ; ; ; Number of Logic Levels ; ; 1 ; ; ; ; ; ; Physical Delays ; ; ; ; ; ; ; ; Arrival Path ; ; ; ; ; ; ; ; Clock ; ; ; ; ; ; ; ; Clock Network (Lumped) ; ; 1 ; 0.000 ; ; 0.000 ; 0.000 ; ; Data ; ; ; ; ; ; ; ; IC ; ; 2 ; 2.447 ; 33 ; 0.000 ; 2.447 ; ; Cell ; ; 2 ; 5.052 ; 67 ; 0.652 ; 4.400 ; ; Required Path ; ; ; ; ; ; ; ; Clock ; ; ; ; ; ; ; ; Clock Network (Lumped) ; ; 1 ; 3.940 ; 100 ; 3.940 ; 3.940 ; +---------------------------+--------+-------+-------------+------------+-------+-------+ Note: Negative delays are omitted from totals when calculating percentages +-----------------------------------------------------------------------------------+ ; Data Arrival Path ; +----------+---------+----+------+--------+-------------------+---------------------+ ; Total ; Incr ; RF ; Type ; Fanout ; Location ; Element ; +----------+---------+----+------+--------+-------------------+---------------------+ ; 0.000 ; 0.000 ; ; ; ; ; launch edge time ; ; 0.000 ; 0.000 ; ; ; ; ; clock path ; ; 0.000 ; 0.000 ; R ; ; ; ; clock network delay ; ; 4.000 ; 4.000 ; F ; iExt ; 1 ; PIN_AP17 ; test_in ; ; 11.499 ; 7.499 ; ; ; ; ; data path ; ; 4.000 ; 0.000 ; FF ; IC ; 1 ; IOIBUF_X48_Y0_N58 ; test_in~input|i ; ; 8.400 ; 4.400 ; FF ; CELL ; 1 ; IOIBUF_X48_Y0_N58 ; test_in~input|o ; ; 10.847 ; 2.447 ; FF ; IC ; 1 ; FF_X48_Y2_N40 ; test_samp|asdata ; ; 11.499 ; 0.652 ; FF ; CELL ; 1 ; FF_X48_Y2_N40 ; test_samp ; +----------+---------+----+------+--------+-------------------+---------------------+ +-------------------------------------------------------------------------------+ ; Data Required Path ; +----------+---------+----+------+--------+---------------+---------------------+ ; Total ; Incr ; RF ; Type ; Fanout ; Location ; Element ; +----------+---------+----+------+--------+---------------+---------------------+ ; 20.000 ; 20.000 ; ; ; ; ; latch edge time ; ; 23.940 ; 3.940 ; ; ; ; ; clock path ; ; 23.940 ; 3.940 ; R ; ; ; ; clock network delay ; ; 23.840 ; -0.100 ; ; ; ; ; clock uncertainty ; ; 23.840 ; 0.000 ; ; uTsu ; 1 ; FF_X48_Y2_N40 ; test_samp ; +----------+---------+----+------+--------+---------------+---------------------+
この解析は、 max input delay constraintで指定された 4 ns に input port (test_in) を設定して "Data Arrival Path" で開始し、その data pathを続行します。 FPGA自身の data path delay (7.499 ns) と合わせて、 data path delay の合計は 11.499 nsになります。
clock path は、 20 nsで次の clock から開始して、「Data Required Path」で計算されます。 clock は input pin から flip-flop に移動します ( PLL が含まれていないため、 clock network delayの補償はありません)。この計算では、推定 jitter も考慮されます ("clock uncertainty" により)。全体として、 clock path は 23.840 nsで終了します。これは、 data が flip-flopに到着した後の 12.341 ns です。 constraintの slackです。
この分析は、 set_input_delay -max constraint に配置する数が、 input pin を駆動する外部デバイスの最大 clock-to-output (+ ボードの trace delay ) であることを示しています。これは、 data pathの起動時間として数値が使用されているためです。
set_input_delay -min (hold) の分析
Delay Model: Slow 1100mV 85C Model +-----------------------------------------------------------------------------------------------------+ ; Summary of Paths ; +-------+-----------+-----------+--------------+-------------+--------------+------------+------------+ ; Slack ; From Node ; To Node ; Launch Clock ; Latch Clock ; Relationship ; Clock Skew ; Data Delay ; +-------+-----------+-----------+--------------+-------------+--------------+------------+------------+ ; 0.770 ; test_in ; test_samp ; theclk ; theclk ; 0.000 ; 4.287 ; 3.057 ; +-------+-----------+-----------+--------------+-------------+--------------+------------+------------+ Path #1: Hold slack is 0.770 =============================================================================== +--------------------------------+ ; Path Summary ; +--------------------+-----------+ ; Property ; Value ; +--------------------+-----------+ ; From Node ; test_in ; ; To Node ; test_samp ; ; Launch Clock ; theclk ; ; Latch Clock ; theclk ; ; Data Arrival Time ; 5.057 ; ; Data Required Time ; 4.287 ; ; Slack ; 0.770 ; +--------------------+-----------+ +--------------------------------------------------------------------------------------+ ; Statistics ; +---------------------------+-------+-------+-------------+------------+-------+-------+ ; Property ; Value ; Count ; Total Delay ; % of Total ; Min ; Max ; +---------------------------+-------+-------+-------------+------------+-------+-------+ ; Hold Relationship ; 0.000 ; ; ; ; ; ; ; Clock Skew ; 4.287 ; ; ; ; ; ; ; Data Delay ; 3.057 ; ; ; ; ; ; ; Number of Logic Levels ; ; 1 ; ; ; ; ; ; Physical Delays ; ; ; ; ; ; ; ; Arrival Path ; ; ; ; ; ; ; ; Clock ; ; ; ; ; ; ; ; Clock Network (Lumped) ; ; 1 ; 0.000 ; ; 0.000 ; 0.000 ; ; Data ; ; ; ; ; ; ; ; IC ; ; 2 ; 2.028 ; 66 ; 0.000 ; 2.028 ; ; Cell ; ; 2 ; 1.029 ; 34 ; 0.290 ; 0.739 ; ; Required Path ; ; ; ; ; ; ; ; Clock ; ; ; ; ; ; ; ; Clock Network (Lumped) ; ; 1 ; 4.287 ; 100 ; 4.287 ; 4.287 ; +---------------------------+-------+-------+-------------+------------+-------+-------+ Note: Negative delays are omitted from totals when calculating percentages +----------------------------------------------------------------------------------+ ; Data Arrival Path ; +---------+---------+----+------+--------+-------------------+---------------------+ ; Total ; Incr ; RF ; Type ; Fanout ; Location ; Element ; +---------+---------+----+------+--------+-------------------+---------------------+ ; 0.000 ; 0.000 ; ; ; ; ; launch edge time ; ; 0.000 ; 0.000 ; ; ; ; ; clock path ; ; 0.000 ; 0.000 ; R ; ; ; ; clock network delay ; ; 2.000 ; 2.000 ; R ; iExt ; 1 ; PIN_AP17 ; test_in ; ; 5.057 ; 3.057 ; ; ; ; ; data path ; ; 2.000 ; 0.000 ; RR ; IC ; 1 ; IOIBUF_X48_Y0_N58 ; test_in~input|i ; ; 2.739 ; 0.739 ; RR ; CELL ; 1 ; IOIBUF_X48_Y0_N58 ; test_in~input|o ; ; 4.767 ; 2.028 ; RR ; IC ; 1 ; FF_X48_Y2_N40 ; test_samp|asdata ; ; 5.057 ; 0.290 ; RR ; CELL ; 1 ; FF_X48_Y2_N40 ; test_samp ; +---------+---------+----+------+--------+-------------------+---------------------+ +------------------------------------------------------------------------------+ ; Data Required Path ; +---------+---------+----+------+--------+---------------+---------------------+ ; Total ; Incr ; RF ; Type ; Fanout ; Location ; Element ; +---------+---------+----+------+--------+---------------+---------------------+ ; 0.000 ; 0.000 ; ; ; ; ; latch edge time ; ; 4.287 ; 4.287 ; ; ; ; ; clock path ; ; 4.287 ; 4.287 ; R ; ; ; ; clock network delay ; ; 4.287 ; 0.000 ; ; ; ; ; clock uncertainty ; ; 4.287 ; 0.000 ; ; uTh ; 1 ; FF_X48_Y2_N40 ; test_samp ; +---------+---------+----+------+--------+---------------+---------------------+
この分析は、 min input delay constraintで指定されているように、 input port (test_in) を 2 nsに設定して "Data Arrival Path" で開始し、その data pathを続行します。 FPGA自身の data path delay (3.057 ns) と合わせると、 data path delay の合計は 5.057 nsになります。
clock path は、 0 nsで同じ clock edge から開始して、「Data Required Path」で計算されます。結局のところ、これは hold timingの計算なので、問題は、 flip-flop の input でデータがサンプリングされる前に変更されていないかどうかです。
clock は input pin から flip-flop に移動します ( PLL が含まれていないため、 clock network delayの補償はありません)。この計算では、("clock uncertainty" によって) 推定 jitter も考慮されますが、その値はゼロであることに注意してください。全体として、 clock path は、 dataの変更よりも 0.770 ns 早い 4.287 nsで終了します。したがって、この番号は slackです。
この分析は、 set_input_delay -min constraint に配置する数が、 input pinを駆動する外部デバイスの最小の clock-to-output であることを示しています。これは、 data pathの開始時刻として数値が使用されているためです。
set_output_delay -max (setup) の分析
Delay Model: Slow 1100mV 85C Model +--------------------------------------------------------------------------------------------------------+ ; Summary of Paths ; +-------+---------------+----------+--------------+-------------+--------------+------------+------------+ ; Slack ; From Node ; To Node ; Launch Clock ; Latch Clock ; Relationship ; Clock Skew ; Data Delay ; +-------+---------------+----------+--------------+-------------+--------------+------------+------------+ ; 2.651 ; test_out~reg0 ; test_out ; theclk ; theclk ; 20.000 ; -5.320 ; 3.929 ; +-------+---------------+----------+--------------+-------------+--------------+------------+------------+ Path #1: Setup slack is 2.651 =============================================================================== +------------------------------------+ ; Path Summary ; +--------------------+---------------+ ; Property ; Value ; +--------------------+---------------+ ; From Node ; test_out~reg0 ; ; To Node ; test_out ; ; Launch Clock ; theclk ; ; Latch Clock ; theclk ; ; Data Arrival Time ; 9.249 ; ; Data Required Time ; 11.900 ; ; Slack ; 2.651 ; +--------------------+---------------+ +---------------------------------------------------------------------------------------+ ; Statistics ; +---------------------------+--------+-------+-------------+------------+-------+-------+ ; Property ; Value ; Count ; Total Delay ; % of Total ; Min ; Max ; +---------------------------+--------+-------+-------------+------------+-------+-------+ ; Setup Relationship ; 20.000 ; ; ; ; ; ; ; Clock Skew ; -5.320 ; ; ; ; ; ; ; Data Delay ; 3.929 ; ; ; ; ; ; ; Number of Logic Levels ; ; 0 ; ; ; ; ; ; Physical Delays ; ; ; ; ; ; ; ; Arrival Path ; ; ; ; ; ; ; ; Clock ; ; ; ; ; ; ; ; Clock Network (Lumped) ; ; 1 ; 5.320 ; 100 ; 5.320 ; 5.320 ; ; Data ; ; ; ; ; ; ; ; IC ; ; 1 ; 0.000 ; 0 ; 0.000 ; 0.000 ; ; Cell ; ; 3 ; 3.929 ; 100 ; 0.000 ; 2.150 ; ; uTco ; ; 1 ; 0.000 ; 0 ; 0.000 ; 0.000 ; ; Required Path ; ; ; ; ; ; ; ; Clock ; ; ; ; ; ; ; ; Clock Network (Lumped) ; ; 1 ; 0.000 ; ; 0.000 ; 0.000 ; +---------------------------+--------+-------+-------------+------------+-------+-------+ Note: Negative delays are omitted from totals when calculating percentages +---------------------------------------------------------------------------------------+ ; Data Arrival Path ; +---------+---------+----+------+--------+------------------------+---------------------+ ; Total ; Incr ; RF ; Type ; Fanout ; Location ; Element ; +---------+---------+----+------+--------+------------------------+---------------------+ ; 0.000 ; 0.000 ; ; ; ; ; launch edge time ; ; 5.320 ; 5.320 ; ; ; ; ; clock path ; ; 5.320 ; 5.320 ; R ; ; ; ; clock network delay ; ; 9.249 ; 3.929 ; ; ; ; ; data path ; ; 5.320 ; 0.000 ; ; uTco ; 1 ; DDIOOUTCELL_X48_Y0_N50 ; test_out~reg0 ; ; 7.099 ; 1.779 ; FF ; CELL ; 1 ; DDIOOUTCELL_X48_Y0_N50 ; test_out~reg0|q ; ; 7.099 ; 0.000 ; FF ; IC ; 1 ; IOOBUF_X48_Y0_N42 ; test_out~output|i ; ; 9.249 ; 2.150 ; FF ; CELL ; 1 ; IOOBUF_X48_Y0_N42 ; test_out~output|o ; ; 9.249 ; 0.000 ; FF ; CELL ; 0 ; PIN_AN17 ; test_out ; +---------+---------+----+------+--------+------------------------+---------------------+ +--------------------------------------------------------------------------+ ; Data Required Path ; +----------+---------+----+------+--------+----------+---------------------+ ; Total ; Incr ; RF ; Type ; Fanout ; Location ; Element ; +----------+---------+----+------+--------+----------+---------------------+ ; 20.000 ; 20.000 ; ; ; ; ; latch edge time ; ; 20.000 ; 0.000 ; ; ; ; ; clock path ; ; 20.000 ; 0.000 ; R ; ; ; ; clock network delay ; ; 19.900 ; -0.100 ; ; ; ; ; clock uncertainty ; ; 11.900 ; -8.000 ; F ; oExt ; 0 ; PIN_AN17 ; test_out ; +----------+---------+----+------+--------+----------+---------------------+
この分析の目的は output delayを測定することなので、 clock edge ( 0 nsで) で "Data Arrival Path" から開始し、 clock network delay を flip-flopに追加します。そこから、 output が安定した logic stateに到達するまで、 data path に沿って進みます。これを計算すると、 9.249 nsが得られました。
これは、 20 nsで output delayを引いた次の clock の時間と比較されます。推定 jitter (上記の場合は0.1 ns ) を差し引きます。 data は 9.249 nsで安定していると計算されました。これは、安定しなければならないときの 11.9 nsと比較されるため、 slack は 2.651 nsです。
これは、 set_output_delay -max で使用される番号が、外部デバイスの input に指定されている setup time でなければならない理由を示しています。この timing constraint は、 outputで有効な data までの合計 delay と、次の clockの時間位置との差を計算することによって検証されます。この違いが達成目標です。それはまさに setup timeの定義です: 次の clockの前に data が安定していなければならない時間。
set_output_delay -min (hold) の分析
Delay Model: Fast 1100mV 0C Model +--------------------------------------------------------------------------------------------------------+ ; Summary of Paths ; +-------+---------------+----------+--------------+-------------+--------------+------------+------------+ ; Slack ; From Node ; To Node ; Launch Clock ; Latch Clock ; Relationship ; Clock Skew ; Data Delay ; +-------+---------------+----------+--------------+-------------+--------------+------------+------------+ ; 1.275 ; test_out~reg0 ; test_out ; theclk ; theclk ; 0.000 ; -2.255 ; 2.020 ; +-------+---------------+----------+--------------+-------------+--------------+------------+------------+ Path #1: Hold slack is 1.275 =============================================================================== +------------------------------------+ ; Path Summary ; +--------------------+---------------+ ; Property ; Value ; +--------------------+---------------+ ; From Node ; test_out~reg0 ; ; To Node ; test_out ; ; Launch Clock ; theclk ; ; Latch Clock ; theclk ; ; Data Arrival Time ; 4.275 ; ; Data Required Time ; 3.000 ; ; Slack ; 1.275 ; +--------------------+---------------+ +---------------------------------------------------------------------------------------+ ; Statistics ; +---------------------------+--------+-------+-------------+------------+-------+-------+ ; Property ; Value ; Count ; Total Delay ; % of Total ; Min ; Max ; +---------------------------+--------+-------+-------------+------------+-------+-------+ ; Hold Relationship ; 0.000 ; ; ; ; ; ; ; Clock Skew ; -2.255 ; ; ; ; ; ; ; Data Delay ; 2.020 ; ; ; ; ; ; ; Number of Logic Levels ; ; 0 ; ; ; ; ; ; Physical Delays ; ; ; ; ; ; ; ; Arrival Path ; ; ; ; ; ; ; ; Clock ; ; ; ; ; ; ; ; Clock Network (Lumped) ; ; 1 ; 2.255 ; 100 ; 2.255 ; 2.255 ; ; Data ; ; ; ; ; ; ; ; IC ; ; 1 ; 0.000 ; 0 ; 0.000 ; 0.000 ; ; Cell ; ; 3 ; 2.020 ; 100 ; 0.000 ; 1.296 ; ; uTco ; ; 1 ; 0.000 ; 0 ; 0.000 ; 0.000 ; ; Required Path ; ; ; ; ; ; ; ; Clock ; ; ; ; ; ; ; ; Clock Network (Lumped) ; ; 1 ; 0.000 ; ; 0.000 ; 0.000 ; +---------------------------+--------+-------+-------------+------------+-------+-------+ Note: Negative delays are omitted from totals when calculating percentages +---------------------------------------------------------------------------------------+ ; Data Arrival Path ; +---------+---------+----+------+--------+------------------------+---------------------+ ; Total ; Incr ; RF ; Type ; Fanout ; Location ; Element ; +---------+---------+----+------+--------+------------------------+---------------------+ ; 0.000 ; 0.000 ; ; ; ; ; launch edge time ; ; 2.255 ; 2.255 ; ; ; ; ; clock path ; ; 2.255 ; 2.255 ; R ; ; ; ; clock network delay ; ; 4.275 ; 2.020 ; ; ; ; ; data path ; ; 2.255 ; 0.000 ; ; uTco ; 1 ; DDIOOUTCELL_X48_Y0_N50 ; test_out~reg0 ; ; 2.979 ; 0.724 ; RR ; CELL ; 1 ; DDIOOUTCELL_X48_Y0_N50 ; test_out~reg0|q ; ; 2.979 ; 0.000 ; RR ; IC ; 1 ; IOOBUF_X48_Y0_N42 ; test_out~output|i ; ; 4.275 ; 1.296 ; RR ; CELL ; 1 ; IOOBUF_X48_Y0_N42 ; test_out~output|o ; ; 4.275 ; 0.000 ; RR ; CELL ; 0 ; PIN_AN17 ; test_out ; +---------+---------+----+------+--------+------------------------+---------------------+ +-------------------------------------------------------------------------+ ; Data Required Path ; +---------+---------+----+------+--------+----------+---------------------+ ; Total ; Incr ; RF ; Type ; Fanout ; Location ; Element ; +---------+---------+----+------+--------+----------+---------------------+ ; 0.000 ; 0.000 ; ; ; ; ; latch edge time ; ; 0.000 ; 0.000 ; ; ; ; ; clock path ; ; 0.000 ; 0.000 ; R ; ; ; ; clock network delay ; ; 0.000 ; 0.000 ; ; ; ; ; clock uncertainty ; ; 3.000 ; 3.000 ; R ; oExt ; 0 ; PIN_AN17 ; test_out ; +---------+---------+----+------+--------+----------+---------------------+
この分析は max output delayと似ていますが、同じ clock edge に対して計算されているだけです (次のものではありません)。
以前と同様に、 data path は output が安定するまで clock path を継続します。これを計算すると、 4.275 nsが得られました。
これは、同じ clock の 0 nsから output delayを差し引いた時間と比較されます。 timing constraint の min output delay は負 (-3 ns) であることを思い出してください。これが、計算で正の数として表示される理由です。
結論: data は 4.275 nsまで安定しており、 3 nsまで安定する必要があります。 1.275 ns を slackとして使用しても問題ありません。
これは、 set_output_delay -min で使用される番号が、外部デバイスの input に指定されている hold timeの符号を反転したものである理由を示しています。この timing constraint は、合計 delay がこの特定の数値よりも大きいことを要求することによって検証されます。言い換えれば、 data は、 clockの後もその期間、安定している必要があります。これが hold timeの定義です。