Vitis コンパイラ コマンド

このセクションでは、Vitis コンパイラ コマンド v++ と、コンパイルおよび FPGA バイナリのリンクでこのコマンドにサポートされるさまざまなオプションについて説明します。

Vitis コンパイラはスタンドアロン コマンド ライン ユーティリティで、カーネル アクセラレータ関数をザイリンクス オブジェクト (XO) ファイルにコンパイルし、それらをほかの XO ファイルおよびサポートされるプラットフォームとリンクして、FPGA バイナリをビルドします。

コンパイル、リンク、パッケージ、および一般プロセスでの v++ コマンド オプションの使用に関する詳細は、次のセクションを参照してください。

Vitis コンパイラの一般オプション

Vitis コンパイラでは、コンパイル プロセスとリンク プロセスで多数のオプションがサポートされます。これらのオプションにはさまざまな機能があり、コンパイルまたはリンクのいずれかにのみ適用できるものもあれば、コンパイルとリンクの両方に対して設定する必要のあるものもあります。

ヒント: Vitis コンパイラのコンフィギュレーション ファイル で説明するように、Vitis コンパイラ オプションはすべて、--config オプションで指定する設定ファイルに含めることができます。たとえば --platform オプションは、設定ファイルで次の構文を使用して、セクション ヘッドなしで指定できます。
platform=xilinx_u200_xdma_201830_2

--advanced

適用先
コンパイルおよびリンク

v++ コマンドで使用されるパラメーターおよびプロパティを指定します。詳細は、--advanced オプション を参照してください。

--board_connection

適用先
コンパイルおよびリンク
--board_connection

各 DIMM (Dual Inline Memory Module) コネクタ スロットの DIMM ボード ファイルを指定します。ボードは、ボード リポジトリに表示されるように、DIMM カードの Vendor:Board:Name:Version (vbnv) 属性を使用して指定します。

次に例を示します。

<DIMM_connector>:<vbnv_of_DIMM_board>

-c | --compile

適用先
コンパイル
--compile

コンパイルには必須ですが、--link および --package と共に使用することはできません。v++ -c を実行し、カーネル ソース ファイルから XO ファイルを生成します。

--clock

適用先
リンク

リンク プロセス中にカーネルにクロックを割り当てる方法を提供します。詳細は、--clock オプション を参照してください。

--config

適用先
コンパイル、リンク、およびパッケージ
--config <config_file> ...

v++ コマンド オプションを含むコンフィギュレーション ファイルを指定します。コンフィギュレーション ファイルは、コンパイル、リンク、またはパッケージ ストラテジを取り込むために使用するファイルで、v++ コマンド ラインで参照することにより簡単に再利用できます。また、設定ファイルを使用すると、v++ コマンド ラインで指定する必要があるのは、設定ファイルで指定されていないオプションのみなので、コマンド ラインが簡潔になります。詳細は、Vitis コンパイラのコンフィギュレーション ファイル を参照してください。

ヒント: v++ コマンドに複数の設定ファイルを指定できます。使用するファイルごとに個別の --config オプションが必要となります。次に例を示します。
v++ -l --config cfg_connectivity.cfg --config cfg_vivado.cfg ...

--connectivity

適用先
リンク

リンク プロセス中にデバイス バイナリの重要なアーキテクチャの詳細を指定するために使用されます。詳細は、--connectivity オプション を参照してください。

--custom_script

適用先
コンパイルおよびリンク
--custom_script <kernel_name>:<file_name>

ビルド プロセスのコンパイル時またはリンク時に使用するカスタム Tcl スクリプトを指定します。--export_script オプションと共に使用し、ビルド プロセスをカスタマイズするスクリプトを作成、編集、および実行します。

このオプションを v++ --compile コマンドで使用すると、指定したカーネルのコンパイルに使用するカスタム HLS スクリプトを指定できます。このスクリプトで、Vitis HLS ツールを変更またはカスタマイズできます。--export_script オプションを使用して Vitis HLS でカーネルのコンパイルに使用する Tcl スクリプトを抽出し、必要に応じてスクリプトを変更して、--custom_script オプションを使用して再適用することにより、カーネルのビルド プロセスをより良く制御できます。

カーネル名とそのカーネルに適用する Tcl スクリプトのパスを指定します。次に例を示します。
v++ -c -k kernel1 -export_script ...
*** Modify the exported script to customize in some way, then resubmit. ****
v++ -c --custom_script kernel1:./kernel1.tcl ...

ハードウェア ビルド ターゲット (-t hw) の v++ --link コマンドと一緒に使用する場合、このオプションで編集した run_script_map.dat ファイルへの絶対パスを指定できます。このファイルには、ビルド プロセス段階のリストと、それらの段階で Vitis および Vivado ツールにより実行される Tcl スクリプトが含まれます。run_script_map.dat を変更し、ビルド プロセスのそれらの段階で実行するカスタム Tcl スクリプトを指定できます。Tcl スクリプトをカスタマイズするには、次の手順に従います。

  1. 次に示すように --export_script オプションを使用してビルド プロセスを実行します。
    v++ -t hw -l -k kernel1 -export_script ...
  2. カスタマイズする段階で run_script_map.dat により参照される Tcl スクリプトをコピーします。たとえば、合成またはインプリメンテーションに指定されている Tcl ファイルをコピーします。ファイルは、プロジェクト ビルド構造外の別の場所にコピーする必要があります。
  3. Tcl スクリプトにコマンドを追加したり既存のコマンドを変更したりして、新しいカスタム Tcl スクリプトを作成します。
  4. run_script_map.dat を変更し、指定のインプリメンテーション段階に新しいカスタム スクリプトを設定します。
  5. --custom_script オプションを使用して run_script_map.dat ファイルへの絶対パスを指定し、ビルド プロセスを再起動します。
    v++ -t hw -l -k kernel1 -custom_script /path/to/run_script_map.dat
重要: カスタム合成実行スクリプトを編集する際は、dont_touch.xdc ファイルに関連する行をコメントアウトするか、行を変更して新しい dont_touch.xdc ファイルを指定する必要があります。コメントアウトまたは編集する行は、次のとおりです。
read_xdc dont_touch.xdc
set_property used_in_implementation false [get_files dont_touch.xdc]

このようにしないと、合成で dont_touch.xdc ファイルがないことを示すエラー メッセージが表示されます。

--debug

適用先
リンク

デバイス バイナリ (.xclbin) にデバッグ IP コアの挿入を指定します。詳細は、--debug オプション を参照してください。

-D | --define

適用先
コンパイルおよびリンク
--define <arg>

有効なマクロ名と定義のペアを <name>=<definition> という形式で指定します。

定義付きマクロとして名前を前もって定義します。このオプションは v++ プリプロセッサに渡されます。

--export_script

適用先
コンパイルおよびリンク
--export_script

ビルド プロセスをスクリプト ファイルをエクスポートする時点まで実行して停止します。ビルド プロセスは、--custom_script オプションを使用して完了する必要があります。これにより、エクスポートされたスクリプトを変更し、カスタム スクリプトを使用してビルドを再実行できます。

このオプションを v++ --compile コマンドで使用すると、指定したカーネルの Tcl スクリプト ファイル <kernel_name>.tcl がエクスポートされます。このスクリプトは Vitis HLS を実行するのに使用できますが、実際に HLS が起動する前にビルド プロセスが停止します。これによりビルド プロセスを中断できるので、次の例に示すように、生成された Tcl スクリプトを編集し、--custom_script オプションを使用してビルド プロセスを再開できます。

v++ -c -k kernel1 -export_script ...
ヒント: このオプションは OpenCL カーネルのソフトウェア エミュレーション (–t sw_emu) ではサポートされません。

ハードウェア ビルド ターゲット (-t hw) に対して v++ --link コマンドでこのオプションを使用すると、run_script_map.dat ファイルが現在のディレクトリにエクスポートされます。このファイルには、ビルド プロセス段階のリストと、それらの段階で Vitis および Vivado ツールにより実行される Tcl スクリプトが含まれます。Tcl スクリプトを編集してビルド プロセスをカスタマイズし、--custom_script オプションを使用してビルド プロセスを再開できます。run_script_map.dat ファイルをエクスポートするには、次のコマンドを使用します。

v++ -t hw -l -k kernel1 -export_script ...

--from_step

適用先
コンパイルおよびリンク
--from_step <arg>

Vitis コンパイラ ビルド プロセスのステップ名を指定しすると、そのステップからビルド プロセスを開始できます。中間結果がある場合、リンク プロセスが早送りされて、可能であれば指定した段階から実行を開始します。--to_step を使用してビルドを実行し、プロジェクトを何らかの方法で変更した後、そのビルド プロセスを --from_step で再開できます。--list_step オプションを使用すると、有効なステップのリストが表示されます。

重要: --from_step および --to_step オプションはシーケンシャル ビルド オプションで、Vitis コンパイラを起動する際に指定した --from_step (指定したビルドから再開) と --to_step (ビルドを開始) で使用したのと同じプロジェクト ディレクトリを使用する必要があります。

次に例を示します。

v++ --link --from_step vpl.update_bd

-g

適用先
コンパイルおよびリンク
-g

カーネルをデバッグするコードを生成します。このオプションを使用すると、カーネルがコンパイルされて FPGA バイナリが作成される際に、カーネルをデバッグしやすくする機能が追加されます。

次に例を示します。

v++ -g ...

-h | --help

-h

v++ コマンドのヘルプを表示します。次に例を示します。

v++ -h

--hls

適用先
コンパイル

カーネル コンパイル時の Vitis HLS 合成プロセスのオプションを指定します。詳細は、--hls オプション を参照してください。

-I | --include

適用先
コンパイルおよびリンク
--include <arg>

ヘッダー ファイルを検索するディレクトリのリストに指定のディレクトリを追加します。このオプションは Vitis コンパイラのプリプロセッサに渡されます。

<input_file>

適用先
コンパイルおよびリンク
<input_file1> <input_file2> ...

v++ コンパイル用の OpenCL または C/C++ カーネル ソース ファイル、または v++ リンク用のザイリンクス オブジェクト (XO) ファイルを指定します。

次に例を示します。

v++ -l kernel1.xo kernelRTL.xo ...

--interactive

適用先
コンパイルおよびリンク
--interactive [ impl ]

v++ で必要な環境を設定し、Vivado ツールを起動してインプリメンテーション プロジェクトを開きます。

Vivado ツールをインタラクティブに起動するので、リンク プロセスは vpl ステップ後に停止します。これは、v++ コマンドで --to_step vpl オプションを使用するのと同じことです。

Vivado ツールでのインタラクティブな操作が終了し、デザイン チェックポイント (DCP) を保存したら、v++ --from_step rtdgen を使用して Vitis コンパイラのリンク プロセスを再開するか、または --reuse_impl オプションか --reuse_bit オプションを使用して、インプリメント済みの DCP ファイルを読み込むことができます。

