Vitis コンパイラ コマンド

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

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

次のセクションに、コンパイル、リンク、および一般プロセスの v++ コマンドオプションについて説明します。

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

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

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

--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 と共に使用することはできません。v++ -c を実行し、カーネル ソース ファイルから .xo ファイルを生成します。

--config

適用先
コンパイルおよびリンク
--config <config_file> ...

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

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

v++ -l --config cfg_connectivity.txt --config cfg_vivado.txt ...

--custom_script

適用先
コンパイル
--custom_script <kernel_name>:<file_name>

--export_script オプションで生成された <kernel_name>.tcl ファイルを指定します。カーネル名とそのカーネルに適用する Tcl スクリプトのパスを指定します。

次に例を示します。
v++ -c -k kernel1 -export_script ...
v++ -c --custom_script kernel1:./kernel1.tcl ...

-D | --define

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

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

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

--dk

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

ハードウェア デバッグ用に FPGA バイナリにデバッグ IP を挿入し、ChipScope™ で監視する計算ユニットとインターフェイスを指定します。--dk オプションを使用すると、デバッグおよびパフォーマンス監視目的に、AXI プロトコル チェッカーと System ILA コアをカーネルへのインターフェイスに接続できます。

System Integrated Logic Analyzer (ILA) デバッグ コアを使用すると、トランザクション レベルでアクセラレーション カーネルまたはハードウェアで実行される関数を表示できます。System ILA コアでは、特定の AXI トラフィックを収集して表示させることもできます。

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

[protocol|chipscope|list_ports]:<cu_name>:<interface_name>

説明:

  • protocol はデザインに AXI プロトコル チェッカーを追加します。all キーワードまたは <cu_name>:<interface_name> を使用して指定できます。
  • chipscope はデザインに ILA デバッグ IP を追加します。chipscope オプションには all キーワードは使用できないので、<cu_name> を指定する必要があり、オプションで <interface_name> を指定することもできます。
  • list_ports は、現在のデザインの有効な計算ユニットとポート組み合わせのリストを表示します。この情報により、コマンド ラインやコンフィギュレーション ファイルを作成しやすくなります。
  • <cu_name> には --dk オプションを適用する計算ユニットを指定します。
  • <interface_name> はオプションです。指定しない場合、指定した CU のすべてのポートが解析されます。

次に例を示します。

v++ --link --dk chipscope:vadd_1

--export_script

適用先
コンパイル
--export_script

Tcl スクリプト <kernel_name>.tcl を生成します。これは Vivado HLS を実行するのに使用できますが、実際に HLS を起動する前にビルド プロセスを停止します。ビルド プロセスが停止するので、次の例に示すように、生成された Tcl スクリプトでビルド プロセスを Vivado HLS に変更してから、--custom_script オプションを使用してビルド プロセスを再開してください。

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

--from_step

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

ステップ名をコンパイルかリンク プロセスのいずれかに変更して、そのステップからビルド プロセスを開始します。中間結果がある場合、指定した段階から実行を開始します。--to_step を使用してビルドを実行し、プロジェクトを何らかの方法で変更した後、そのビルド プロセスを --from_step で再開できます。

ヒント: --list_step オプションを使用すると、有効なコンパイルまたはリンク ステップのリストが表示されます。
次に例を示します。
v++ --link --from_step vpl.update_bd

-g | --debug

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

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

次に例を示します。

v++ -g ...

-h | --help

-h

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

v++ -h

-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 [ synth | impl ]

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

Vivado ツールをインタラクティブに起動するので、リンク プロセスは vpl ステップで停止します。これは、v++ コマンドで --to_step vpl オプションを使用するのと同じことです。Vivado ツールを使用し終え、デザイン チェックポイント (DCP) を保存したら、-from_step を使用してリンク コマンドを再実行して、vpl プロセス時点のコマンドから実行します。

次に例を示します。

v++ --interactive impl

-j | --jobs

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

並列ジョブの数を指定します。

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

次に例を示します。

v++ --link --jobs 4

-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 <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 と共に使用することはできません。リンク モードで v++ を実行し、.xo 入力ファイルをリンクし、.xclbin 出力ファイルを生成します。

--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 ...

--lsf

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

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

次に例を示します。

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

--message_rules

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

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

次に例を示します。

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

--no_ip_cache

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

