次の図に、2 サイクルごとにイネーブルになる 2 つのフリップフロップ間のパスを示します。このパスにマルチサイクル パス制約を定義して、デスティネーション クロックの最初のエッジはアクティブでなく、2 つ目のエッジでのみ新しいデータをキャプチャするように指定できます。
次の制約で新しいセットアップ関係を定義します。
set_multicycle_path 2 -setup -from [get_pins data0_reg/C] -to [get_pins data1_reg/D]
『Vivado Design Suite ユーザー ガイド: デザイン解析およびクロージャ テクニック』 (UG906) の「タイミング解析の実行」のセクションに、ホールドの時間関係がどのようにセットアップの時間関係から派生されるかが説明されています。セットアップ関係を変更すると、セットアップのソース エッジおよびデスティネーション エッジが変わるので、ホールド関係も変更されます。
図 1 と同じ例で、セットアップ チェックを 2 番目のデスティネーション エッジに移動すると、ホールド チェックが自動的に最初のデスティネーション エッジ (セットアップ チェックの 1 クロック周期前) に移動します。
次の図に、マルチサイクル パス制約でセットアップ パスの乗数のみを指定した場合に、セットアップ関係とホールド関係がどのように変化するかを示します。
このパスでは、クロック イネーブルがあるので、data0_reg
でデータを 1 クロック間保持する必要はありません。この場合、AMD では、ホールド関係を元に戻すことを勧めします (同じソース エッジとデスティネーション エッジの間)。元に戻すには、2 つ目のマルチサイクル パス制約を追加し、ホールド チェックのみを変更します。
set_multicycle_path 1 -hold -end -from [get_pins data0_reg/C] \
-to [get_pins data1_reg/D]
set_multicycle -hold
コマンドで -end
オプションが使用されているのは、デスティネーション クロックのエッジを前に移動する必要があるからです。
-end
の使用はオプションです。デスティネーション エッジを前に移動すると、ソース エッジを先に移動した場合と同じホールド関係が得られます。コマンドをシンプルにするため、次の 2 つの例からは -end
は削除されています。次の図に、両方のマルチサイクル パス制約を適用した後のセットアップ関係とホールド関係を示します。
この例をまとめると、data0_reg/C
と data1_reg/D
の間の 2 のマルチサイクル パスを適切に定義するには、次の制約が必要です。
set_multicycle_path 2 -setup -from [get_pins data0_reg/C] -to [get_pins data1_reg/D]
set_multicycle_path 1 -hold -from [get_pins data0_reg/C] -to [get_pins data1_reg/D]
セットアップの乗数が 4 のマルチサイクル パスでは、制約は次のようになります。
set_multicycle_path 4 -setup -from [get_pins data0_reg/C] -to [get_pins data1_reg/D]
set_multicycle_path 3 -hold -from [get_pins data0_reg/C] -to [get_pins data1_reg/D]