次に例を示します。

v++ --interactive impl
## Interactively use the Vivado tool
v++ --from_step rtdgen

-k | --kernel

適用先
コンパイル
--kernel <arg>

入力ファイルから指定したカーネルのみをコンパイルします。1 つの v++ コマンドに使用できる -k オプションは 1 つだけです。有効な値には、入力 .cl または .c/.cpp カーネル ソース コードからコンパイルされるカーネルの名前が含まれます。

これは、C/C++ カーネルの場合は必須ですが、OpenCL カーネルの場合はオプションです。OpenCL では、kernel キーワードを使用してカーネルが識別されます。C/C++ カーネルの場合、-k または --kernel を使用してカーネルを識別する必要があります。

OpenCL ソース ファイルを -k オプションなしでコンパイルすると、ファイル内のカーネルすべてがコンパイルされます。特定のカーネルをターゲットにするには、-k コマンドを使用します。

次に例を示します。

v++ -c --kernel vadd

--kernel_frequency

適用先
コンパイルおよびリンク
--kernel_frequency <freq> | <clockID>:<freq>[<clockID>:<freq>]

カーネルにユーザー定義のクロック周波数 (MHz) を指定し、ハードウェア プラットフォームで定義されていたデフォルトのクロック周波数を上書きします。<freq> は 1 つのクロックのみを含むカーネルのクロック周波数 1 つを指定するのに使用します。2 つのクロックをサポートするカーネルの場合は <clockID> および <freq> を指定します。

1 つのカーネル クロックのみを含むプラットフォームのクロックを上書きする構文では、単に周波数 (MHz) を指定します。

v++ --kernel_frequency 300

2 つのクロックを含むプラットフォームで特定のクロックの周波数を変更するには、クロック ID と周波数を指定します。

v++ --kernel_frequency 0:300

マルチクロック プラットフォームで両方のクロックの周波数を変更するには、各クロックの ID とその周波数を指定します。次に例を示します。

v++ --kernel_frequency 0:300|1:500

-l | --link

--link

コンパイル後のリンク プロセスに必須のオプションで、--compile または --package と共に使用することはできません。リンク モードで v++ を実行し、XO 入力ファイルをリンクし、XCLBIN 出力ファイルを生成します。

--linkhook

適用先
リンク

インプリメンテーション フローの特定のステップで実行する Tcl スクリプトを指定することにより、デバイス バイナリのビルド プロセスをカスタマイズできます。詳細は、--linkhook オプション を参照してください。

--list_steps

適用先
コンパイルおよびリンク
--list_steps

指定したターゲットに有効な実行ステップをリストします。このオプションは、--from_step または --to_step オプションで使用可能なステップをリストします。このコマンドには、次のオプションを使用する必要があります。

  • -t | --target [sw_emu | hw_emu | hw ]:
  • [ --compile | --link ]: 指定したビルド ターゲットに対するコンパイルまたはリンク プロセスのいずれかからのステップのリストを指定します。

次に例を示します。

v++ -t hw_emu --link --list_steps

--log_dir

適用先
コンパイルおよびリンク
--log_dir <dir_name>

ログ ファイルを保存するディレクトリを指定します。--log_dir ディレクトリを指定しない場合は、ログファイルは ./_x/logs に保存されます。詳細は、v++ コマンドの出力ディレクトリ を参照してください。

次に例を示します。

v++ --log_dir /tmp/myProj_logs ...

--message_rules

適用先
コンパイルおよびリンク
--message-rules <file_name>

メッセージを制御するルールを含むメッセージ ルール ファイルを指定します。詳細は、メッセージ ルール ファイルの使用 を参照してください。

次に例を示します。

v++ --message_rules ./minimum_out.mrf ...

--no_ip_cache

適用先
コンパイルおよびリンク
--no_ip_cache

Vivado 合成のアウト オブ コンテキスト (OOC) 合成のために IP キャッシュをディスエーブルにします。IP キャッシュ リポジトリをディスエーブルにすると、各ビルドごとに IP 合成結果を生成し直す必要があるので、ビルド時間が増える可能性があります。ただし、クリーン ビルドにもなるので、IP の早期の結果が削除されます。

次に例を示します。

v++ --no_ip_cache ...

-O | --optimize

適用先
コンパイルおよびリンク
--optimize <arg>

Vivado インプリメンテーション結果の最適化レベルを指定します。有効な最適化の値は、次のとおりです。

  • 0: デフォルトの最適化です。コンパイル時間が短縮されます。
  • 1: Vivado インプリメンテーション ストラテジ (Power_DefaultOpt) を実行して、消費電力を削減するように最適化します。デザインのビルド時間は長くなります。
  • 2: カーネル速度を上げるように最適化します。ビルド時間が長くなりますが、インプリメンテーションに PHYS_OPT_DESIGN ステップが追加されるので、生成されるカーネルのパフォーマンスは向上します。
  • 3: 生成されたコードのパフォーマンスは最高レベルになりますが、コンパイル時間はかなり長くなります。このオプションは合成時のリタイミングを指定し、インプリメンテーション中に PHYS_OPT_DESIGN および POST_ROUTE_PHYS_OPT_DESIGN の両方をイネーブルにします。
  • s: サイズに合わせてデザインを最適化します。Area_Explore インプリメンテーション ストラテジを実行することで、カーネルの使用するデバイスのロジック リソースが削減されます。
  • quick: Vivado インプリメンテーション時間は短くなりますが、カーネルのパフォーマンスは低下し、カーネルで使用されるリソースも多くなります。これにより、合成とインプリメンテーションの両方の Flow_RuntimeOptimized ストラテジがイネーブルになります。

次に例を示します。

v++ --link --optimize 2

-o | --output

適用先
コンパイルおよびリンク
-o <output_name>

v++ コマンドで生成された出力ファイルの名前を指定します。コンパイル (-c) プロセスの出力ファイル名には、ザイリンクス オブジェクト ファイルの場合は XO ファイル拡張子が付いている必要があります。リンク (-l) プロセスの出力ファイル名には、ザイリンクス 実行バイナリの場合は XCLBIN ファイル拡張子が付いている必要があります。

次に例を示します。

v++ -o krnl_vadd.xo

--o または --output を指定しない場合は、出力ファイル名はデフォルトで次のようになります。

  • コンパイル: a.o
  • リンク: a.xclbin

--package

適用先
パッケージ

エミュレーションの実行またはハードウェアでの実行用にデザインをパッケージ化する Vitis コンパイラのオプションを指定します。詳細は、--package オプション を参照してください。

-f | --platform

適用先
コンパイルおよびリンク
--platform <platform_name>

サポートされるアクセラレーション プラットフォームの名前を $PLATFORM_REPO_PATHS 環境変数で指定されているように指定するか、.xpfm プラットフォーム ファイルへの完全パスを指定します。そのバージョンでサポートされるプラットフォームのリストは、Vitis ソフトウェア プラットフォームのリリース ノート を参照してください。

このオプションは、ビルド プロセスのターゲット ザイリンクス プラットフォームを定義するため、コンパイルおよびリンクの両方で必要です。--platform オプションには、プラットフォーム名または xpfm プラットフォーム ファイルへのパス (完全パスまたは相対パス) を指定できます。

重要: 指定したプラットフォームおよびビルド ターゲットは、コンパイルおよびリンクで同じである必要があります。コンパイルで XO ファイルを生成する際に指定した --platform および -t オプションは、リンクで使用する --platform および -t と同じである必要があります。詳細は、platforminfo ユーティリティ を参照してください。

次に例を示します。

v++ --platform xilinx_u200_xdma_201830_2 ...
ヒント: Vitis コンパイラ オプションは設定ファイルで指定し、--config オプションでその設定ファイルを指定できます。たとえば platform オプションは、設定ファイルで次の構文を使用して、セクション ヘッドなしで指定できます。
platform=xilinx_u200_xdma_201830_2

--profile

適用先
コンパイルおよびリンク

アプリケーションのパフォーマンス情報を取得するようにザイリンクス ランタイム環境を設定するオプションを指定します。詳細は、--profile オプション を参照してください。

--remote_ip_cache

適用先
コンパイルおよびリンク
--remote_ip_cache <dir_name>

IP のアウト オブ コンテキスト (OOC) 合成中に使用する Vivado 合成のリモート IP キャッシュ ディレクトリを指定します。OOC 合成を使用すると、Vivado 合成ツールでイテレーション中に変更されなかった IP の合成結果が再利用できるようになります。これにより、合成結果を再利用できるので .xclbin ファイルのビルドに必要な時間を削減できます。

--remote_ip_cache オプションを指定しない場合、IP キャッシュは v++ が起動された現在の作業ディレクトリに書き込まれます。このオプションを使用すると、別のキャッシュ ディレクトリを指定して、たとえば複数のプロジェクトで使用したりできます。

次に例を示します。

v++ --remote_ip_cache /tmp/IP_cache_dir ...

--report_dir

適用先
コンパイルおよびリンク
--report_dir <dir_name>

レポート ファイルを保存するディレクトリを指定します。--report_dir ディレクトリを指定しない場合は、レポート ファイルは ./_x/reports に保存されます。詳細は、v++ コマンドの出力ディレクトリ を参照してください。

次に例を示します。

v++ --report_dir /tmp/myProj_reports ...

-R | --report_level

適用先
コンパイルおよびリンク
--report_level <arg>

有効なレポート レベルは 012estimate です。

これらのレポート レベルのマップは、optMap.xml ファイルに含まれます。インストールされた optMap.xml を無効にして、カスタム レポート レベルを定義できます。

  • -R0 を指定すると、Vivado インプリメンテーション中に中間デザイン チェックポイント (DCP) は生成されません。配線後のタイミング レポートは生成されます。
  • -R1 を指定すると、-R0 で生成されるものすべてに加え、report_failfast pre-opt_designreport_failfast post-opt_design、すべての中間 DCP が生成されます。
  • -R2 を指定すると、-R1 で生成されるものすべてに加え、report_failfast post-route_design が実行されます。
  • -Restimate を指定すると、design.xml データ ファイルが存在しない場合は Vitis HLS で生成され、システム見積もりレポート で説明するように、システム見積もりレポートが生成されます。
    ヒント: このオプションは、design.xml がデフォルトでは生成されないソフトウェア エミュレーション ターゲット (-t sw_emu) の場合に便利です。

次に例を示します。

v++ -R2 ... 

--reuse_bit

--reuse_bit <arg>
適用先
リンク

生成されたビットストリーム ファイル (.bit) のパスとファイル名を指定して、デバイス バイナリ ファイル (xclbin) を生成する際に使用されるようにします。to_step を使用して Vivado をインタラクティブに起動する方法 で説明されるように、--to_step オプションを使用すると、Vitis ビルド プロセスを中断し、合成済みデザインを手動で配置配線して、ビットストリームを生成できます。