Vivado 合成の IP キャッシュをディスエーブルにます。

次に例を示します。

v++ --no_ip_cache ...

-O | --optimize

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

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

  • 0: デフォルトの最適化です。コンパイル時間を削減し、デバッグで予測される結果を生成します。
  • 1: 消費電力を削減するように最適化します。デザインのビルド時間は長くなります。
  • 2: カーネル速度を上げるように最適化します。ビルド時間が長くなりますが、生成されるカーネルのパフォーマンスは向上します。
  • 3: 生成されたコードのパフォーマンスは最高レベルになりますが、コンパイル時間はかなり長くなります。
  • s: サイズを小さくするよう最適化します。カーネルで使用されるデバイスのロジック リソースが削減されます。
  • quick: Vivado インプリメンテーション時間は短くなりますが、カーネルのパフォーマンスは低下し、カーネルで使用されるリソースも多くなります。

次に例を示します。

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

-p | --platform

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

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

このオプションは、ビルド プロセスのターゲット ザイリンクス プラットフォームを定義するため、コンパイルおよびリンクの両方で必要です。--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_kernel

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

カーネルとホスト間のデータ トラフィック、カーネル ストール、カーネル実行時間のプロファイル データを収集します。--profile_kernel には、次の 3 つのオプションがあります。

  • data: モニター IP を介してデータ ポートを監視します。このオプションは、リンク時には指定する必要があります。
  • stall: FPGA バイナリにストール監視ロジックを含めます。これには、カーネル インターフェイスにストール ポートを追加する必要があります。そのため、コンパイルおよびリンクの両方で stall オプションを指定する必要があります。
  • exec: カーネルの実行時間を記録し、システム実行中に最小限のポート データ コレクションを示します。カーネルの実行時間は、data または stall データ コレクションでもデフォルトで収集されます。このオプションは、リンク時には指定する必要があります。
重要: v++--profile_kernel オプションを使用するには、xrt.ini ファイルに profile=true を追加する必要もあります。xrt.ini ファイル を参照してください。

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

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

kernel_namecu_nameinterface_name を使用して、パフォーマンス モニターが適用されるインターフェイスを指定できます。all キーワードを使用して、1 つのオプションで既存のカーネル、計算ユニット、インターフェイスすべてを監視できるよう設定することもできます。

最後のオプション <counters|all> は必須ではありません。指定しない場合はデフォルトで all になります。大型デザインの場合は情報の収集を counters に制限できますが、all を指定して実際のトレース情報が収集されるようにすることもできます。

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

[ stall | exec ]:[ <kernel_name> | all ]:[ <cu_name> | all ](:[ counters | all ])
ヒント: stall または exec の場合、<interface_name> フィールドは使用されません。

次の例では、すべてのカーネルのすべての CU 上にある all インターフェイスで data プロファイルが記録されるようにしています。

v++ -g -l --profile_kernel data:all:all:all ...
ヒント: --profile_kernel オプションは、異なるカーネル、CU、インターフェイスのプロファイルを指定するのにいくつでも使用できます。

--remote_ip_cache

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

Vivado 合成用のリモート IP キャッシュ ディレクトリを指定します。

次に例を示します。

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 データ ファイルが存在しない場合は Vivado HLS で生成され、システム見積もりレポート で説明するように、システム見積もりレポートが生成されます。
    ヒント: このオプションは、design.xml がデフォルトでは生成されないソフトウェア エミュレーション ターゲット (-t sw_emu) の場合に便利です。

次に例を示します。

v++ -R2 ... 

--reuse_impl

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

インプリメント済みデザイン チェックポイント (DCP) のパスとファイル名を指定して、FPGA バイナリ ファイル (xclbin) を生成する際に使用されるようにします。リンク プロセスは指定したインプリメント済み DCP を使用して FPGA ビットストリームを抽出し、xclbin を生成します。これにより、Vivado Design Suite をインタラクティブに使用してデザインを変更をし、ビルド プロセスでその DCP を使用できます。

次に例を示します。

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>

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

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

次に例を示します。

v++ --link --to_step vpl.update_bd
ヒント: --list_step オプションを使用すると、有効なコンパイルまたはリンク ステップのリストが表示されます。

--trace_memory

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

