エッジアラインのソースシンクロナス出力の制約

author-image

投稿者:

ソースシンクロナス出力インターフェイスでは、FPGA がデスティネーション・デバイス用のクロックのソースです。エッジアラインのソースシンクロナス・インターフェイスでは、クロック遷移がデータ移行と同時に発生します。図 1 は、ソースシンクロナス出力インターフェイスのサンプルを示しています。

図 1.ソースシンクロナス出力インターフェイス。

以下のステップを使用して、エッジアラインのソースシンクロナス出力インターフェイスを制約します。

  1. ベースクロックおよび派生クロックを作成する
  2. 出力遅延の制約を追加する
  3. タイミング分析およびレポートから無効なパスを除外するため、フォルスパス例外を追加する

上記ステップに関する詳細や、下記の計算および制約に関する詳細はソースシンクロナス・インターフェイスの制約および分析 (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]