重要: --reuse_bit オプションは、シーケンシャル ビルド オプションで、--reuse_bit を使用して Vitis コンパイラを再開する際は、ビルドを開始する際に指定した --to_step と同じプロジェクト ディレクトリを使用する必要があります。

次に例を示します。

v++ --link --reuse_bit ./project.bit

--reuse_impl

--reuse_impl <arg>
適用先
リンク

インプリメント済みデザイン チェックポイント (DCP) のパスとファイル名を指定して、デバイス バイナリ ファイル (XCLBIN) を生成する際に使用されるようにします。リンク プロセスは指定したインプリメント済み DCP を使用して FPGA ビットストリームを抽出し、xclbin を生成します。以前に完了した Vitis ビルドで作成された Vivado プロジェクトを手動で編集したり、--to_step オプションを指定して、Vitis ビルド プロセスを中断して、手動で合成済みデザインを配置配線したりできます。これにより、Vivado Design Suite をインタラクティブに使用してデザインを変更をし、ビルド プロセスでその DCP を使用できます。

重要: --reuse_impl オプションはインクリメンタル ビルド オプションで、--reuse_impl を使用して Vitis コンパイラ再開する際は、--to_step を使用してビルドを開始したのと同じプロジェクト ディレクトリを使用する必要があります。

次に例を示します。

v++ --link --reuse_impl ./manual_design.dcp

-s | --save-temps

適用先
コンパイルおよびリンク
--save-temps

v++ コマンドでコンパイルおよびリンク プロセス中に作成された中間ファイル/ディレクトリを保存します。--temp_dir オプションを使用すると、中間ファイルを保存するディレクトリを指定できます。

ヒント: このオプションは、ビルド プロセス中に発生した問題をデバッグするのに便利です。

次に例を示します。

v++ --save_temps ...

-t | --target

適用先
コンパイルおよびリンク
-t [ sw_emu | hw_emu | hw ]

ビルド ターゲット で説明するようにビルド ターゲットを指定します。ビルド ターゲットにより、コンパイルおよびリンク プロセスの結果が決まります。デバッグおよびテスト用にエミュレーション モデルをビルドするか、ハードウェアで実行する実際のシステムをビルドするかを選択できます。ビルド ターゲットは -t で指定しない場合はデフォルトで hw になります。

重要: 指定したプラットフォームおよびビルド ターゲットは、コンパイルおよびリンクで同じである必要があります。コンパイルで XO ファイルを生成する際に指定した --platform および -t オプションは、リンクで使用する --platform および -t と同じである必要があります。

有効な値は、

  • sw_emu: ソフトウェア エミュレーション
  • hw_emu: ハードウェア エミュレーション
  • hw: ハードウェア

次に例を示します。

v++ --link -t hw_emu

--temp_dir

適用先
コンパイルおよびリンク
--temp_dir <dir_name>

ビルド プロセス中に作成された一時ファイルを保存するディレクトリを指定します。--save-temps オプションを指定しておかない場合、一時的な結果は v++ コンパイラで書き出された後削除されます。

--temp_dir ディレクトリを指定しない場合は、./_x/temp に一時ファイルが保存されます。詳細は、v++ コマンドの出力ディレクトリ を参照してください。

次に例を示します。

v++ --temp_dir /tmp/myProj_temp ...

--to_step

適用先
コンパイルおよびリンク
--to_step <arg>

ステップ名をコンパイルまたはリンク プロセスに変更し、そのステップからビルド プロセスを実行します。--list_step オプションを使用すると、有効なコンパイルまたはリンク ステップのリストが表示されます。

ビルド プロセスは、指定したステップが終了した後に終了します。この段階で、ビルド結果を処理できるようになります。たとえば、HLS プロジェクトや Vivado Design Suite プロジェクトに手動でアクセスして、ビルド フローに戻る前に特定のタスクを実行するには、v++ コマンドに --from_step オプションを指定します。

重要: --to_step および --from_step オプションはインクリメンタル ビルド オプションで、--from_step を使用して Vitis コンパイラを再起動する際は、--to_step を使用してビルドを開始したのと同じプロジェクト ディレクトリを使用する必要があります。

--to_step を使用する場合は、--save-temps も指定して、Vivado ツールで必要な一時ファイルを保存する必要があります。次に例を示します。

v++ --link --save-temps --to_step vpl.update_bd

--trace_memory

適用先
コンパイルおよびリンク
--trace_memory <arg>

--profile オプション に説明されるように、ハードウェア ターゲットとリンクする際に --profile.xxx オプションと一緒に使用すると、トレース データを取り込むのに使用するメモリのタイプおよび量を指定できます。

プロファイル用にトレース バッファー メモリのタイプを <FIFO>:<size>|<MEMORY>[<n>] という形式で指定します。

  • FIFO:<size>: KB で指定します。デフォルトは FIFO:8K です。最大値は 4G です。
  • Memory[<N>]: プラットフォームのメモリ リソースのタイプおよび数を指定します。ターゲット プラットフォームのメモリ リソースは、platforminfo コマンドで指定できます。サポートされるメモリ タイプは、HBM、DDR、PLRAM、HP、ACP、MIG、および MC_NOC などです。たとえば、DDR[1] などです。
重要: リンクで --trace_memory を使用する場合は、xrt.ini ファイル で説明するように、xrt.ini ファイル内で [Debug] trace_buffer_size も使用する必要があります。

-v | --version

-v

v++ コマンドのバージョンおよびビルド情報を表示します。次に例を示します。

v++ -v

--vivado

適用先
リンク

デバイス バイナリをビルドする前に、Vivado 合成およびインプリメンテーション環境を設定するプロパティーとパラメーターを指定します。詳細は、--vivado オプション を参照してください。

--user_board_repo_paths

適用先
コンパイルおよびリンク
--user_board_repo_paths

DIMM ボード ファイルの既存のユーザー ボード リポジトリを指定します。この値は Vivado プロジェクトの board_part_repo_paths プロパティの冒頭に追加されます。

--user_ip_repo_paths

適用先
コンパイルおよびリンク
--user_ip_repo_paths <repo_dir>

カーネル デザインで使用される IP を最初に検索するユーザー IP リポジトリ パスのディレクトリを 1 つまたは複数指定します。この値は、Vivado ツールで IP コアを見つけるため、ip_repo_paths の冒頭に追加されます。これらの指定されたパスからの IP 定義は、ハードウェア プラットフォーム (.xsa) またはザイリンクス IP カタログからの IP リポジトリより前に使用されます。

ヒント: 複数の --user_ip_repo_paths コマンドを v++ コマンド ラインに指定できます。

次に、ビルド プロセス中に検出される IP 定義の優先順序を上からリストします。これらのエントリには、複数のディレクトリを含めることができます。

  • システム ハードウェア ビルド (-t hw):
    1. --user_ip_repo_paths からの IP 定義。
    2. カーネル IP 定義 (vpl --iprepo オプションの値)。
    3. プラットフォームに関連付けられた IP リポジトリからの IP 定義。
    4. インストール ディレクトリからの IP キャッシュ (例: <Install_Dir>/Vitis/2019.2/data/cache/)。
    5. インストール ディレクトリからのザイリンクス IP カタログ (例: <Install_Dir>/Vitis/2019.2/data/ip/)
  • ハードウェア エミュレーション ビルド (-t hw_emu):
    1. --user_ip_repo_paths からの IP 定義およびユーザー エミュレーション IP リポジトリ。
    2. カーネル IP 定義 (vpl --iprepo オプションの値)。
    3. プラットフォームに関連付けられた IP リポジトリからの IP 定義。
    4. インストール ディレクトリからの IP キャッシュ (例: <Install_Dir>/Vitis/2019.2/data/cache/)。
    5. $::env(XILINX_VITIS)/data/emulation/hw_em/ip_repo
    6. $::env(XILINX_VIVADO)/data/emulation/hw_em/ip_repo
    7. インストール ディレクトリからのザイリンクス IP カタログ (例: <Install_Dir>/Vitis/2019.2/data/ip/)

次に例を示します。

v++ --user_ip_repo_paths ./myIP_repo ...

--advanced オプション

--advanced.param および --advanced.prop オプションは、v++ コマンドで使用するパラメーターおよびプロパティを指定します。コンパイルまたはリンクを実行する際にこれらのオプションを使用すると、Vitis コア開発キットで生成されるハードウェアおよびハードウェア エミュレーション プロセスを詳細に制御できます。

--advanced.xxx オプションの引数は、<param_name>=<param_value> という形式で指定します。次に例を示します。

v++ --link -–advanced.param compiler.enableXSAIntegrityCheck=true 
-–advanced.prop kernel.foo.kernel_flags="-std=c++0x"
ヒント: Vitis コンパイラのコンフィギュレーション ファイル で説明するように、Vitis コンパイラ オプションを設定ファイルで指定して、その設定ファイルを --config オプションで指定できます。たとえば --platform オプションは、設定ファイルで次の構文を使用して、セクション ヘッドなしで指定できます。
platform=xilinx_u200_xdma_201830_2

--advanced.param

--advanced.param <param_name>=<param_value>

次の表に示すアドバンス パラメーターを指定します。

表 1. param オプション
パラメーター名 有効な値 説明
compiler.acceleratorBinaryContent データ型: 文字列

デフォルト値: <empty>

xclbin に挿入する内容を指定します。有効なオプションは bitstream および dcp です。

適用先

  • v++ --link
  • vpl.imp
  • xclbinutil
compiler.addOutputTypes データ型: 文字列

デフォルト値: <empty>

Vitis コンパイラで生成される追加の出力タイプ。有効な値は、xclbin および hw_export などです。hw_export を使用してダイナミック ハードウェア プラットフォームから固定 XSA を作成すると、エンベデッド ソフトウェア開発フローで使用できます。

適用先

  • v++ --link
  • vpl.impl
  • XSA 生成
compiler.​deadlockDetection データ型: ブール型

デフォルト値: TRUE

ハードウェア エミュレーションの一部として、シミュレーション実行中にカーネル デッドロックの検出をイネーブルにします。アプリケーションがデッドロックされると、コンソールおよびログ ファイルにエラーメッセージが表示されます。
// ERROR!!! DEADLOCK DETECTED at 42979000 ns! SIMULATION WILL BE STOPPED! //

メッセージは、デッドロックが終了されるまで繰り返されます。アプリケーションを手動で終了して、デッドロックを終了してください。

ヒント: シミュレーション中にデッドロックが発生した場合は、Vitis HLS でのカーネルのコンパイル で説明されるように、Vitis HLS でカーネルコードを開いて、デッドロックの検出とデバッグ機能を追加します。

適用先

  • v++ --compile
  • Vitis HLS
  • config_export
compiler.enableIncrHwEmu データ型: ブール型

