概要
Vitis 環境では、ほとんどの場合、CU をハードウェア プラットフォームにリンクし、FPGA バイナリ (xclbin) を生成する際、プログラマブル ロジック領域の合成およびインプリメンテーションのプロセスは完全に隠されています。アプリケーション開発者はハードウェア開発プロセスを意識する必要はなく、ロジックの配置や配線遅延などの制約を管理する必要もありません。Vitis ツールでは、FPGA インプリメンテーション プロセスのほとんどが自動化されています。
ただし、特に大型デザインをインプリメントするときなど、Vitis コンパイラで運用される合成およびインプリメンテーション プロセスを一部制御する必要がある場合もあります。そのため、v++
コンフィギュレーション ファイルまたはコマンド ラインでオプションを指定することにより、Vitis ツールでこれらを制御できるようになっています。次に、Vivado 合成およびインプリメンテーション結果を制御する方法の一部を示します。
-
--vivado
オプションを使用して Vivado ツールを管理する。 -
-to_step
および-from_step
オプションを使用して、コンパイルまたはリンクを特定の段階まで実行し、デザインを手動で操作して、その段階から再開する。 - Vivado プロジェクトをインタラクティブに編集し、その結果を FPGA バイナリの生成に使用する。
--vivado および --advanced オプションの使用
--vivado
オプション (--vivado オプション を参照) および --advanced
オプション (--advanced オプション を参照) を使用すると、標準の Vivado 合成またはインプリメンテーションにさまざまな制御を適用できます。
- カスタム デザイン制約またはスクリプト化された操作を含む Tcl スクリプトを渡します。
XDC デザイン制約をデザインのオブジェクトに割り当てる Tcl スクリプトを作成し、その Tcl スクリプトを合成およびインプリメンテーション段階の PRE および POST Tcl スクリプト プロパティを使用して Vivado ツールに渡すことができます。Tcl スクリプトの詳細は、 『Vivado Design Suite ユーザー ガイド: Tcl スクリプト機能の使用』 (UG894) を参照してください。合成段階は 1 つですが、インプリメンテーションには、 『Vivado Design Suite ユーザー ガイド: インプリメンテーション』 (UG904) に説明されているように複数の段階があります。Tcl スクリプトを Vivado ツールである段階の前に実行するか (PRE)、後に実行するか (POST) を指定できます。Tcl スクリプトを割り当てることができる段階は、
SYNTHESIS
、INIT_DESIGN
、OPT_DESIGN
、PLACE_DESIGN
、ROUTE_DESIGN
、WRITE_BITSTREAM
です。ヒント: さらに、--vivado.prop run.impl_1.steps.phys_opt_design.is_enabled=1
オプションを使用してイネーブルにできるオプションの段階がいくつかあります。イネーブルにすると、これらの段階にも Tcl PRE および POST スクリプトを指定できるようになります。次に、Tcl PRE および POST スクリプトの割り当て例を示します。--vivado.prop run.impl_1.STEPS.PLACE_DESIGN.TCL.PRE=/…/xxx.tcl
この例では、PLACE_DESIGN 段階の前に実行するスクリプトを指定しています。コマンド ラインの各要素は、次のとおりです。
-
--vivado
: Vivado ツールの指示子を指定するv++
のコマンド ライン オプションです。 -
prop
プロパティ設定を渡すことを示すキーワードです。 -
run.
: run プロパティを渡すことを指定するキーワードです。 -
impl_1.
: run の名前です。 -
STEPS.PLACE_DESIGN.TCL.PRE
: 指定する run プロパティです。 - /.../xx.tcl: プロパティ値を指定します。
ヒント:--advanced
および--vivado
オプションはどちらもv++
コマンド ラインで指定するか、コンフィギュレーション ファイルで指定してそのコンフィギュレーション ファイルを--config
オプションで指定します。上記の例はコマンド ラインで指定する方法、下の例はコンフィギュレーション ファイルで指定する方法を示します。詳細は、Vitis コンパイラのコンフィギュレーション ファイル を参照してください。 -
- Run、ファイル、ファイルセット デザイン オブジェクトに指定する。これは上記の Tcl スクリプトを渡すのと似ていますが、この場合は複数のデザイン オブジェクトの異なるプロパティに値を渡します。たとえば、
Performance_Explore
の特定のインプリメンテーション ストラテジを使用するには、次のようにプロパティを定義します。[vivado] prop=run.impl_1.STEPS.OPT_DESIGN.ARGS.DIRECTIVE=Explore prop=run.impl_1.STEPS.PLACE_DESIGN.ARGS.DIRECTIVE=Explore prop=run.impl_1.STEPS.PHYS_OPT_DESIGN.IS_ENABLED=true prop=run.impl_1.STEPS.PHYS_OPT_DESIGN.ARGS.DIRECTIVE=Explore prop=run.impl_1.STEPS.ROUTE_DESIGN.ARGS.DIRECTIVE=Explore
上記の例では、インプリメンテーション run の
STEPS.XXX.DIRECTIVE
プロパティにExplore
という値を割り当てています。これらのプロパティを定義する構文は、次のとおりです。<object>.<instance>.property=<value>
説明:
-
<object>
: デザイン run、ファイル、またはファイルセット オブジェクトを指定します。 -
<instance>
: オブジェクトの特定のインスタンスを指定します。 -
<property>
: 割り当てるプロパティを指定します。 -
<value>
: プロパティの値を指定します。
-
- パラメーターをツールに渡して処理を制御します。
--vivado
オプションでも、Vivado ツールにパラメーターを渡すことができます。パラメーターは、ツールを起動する前にツールの機能または動作を設定します。パラメーターを指定する構文は、次のとおりです。--vivado.param <object><parameter>=<value>
キーワード
param
は、デザイン オブジェクトのプロパティではなく、Vivado ツールのパラメーターを渡すことを示します。適用するオブジェクト (<object>
)、指定するパラメーター (<parameter>
)、割り当てる値 (<value>
) も指定する必要があります。次の例では、現在の Vivado プロジェクトwriteIntermedateCheckpoints
を渡しており、値は 1 でこのパラメーターをイネーブルにしています。--vivado.param project.writeIntermediateCheckpoints=1
- 合成およびインプリメンテーション中に生成されるレポートを管理する。重要: Vivado ツールで生成されるレポートをカスタマイズする際、
v++
コマンド ラインで--save-temps
も指定し、合成およびインプリメンテーション中に生成される一時ファイルおよびレポートが保存されるようにします。また、Vitis ツールのビルド プロセスの一部として実行する際は、Vivado ツールで生成される標準レポート以外の追加レポートを生成および保存すると有益な場合があります。生成されるレポートをカスタマイズするには、--advanced.misc
オプションを次のように使用します。[advanced] misc=report=type report_utilization name synth_report_utilization_summary steps {synth_design} runs {__KERNEL__} options {} misc=report=type report_timing_summary name impl_report_timing_summary_init_design_summary steps {init_design} runs {impl_1} options {-max_paths 10} misc=report=type report_utilization name impl_report_utilization_init_design_summary steps {init_design} runs {impl_1} options {} misc=report=type report_control_sets name impl_report_control_sets_place_design_summary steps {place_design} runs {impl_1} options {-verbose} misc=report=type report_utilization name impl_report_utilization_place_design_summary steps {place_design} runs {impl_1} options {} misc=report=type report_io name impl_report_io_place_design_summary steps {place_design} runs {impl_1} options {} misc=report=type report_bus_skew name impl_report_bus_skew_route_design_summary steps {route_design} runs {impl_1} options {-warn_on_violation} misc=report=type report_clock_utilization name impl_report_clock_utilization_route_design_summary steps {route_design} runs {impl_1} options {}
コマンド ラインの構文は、次の例を使用して説明します。misc=report=type report_bus_skew name impl_report_bus_skew_route_design_summary steps {route_design} runs {impl_1} options {-warn_on_violation}
-
misc=report=
:--advanced.misc
オプション (--advanced オプション を参照) を指定し、Vivado ツールのレポート設定を定義します。残りのコマンド ラインは、 『Vivado Design Suite Tcl コマンド リファレンス ガイド』 (UG835) に説明されているcreate_report_config
Tcl コマンドのオプションを、名前と値のペアで指定しします。 -
type report_bus_skew
:-report_type
オプションに関連しており、レポート タイプをreport_bus_skew
に指定します。ほとんどのreport_*
Tcl コマンドをレポート タイプとして指定できます。 -
name impl_report_bus_skew_route_design_summary
:-report_name
オプションに関連しており、レポートの名前を指定します。これはレポートのファイル名ではありません。レポート名はツールで自動生成されるので、通常このオプションはスキップできます。 -
steps {route_design}
:-steps
オプションに関連しており、レポートを適用する合成およびインプリメンテーション段階を指定します。レポートが各段階で再生成されるようにレポートを複数の段階で使用するよう指定できます。その場合、レポート名は自動的に付けられます。 -
runs {impl_1}
:-runs
オプションに関連しており、レポートを適用するデザイン run の名前を指定します。 -
options {-warn_on_violation}
: レポートを生成するときに使用するreport_*
Tcl コマンドのオプションを指定します。この例では、-warn_on_violation
はreport_bus_skew
コマンドの機能です。重要: 指定したオプションが指定したレポート タイプに正しく適用可能なものであることはチェックされません。無効なオプションを指定すると、レポートが実行されたときにエラーが返されます。
-
--to_step または --from_step の実行
--to_step
および --from_step
オプションはインクリメンタル ビルド オプションで、Vitis コンパイラを起動する際に指定した --from_step
(指定したビルドから再開) と --to_step
(ビルドを開始) で使用したのと同じプロジェクト ディレクトリを使用する必要があります。
Vitis コンパイラでは、ビルド プロセスを指定した段階で停止し、デザインまたはファイルを手動で変更して、指定した段階からビルドを再開できます。Vitis コンパイラの --to_step
はビルド プロセスを指定した段階まで実行することを指定し、--from_step
はビルドを再開する段階を指定します (Vitis コンパイラの一般オプション を参照)。
--list_steps
オプションを使用すると、特定のビルド ターゲットのコンパイルまたはリンクで指定可能な段階がリストされます。たとえば、ハードウェア ビルドのリンク プロセスの段階をリストするには、次のコマンドを使用します。v++ --list_steps --target hw --link
このコマンドを実行すると、Vitis コンパイラのハードウェア ビルドのリンク プロセスで実行されるデフォルトの段階とオプションの段階がリストされます。デフォルト段階には、system_link
、vpl
、vpl.create_project
、vpl.create_bd
、vpl.generate_target
、vpl.synth
、vpl.impl.opt_design
、vpl.impl.place_design
、vpl.impl.route_design
、vpl.impl.write_bitstream
などがあります。
vpl.impl.power_opt_design
、vpl.impl.post_place_power_opt_design
、vpl.impl.phys_opt_design
、vpl.impl.post_route_phys_opt_design
などがあります。 --from_step
または --to_step
で指定する前にイネーブルにする必要があります。たとえば、PHYS_OPT_DESIGN 段階をイネーブルにするには、コンフィギュレーション ファイルに次を含めます。[vivado]
prop=run.impl_1.steps.phys_opt_design.is_enabled=1
インタラクティブ設計での Vivado IDE の起動
--to_step
コマンドを使用すると、たとえばビルド プロセスを Vivado 合成まで実行し、Vivado IDE でプロジェクトを開いてデザインの配置配線を手動で実行できます。これには、次のコマンドを使用します。v++ --target hw --link --to_step vpl.synth --save-temps --platform <PLATFORM_NAME> <XO_FILES>
--to_step
を使用する場合は、--save-temps
も指定して、ビルド プロセスに必要な一時ファイルを保存する必要があります。このコマンドは、ハードウェア ビルドのリンク プロセスを指定し、ビルドを合成段階まで実行して、ビルド プロセスで生成される一時ファイルを保存します。
Vitis コンパイラでビルドされたプロジェクト (ビルド ディレクトリの _x/link/vivado/vpl/prj) で直接 Vivado ツールを起動できます。Vivado IDE をこのモードで起動すると、合成 run またはインプリメンテーション run を開いてプロジェクトを制御できます。タイミング クロージャを達成するため、必要に応じて run の詳細を変更し、異なるインプリメンテーション方法を試してみます。結果はデザイン チェックポイント (DCP) として保存して、Vitis 環境で FPGA バイナリを生成するのに使用できます。
Vivado IDE 内で DCP を保存したら、ツールを閉じて、Vitis 環境に戻ります。v++ コマンド ラインで以前にインプリメントされた DCP ファイルを使用して xclbin
を生成するには、--reuse_impl
オプションを使用します。
--reuse_impl
オプションはインクリメンタル ビルド オプションで、--reuse_impl
を使用して Vitis コンパイラを再開する際は、ビルドを開始する際に指定した --to_step
と同じプロジェクト ディレクトリを使用する必要があります。v++ --link --platform <PLATFORM_NAME> -o'project.xclbin' project.xo --reuse_impl ./_x/link/vivado/routed.dcp
その他の Vivado オプション
次に、v++
コマンド ラインまたはコンフィギュレーション ファイルで使用可能なその他のオプションの一部を示します。
-
--export_script
/--custom_script
: HLS Tcl スクリプトを編集および使用してコンパイル プロセスを変更します。 -
--interactive
:v++
環境内から Vivado IDE をプロジェクトを読み込んで起動します。 -
--remote_ip_cache
: Vivado 合成用のリモート IP キャッシュ ディレクトリを指定します。 -
--no_ip_cache
: Vivado 合成の IP キャッシュをオフにします。これにより、キャッシュ データが消去され、ビルド プロセス中にすべての IP が再合成されます。