タイミング制約をメモリに読み込む際、タイミング エンジンで新しい各制約が検証され、発生する可能性のある問題がレポートされます。タイミング制約によっては、タイミング データベース (タイミング グラフとも呼ばれる) を部分的に無効にするものや、正しく適用するために最新のタイミング データベースが必要なものがあります。タイミング データベースが最新でなくなると、たとえば自動派生クロックをアップデートしたりデザインの特定のタイミング パスをディスエーブルにするために、タイミングのアップデートが必要となります。クロックをクエリする XDC コマンドやデザイン全体でネットリスト オブジェクトをクエリする XDC コマンドでは、最新のタイミング データベースが必要です。
タイミング データベースの状態に影響する制約とコマンドを交互に使用すると、タイミング情報が複数回アップデートされるため、実行時間が長くなる可能性があります。
実行時間を短縮するため、ザイリンクスではタイミング制約およびクエリの順序を注意して指定することをお勧めします。次の表に、タイミング グラフに影響する XDC 制約およびコマンドを示します。
タイミング グラフに影響する制約 | タイミング グラフに影響しない制約 | 最新のタイミング グラフが必要な制約 |
---|---|---|
create_clock | set_bus_skew | all_fanout |
create_generated_clock | set_clock_groups | all_fanin |
set_case_analysis | set_clock_latency | get_clocks |
set_clock_sense | set_false_path | get_generated_clocks |
set_clock_uncertainty | set_input_delay | all_clocks |
set_disable_timing | set_input_jitter | –clock オプションを使用する制約 |
set_external_delay | set_min_delay | |
set_propagated_clock | set_max_delay | |
set_max_time_borrow | ||
set_multicycle_path | ||
set_system_jitter |
実行時間が最も長くなる組み合わせの 1 つは、set_disable_timing
と all_fanout
または all_fanin
です。このような組み合わせは使用しないようにしてください。次に例を示します。
set_disable_timing –from <pin> -to [all_fanout …] set_disable_timing –from [all_fanin …] -to <pin>
実行時間を短縮するための上の表に基づく最適な制約の順序は、次のとおりです。
- XDC 制約
set_disable_timing
、set_case_analysis
、およびset_external_delay
。 - タイミング グラフに影響する制約。
- タイミング グラフのアップデートが不要な制約。
ヒント: 同じクエリを複数の場所で実行する場合は、クエリの結果を Tcl 変数として保存し、必要に応じてその Tcl 変数を参照するようにすることをお勧めします。
たとえば、次の制約順は最適なものではありません。
create_clock –name clk1
create_generated_clock –name genclk1 –master_clock [get_clocks -of [get_pins ...]] set_disable_timing ...
create_clock –name clk2
set_false_path -from [get_clocks -of [get_pins ff1/C]] set_case_analysis ...
create_clock –name clk3
set_max_delay -to [get_clocks -of [get_pins ff2/C]]
これを実行時間の面から効率的な順序にすると、次のようになります。
set_disable_timing ...
set_case_analysis ...
create_clock –name clk1 create_clock –name clk2
create_clock –name clk3
create_generated_clock –name genclk1 –master_clock [get_clocks -of [get_pins ...]]
set_false_path -from [get_clocks -of [get_pins ff1/C]]
set_max_delay -to [get_clocks -of [get_pins ff2/C]]