実行時間を短縮するための制約の順序 - 2022.1 日本語

Vivado Design Suite ユーザー ガイド: 制約の使用 (UG903)

Document ID
UG903
Release Date
2022-06-01
Version
2022.1 日本語

タイミング制約をメモリに読み込む際、タイミング エンジンで新しい各制約が検証され、発生する可能性のある問題がレポートされます。タイミング制約によっては、タイミング データベース (タイミング グラフとも呼ばれる) を部分的に無効にするものや、正しく適用するために最新のタイミング データベースが必要なものがあります。タイミング データベースが最新でなくなると、たとえば自動派生クロックをアップデートしたりデザインの特定のタイミング パスをディスエーブルにするために、タイミングのアップデートが必要となります。クロックをクエリする XDC コマンドやデザイン全体でネットリスト オブジェクトをクエリする XDC コマンドでは、最新のタイミング データベースが必要です。

タイミング データベースの状態に影響する制約とコマンドを交互に使用すると、タイミング情報が複数回アップデートされるため、実行時間が長くなる可能性があります。

実行時間を短縮するため、ザイリンクスではタイミング制約およびクエリの順序を注意して指定することをお勧めします。次の表に、タイミング グラフに影響する XDC 制約およびコマンドを示します。

表 1. 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_timingall_fanout または all_fanin です。このような組み合わせは使用しないようにしてください。次に例を示します。

set_disable_timing –from <pin> -to [all_fanout …] set_disable_timing –from [all_fanin …] -to <pin>

実行時間を短縮するための上の表に基づく最適な制約の順序は、次のとおりです。

  1. XDC 制約 set_disable_timingset_case_analysis、および set_external_delay
  2. タイミング グラフに影響する制約。
  3. タイミング グラフのアップデートが不要な制約。
ヒント: 同じクエリを複数の場所で実行する場合は、クエリの結果を 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]]