以下の例は、SDC (Synopsys Design Constraint) を使用して、ソース・シンクロナス出力のタイミング制約を指定するための 2 つの方法を紹介します。 ソース・シンクロナス出力のタイミング制約を指定するには、FPGA からドライブ・アウトするクロックに対して、出力遅延を指定することが必要です。
ジェネレーテッド・クロック
FPGA のクロック出力ポートでジェネレーテッド・クロックを作成することができます。 ジェネレーテッド・クロックはソース・クロックからのレイテンシを自動的に計算します。 図 1 の単純な回路の出力に対してタイミング制約を指定するには、以下の 3 つの制約を作成する必要があります。
clk_inポートをドライブするベース・クロックclk_outポートでのジェネレーテッド・クロックclk_outポートでのジェネレーテッド・クロック に対するdata_outポートでの出力遅延制約
図 1. ジェネレーテッド・クロックによるソース・シンクロナスの制約
以下の SDC コマンドは出力に対してタイミング制約を指定します。
# 入力クロックを定義します
create_clock -period 10 -name clk_100 [get_ports clk_in]
# PLL の出力にジェネレーテッド・クロックを適用します
create_generated_clock -name pll_output \
-source [get_pins inst|altpll_component|pll|INCLK[0]] \
[get_pins inst|altpll_component|pll|CLK[0]]
# clk_out ポートにジェネレーテッド・クロックを適用します
create_generated_clock -name clk_out \
-source [get_pins inst|altpll_component|pll|CLK[0]] \
[get_ports clk_out]
set_output_delay -clock clk_out 1.200 [get_ports data_out]
-reference_pin オプション
-reference_pin オプションはアルテラ独自の SDC 拡張機能であり、このオプションを使用すると、ソース・シンクロナス出力に対するタイミング制約を簡単に指定できます。
set_input_delay/set_output_delay コマンドと一緒に -reference_pin オプションを使用して、ネットリスト内のピンまたはポートに対する入力遅延または出力遅延を指定します。
-reference_pin オプションは、指定されたポートまたはピンに対するクロック・レイテンシを自動的に取り込みます。 ソース・シンクロナス出力の場合、出力遅延は出力クロック・ポートを基準にします。 図 2 の回路では、clk_in ポートから clk_out ポートまでのレイテンシが -reference_pin オプションによって取り込まれます。
図 2. -reference_pin オプションによるソース・シンクロナスの制約
以下の SDC コマンドは出力に対してタイミング制約を指定します。 -reference_pin オプションがレイテンシを考慮するため、この例ではジェネレーテッド・クロックは不要です。
# 入力クロックを定義します
create_clock -period 10 -name clk_100 [get_ports clk_in]
# PLL の出力にジェネレーテッド・クロックを適用します
create_generated_clock -name pll_output \
-source [get_pins inst|altpll_component|pll|INCLK[0]] \
[get_pins inst|altpll_component|pll|CLK[0]]
# -reference_pin オプションで出力遅延を設定します
set_output_delay -clock pll_output -reference_pin [get_ports clk_out] \
1.200 [get_ports data_out]
