センターアラインのソースシンクロナス出力の制約

author-image

投稿者:

ソースシンクロナス出力インターフェイスでは、FPGA がデスティネーション・デバイス用のクロックのソースです。センターアラインのソースシンクロナス・インターフェイスでは、クロック移行がデータ有効ウィンドウの中央で発生します。図 1 は、ソースシンクロナス出力インターフェイスのサンプルを示しています。

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

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

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

上記ステップに関する詳細や、下記の計算および制約に関する詳細は、AN 433: ソースシンクロナス・インターフェイスの制約および分析 (PDF) を参照してください。

クロック数

FPGA の入力ポートにはベースクロックが必要です。
生成クロックは、すべての位相同期回路 (PLL) 出力で必要です。ダブル・データ・レートのセンターアラインのソースシンクロナス出力は、出力クロックをデータクロックとの比較で 90 度シフトします。
派生クロックは、FPGA の出力クロックポートで必要です。派生クロックは、データバスの出力遅延値のクロック・リファレンスです。

出力遅延の制約

最大スキュー仕様を使用して、出力遅延値を計算できます。最大スキュー仕様は、データバスの各ビットが FPGA から移動するまでの許容時間のバリエーションを示しています。

出力最大遅延値は (ユニット・インターバル / 2) - 最大スキュー値です

出力最小遅延値は 最大スキュー値 - (1.5 * ユニット・インターバル) です。

フォルスパス例外

このセンターアラインの例では、ソースおよびデスティネーションのクロック遷移の立ち上がりと立ち下がりでデータが転送されます。フォルスパス例外を使用して、クロックの立ち上がりから立ち下り、および立ち下りから立ち上がりの遷移をカットします。これは逆エッジのクロック遷移ではデータが転送されないからです。

サンプル SDC ファイル


# Create a base clock on the input port of the FPGA, with a 10 ns period
create_clock -name input_clock -period 10 [get_ports clk_in]

# Create generated clocks on the PLL outputs
# Output clk[0] drives the data register
# Output clk[1] drives the output clock port with a 90 degree shift
create_generated_clock -name data_clock -source [get_pins pll|inclk[0]] \
[get_pins pll|clk[0]]
create_generated_clock -name clock_clock -phase 90 -source [get_pins pll|inclk[0] \
[get_pins pll|clk[1]]

# Create the generated clock on the output clock port of the FPGA
create_generated_clock -name output_clock -source [get_pins pll|clk[1]] \
[get_ports clk_out]

# Add maximum and minimum output delay constraints
# assuming a skew requirement of +/- 250ps
# Use the equations for the output delay values listed above
set_output_delay -max -clock output_clock [expr { (5 / 2) - 0.250 }] \
[get_ports data_out*]
set_output_delay -max -clock output_clock -clock_fall \
[expr { (5 / 2) - 0.250 }] [get_ports data_out*] -add
set_output_delay -min -clock output_clock [expr { (0.250 - (1.5 * 5) }] \
[get_ports data_out*]
set_output_delay -min -clock output_clock -clock_fall \
[expr { (0.250 - ( 1.5 * 5 ) }] [get_ports data_out*] -add

# Add false path exceptions for cross-clock transfers
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]