デフォルト値: FALSE

プラットフォームに少し変更があった場合に、xclbin ハードウェア エミュレーションのインクリメンタル コンパイルをイネーブルにするために使用します。これにより、プラットフォームがアップデートされた場合に、ハードウェア エミュレーションのデバイス バイナリがすばやく再構築できます。

適用先

  • v++ --link
  • vpl.impl
compiler.​errorOnHoldViolation データ型: ブール型

デフォルト値: TRUE

Vivado インプリメンテーションの最後の段階後、タイミング解析チェック中に、必要であればクロック スケーリングを実行します。ホールド違反が検出された場合、デフォルトでは v++ が終了してエラー メッセージが表示されます。xclbin は生成されません。このパラメーターを使用すると、このデフォルト動作を変更できます。

適用先

  • v++ --link
  • vpl.impl
compiler.​fsanitize データ型: 文字列

デフォルト値: <empty>

OpenCL カーネルのデバッグ で説明されているように、OpenCL カーネルの追加のメモリ アクセス チェックをイネーブルにします。有効な値は address、memory などです。

ソフトウェア エミュレーションおよびデバッグに適用されます。

compiler.​interfaceRdBurstLen データ型: Int Range

デフォルト値: 0

カーネル AXI インターフェイスの AXI 読み出しバーストの予測される長さを指定します。compiler.interfaceRdOutstanding オプションと共にハードウェア バッファー サイズを決定するために使用されます。値は 1 ~ 256 です。

適用先

  • v++ --compile
  • Vitis HLS
  • config_interface
compiler.​interfaceWrBurstLen データ型: Int Range

デフォルト値: 0

カーネル AXI インターフェイスの AXI 書き込みバーストに予測される長さを指定します。compiler.interfaceWrOutstanding オプションと共にハードウェア バッファー サイズを決定するために使用されます。値は 1 ~ 256 です。

適用先

  • v++ --compile
  • Vitis HLS
  • config_interface
compiler.​interfaceRdOutstanding データ型: Int Range

デフォルト値: 0

カーネル AXI インターフェイスのバッファーへの読み出し数を指定します。値は 1 ~ 256 です。

適用先

  • v++ --compile
  • Vitis HLS
  • config_interface
compiler.​interfaceWrOutstanding データ型: Int Range

デフォルト値: 0

カーネル AXI インターフェイスのバッファーへの書き込み数を指定します。値は 1 ~ 256 です。

適用先

  • v++ --compile
  • Vitis HLS
  • config_interface
compiler.​maxComputeUnits データ型: Int

デフォルト値: -1

システムで使用可能最大計算ユニット。デフォルトは、60 計算ユニットですが、numComputeUnits プロパティを使用すると、ハードウェア プラットフォーム (.xsa) で指定することもできます。

指定した値でデフォルト値またはハードウェア プラットフォームの設定が上書きされます。デフォルト値 -1 を指定すると、[default] の設定が保持されます。

適用先: v++ --link

compiler.skipTimingCheckAndFrequencyScaling データ型: ブール型

デフォルト値: FALSE

インプリメンテーションの最後の段階 (route_design または配線後の phys_opt_design) 後に実行されるタイミング チェックおよびオプションのクロック周波数スケーリングをスキップします。

適用先

  • v++ --link
  • vpl.impl
​compiler.userPreCreateProjectTcl データ型: 文字列

デフォルト値: <empty>

Vitis ビルド プロセスで Vivado プロジェクトを作成する前に実行する Tcl スクリプトを指定します。

適用先

  • v++ --link
  • vpl.create_project
​compiler.userPreSysLinkOverlayTcl データ型: 文字列

デフォルト値: <empty>

Vitis ビルド プロセスで Vivado IP インテグレーター ブロック デザインを開いた後、コンパイラで生成された dr.bd.tcl スクリプトを実行する前に実行する Tcl スクリプトを指定します。

適用先

  • v++ --link
  • vpl.create_bd
​compiler.userPostSysLinkOverlayTcl データ型: 文字列

デフォルト値: <empty>

コンパイラで生成された dr.bd.tcl スクリプトを実行した後に実行する Tcl スクリプトを指定します。

適用先

  • v++ --link
  • vpl.update_bd
​compiler.userPostDebugProfileOverlayTcl データ型: 文字列

デフォルト値: <empty>

vpl.update_bd 段階で Vivado IP インテグレーター ブロック デザインにデバッグ プロファイルのオーバーレイを挿入した後に実行する Tcl スクリプトを指定します。

適用先

  • v++ --link
  • vpl.updated_bd
compiler.​worstNegativeSlack データ型: 浮動小数点

デフォルト値: 0

タイミング解析チェック中に、デザインで許容されるワースト ネガティブ スラックをナノ秒 (ns) で指定します。ネガティブ スラックが指定の値を超えると、ツールでタイミング結果を達成するためにクロック周波数のスケーリングが試みられることがあります。0 スラックではなく、許容されるネガティブ スラック値を指定します。

適用先

  • v++ --link
  • vpl.impl
compiler.​xclDataflowFifoDepth データ型: Int

デフォルト値: -1

カーネル データフロー領域で使用される FIFO の深さを指定します。

適用先

  • v++ --compile
  • Vitis HLS
  • config_dateflow
hw_emu.​compiledLibs データ型: 文字列

デフォルト値: <empty>

指定したシミュレータに clibs を使用します。

ハードウェア エミュレーションおよびデバッグに適用されます。

hw_emu.​debugMode gdb | wdb

デフォルト値: wdb

v++ コンパイル時間を短縮するためのコンパイル時オプションで、GDB に設定すると Vivado シミュレータ エラボレーションが実行されなくなります。

デフォルト値は WDB で、シミュレーションが波形モードで実行されます。

これオプションは、-g または --debug オプションと共に使用した場合にのみ機能します。

ハードウェア エミュレーションおよびデバッグに適用されます。

hw_emu.​enableProtocolChecker データ型: ブール型

デフォルト値: FALSE

ハードウェア エミュレーション中に軽量 AXI プロトコル チェッカー (lapc) をイネーブルにします。これは、AxI インターフェイスの正確さを確認するために使用します。

ハードウェア エミュレーションおよびデバッグに適用されます。

hw_emu.platformPath データ型: 文字列

デフォルト値: <empty>

カスタム プラットフォーム ディレクトリへのパスを指定します。<platformPath> ディレクトリがプラットフォームの作成で使用されるには、次の要件を満たしている必要があります。
  • ip_repo というディレクトリが含まれている必要があります。
  • scripts というディレクトリが含まれ、scripts ディレクトリには hw_em_util.tcl ファイルが含まれている必要があります。hw_em_util.tcl ファイルでは、次の 2 つのプロシージャが定義されています。
    • hw_em_util::add_base_platform
    • hw_em_util::generate_simulation_scripts_and_compile

ハードウェア エミュレーションおよびデバッグに適用されます。

hw_emu.post_sim_settings データ型: 文字列 ハードウェア エミュレーションを実行する前に Vivado シミュレータを設定する Tcl スクリプトへのパスを指定します。このスクリプトは、ツールのデフォルト コンフィギュレーションの後、シミュレーションを起動する前に実行されます。この Tcl スクリプトを使用すると、特定の設定を上書きしたり、必要に応じてシミュレータをカスタム設定したりできます。

ハードウェア エミュレーションおよびデバッグに適用されます。

hw_emu.​scDebugLevel none | waveform | log | waveform_and_log

デフォルト値: waveform_and_log

Vivado ロジック シミュレータ (xsim) の TLM トランザクション デバッグ レベルを設定します。
  • NONE: TLM デバッグを無効にします
  • log: TLM トランザクション ログをレポート ファイルに出力します。
  • waveform: TLM トランザクション波形ビューをイネーブルにします。
  • waveform_and_log: ログ メッセージと波形ビューの両方をイネーブルにします。

ハードウェア エミュレーションおよびデバッグに適用されます。

hw_emu.simulator XSIM | QUESTA

デフォルト値: XSIM

ハードウェア エミュレーションの実行に指定したシミュレータを使用します。

ハードウェア エミュレーションおよびデバッグに適用されます。

次に例を示します。
--advanced.param compiler.addOutputTypes="hw_export"
ヒント: このオプションは、設定ファイルの [advanced] セクション ヘッドの下で次のフォーマットを使用して指定できます。
[advanced]
param=compiler.addOutputTypes="hw_export"

--advanced.prop

--advanced.prop <arg>

カーネル コンパイルのアドバンス カーネルまたはソリューション プロパティを指定します。<arg> には、次の表にリストされている値のいずれかを指定します。

表 2. prop オプション
プロパティ名 有効な値 説明
kernel.<kernel_name>.​kernel_flags データ型: 文字列

デフォルト値: <empty>

カーネル <kernel_name> に特定のコンパイル フラグを設定します。
solution.​device_repo_path データ型: 文字列

デフォルト値: <empty>

ハードウェア プラットフォームのリポジトリへのパスを指定します。このオプションの代わりに、 --platform オプションで .xpfm プラットフォーム ファイルへの完全パスを指定してください。
solution.​kernel_compiler_margin データ型: 浮動小数点

デフォルト値: カーネル クロック周期の 12.5%。

カーネルのクロック マージン (ns)。この値は、配置配線遅延にマージンを提供するため、合成前にカーネル クロック周期から引かれます。

--advanced.misc

--advanced.misc <arg>

カーネル コンパイルのアドバンス ツール指示子を指定します。

--clock オプション

重要: ここで説明する --clock オプションは、エンベデッド プロセッサ プラットフォームおよびデータセンター アクセラレータ カード用の新しいプラットフォームでサポートされます。古いレガシ プラットフォームでは、--kernel_frequency オプションを使用してカーネルのクロック周波数を指定できます。

--clock.XXX オプションは、リンク時に、v++ コマンド ラインからクロックをカーネルに割り当て、必要なカーネル クロック周波数ソースを見つけるために使用します。クロックを指定するためのさまざまなオプションがあります。オプションの優先順位は、クロック オプションがどれだけ特定的であるかによります。次のオプションは、全体的なものからより特定的なものの順にリストされており、下に行くほど優先順位が高くなります。

  • --clock.XX オプションなし: プラットフォームのデフォルトのクロックが各計算ユニット (CU) に適用されます。2 つクロックを使用するカーネルの場合、プラットフォームからのクロック ID 0 が ap_clk に割り当てられ、クロック ID 1 が ap_clk_2 に割り当てられます。
  • --clock.defaultId=<id>: すべてのカーネルに特定のクロック ID を定義できます。プラットフォームのデフォルト クロックの割り当てよりも優先されます。
  • --clock.defaultFreqHz=<Hz>: すべてのカーネルに指定したクロック周波数を定義します。ユーザー指定のデフォルト クロック ID およびプラットフォームのデフォルト クロックよりも優先されます。
  • --clock.id=<id>:<cu_0>[.<clk_pin_0>][,<cu_n>[.<clk_pin_n>]]: クロック ID を関連する CU のリストに割り当て、オプションで CU のクロック ピンに割り当てます。
  • --clock.freqHz=<Hz>:<cu_0>[.<clk_pin_0>][,<cu_n>[.<clk_pin_n>]]: 指定した CU の指定したクロック ピンに指定のクロック周波数を割り当てます。