プロファイル用にトレース バッファー メモリのタイプを <FIFO>:<size>|<MEMORY>[<n>] という形式で指定します。FIFO のサイズは KB で指定します。ハードウェア ターゲットにリンクする場合は --profile_kernel と共に使用します。デフォルトは FIFO:8K です。最大値は 4G です。

重要: リンクで --trace_memory を使用する場合は、xrt.ini ファイル で説明するように、xrt.ini ファイル内で [Debug] trace_buffer_size も使用する必要があります。

-v | --version

-v

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

v++ -v

--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.XXX オプションは、v++ コマンドのパラメーター (param)、プロパティ (prop)、その他 (misc) のコレクションです。コンパイルまたはリンクの際に --advanced.XXX オプションを使用すると、Vitis コア開発キットで生成されるハードウェアおよびハードウェア エミュレーション プロセスを詳細に制御できます。

--advanced.XXX オプションの引数は、:<keyword>=<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:<arg>

カーネル コンパイルのアドバンス パラメーターを指定します。<arg> には、次の表にリストされている値のいずれかを指定します。

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

デフォルト値: <empty>

xclbin に挿入する内容を指定します。有効なオプションは bitstream および dcp です。
param:compiler.​errorOnHoldViolation データ型: ブール型

デフォルト値: TRUE

ホールド違反がある場合にエラー メッセージを表示します。
param:compiler.​fsanitize データ型: 文字列

デフォルト値: <empty>

OpenCL カーネルのデバッグ で説明されるように OpenCL カーネルに追加のメモリ アクセス チェックが使用されるようにします。address、memory などの値を使用できます。
param:compiler.​maxComputeUnits データ型: 整数

デフォルト値: -1

システムで使用可能な最大計算ユニット数。正の値を指定すると、ハードウェア プラットフォーム (.xsa) の numComputeUnits 設定が上書きされます。デフォルト値 -1 では、プラットフォームの設定が保持されます。
param:compiler.addOutputTypes データ型: 文字列

デフォルト値: <empty>

Vitis コンパイラで生成される追加の出力タイプ。xclbinsd_cardhw_exportqspi などの値を使用できます。
param:hw_em.​compiledLibs データ型: 文字列

デフォルト値: <empty>

指定したシミュレータに clibs を使用します。
param:hw_em.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
param:hw_em.​enableProtocolChecker データ型: ブール型

デフォルト値: FALSE

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

値: XSIM、QUESTA

デフォルト値: XSIM

ハードウェア エミュレーションの実行に指定したシミュレータを使用します。
param:compiler.​xclDataflowFifoDepth データ型: 整数

デフォルト値: -1

カーネル データフロー領域で使用される FIFO の深さを指定します。
param:compiler.​interfaceWrOutstanding データ型: 整数範囲

デフォルト値: 0

カーネル AXI インターフェイスにバッファリングする未処理の書き込みの数を指定します。有効な値は 1 ~ 256 です。
param:compiler.​interfaceRdOutstanding データ型: 整数範囲

デフォルト値: 0

カーネル AXI インターフェイスにバッファリングする未処理の読み出しの数を指定します。有効な値は 1 ~ 256 です。
param:compiler.​interfaceWrBurstLen データ型: 整数範囲

デフォルト値: 0

カーネル AXI インターフェイスの AXI 書き込みバーストに予測される長さを指定します。これは compiler.interfaceWrOutstanding オプションを使用して指定して、ハードウェア バッファー サイズを決定します。有効な値は 1 ~ 256 です。
param:compiler.​interfaceRdBurstLen データ型: 整数範囲

デフォルト値: 0

カーネル AXI インターフェイスの AXI 読み出しバーストに予測される長さを指定します。これは compiler.interfaceRdOutstanding オプションを使用して指定して、ハードウェア バッファー サイズを決定します。有効な値は 1 ~ 256 です。
次に例を示します。
--advanced.param "compiler.addOutputTypes=qspi,sd_card"
ヒント: このオプションは、設定ファイルの [advanced] セクション ヘッドの下で次のフォーマットを使用して指定できます。
[advanced]
param=compiler.addOutputTypes="qspi,sd_card"

--advanced.prop

--advanced.prop <arg>

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

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

デフォルト値: <empty>

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

デフォルト値: <empty>

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

デフォルト値: <empty>

C コードの合成前に実行する Vivado HLS Tcl ファイルへのパスを指定します。これにより、Vivado HLS のコンフィギュレーション設定を合成前に適用できます。
prop:solution.​hls_post_tcl データ型: 文字列

