ソースシンクロナス出力インターフェイスでは、FPGA がデスティネーション・デバイス用のクロックのソースです。エッジアラインのソースシンクロナス・インターフェイスでは、クロック遷移がデータ移行と同時に発生します。図 1 は、ソースシンクロナス出力インターフェイスのサンプルを示しています。
以下のステップを使用して、エッジアラインのソースシンクロナス出力インターフェイスを制約します。
- ベースクロックおよび派生クロックを作成する
- 出力遅延の制約を追加する
- タイミング分析およびレポートから無効なパスを除外するため、フォルスパス例外を追加する
上記ステップに関する詳細や、下記の計算および制約に関する詳細はソースシンクロナス・インターフェイスの制約および分析 (PDF) を参照してください。
クロック数
FPGA の入力ポートにはベースクロックが必要です。
生成クロックは、すべての位相同期回路 (PLL) 出力で必要です。ダブル・データ・レート・エッジアライン・ソースシンクロナス出力は、出力クロックをデータクロックとアラインします。
派生クロックは、FPGA の出力クロックポートで必要です。派生クロックは、データバス用の出力遅延値用のクロック・リファレンスです。
出力遅延の制約
最大スキュー仕様を使用して、出力遅延値を計算できます。最大スキュー仕様は、データバスの各ビットが FPGA から移動するまでの許容時間のバリエーションを示しています。
出力最大遅延値は、クロック周波数 (最大スキュー値) です。
出力最小遅延値は、最大スキュー値です。
フォルスパス例外
このエッジアラインの例では、ソースおよびデスティネーションのクロック遷移の立ち上がりと立ち下がりでデータが転送されます。フォルスパス例外を使用して、クロックの立ち上がりから立ち下り、および立ち下りから立ち上がりの遷移をカットします。これは逆エッジのクロック遷移ではデータが転送されないからです。
サンプル SDC ファイル
# FPGA の入力ポートにベースクロックを 10ns 周期で作成します create_clock -name input_clock -period 10 [get_ports clk_in] # 派生クロックを PLL 出力に作成します # 出力 clk[0] はデータレジスターを駆動します # 出力 clk[1] は出力クロックポートを駆動します create_generated_clock -name data_clock -source [get_pins pll|inclk[0]] \ [get_pins pll|clk[0]] create_generated_clock -name clock_clock -source [get_pins pll|inclk[0] \ [get_pins pll|clk[1]] # 派生クロックを FPGA の出力クロックポートに作成します create_generated_clock -name output_clock -source [get_pins pll|clk[1]] \ [get_ports clk_out] # 最大および最小の出力遅延制限を追加します # スキュー要件は +/- 250ps とします # 上記の出力遅延値用の数式を使用します set_output_delay -max -clock output_clock [expr { 10 - 0.250 }] \ [get_ports data_out*] set_output_delay -max -clock output_clock -clock_fall \ [expr { 10 - 0.250 }] [get_ports data_out*] -add set_output_delay -min -clock output_clock 0.250 [get_ports data_out*] set_output_delay -min -clock output_clock -clock_fall 0.250 \ [get_ports data_out*] -add # クロック間転送用のフォルスパス例外を追加します set_false_path -setup -end -rise_from [get_clocks data_clock] \ -fall_to [get_clocks output_clock] set_false_path -setup -end -fall_from [get_clocks data_clock] \ -rise_to [get_clocks output_clock] set_false_path -hold -end -rise_from [get_clocks data_clock] \ -fall_to [get_clocks output_clock] set_false_path -hold -end -fall_from [get_clocks data_clock] \ -rise_to [get_clocks output_clock]