--clock.defaultFreqHz

--clock.defaultFreqHz <arg>

すべてのカーネルに使用するデフォルト クロック周波数を MHz で指定します。デフォルトのプラットフォーム クロックよりも優先され、クロックに指定のクロック周波数をデフォルトで割り当てます。<arg> には、クロック周波数を MHz 単位で指定します。

次に例を示します。

v++ --link --clock.defaultFreqHz 300000000
ヒント: このオプションは、コンフィギュレーション ファイルの [clock] セクション ヘッドの下で次のフォーマットを使用して指定できます。
[clock]
defaultFreqHz=300000000

--clock.defaultId

--clock.defaultId <arg>
--clock.defaultId=<id>: すべてのカーネルに指定したクロック ID を定義します。プラットフォームのデフォルト クロックよりも優先されます。<arg> には、ターゲット プラットフォームで定義されているデフォルト クロック ID 以外のクロック ID を指定します。
ヒント: ターゲット プラットフォームで使用可能なクロック ID は、platforminfo ユーティリティを使用すると確認できます (platforminfo ユーティリティ を参照)。

次に例を示します。

v++ --link --clock.defaultId 1
ヒント: このオプションは、コンフィギュレーション ファイルの [clock] セクション ヘッドの下で次のフォーマットを使用して指定できます。
[clock]
defaultId=1

--clock.defaultTolerance

--clock.defaultTolerance <arg>

デフォルトのクロック耐性を値、またはデフォルトのクロック周波数のパーセントで指定します。clock.defaultFreqHz を指定する際に、値またはパーセントのいずれかで耐性を指定することもできます。この場合、その耐性を反映するためにタイミング制約もアップデートされます。

耐性の値 <arg> は、clock.defaultFreqHz ± 整数、またはデフォルトのクロック周波数のパーセント (10 進数値) で指定できます。

重要: このオプションを指定しない場合のデフォルトのクロック耐性は 5% です。

次に例を示します。

v++ --link --clock.defaultFreqHz 300000000 --clock.defaultTolerance 0.10
ヒント: このオプションは、コンフィギュレーション ファイルの [clock] セクション ヘッドの下で次のフォーマットを使用して指定できます。
[clock]
defaultTolerance=0.10

--clock.freqHz

--clock.freqHz <arg>

クロック周波数を Hz で指定し、関連付けられている計算ユニット (CU) のリストおよびオプションで CU の特定のクロック ピンに割り当てます。<arg><frequency_in_Hz>:<cu_0>[.<clk_pin_0>][,<cu_n>[.<clk_pin_n>]] のように指定します。

  • <frequency_in_Hz>: クロック周波数を MHz で指定します。
  • <cu_0>[.<clk_pin_0>][,<cu_n>[.<clk_pin_n>]]: 指定した周波数を、指定した CU またはオプションで CU の指定したクロック ピンに割り当てます。
次に例を示します。
v++ --link --clock.freqHz 300000000:vadd_1,vadd_3
ヒント: このオプションは、コンフィギュレーション ファイルの [clock] セクション ヘッドの下で次のフォーマットを使用して指定できます。
[clock]
freqHz=300000000:vadd_1,vadd_3

--clock.id

--clock.id <arg>

ターゲット プラットフォームで使用可能なクロック ID を指定し、関連付けられている計算ユニット (CU) のリストおよびオプションで CU の特定のクロック ピンに割り当てます。<arg><reference_ID>:<cu_0>[.<clk_pin_0>][,<cu_n>[.<clk_pin_n>]] のように指定します。

  • <reference_ID>: ターゲット プラットフォームで使用するクロック ID を定義します。
    ヒント: ターゲット プラットフォームで使用可能なクロック ID は、platforminfo ユーティリティを使用すると確認できます (platforminfo ユーティリティ を参照)。
  • <cu_0>[.<clk_pin_0>][,<cu_n>[.<clk_pin_n>]]: 指定した周波数を、指定した CU またはオプションで CU の指定したクロック ピンに割り当てます。

次に例を示します。

v++ --link --clock.id 1:vadd_1,vadd_3
ヒント: このオプションは、コンフィギュレーション ファイルの [clock] セクション ヘッドの下で次のフォーマットを使用して指定できます。
[clock]
id=1:vadd_1,vadd_3

--clock.tolerance

--clock.tolerance <arg>

クロック耐性を値、またはデフォルトのクロック周波数のパーセントで指定します。--clock.freqHz を指定する際に、値またはパーセントのいずれかで耐性を指定することもできます。この場合、その耐性を反映するためにタイミング制約もアップデートされます。<arg>: <tolerance>:<cu_0>[.<clk_pin_0>][,<cu_n>[.<clk_pin_n>]] のように指定します。

  • <tolerance>: clock.freqHz ± 整数、またはデフォルトのクロック周波数のパーセント (10 進数値) で指定できます。
  • <cu_0>[.<clk_pin_0>][,<cu_n>[.<clk_pin_n>]]: 定義したクロック耐性を特定の CU に適用します。オプションで、CU の指定したクロック ピンに適用することもできます。
重要: このオプションを指定しない場合、デフォルトのクロック耐性は clock.FreqHz の 5% です。

次に例を示します。

v++ --link --clock.tolerance 0.10:vadd_1,vadd_3 
ヒント: このオプションは、コンフィギュレーション ファイルの [clock] セクション ヘッドの下で次のフォーマットを使用して指定できます。
[clock]
tolerance=0.10:vadd_1,vadd_3

--connectivity オプション

カーネルのリンク で説明したように、さまざまな --connectivity.XXX オプションを使用して、CU 数を指定したり、それらを SLR に割り当てたり、カーネル ポートをグローバル メモリに接続したり、ストリーミング ポート接続を構築したりといった FPGA バイナリのトポロジを定義できます。これらのコマンドはビルド プロセスに含まれ、アプリケーションの定義および構築に重要です。

--connectivity.nk

--connectivity.nk <arg>

<arg><kernel_name>:#:<cu_name1>.<cu_name2>...<cu_name#> のように指定します。

