TimeQuest タイミング・アナライザでは、1つの制約でマックス・スキューを指定することはできませんが、クロック・ポートに対してセットアップ時間とホールド時間を指定することにより、ソース・シンクロナス・インタフェースにタイミング制約を与えることができます。 図 1 は、以下の例で使用される単純化したソース・シンクロナス回路例を示しています。
図 1. ソース・シンクロナス・インタフェース回路
出力バスでのスキューに対するタイミング制約
この例は、clk_out 信号の後 2 ns と 3 ns の間で、data_out バスのすべてのビットがオフチップになるようにインタフェースに対して制約を与えます。 clk_in および clk_out の周期は 8 ns であると仮定します。 以下の式と例は、図 2 に示すタイミング関係を満たすタイミング要件を作成するための方法を示しています。
図 2. ソース・シンクロナス・タイミング・ダイヤグラム
以下の式は、ディスティネーションで 2 ns ホールド要件を作成する set_output_delay -min コマンドの値を計算する方法を示しています。 ソース・クロックとディスティネーション・クロックが同じ場合でのホールド要件の計算では、<ラッチ> - <ラウンチ> = 0 です。
ラッチ - ラウンチ = 0 ns 出力遅延 = ラッチ - ラウンチ - 2 ns 出力遅延 = -2 ns
以下の式は、ディスティネーションで 3 ns セットアップ要件を作成する set_output_delay コマンドの値を計算する方法を示しています。 ソース・クロックとディスティネーション・クロックが同じ場合でのセットアップ要件の計算では、<ラッチ> - <ラウンチ> = クロック周波数です。
ラッチ - ラウンチ = 8 ns 出力遅延 = ラッチ - ラウンチ - 3 ns 出力遅延 = 5 ns
最後に、以下の制約はすべての計算をまとめ、タイミング要件をソース同期出力に適用します。
set period 8.000
create_clock -period $period \
-name clk_in \
[get_ports clk_in]
derive_pll_clocks
set_output_delay -add_delay \
-clock ddr_pll_1_inst|altpll_component|pll|CLK[0] \
-reference_pin [get_ports clk_out] \
-min -2.000 \
[get_ports data_out*]
set_output_delay -add_delay \
-clock ddr_pll_1_inst|altpll_component|pll|CLK[0] \
-reference_pin [get_ports clk_out] \
-max [expr $period - 3.000] \
[get_ports data_out*]
