次にFPGAのACスペックが決まっている場合を考えます。入力の場合、FPGAのセットアップ時間と、ホールド時間が設計条件です。
FPGAのセットアップ時間は、「これ以上データの到着が遅いと、データを受け取れない」ことを示す値です。そこで、図3に示すように、セットアップ時間(Tsu)と、最大データ遅延時間、クロック周期(Tck)の間には、次の関係があります。
<最大データ遅延時間> = Tck - Tsu
ホールド時間はセットアップ時間とは逆に、「これ以上データの到着が速いと、データを受け取れない」ことを示す値です。同じように、ホールド時間(Th)と、最小データ遅延時間の間に、次の関係があります。
<最小データ遅延時間> = Th
従って、入力制約は次のように、書けばよいことになります。
set_input_delay -clock vclk -max <Tck - Tsu> [get_ports DATAIN] set_input_delay -clock vclk -min <Th> [get_ports DATAIN]
出力の場合も、まずはFPGA外部のACスペックが決まっている場合から考えます。
出力制約には、「set_output_delay」というコマンドを使います。このコマンドは、FPGAの出力ポートでのデータの遅延時間を制約します。次のように、最大と最小の制約をセットで使います。
set_output_delay -clock vclk -max <最大データ遅延時間> [get_ports DATAOUT] set_output_delay -clock vclk -min <最小データ遅延時間> [get_ports DATAOUT]
FPGA外部のACスペックは、図4に示すとおりです。受信デバイスのセットアップ時間(Tsu)、ホールド時間(Th)、データの伝搬遅延(Tdata)、受信デバイスへのクロックの伝搬遅延(Tclk1)、ターゲットFPGAへのクロックの伝搬遅延(Tclk2)が分かっています。
データの所要時間は、FPGAの出力ポートで、受信デバイスのクロックに対して設定します。受信デバイスのクロックは、FPGA内にはないので仮想クロックとして定義しておきます。
図4にデータの到達が最も速い場合と、最も遅い場合のタイムチャートを示しています。データの遅延時間は、タイムチャートから次のようになります。最後の項はマイナスのため、最大と最小が入れ替わっているので注意してください。
<最大データ遅延時間> = Tdata_max + Tsu + Tclk2_max - Tclk1_min <最小データ遅延時間> = Tdata_min - Th + Tclk2_min - Tclk1_max
具体的な数値を入れて書くと、図2の回路に対する制約例は次のようになります。
create_clock -name clkin -period 10 [get_ports CLKIN] create_clock -name vclk -period 10 set_output_delay -clock vclk -max 5 [get_ports DATAOUT] set_output_delay -clock vclk -min 2 [get_ports DATAOUT]
次にFPGAのACスペックが決まっている場合を考えます。出力の場合、FPGAの最大と最小の出力遅延が設計条件です。
図5に示すように、出力遅延の最大値(Tco_max)と、最大データ遅延時間、クロック周期(Tck)の間には、次の関係があります。
<最大データ遅延時間> = Tck - Tco_max
従って、出力制約は次のように、書けばよいことになります。
set_output_delay -clock vclk -max <Tck - Tco_max> [get_ports DATAOUT] set_output_delay -clock vclk -min <- Tco_min> [get_ports DATAOUT]
Copyright © ITmedia, Inc. All Rights Reserved.