デフォルト値: <empty>

C コードの合成後に実行する Vivado HLS Tcl ファイルへのパスを指定します。
prop:solution.​kernel_compiler_margin データ型: 浮動小数点

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

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

--advanced.misc

--advanced.misc:<arg>

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

--clock オプション

重要: --clock は、エンベデッド プロセッサ プラットフォーム専用のオプションで、現時点では Alveo データセンター アクセラレータ カードをサポートしていません。

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

  • --clock.XX オプションなし: プラットフォームのデフォルトのクロックが適用されます。2 クロックのカーネルでは、クロック ID 0 が ap_clk に割り当てられ、クロック ID 1 が ap_clk_2 に割り当てられます。
  • --clock.defaultId=<id>: すべてのカーネルに指定したクロック ID を定義します。プラットフォームのデフォルト クロックよりも優先されます。
  • --clock.defaultFreq=<Hz>: すべてのカーネルに指定したクロック周波数を定義します。ユーザー指定のデフォルト クロック ID およびプラットフォームのデフォルト クロックよりも優先されます。
  • --clock.id=<id>:<cu>: 指定した CU のすべてのクロック ピンに指定のクロック ID を割り当てます。ユーザー指定のデフォルト周波数、ID、およびプラットフォームのデフォルト クロックよりも優先されます。
  • --clock.id=<id>:<cu>.<clk0>: 指定した CU の指定したクロック ピンに指定のクロック ID を割り当てます。
  • --clock.freqHz=<Hz>:<cu>: 指定した CU のすべてのクロック ピンに指定のクロック周波数を割り当てます。
  • --clock.freqHz=<Hz>:<cu>.<clk0>: 指定した 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.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

--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 を指定してください。有効な値は、次のとおりです。

<cu_name>.<streaming_output_port>:<cu_name>.<streaming_input_port>

説明:

  • <cu_name>--connectivity.nk オプションで指定した計算ユニットの名前です。別の名前を指定しない場合、これは通常 <kernel_name>_1 になります。
  • <streaming_output_port>/<streaming_input_port>: AXI4-Stream として宣言された計算ユニット ポートの関数引数です。

たとえば、計算ユニット 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

--hls オプション

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

--hls.clock

--hls.clock <arg>

Vivado 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_mode

--hls.export_mode

HLS からのエクスポート モードをとエクスポートしたファイルへのパスを設定します。値は <file_type>:<file_path> のように指定します。

<file_type> は次のように指定できます。

  • xo: ザイリンクス オブジェクト ファイル。
  • tcl: Tcl スクリプト。

次に例を示します。

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

--hls.export_project

--hls.export_project

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

次に例を示します。

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

--hls.max_memory_ports

--hls.max_memory_ports <arg>

カーネルの各引数に対して個別の AXI インターフェイス ポートを作成する必要があることを示します。指定しない場合、すべてのカーネル ポートが 1 つの AXI インターフェイスにまとめられます。すべてのカーネルを指定するか (all)、カーネル名 (<kernel_name>) を指定できます。

このオプションは、OpenCL カーネルにのみ使用できます。

次に例を示します。

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

--hls.memory_port_data_width

--hls.memory_port_data_width <arg>

すべてのカーネルまたは指定のカーネル (<kernel name>) のメモリ ポート幅を指定した値 (<number>) に設定します。有効な値は <number> または <kernel_name>:<number> です。

OpenCL カーネルで有効です。

次に例を示します。

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

--vivado オプション

–-vivado.XXX オプションは、Vivado ツールを制御するプロパティとパラメーターを設定します。たとえば、最適化、配置、およびタイミングを設定したり、出力するレポートを指定したりできます。

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

--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}={-fanout_opt}
vivado_prop:fileset.
current.top=foo

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

<object type>run に設定した場合、__KERNEL__ という特別な値を使用してすべてのカーネルの run 最適化設定指定でき、1 つ 1 つ指定する必要はありません。

次に例を示します。

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] セクション ヘッドの下で次のフォーマットを使用して指定できます。
[vivado]
prop=run.impl_1.STEPS.PHYS_OPT_DESIGN.IS_ENABLED=true
prop=run.impl_1.STEPS.PHYS_OPT_DESIGN.ARGS.DIRECTIVE=Explore

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] linker --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