これで、リンク プロセスで生成された FPGA バイナリ (.xclbin) ファイルで指定されているカーネル (kernel_name) に、指定した数の CU (#) がインスタンシエートされます。cu_name はオプションです。cu_name を指定しない場合、カーネルのインスタンス名は 1 つ目が kernel_name_1、2 つ目が kernel_name_2 のようになります。デフォルトでは、Vitis コンパイラで各カーネルごとに計算ユニット 1 つがインスタンシエートされます。

次に例を示します。

v++ --link --connectivity.nk vadd:3:vadd_A.vadd_B.vadd_C
ヒント: このオプションは、コンフィギュレーション ファイルの [connectivity] セクション ヘッドの下で次のフォーマットを使用して指定できます。
[connectivity]
nk=vadd:3:vadd_A.vadd_B.vadd_C

--connectivity.slr

--connectivity.slr <arg>

CU をデバイス上の特定の SLR に割り当てます。このオプションは、SLR に割り当てられる各カーネルまたは CU ごとに指定する必要があります。

重要: カーネル配置を割り当てるのに --connectivity.slr を使用する場合は、--connectivity.sp も使用してカーネルのメモリ アクセスを割り当てる必要があります。

有効な値は、次のとおりです。

<cu_name>:<SLR_NUM>

説明:

  • <cu_name>: --connectivity.nk オプションで指定した計算ユニットの名前です。別の名前を指定しない場合、これは通常 <kernel_name>_1 になります。
  • <SLR_NUM>: CU を割り当てる SLR 番号です。SLR0、SLR1 などです。

たとえば、CU vadd_2 を SLR2、CU fft_1 を SLR1 に割り当てるには、次を使用します。

v++ --link --connectivity.slr vadd_2:SLR2 --connectivity.slr fft_1:SLR1
ヒント: このオプションは、コンフィギュレーション ファイルの [connectivity] セクション ヘッドの下で次のフォーマットを使用して指定できます。
[connectivity]
slr=vadd_2:SLR2
slr=fft_1:SLR1

--connectivity.sp

--connectivity.sp <arg>

カーネル インターフェイスのプラットフォーム内のシステム ポートへの割り当てを指定します。このオプションは、主にカーネル ポートを特定のメモリ リソースへの割り当てる際に使用されます。カーネルの各インターフェイスを特定のメモリ リソースにマップするには、--connectivity.sp オプションを個別に指定する必要があります。--connectivity.sp オプションを使用してメモリ リソースに明示的にマップされていないカーネル インターフェイスは、ビルド プロセス中に自動的に使用可能なメモリ リソースに接続されます。

有効な値は、次のとおりです。

<cu_name>.<kernel_interface_name>:<sptag[min:max]>

説明:

  • <cu_name>: --connectivity.nk オプションで指定した計算ユニットの名前です。別の名前を指定しない場合、これは通常 <kernel_name>_1 になります。
  • <kernel_interface_name>: カーネルの関数引数または計算ユニット ポートの名前です。
  • <sptag>: ターゲット プラットフォームからのメモリ コントローラー インターフェイス名など、システム ポート タグを示します。有効な <sptag> 名は、DDR、PLRAM、および HBM などです。
  • [min:max] で、DDR[0:2] のようなメモリ範囲の使用をイネーブルにします。DDR[2] のように、インデックスを 1 つだけ指定することもできます。
ヒント: サポートされる <sptag> およびターゲット プラットフォームのメモリ リソースの範囲は、platforminfo コマンドで取得できます。詳細は、platforminfo ユーティリティを参照してください。

次の例では、VADD カーネルの指定した CU の入力引数 (A) を DDR[0:3B] に、入力引数 (B) を HBM[0:31] にマップし、出力引数 (C) を PLRAM[2] に書き込みます。

v++ --link --connectivity.sp vadd_1.A:DDR[0:3] --connectivity.sp vadd_1.B:HBM[0:31] \
--connectivity.sp vadd_1.C:PLRAM[2]
ヒント: このオプションは、コンフィギュレーション ファイルの [connectivity] セクション ヘッドの下で次のフォーマットを使用して指定できます。
[connectivity]
sp=vadd_1.A:DDR[0:3]
sp=vadd_1.B:HBM[0:31]
sp=vadd_1.C:PLRAM[2]

--connectivity.sc

--connectivity.sc <arg>

2 つの計算ユニット間に AXI4-Stream インターフェイスを介したストリーミング接続を作成します。ストリーミング インターフェイス接続ごとに個別の --connectivity.sc オプションを指定してください。接続は、最初のカーネルのストリーミング出力ポートから 2 つ目のカーネルのストリーミング入力ポートの順になります。有効な値は、次のとおりです。

<cu_name>.<streaming_output_port>:<cu_name>.<streaming_input_port>[:<fifo_depth>]

説明:

  • <cu_name>: --connectivity.nk オプションで指定した計算ユニットの名前です。別の名前を指定しない場合、これは通常 <kernel_name>_1 になります。
  • <streaming_output_port>/<streaming_input_port>: AXI4-Stream として宣言された計算ユニット ポートの関数引数です。
  • [:<fifo_depth>]: 2 つのストリーミング ポート間に指定した深さの FIFO を挿入して、ストールが発生しないようにします。値は整数で指定します。

たとえば、計算ユニット mem_read_1AXI4-Stream ポート s_out を計算ユニット increment_1AXI4-Stream ポート s_in に接続するには、次を使用します。

--connectivity.sc mem_read_1.s_out:increment_1.s_in
ヒント: このオプションは、コンフィギュレーション ファイルの [connectivity] セクション ヘッドの下で次のフォーマットを使用して指定できます。
[connectivity]
sc=mem_read_1.s_out:increment_1.s_in

オプションの <fifo_depth> 値を含めると、v++ リンカーで 2 つのカーネル間に FIFO が追加され、ストールが発生しないようにできます。指定すると、デバイスからの BRAM リソースが使用されますが、FIFO を含めるように HLS カーネルをアップデートする必要はありません。接続に 2 つの異なるクロックが使用されたり、バス幅が異なっている場合は、Clock Converter (CDC) や Datawidth Converter (DWC) IP もインスタンシエートされます。

--debug オプション

ハードウェア デバッグのため、デバイス バイナリ (.xclbin) でデバッグ IP コア挿入をイネーブルにできます。このオプションでは、追加するデバッグ コアのタイプと、ChipScope™ で監視する計算ユニットおよびインターフェイスを指定できます。--debug.xxx オプションを使用すると、デバッグおよびパフォーマンス監視目的に、そのインターフェイスで AXI プロトコル チェッカーと System ILA コアをカーネルまたは計算ユニット (CU) に接続できます。

  • System Integrated Logic Analyzer (ILA) を使用すると、トランザクション レベルでアクセラレーション カーネルまたはハードウェアで実行される関数を表示できます。System ILA コアでは、特定の AXI トラフィックをキャプチャして表示させることもできます。
  • AXI Protocol Checker デバッグ コアは、アクセラレーション カーネル上の AXI4 インターフェイスを監視します。CU のインターフェイスに接続すると、プロトコル違反をアクティブにチェックし、違反が発生した場合にそれを通知します。

--debug.xxx コマンドは、コンフィギュレーション ファイルの [debug] セクション ヘッドの下で次のフォーマットを使用して指定できます。

[debug]
protocol=all:all           # Protocol analyzers on all CUs
protocol=cu2:port3         # Protocol analyzer on port3 of cu2
chipscope=cu2              # ILA on cu2

--debug には、次のようなオプションがあります。

--debug.chipscope

--debug.chipscope <cu_name>[:<interface_name>]

デザイン内の指定された CU に System Integrated Logic Analyzer デバッグコアを追加します。

重要: --debug.chipscope オプションでは、<cu_name> を指定する必要があり、all キーワードは使用できません。<interface_name> を指定することもできます。

たとえば、次のコマンドは、vadd_1 CU に ILA コアを追加します。

v++ --link --debug.chipscope vadd_1

--debug.list_ports

現在のデザインの有効な計算ユニットとポートの組み合わせのリストを表示します。この情報は、--debug コマンド用にコマンド ラインやコンフィギュレーション ファイルを作成するのに役立ちます。

このオプションはリンク中に指定する必要がありますが、リンク プロセスは実行されません。次の例は、コマンド ラインに必要な要素を示しており、指定したカーネルをリストされたプラットフォームにリンクする場合に使用可能なポートを返しています。

v++ --platform <platform> --link --debug.list_ports <kernel.xo>

--debug.protocol

--debug.protocol all|<cu_name>[:<interface_name>]

デザインに AXI Protocol Checker デバッグ コアを追加します。これは all キーワードで指定できます。また、<cu_name> およびオプションの <interface_name> を使用すると、プロトコル チェッカーを指定の CU およびインターフェイスに追加することもできます。

次に例を示します。

v++ --link --debug.protocol all

--hls オプション

--hls.XXX オプションは、カーネルのコンパイル中に呼び出される Vitis HLS 合成プロセス用のオプションを指定します。

--hls.clock

--hls.clock <arg>

Vitis HLS でカーネルをコンパイルする周波数を Hz で指定します。

<arg><frequency_in_Hz>:<cu_name1>,<cu_name2>,..,<cu_nameN> のように指定します。

  • <frequency_in_Hz>: カーネル周波数を MHz で指定します。
  • <cu_name1>,<cu_name2>,...: リストされているカーネルまたはカーネル インスタンス (CU) を指定のターゲット周波数でコンパイルします。

次に例を示します。

v++ -c --hls.clock 300000000:mmult,mmadd --hls.clock 100000000:fifo_1
ヒント: このオプションは、設定ファイルの [hls] セクション ヘッドの下で次のフォーマットを使用して指定できます。
[hls]
clock=300000000:mmult,mmadd
clock=100000000:fifo_1

--hls.export_project

--hls.export_project

HLS プロジェクト設定スクリプトをエクスポートしたディレクトリを指定します。

次に例を示します。

v++ --hls.export_project ./hls_export
ヒント: このオプションは、設定ファイルの [hls] セクション ヘッドの下で次のフォーマットを使用して指定できます。
[hls]
export_project=./hls_export

--hls.jobs

--hls.jobs <arg>

HLS の実行を起動するジョブ数を指定します。

このオプションでは、Vitis HLS が RTL カーネル コードを合成するするのに使用する並列ジョブの数を指定します。ジョブ数を増やすと、より多くのプロセスを並列に処理して短時間で完了できるようになります。

次に例を示します。

v++ --hls.jobs 4
ヒント: このオプションは、設定ファイルの [hls] セクション ヘッドの下で次のフォーマットを使用して指定できます。
[hls]
jobs=4

--hls.lsf

--hls.lsf <arg>

HLS 実行のために LSF にジョブを送信する bsub コマンドを指定します。

bsub コマンド ラインを LSF クラスターに渡す文字列として指定します。Vitis HLS 合成に IBM Platform Load Sharing Facility (LSF) を使用する場合に必要なオプションです。

次に例を示します。

v++ --compile --hls.lsf '{bsub -R \"select[type=X86_64]\" -N -q medium}'
ヒント: このオプションは、設定ファイルの [hls] セクション ヘッドの下で次のフォーマットを使用して指定できます。
[hls]
lsf='{bsub...

--hls.post_tcl

--hls.post_tcl <arg>

csynth_design の後に読み込む vitis_hls の Tcl コマンドを含む Tcl ファイルを指定します。

次に例を示します。

v++ --hls.post_tcl ./runPost.tcl
ヒント: このオプションは、設定ファイルの [hls] セクション ヘッドの下で次のフォーマットを使用して指定できます。
[hls]
post_tcl=./runPost.tcl

--hls.pre_tcl

--hls.pre_tcl <arg>

csynth_design を実行する前に読み込む vitis_hls の Tcl コマンドを含む Tcl ファイルを指定します。

次に例を示します。

v++ --hls.pre_tcl ./runPre.tcl
runPre.tcl には、Vitis HLSm_axi インターフェイスを設定する次のコマンドが含まれます。
config_interface -m_axi_auto_max_ports=1
config_interface -m_axi_max_bitwidth 512
ヒント: このオプションは、コンフィギュレーション ファイルの [hls] セクション ヘッドの下で次のフォーマットを使用しても指定できます。
[hls]
pre_tcl=./runPre.tcl

--linkhook オプション

--linkhook.XXX オプションは、Vitis リンク プロセスの特定の段階で実行する Tcl スクリプトを指定します。有効な段階は、次に示す --linkhook.list_steps コマンドを使用すると決定できます。

--linkhook.custom

--linkhook.custom <step name, path to script file>

ビルド プロセスの定義した時点で実行する Tcl スクリプトを指定します。スクリプトへのパスは、絶対パスまたはビルド ディレクトリへの相対パスで指定できます。

たとえば、次のコマンドは、ビルドの Syslink ステップ前に、指定した Tcl スクリプトを実行します。

v++ -l --linkhook.custom preSysLink,./runScript.tcl

-linkhook.do_first

--linkhook.do_first <step name, path to script file>

指定した段階名の前に実行する Tcl スクリプトを指定します。スクリプトへのパスは、絶対パスまたはビルド ディレクトリへの相対パスで指定できます。

たとえば、次のコマンドは、ビルドの place_design 段階前に、指定した Tcl スクリプトを実行します。

v++ -l --linkhook.do_first vpl.impl.place_design,runScript.tcl

-linkhook.do_last

--linkhook.do_last <step name, path to script file>

指定した段階が終了した直後に実行する Tcl スクリプトを指定します。スクリプトへのパスは、絶対パスまたはビルド ディレクトリへの相対パスで指定できます。

たとえば、次のコマンドは、ビルドの place_design 段階前に、指定した Tcl スクリプトを実行します。

v++ -l --linkhook.do_last vpl.impl.place_design,runScript.tcl

-linkhook.list_steps

--linkhook.list_steps

指定したターゲットのスクリプト フックをサポートするデフォルトおよびオプションのビルド段階をリストします。このコマンドでは、--target および --link オプションを指定する必要があります。

次に例を示します。

v++ --target hw -l --linkhook.list_steps

このコマンドは、ビルド プロセス中に常にイネーブルになっているデフォルトの段階と、必要に応じてイネーブルにできるオプションの段階の両方を返します。オプションの段階をイネーブルにする方法は、Vivado 合成およびインプリメンテーション結果の管理 を参照してください。

--package オプション

概要

v++ --package または -p ステップでは、v++ コンパイルおよびリンク ビルド プロセスの終わりで最終的な出力がパッケージされます。これは、Versal デバイス、AI エンジンZynq デバイスを含むすべてのエンベデッド プラットフォームで必須のステップです。

--package には、次のようなオプションがあります。

--package.aie_debug_port

--package.aie_debug_port <arg>

<arg>: Versal AI エンジン コアをデバッグするデバッガーから入ってくる接続をエミュレーターがリッスンする TCP ポートを指定します。

次に例を示します。

v++ -l --package.aie_debug_port 1440 

--package.bl31_elf

--package.bl31_elf <arg>

<arg>: A72 #0 コアで実行される Arm trusted FW ELF への絶対パスまたは相対パスを指定します。

次に例を示します。

v++ -l --package.bl31_elf ./arm_trusted.elf 

--package.boot_mode

--package.boot_mode <arg>

<arg>: エミュレーション中またはハードウェアでアプリケーションを実行される際に使用される <ospi | qspi | sd> ブート モードを指定します。

次に例を示します。

v++ -l --package.boot_mode sd 

--package.defer_aie_run

--package.defer_aie_run

Versal AI エンジン コアをエンベデッド プロセッサ (PS) アプリケーションでイネーブルにするかどうか指定します。このオプションを指定しない場合は、PDI ロード中に AI エンジン コアをイネーブルにする CDO コマンドが生成されます。

次に例を示します。

v++ -l --package.defer_aie_run

--package.domain

--package.domain <arg>

<arg>: ドメイン名を指定します。

次に例を示します。

v++ -l --package.domain xrt

--package.dtb

--package.dtb <arg>

<arg>: APU に Linux をロードするのに使用されるデバイス ツリー バイナリ (DTB) への絶対パスまたは相対パスを指定します。

次に例を示します。

v++ -l --package.dtb ./device_tree.image

--package.enable_aie_debug

--package.enable_aie_debug

イネーブルにすると、PDI ロード中に AI エンジン コアを停止する CDO コマンドが生成されます。

次に例を示します。

v++ -l --package.enable_aie_debug 

--package.image_format

--package.image_format <arg>

<arg>: <ext4 | fat32> で出力イメージ ファイル形式を指定します。

  • ext4: Linux ファイル システム
  • fat32: Windows ファイル システム
重要: EXT4 形式は、Windows ではサポートされません。

次に例を示します。

v++ -l --package.image_format fat32 

--package.kernel_image

--package.kernel_image <arg>

<arg>: Linux カーネル イメージ ファイルへの絶対パスまたは相対パスを指定します。プラットフォームで使用可能な既存のイメージを上書きします。プラットフォーム イメージ ファイルは、https://japan.xilinx.com からダウンロードできます。詳細は、Vitis ソフトウェア プラットフォームのインストール を参照してください。

次に例を示します。

v++ -l --package.kernel_image ./kernel_image 

--package.no_image

--package.no_image

SD カードのイメージ作成をバイパスします。--package.boot_mode sd で有効です。

--package.out_dir

--package.out_dir <arg>

<arg>: --package コマンドの出力ディレクトリへの絶対パスまたは相対パスを指定します。

次に例を示します。

v++ -l --package.out_dir ./out_dir 

--package.ps_debug_port

--package.ps_debug_port <arg>

<arg>: PS コアをデバッグするデバッガーから入ってくる接続をエミュレーターがリッスンする TCP ポートを指定します。

次に例を示します。

v++ -l --package.debug_port 3200 

--package.ps_elf

--package.ps_elf <arg>

<arg>: <ps.elf,core> を指定します。

  • ps.elf: PS コアの ELF ファイルを指定します。
  • core: 実行する PS コアを指定します。

次に例を示します。

v++ -l --package.ps_elf a72_0.elf,a72-0 

--package.rootfs

--package.rootfs <arg>

<arg>: 処理された Linux ルート ファイルのシステム ファイルへの絶対パスまたは相対パスを指定します。プラットフォーム RootFS ファイルは、Xilinx.com からダウンロードできます。詳細は、Vitis ソフトウェア プラットフォームのインストール を参照してください。

次に例を示します。

v++ -l --package.rootfs ./rootfs.ext4

--package.sd_dir

--package.sd_dir <arg>

<arg>: sd_card ディレクトリ/イメージにパッケージするフォルダーを指定します。ディレクトリの内容が sd_card フォルダー内のフォルダーにコピーされます。

次に例を示します。

v++ -l --package.sd_dir ./test_data 

--package.sd_file

--package.sd_file <arg>

<arg>: sd_card ディレクトリ/イメージにパッケージする ELF またはその他のデータ ファイルを指定します。このオプションを繰り返し使用すると、複数のファイルが sd_card に追加できます。

次に例を示します。

v++ -l --package.sd_file ./arm_trusted.elf 

--package.uboot

--package.uboot <arg>

<arg>: U-Boot ELF ファイルへのパスを指定します。これにより、プラットフォーム U-Boot は使用されなくなります。

次に例を示します。

v++ -l --package.uboot ./uboot.elf 

--profile オプション

アプリケーションでのプロファイリングのイネーブル で説明するように、ランタイムの実行中にアプリケーション イベントとカーネル イベントのプロファイリングを有効にするための --profile オプションがいくつかあります。このオプションを使用すると、カーネルとホスト間のデータ トラフィック、カーネルの停止、カーネルと計算ユニット (CU) の実行時間のプロファイル データを取り込んだり、Versal AI エンジン の動作を監視したりできます。

重要: v++--profile オプションを使用するには、xrt.ini ファイルに profile=true を追加する必要もあります。xrt.ini ファイル を参照してください。
--profile コマンドは、コンフィギュレーション ファイルの [profile] セクション ヘッドの下で次のフォーマットを使用して指定できます。
[profile]
data=all:all:all           # Monitor data on all kernels and CUs
data=k1:all:all            # Monitor data on all instances of kernel k1
data=k1:cu2:port3          # Specific CU master
data=k1:cu2:port3:counters # Specific CU master (counters only, no trace)
stall=all:all              # Monitor stalls for all CUs of all kernels
stall=k1:cu2               # Stalls only for cu2
exec=all:all               # Monitor execution times for all CUs
exec=k1:cu2                # Execution tims only for cu2
aie=all                    # Monitor all AIE streams
aie=DataIn1                # Monitor the specific input stream in the SDF graph
aie=M02_AXIS               # Monitor specific stream interface

このコマンドには、次に示すさまざまなオプションを指定できます。

--profile.aie <arg>

ADF (Adaptive Data Flow) アプリケーションで AI エンジン ストリームのプロファイリングを有効にします。この場合、<arg> は次のとおりです。

<ADF_graph_argument|pin name|all>
  • <ADF_graph_argument>: ADF グラフ アプリケーションから引数名を指定します。
  • <pin_name>: AI エンジン カーネル上のポートを示します。
  • <all>: ADF アプリケーション内のすべてのストリーム接続を監視します。
たとえば、DataIn1 入力ストリームを監視するには、次のコマンドを使用します。
v++ --link --profile.aie:DataIn1

--profile.data <arg>

モニター IP を介してデータ ポートを監視します。このオプションは、リンク時には指定する必要があります。

<arg> は次のようになります。

[<kernel_name>|all]:[<cu_name>|all]:[<interface_name>|all](:[counters|all])
  • [<kernel_name>|all]: コマンドを適用する特定のカーネルを定義します。all キーワードを使用して、1 つのオプションで既存のカーネル、計算ユニット、インターフェイスすべてを監視できるよう設定することもできます。
  • [<cu_name>|all]: <kernel_name> が指定されている場合は、コマンドを適用する特定の CU を定義したり、カーネルのすべての CU に適用する必要があることを指定したりできます。
  • [<interface_name>|all]: カーネルまたは CU の特定のインターフェイスを定義して、データ アクティビティを監視するか、すべてのインターフェイスを監視します。
  • [<counters|all]: オプションの引数で、指定しない場合はデフォルトで all になります。大型デザインの場合は情報の収集を counters に制限できますが、all を指定して実際のトレース情報が収集されるようにすることもできます。

たとえば、k1 カーネルのすべての CU およびインターフェイスにデータ プロファイルを割り当てるには、次のコマンドを使用します。

v++ --link --profile.data:k1:all:all

--profile.exec <arg>

カーネルの実行時間を記録し、システム実行中に最小限のポート データ コレクションを示します。このオプションは、リンク時には指定する必要があります。

ヒント: カーネルの実行時間は、--profile.data または --profile.stall が指定さるとデフォルトで収集されます。--profile.execdata または stall が適用されていない CU すべてに指定できます。

exec プロファイルの構文は、次のとおりです。

[<kernel_name>|all]:[<cu_name>|all](:[counters|all])

たとえば、k1 カーネルの cu2 の実行をプロファイルするには、次のコマンドを使用します。

v++ --link --profile.exec:k1:cu2

--profile.stall

デバイス バイナリ (.xclbin) に停止監視ロジックを追加します。これには、カーネル インターフェイスに停止ポートを追加する必要があります。これには、コンパイルおよびリンクの両方で stall オプションを指定する必要があります。

stall プロファイルの構文は、次のとおりです。

[<kernel_name>|all]:[<cu_name>|all](:[counters|all])

たとえば、k1 カーネルの cu2 の停止を監視するには、次のコマンドを使用します。

v++ --compile -k k1 --profile.stall ...
v++ --link --profile.stall:k1:cu2 ...

--profile.trace_memory

ハードウェア ターゲット (-t=hw) をビルド際に、トレース データを取り込むのに使用するメモリのタイプおよび量を指定できます。この引数は、次のように設定できます。

<FIFO>:<size>|<MEMORY>[<n>]

プロファイルのトレース バッファー メモリのタイプを指定します。

FIFO:<size>
KB 単位で指定します。デフォルトは FIFO:8K です。最大値は 4G です。
Memory[<N>]
プラットフォームのメモリ リソースのタイプおよび数を指定します。ターゲット プラットフォームのメモリ リソースは、platforminfo コマンドで指定できます。サポートされるメモリ タイプは、HBM、DDR、PLRAM、HP、ACP、MIG、および MC_NOC などです。DDR[1] のように範囲で指定します。
重要: xrt.ini ファイル に説明するように、xrt.ini ファイルで [Debug] trace_buffer_size を使用します。

--vivado オプション

–-vivado.XXX オプションは、デバイス バイナリ (.xclbin) の合成およびインプリメンテーション用の Vivado ツールを設定するために使用します。たとえば、生成するジョブの数、インプリメンテーション run に使用する LSF コマンド、または使用する特定のインプリメンテーション ストラテジを指定できます。最適化、配置、タイミングを設定したり、出力するレポートを指定したりできます。

重要: これらのオプションを最大限に活用するため、Vivado Design Suite の使用方法をよく理解しておいてください。詳細は、『Vivado Design Suite ユーザー ガイド: インプリメンテーション』 (UG904) を参照してください。

--vivado.impl.jobs

--vivado.impl.jobs <arg>

Vivado Design Suite がデバイス バイナリをインプリメントするのに使用する並列ジョブ数を指定します。ジョブ数を増やすと、Vivado インプリメンテーション ステップを並列に処理することにより、ジョブを短時間で完了できます。

例:

v++ --link --vivado.impl.jobs 4

--vivado.impl.lsf

--vivado.impl.lsf <arg>

bsub コマンド ラインを LSF クラスターに渡す文字列として指定します。Vivado インプリメンテーションに IBM Platform Load Sharing Facility (LSF) を使用する場合に必要なオプションです。

例:

v++ --link --vivado.impl.lsf '{bsub -R \"select[type=X86_64]\" -N -q medium}'

--vivado.impl.strategies

--vivado.impl.strategies <arg>

Vivado インプリメンテーション run のストラテジ名のカンマ区切りのリストを指定します。ALL を使用すると、使用可能なすべてのインプリメンテーション ストラテジが実行されます。これにより、ビルド プロセス中にさまざまなインプリメンテーション ストラテジを同時に実行できるので、デザインのタイミングおよび配線の問題をより迅速に解決できます。

--vivado.param

--vivado.param <arg>

FPGA のバイナリ (xclbin) の合成およびインプリメンテーションに使用する Vivado Design Suite のパラメーターを指定します。

--vivado.prop

--vivado.prop <arg>

FPGA のバイナリ (xclbin) の合成およびインプリメンテーションに使用する Vivado Design Suite のプロパティを指定します。

表 3. prop オプション
プロパティ名 有効な値 説明
vivado.prop <object_type>.<object_name>.<prop_name> データ型: さまざま Vivado ハードウェア コンパイル フローで使用されるプロパティを指定できます。

<object_type>run|fileset|file|project のいずれかにします。

<object_name> および <prop_name> 値については、『Vivado Design Suite プロパティ リファレンス ガイド』 (UG912) を参照してください。

例:
vivado.prop run.impl_1.
{STEPS.PLACE_DESIGN.ARGS.MORE 
OPTIONS}={-no_bufg_opt}
vivado.prop fileset.
current.top=foo

<object_type>file に設定される場合、current はサポートされません。

<object type>run に設定される場合、それぞれ指定する必要はなく、__KERNEL__ に値 (ALL) を使用して、すべてのカーネルの run 最適化設定を指定できます。

たとえば、コマンド ラインからは次のように実行します。

v++ --link --vivado.prop run.impl_1.STEPS.PHYS_OPT_DESIGN.IS_ENABLED=true
--vivado.prop run.impl_1.STEPS.PHYS_OPT_DESIGN.ARGS.DIRECTIVE=Explore
--vivado.prop run.impl_1.STEPS.PLACE_DESIGN.TCL.PRE=/…/xxx.tcl
上記の例の場合、Vivado インプリメンテーション プロセスでオプションの PHYS_OPT_DESIGN ステップをイネーブルにし、それに Explore 指示子を設定し、PLACE_DESIGN ステップよりも前に実行する Tcl スクリプトを指定しています。
ヒント: Vivado 合成およびインプリメンテーション結果の管理 で説明するように、Vivado 合成およびインプリメンテーション プロセスには、そのステップよりも前に実行する Tcl プリスクリプトと後に実行する Tcl ポスト スクリプトを指定できます。これにより、さまざまなステップの前後に Tcl コマンドのプリプロセスとポストプロセスを挿入して、ビルド プロセスをカスタマイズできます。これらのスクリプトは、上記の例のように指定できます。

これらのオプションは、コンフィギュレーション ファイルの [vivado] セクション ヘッドの下で次のフォーマットを使用して指定できます。

[vivado]
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.PLACE_DESIGN.TCL.PRE=/…/xxx.tcl
重要: Vivado プロパティの中には、MORE OPTIONS など、名前にスペースを含むものもあります。Tcl 構文ではこれらのプロパティを波かっこ { } で囲む必要があります。ただし、--vivado オプションの波かっこの使用方法には注意が必要です。プロパティ名の一部ではなく、全体を囲む必要があります。正しい使用方法は、次のようになります。
--vivado_prop run.impl_1.{STEPS.PLACE_DESIGN.ARGS.MORE OPTIONS}={-no_bufg_opt}
次のように指定してしまうと、ビルド プロセス中にエラーになります。
--vivado_prop run.impl_1.STEPS.PLACE_DESIGN.ARGS.{MORE OPTIONS}={-no_bufg_opt}

--vivado.synth.jobs

--vivado.synth.jobs <arg>

Vivado Design Suite がデバイス バイナリを合成するのに使用する並列ジョブ数を指定します。ジョブ数を増やすと、Vivado 合成を並列に処理することにより、ジョブを短時間で完了できます。

例:

v++ --link --vivado.synth.jobs 4

--vivado.synth.lsf

--vivado.synth.lsf <arg>

bsub コマンド ラインを LSF クラスターに渡す文字列として指定します。Vivado 合成に IBM Platform Load Sharing Facility (LSF) を使用する場合に必要なオプションです。

例:

v++ --link --vivado.synth.lsf '{bsub -R \"select[type=X86_64]\" -N -q medium}'

Vitis コンパイラのコンフィギュレーション ファイル

コンパイル コンフィギュレーション ファイルは、Vitis コンパイラ オプションを指定するのにも使用できます。コンフィギュレーション ファイルを使用すると、同様のオプションをグループ化でき、v++ コマンド ラインを短くできます。コンフィギュレーション ファイルで制御できる機能には、次のものがあります。

  • カーネルのコンパイルを設定する HLS オプション
  • インスタンシエートするカーネルの数、カーネル ポートのグローバル メモリへの割り当てなど、システムのリンクに使用する接続指示子
  • Vivado Design Suite でハードウェア合成およびインプリメンテーションを制御する指示子。

一般的に、どの v++ コマンド オプションでもコンフィギュレーション ファイルに指定できます。コンフィギュレーション ファイルでは、関連のコマンドのグループを含むセクションを定義でき、ビルド オプションおよびストラテジを管理しやすくなっています。次の表に、定義済みのセクションを示します。

表 4. コンフィギュレーション ファイルのセクション タグ
セクション名 コンパイラ/リンカー 説明
[hls] コンパイラ HLS 指示子 --hls オプション:
  • clock
  • export_project
  • export_mode
  • max_memory_ports
  • memory_port_data_width
[clock] コンパイラ clock コマンド --clock オプション:
  • defaultFreqHz
  • defaultID
  • freqHz
  • id
[connectivity] リンカー --connectivity オプション:
  • nk
  • sp
  • stream_connect
  • slr
  • connect
[vivado] リンカー --vivado オプション:
  • param
  • prop
[advanced] 両方 --advanced オプション:
  • param
  • prop
  • misc
ヒント: コンフィギュレーション ファイルにコマンドを追加するには、行を # で開始します。セクションの終わりは空行で示します。

v++ コマンドでは、1 つの v++ コマンド ラインで複数のコンフィギュレーション ファイルがサポートされるので、コンパイル ストラテジ、リンク ストラテジ、または Vivado インプリメンテーション ストラテジを定義する関連のオプションにコンフィギュレーション ファイルを分割し、ビルド プロセスで複数のコンフィギュレーション ファイルを指定できます。

コンフィギュレーション ファイルの指定はオプションです。ファイルの命名規則は特になく、指定できるコンフィギュレーション ファイルの数は 0 以上です。すべての v++ オプションを 1 つのコンフィギュレーション ファイルに含めることができますが、関連のオプションごとにコンフィギュレーション ファイルを作成すると、ビルド ストラテジを管理しやすくなります。たとえば、[connectivity] 関連のオプションを 1 つのファイルに、[Vivado] オプションを別のファイルにグループ化するなどです。

Vitis コンパイラの一般オプション で説明するように、コンフィギュレーション ファイルは v++ --config オプションで指定します。次に --config オプションの例を示します。

v++ --config ../src/connectivity.cfg

オプションは、記述された順に読み出されます。同じオプションが別の設定で指定されていた場合、最初に読み出されたオプションの設定が使用されます。オプションの優先順位は次のとおりです。

  1. コマンド ライン オプション。
  2. コマンド ラインのコンフィギュレーション ファイルは左から右。
  3. コンフィギュレーション ファイル内では上から下。

メッセージ ルール ファイルの使用

v++ コマンドは、カーネルのコンパイル中にさまざまなザイリンクス ツールを実行します。これらのツールでは、ビルド ステータスを示すため、多数のメッセージが生成されます。生成されるメッセージの中には、目的やデザイン段階によって、関係ないものもあります。メッセージ ルール ファイル (.mrf) は、これらのメッセージを管理するために使用できます。重要なメッセージをターミナルに表示したり、重要度の低いものを非表示にしたりするコマンドがあります。これにより、カーネルのビルド結果を理解しやすくなり、またカーネルを最適化する方法を検討しやすくなります。

メッセージ ルール ファイルはテキスト形式のファイルで、コメントとサポートされているコマンドが含まれます。各行にコマンドを 1 つずつ記述します。

コメント

行頭に「#」が付いている行はコメントです。

サポートされるコマンド

デフォルトでは、v++ は作業ディレクトリ全体を再帰的にスキャンし、すべてのエラー メッセージを v++ 出力に表示します。次に説明する promote および suppress コマンドは、v++ 出力を制御するコマンドです。

  • promote: 検索条件に一致するメッセージをすべて v++ 出力に表示します。
  • suppress: 検索条件に一致するメッセージを v++ 出力で非表示にします。ただし、エラー メッセージは非表示にできません。

各行にコマンドを 1 つずつ記述します。

コマンド オプション

メッセージ ルール ファイルには、promote および suppress コマンドを複数含めることができます。各コマンドにはオプションを 1 つのみ指定できます。指定可能なオプションは次のいずれか 1 つのみです。オプションでは大文字と小文字が区別されます。

  • -id [<message_id>]: 指定したメッセージ ID に一致するすべてのメッセージを表示するか、または非表示にします。メッセージ ID のフォーマットは「nnn-mmm」です。たとえば、次のような HLS からの警告メッセージがあるとします。このメッセージの ID は 204-68 です。
    WARNING: [V++ 204-68] Unable to enforce a carried dependence constraint (II = 1, distance = 1, offset = 1) 
    between bus request on port 'gmem' 
    (/matrix_multiply_cl_kernel/mmult1.cl:57) and bus request on port 'gmem'-severity [severity_level]

    メッセージ ID 204-68 を非表示にするには、suppress -id 204-68 と指定します。

  • -severity [<severity_level>]: 重要度を示す次のいずれかの値を指定します。指定した重要度のメッセージの重要度を上げるか、または非表示にします。
    • info
    • warning
    • critical_warning

      重要度が critical-warning のメッセージの重要度を上げるには、promote -severity critical_warning と指定します。

メッセージ ルールの優先順位

suppress ルールは promote ルールよりも優先されます。同じメッセージ ID または重要度がメッセージ ルール ファイルの promote コマンドと suppress コマンドの両方に渡された場合、その条件に一致するメッセージが非表示になります。

メッセージ ルール ファイルの例

次に、メッセージ ルール ファイルの例を示します。

# promote all warning, critical warning
promote -severity warning
promote -severity critical_warning
# suppress the critical warning message with id 19-2342
suppress -id 19-2342