デバイス バイナリのビルド
カーネル コードは、次の図に示すように、C、C++、OpenCL™ C、RTL のいずれかで記述され、カーネル コードをザイリンクス オブジェクト (XO) ファイルにコンパイルして、その XO ファイルをデバイス バイナリ (XCLBIN) ファイルにリンクするとビルドされます。
このプロセスには、次の 2 つの段階があります。
- カーネル ソース コードからザイリンクス オブジェクト ファイルをビルドします。
- C、C++、または OpenCL カーネルの場合は、
v++ -cコマンドによりソース コードがザイリンクス オブジェクト (XO) ファイルにコンパイルされます。複数カーネルは、別々の XO ファイルにコンパイルされます。 - RTL カーネルの場合は、
package_xoコマンドによりリンクに使用される XO ファイルが生成されます。詳細は、RTL カーネル を参照してください。 - Vitis™ HLS ツールで直接カーネル オブジェクト (XO) ファイルを作成することもできます。詳細は、Vitis HLS でのカーネルのコンパイル を参照してください。
- C、C++、または OpenCL カーネルの場合は、
- コンパイル後、
v++ -lコマンドにより 1 つまたは複数のカーネル オブジェクト (XO) がハードウェア プラットフォーム (XSA) とリンクされ、デバイス バイナリ (XCLBIN) ファイルが作成されます。
v++ コマンドは、コマンド ラインから、スクリプト内、または make のようなビルド システムで使用でき、また Vitis IDE の使用 に説明されているように、Vitis IDE からも使用できます。Vitis コンパイラでのカーネルのコンパイル
v++ オプションを使用する必要があります。次に、vadd カーネルをコンパイルするコマンド例を示します。v++ -t sw_emu --platform xilinx_u200_xdma_201830_2 -c -k vadd \
-I'./src' -o'vadd.sw_emu.xo' ./src/vadd.cppこのコマンドでは、次の引数が使用されています。一部の引数は必須です。
-t <arg>: ビルド ターゲット で説明するように、ビルド ターゲットを指定します。ソフトウェア エミュレーション (sw_emu) が例として使用されています。オプションです。デフォルトは hw です。--platform <arg>: ビルドのアクセラレータ プラットフォームを指定します。ランタイム機能とターゲット プラットフォームが FPGA バイナリとしてリンクされるので、これは必須です。エンベデッド プロセッサ アプリケーションのカーネルをコンパイルするには、--platform $PLATFORM_REPO_PATHS/zcu102_base/zcu102_base.xpfmのようにエンベデッド プロセッサ プラットフォームを指定します。-c: カーネルをコンパイルします。必須です。カーネルは、2 つの個別の段階でコンパイル (-c) およびリンク (-l) する必要があります。-k <arg>: ソース ファイルに関連付けるカーネルの名前を指定します。-o'<output>.xo': コンパイラで出力される共有オブジェクト ファイルを指定します。オプションです。<source_file>: カーネルのソース ファイルを指定します。複数のソース ファイルを指定できます。必須です。
上記のリストは、使用可能なさまざまなオプションの例です。さまざまコマンド ライン オプションの詳細は、Vitis コンパイラ コマンド を参照してください。さまざまな出力ファイルの生成場所は、v++ コマンドの出力ディレクトリ を参照してください。
Vitis HLS でのカーネルのコンパイル
Vitis コア開発キットの使用モデルはトップダウン手法であり、C/C++ または OpenCL コードから開始して、コンパイルしたカーネルを作成していきます。または、カーネルを直接開発してザイリンクス オブジェクト (XO) ファイルを生成し、v++ を使用してリンクして .xclbin を生成する方法もあります。この方法では、Vitis HLS ツールを使用した C/C++ カーネルを使用するか (このセクションで説明)、Vivado Design Suite を使用した RTL カーネルを使用できます。詳細は、RTL カーネル を参照してください。
RTL または C/C++ でカーネルを直接開発して XO ファイルを生成する方法は、ボトムアップ フローと呼ばれます。この方法では、カーネルのパフォーマンスの検証と最適化の実行は Vitis HLS ツールで実行し、Vitis アプリケーション アクセラレーション フローで使用できるようにザイリンクス オブジェクト ファイルをエクスポートします。このツールの詳細は、Vitis HLS フロー を参照してください。
VitisHLS ボトムアップ フローを使用する利点は、次のとおりです。
- カーネルをメイン アプリケーションとは別に設計、検証、最適化できます。
- ホスト プログラムとカーネルを共同開発するチーム開発を可能にします。
- 特定のカーネル最適化は、XO ファイルに保存されます。
- XO ファイルのコレクションは、ライブラリのように使用および再利用できます。
Vitis HLS でのカーネルの作成
Vitis コア開発キットで使用するために C/C++ からカーネルを生成するには、標準 Vitis HLS プロセスに従いますが、カーネルは Vitis ソフトウェア プラットフォームで動作する必要があるので、標準カーネル要件 (カーネル プロパティ を参照) にも従う必要があります。まず、インターフェイスを AXI メモリ インターフェイスとして記述することが必要です。ただし、スカラー パラメーターは例外で、AXI4-Lite インターフェイスにマップされます。ここで説明する Vitis ボトムアップ フローを使用すると、標準カーネル要件を満たすため、Vitis HLS によりインターフェイス ポートが自動的に定義されます。
HLS カーネルを作成およびコンパイルする手順の概要は、次のとおりです。このプロセスのより詳細な説明は、Vitis HLS フロー資料の 新規 Vitis HLS プロジェクトの作成 を参照してください。
- Vitis HLS を起動して統合デザイン環境 (IDE) を開き、 をクリックします。
- New Vitis HLS Project ウィザードの Project nameでプロジェクト名を指定し、Location でプロジェクトの保存ディレクトリを指定して、Next をクリックします。
- Add/Remove Files ページで Add Files をクリックして、カーネル ソース コードをプロジェクトに追加します。Top Function フィールドの Browse ボタンをクリックしてカーネル関数を選択し、Next をクリックします。
- C ベース シミュレーション テストベンチがある場合は、Add Files をクリックして指定できます (オプション)。Next をクリックします。ヒント: Vitis HLS の資料に説明されるように、テストベンチを使用することを強くお勧めします。
- Solution
Configuration ページでは、Clock Period にカーネルのクロック周期を指定する必要があります。
- Part Selection フィールドの参照ボタン (…) をクリックして、Device Selection Dialog ダイアログ ボックスを開きます。Boards を選択し、コンパイルしたカーネルのターゲット プラットフォームを選択します。OK をクリックしてプラットフォームを選択し、Solution Configuration ページに戻ります。
- Solution
Configuration の Flow Target の下の Vitis Kernel Flow Target ドロップダウン リストを選択し、Finish をクリックして HLS カーネル プロジェクトを作成します。重要: プロジェクトからザイリンクス オブジェクト (XO) ファイルを作成するには、Vitis Kernel Flow Target を選択する必要があります。
HLS プロジェクトを作成したら、Run C-Synthesis をクリックして C 合成を実行し、カーネル コードをコンパイルできます。HLS ツール フローの詳細は、Vitis HLS の資料を参照してください。
合成が完了したら、カーネルを XO ファイルとしてエクスポートし、Vitis コア開発キットで使用できます。エクスポートするには、メイン メニューから をクリックします。
ファイル ディレクトリを指定すると、カーネルがザイリンクス オブジェクト (XO) ファイルとしてエクスポートされます。
XO ファイルは、v++ リンク プロセスの入力ファイルとして使用できます。詳細は、カーネルのリンク を参照してください。オブジェクト ファイルは、Vitis IDE プロジェクトの作成 に説明されるように、Vitis IDE のアプリケーション プロジェクトにも追加できます。
ただし、ここで説明するボトムアップ フローで作成された HLS カーネルには、Vitis アプリケーション アクセラレーション開発フローで使用する場合、制限があります。HLS カーネルを使用したアプリケーションでは、ヘッダー ファイルの依存性の重複により問題が発生するので、ソフトウェア エミュレーションはサポートされません。HLS カーネルまたは RTL カーネルのハードウェア エミュレーション フローでは、GDB デバッグはサポートされません。
カーネルを作成する Vitis HLS スクリプト
HLS 合成を Tcl スクリプトから実行する場合、前述のとおり、次のスクリプトを編集して HLS カーネルを作成できます。
# Define variables for your HLS kernel:
set projName <proj_name>
set krnlName <kernel_name>
set krnlFile <kernel_source_code>
set krnlTB <kernel_test_bench>
set krnlPlatform <target_part>
set path <path_to_project>
#Script to create and output HLS kernel
open_project $projName
set_top $krnlName
add_files $krnlFile
add_files -tb $krnlTB
open_solution "solution1"
set_part $krnlPlatform
create_clock -period 10 -name default
config_flow -target vitis
csim_design
csynth_design
cosim_design
export_design -flow impl -format xo -output "./hlsKernel/hlsKernel.xo"
Vitis 環境の設定 の手順に従って環境を設定したら、次のコマンドを使用して HLS カーネル スクリプトを実行します。
vitis_hls -f <hls_kernel_script>.tcl
package_xo を使用した RTL カーネルのパッケージ
RTL で記述されたカーネルは、Vivado ツールで package_xo コマンド ライン ユーティリティを使用してコンパイルされ、ザイリンクス オブジェクト ファイル (XO) が生成されます。このオブジェクト ファイルは、v++ コマンドでのリンク段階で使用されます。詳細は、package_xo コマンド を参照してください。RTL カーネルの作成および package_xo コマンドを使用した XO ファイルの生成については、RTL カーネル を参照してください。
カーネルのリンク
カーネルのコンパイル プロセスでは、カーネルが C/C++、OpenCL C、RTL のいずれで記述されていても、ザイリンクス オブジェクト ファイル (XO) が生成されます。リンク段階では、異なるカーネルからの XO ファイルがプラットフォームにリンクされ、ホスト プログラムで使用される FPGA バイナリ コンテナー ファイル (.xclbin) が作成されます。
vadd カーネル バイナリをリンクするコマンド例を示します。v++ -t sw_emu --platform xilinx_u200_xdma_201830_2 --link vadd.sw_emu.xo \
-o'vadd.sw_emu.xclbin' --config ./connectivity.cfgこのコマンドには、次の引数が含まれます。
-t <arg>: ビルド ターゲットを指定します。ソフトウェア エミュレーション (sw_emu) が例として使用されています。リンクでは、入力 (XO) ファイルをコンパイルしたときに指定したのと同じ-tおよび--platform引数を指定する必要があります。--platform <arg>: カーネルをリンクするプラットフォームを指定します。エンベデッド プロセッサ アプリケーションのカーネルをリンクするには、--platform $PLATFORM_REPO_PATHS/zcu102_base/zcu102_base.xpfmのようにエンベデッド プロセッサ プラットフォームを指定します。--link: カーネルとプラットフォームを FPGA バイナリ ファイル (xclbin) にリンクします。<input>.xo: 入力オブジェクト ファイル。複数のオブジェクト ファイルを .xclbin にビルドできます。-o'<output>.xclbin': 出力ファイルの名前を指定します。リンク段階の出力ファイルは、.xclbin ファイルです。デフォルトの出力ファイル名は a.xclbin です。--config ./connectivity.cfg:v++コマンドのオプションを定義する設定ファイルを指定します。--configオプションの詳細は、Vitis コンパイラ コマンド を参照してください。
リンク プロセスでは、ザイリンクス オブジェクト (XO) ファイルがリンクされるだけでなく、アーキテクチャの重要な詳細も決定されます。特に、ハードウェアにインスタンシエートする計算ユニット (CU) の数、カーネル ポートからグローバル メモリへの接続、CU の SLR への割り当てを指定します。次のセクションでは、これらのビルド オプションのいくつかを説明します。
複数のカーネル インスタンスの作成
デフォルトでは、リンカーによりカーネルから 1 つのハードウェア インスタンスがビルドされます。ホスト プログラムで同じカーネルが複数回実行される場合、インスタンスのデータ処理要件により、ハードウェア アクセラレータ上のカーネルを順次実行する必要があります。これは、全体的なアプリケーション パフォーマンスに影響します。カーネルのリンク段階をカスタマイズすると、1 つのカーネルに対して複数のハードウェア計算ユニットをインスタンシエートできます。これにより、ホスト プログラムでカーネルをオーバーラップさせて複数呼び出すことができ、個別の計算ユニットを実行することによりカーネルを同時実行できます。
1 つのカーネルに対して複数の CU を作成するには、リンク時に v++ 設定ファイルで connectivity.nk を使用します。設定ファイルに必要なオプションを含め、その設定ファイルを v++ コマンド ラインで --config オプションを使用して指定します (Vitis コンパイラ コマンド を参照)。
vadd カーネルに対して 2 つのハードウェア インスタンスをインプリメントするには、設定ファイルで次を使用します。[connectivity]
#nk=<kernel name>:<number>:<cu_name>.<cu_name>...
nk=vadd:2説明:
<kernel_name>- 複数回インスタンシエートするカーネルの名前を指定します。
<number>- ハードウェアにインプリメントするカーネル インスタンス (CU) の数を指定します。
<cu_name>.<cu_name>...- 指定した数のインスタンスの名前を指定します。これはオプションで、指定しない場合の CU のデフォルト名は kernel_1 です。
v++ コマンド ラインで指定します。v++ --config vadd_config.cfg ...上記の vadd の例では、vadd_1 および vadd_2 という名前の 2 つの vadd カーネル インスタンスが作成されます。
xclbin バイナリ ファイルに、vadd_X、vadd_Y、および vadd_Z という名前の vadd カーネルの CU が 3 つ作成されます。[connectivity]
nk=vadd:3:vadd_X.vadd_Y.vadd_Zカーネル ポートのメモリへのマップ
リンク段階では、カーネルのメモリ ポートが DDR、HBM、および PLRAM を含むメモリ リソースに接続されます。デフォルトでは、v++ リンク プロセスで xclbin ファイルが生成されるときに、すべてのカーネル メモリ インターフェイスが同じグローバル メモリ バンク (または gmem) に接続されます。そのため、メモリ バンクとデータを転送できるのは一度に 1 つのメモリ インターフェイスのみなので、カーネルのパフォーマンスはメモリ アクセスにより制限されます。
Vitis コンパイラでは CU がグローバル メモリ リソースに自動的に接続できますが、各カーネル ポート (またはインターフェイス) が接続されているグローバル メモリ バンクを手動で指定することもできます。帯域幅を最大にし、データ転送を最適化して、全体的なパフォーマンスを改善するには、カーネルとメモリを正しく接続することが重要です。デバイスに計算ユニットが 1 つしかない場合でも、入力ポートと出力ポートを別々のバンクに割り当てると、入力データと出力データに同時にアクセスできるようになるので、パフォーマンスを向上できます。
--conectivity.sp を使用して接続を複数のメモリ バンクに分散する必要があります。次の例は、カーネル インターフェイス コード例に基づいています。まず、カーネル引数を別々のバンドルに割り当てて使用可能なポートを増やし、それらのポートを別々のメモリ バンクに割り当てます。
- カーネル コード内で別々バンドルにインタフェースを割り当てます。
void cnn( int *pixel, // Input pixel int *weights, // Input Weight Matrix int *out, // Output pixel ... // Other input or Output ports #pragma HLS INTERFACE m_axi port=pixel offset=slave bundle=gmem #pragma HLS INTERFACE m_axi port=weights offset=slave bundle=gmem1 #pragma HLS INTERFACE m_axi port=out offset=slave bundle=gmemメモリ インターフェイス入力
pixelとweightsに、異なるバンドル名が割り当てらています。これにより、2 つのポートを別々のグローバルメモリ バンクに割り当てることができます。重要:bundle=で名前を指定する場合は、--connectivity.spオプションを使用して特定のメモリ バンクに割り当てることができるように、すべて小文字を使用してください。 - コンフィギュレーション ファイルに
--connectivity.spオプションを含め、そのコンフィギュレーション ファイルを、Vitis コンパイラ コマンド で説明されているように、v++コマンド ラインで--configオプションを使用して指定します。たとえば、上記のcnnカーネルの場合は、コンフィギュレーション ファイルでconnectivity.spオプションを次のように指定します。[connectivity] #sp=<compute_unit_name>.<interface_name>:<bank name> sp=cnn_1.m_axi_gmem:DDR[0] sp=cnn_1.m_axi_gmem1:DDR[1]説明:
<compute_unit_name>:connectivity.nkオプションで定義されている CU のインスタンス名 (複数のカーネル インスタンスの作成 を参照)、または複数の CU が指定されていない場合は<kernel_name>_1。<interface_name>: HLS INTERFACE プラグマで定義されるm_axi_とbundle名を含むカーネル ポート名。上記のcnnカーネルの場合、ポートはm_axi_gmemおよびm_axi_gmem1です。ヒント: ポートがバンドルの一部として指定されていない場合は、<interface_name>をm_axi_なしでportを使用して指定します。<bank_name>: バンク名。4 つの DDR バンクを含むプラットフォームの場合はDDR[0]、DDR[1]、DDR[2]、およびDDR[3]となります。また、メモリを DDR[0:2] などの連続するバンク範囲として指定することもできます。この場合、実行時に XRT によってメモリ バンクが割り当てられます。PLRAM、HBM、HP または MIG メモリをサポートするプラットフォームもあり、その場合は PLRAM[0]、HBM[0]、HP[0] または MIG[0] を使用します。プラットフォームで使用可能なグローバル メモリ バンクに関する情報を取得するには、
platforminfoを使用します。詳細は、platforminfo ユーティリティ を参照してください。DDR メモリ バンクと HBM メモリ バンクの両方を含むプラットフォームでは、別々の AXI インターフェイスを使用して、カーネルが異なるメモリにアクセスできるようにする必要があります。DDR および PLRAM アクセスは、1 つのポートから共有できます。
-
重要: ホスト コードでの DDR バンクの割り当て に示すように、バンク接続のカスタマイズは、ホスト コードにも反映させる必要があります。
PCIe Slave-Bridge を使用したホスト メモリへの接続
PCIe® Slave-Bridge IP は、カーネルがホスト メモリに直接アクセスできるようにするため、一部のデータセンター プラットフォームで提供されています。デバイス バイナリをメモリに接続するように設定するには、次の --connectivity.sp コマンドで指定されたリンクを変更する必要があります。また、XRT 資料の PCIe スレーブブリッジで説明されているように、アクセラレータ カードのセットアップとホスト アプリケーションを変更する必要もあります。
[connectivity]
## Syntax
##sp=<cu_name>.<interface_name>:HOST[0]
sp=cnn_1.m_axi_gmem:HOST[0]
上記のコマンド構文では、CU 名とインターフェイス名は同じですが、バンク名は HOST[0] にハード コード化されています。
HBM の設定と使用
アルゴリズムの中にはメモリ限界のあるものもあり、DDR ベースの Alveo カードで使用可能な帯域幅 77 GB/s に制限されます。これらのアプリケーションには、HBM (広帯域幅メモリ) ベースの Alveo カードがあり、最大 460 GB/s のメモリ帯域幅がサポートされます。Alveo のインプリメンテーションでは、2 個の 16 層の HBM (HBM2 仕様) スタックが FPGA パッケージに組み込まれ、インターポーザーを使用して FPGA ファブリックに接続されます。次に、2 つの HBM スタックの概略図を示します。
このインプリメンテーションには、次が含まれます。
- 8 GB の HBM メモリ
- 32 個の 256 MB の HBM セグメント (擬似チャネル (PC) と呼ばれる)
- 独立した AXI チャネル (疑似チャネルごとにセグメント分割されたクロスバー スイッチを介して FPGA と通信)
- 2 つの PC ごとに 2 チャネルのメモリ コントローラー
- PC 1 つあたり最大 14.375 GB/s の理論上の帯域幅
- HBM サブシステムの理論上の最大帯域幅 460 GB/s (32 *14.375 GB/s)
各 PC の理論上の最大パフォーマンスは 14.375 GB/s ですが、これは DDR チャネルの理論上の最大パフォーマンスである 19.25 GB/s を下回ります。DDR パフォーマンスよりも優れたパフォーマンスにするには、HBM サブシステムに複数の AXI マスターを効率的に使用する必要があります。プログラマブル ロジックには、32 個の HBM AXI インターフェイスがあり、ビルトイン スイッチを介していずれかの HBM スタックの PC のどのメモリ ロケーションにもアクセスできるので、8 GB メモリ空間全体にアクセス可能です。HBM の詳細は、『AXI High Bandwidth Controller LogiCORE IP 製品ガイド』 (PG276) を参照してください。
HBM への接続は HBM Memory Subsystem (HMSS) IP で管理され、すべての HBM PC がイネーブルにされ、XDMA が自動的に HBM (ホスト アクセス用) からグローバル メモリに接続されます。Vitis コンパイラと使用すると、HMSS は --connectivity.sp オプションで指定した必要なメモリ コントローラーとポートのみをアクティベートするように自動的にカスタマイズされ、ユーザー カーネルと XDMA の両方をメモリ コントローラーに接続して、帯域幅とレイテンシが最適になるようにします。詳細および例については、HBM チュートリアルの使用を参照してください。
次の設定ファイルの例では、カーネル入力ポートの in1 と in2 がそれぞれ HBM PC 0 と 1 に接続され、出力バッファー out が HBM PC 3 ~ 4 に書き込まれています。各 HBM PC は 256 MB で、このカーネルのメモリ アクセスは合計 1 GB です。
[connectivity]
sp=krnl.in1:HBM[0]
sp=krnl.in2:HBM[1]
sp=krnl.out:HBM[3:4]
HBM ポートは、デバイスの 1 番下の SLR にあります。SSI テクノロジ デバイスの SLR (Super Logic Region) をまたぐ AXI インターフェイスの配置とタイミングの複雑性は、HMSS により自動的に処理されます。デフォルトでは、v++ で --connectivity.sp または --connectivity.slr オプションを指定せずに、すべてのカーネル AXI インターフェイスが HBM[0] にアクセスし、すべてのカーネルが SLR0 に割り当てられます。ただし、--connectivity.slr オプションを使用すると、カーネルの SLR 割り当てを指定できます。詳細は、計算ユニットの SLR への割り当て を参照してください。
ランダム アクセスおよび RAMA IP
HBM は、順次データ アクセスが必要なアプリケーションではうまく機能しますが、ランダム データ アクセスが必要なアプリケーションでは、アプリケーションの要件 (読み出しと書き込みの比、最小トランザクション サイズ、アドレス指定されるメモリ空間のサイズなど) によって大きく異なります。このような場合、ターゲット プラットフォームに Random Access Memory Attachment (RAMA) IP を追加することで、必要なメモリが 1 つの HBM PC の 256 MB の制限を超えた場合に、ランダム メモリ アクセスの効率を大幅に向上させることができます。詳細は、『RAMA LogiCORE IP 製品ガイド』 (PG310) を参照してください。
次の v++ コマンド オプションを使用して、システム リンク プロセス中にターゲット プラットフォームに RAMA IP を追加し、対象のポートを定義する Tcl スクリプトを指定します。
v++ -l --advanced.param compiler.userPreSysLinkOverlayTcl=<path_to>/user_tcl_file.tcl
hbm_memory_subsystem::ra_master_interface <Endpoint AXI master interface> [get_bd_cells hmss_0]次の例では、ランダム アクセス用に 2 つの AXI マスター ポート (M00_AXI および M01_AXI) を使用しています。
hbm_memory_subsystem::ra_master_interface [get_bd_intf_pins dummy/M00_AXI] [get_bd_cells hmss_0]
hbm_memory_subsystem::ra_master_interface [get_bd_intf_pins dummy/M01_AXI] [get_bd_cells hmss_0]
validate_bd_design -force
HBM サブシステムによって情報が正しく収集され、ブロック デザインがアップデートされるようにするには、前述のように validate_bd_design コマンドを使用して Tcl スクリプトを終了することが重要です。
PLRAM の設定と使用
Alveo アクセラレータ カードには、HBM DRAM および DDR DRAM メモリ リソースが含まれています。一部のアクセラレータ カードでは、内部 FPGA PLRAM (UltraRAM およびブロック RAM) を追加のメモリ リソースとして使用できます。サポートされるプラットフォームには、通常各 SLR に PLRAM のインスタンスが含まれます。各 PLRAM のサイズとタイプは、カーネルまたは計算ユニットがシステムにリンクされる前に、ターゲット プラットフォームで設定できます。
v++ コマンドラインでイネーブルにできます。v++ -l --advanced.param compiler.userPreSysLinkOverlayTcl=<path_to>/user_tcl_file.tclsdx_memory_subsystem::update_plram_specification <memory_subsystem_bdcell> <plram_resource> <plram_specification><plram_specification> は次のエントリを含む Tcl ディクショナリです。次に示すエントリは、プラットフォームの各インスタンスのデフォルト値です。
{
SIZE 128K # Up to 4M
AXI_DATA_WIDTH 512 # Up to 512
SLR_ASSIGNMENT SLR0 # SLR0 / SLR1 / SLR2
READ_LATENCY 1 # To optimise timing path
MEMORY_PRIMITIVE BRAM # BRAM or URAM
}
次の例では、PLRAM_MEM00 を 2 MB のサイズに変更して UltraRAM を指定し、PLRAM_MEM01 を 4 MB のサイズに変更して UltraRAM を指定しています。PLRAM_MEM00 および PLRAM_MEM01 は、--conectivity.sp メモリ リソース PLRAM[0] および PLRAM[1] に該当します。
# Setup PLRAM
sdx_memory_subsystem::update_plram_specification
[get_bd_cells /memory_subsystem] PLRAM_MEM00 { SIZE 2M AXI_DATA_WIDTH 512
SLR_ASSIGNMENT SLR0 READ_LATENCY 10 MEMORY_PRIMITIVE URAM}
sdx_memory_subsystem::update_plram_specification
[get_bd_cells /memory_subsystem] PLRAM_MEM01 { SIZE 4M AXI_DATA_WIDTH 512
SLR_ASSIGNMENT SLR0 READ_LATENCY 10 MEMORY_PRIMITIVE URAM}
validate_bd_design -force
save_bd_design
READ_LATENCY は、メモリ間でカスケードされるパイプラインの段数 (深さ) を指定する重要な属性です。これはデザインによって異なり、プラットフォームのタイミング QoR および最終的なカーネルのクロック レートに影響します。上記の例の PLRAM_MEM01 では、次のようになっています。
- 必要なメモリは合計 4 MB。
- 各 UltraRAM は 32 KB (64 ビット幅)。4 MB x 32 KB → 合計 128 個の UltraRAM。
- 各 PLRAM インスタンスは 512 ビット幅 → 8 個の UltraRAM が必要。
- 合計 128 個の UltraRAM、8 個の UltraRAM の幅 → 16 個の UltraRAM 深さ。
- 経験則によれば適切な読み出しレイテンシは深さ/2 + 2 なので、この場合は
READ_LATENCY= 10。
これにより、1 つおきの UltraRAM にパイプラインを挿入できるので、次のようになります。
- UltraRAM 間のタイミング パフォーマンスが向上します。
- カスケードのためにすべての UltraRAM を同じ UltraRAM 列に配置する必要がないので、配置を柔軟に実行できます。
計算ユニット間のストリーミング接続の指定
カーネルのストリーミング データ ポートは、v++ でのリンク時に --connectivity.sc オプション オプションを使用して接続できます。このオプションは、コマンド ラインで指定するか、Vitis コンパイラ コマンド に説明されるように、--config オプションで指定した config ファイルから指定します。
プロデューサー カーネルのストリーミング出力ポートをコンシューマー カーネルのストリーミング入力ポートに接続するには、v++ コンフィギュレーション ファイルで次のように connectivity.stream_connect オプションを使用します。
[connectivity]
#stream_connect=<cu_name>.<output_port>:<cu_name>.<input_port>:[<fifo_depth>]
stream_connect=vadd_1.stream_out:vadd_2.stream_in
説明:
<cu_name>:connectivity.nkオプションで指定される CU のインスタンス名 (複数のカーネル インスタンスの作成 を参照)。<output_port>または<input_port>: ストリーミング カーネルのコーディング ガイドライン または フリーランニング カーネルのコーディング ガイドライン で説明されている、プロデューサーまたはコンシューマー カーネルで定義されているストリーミング ポート。[:<fifo_depth>]: 2 つのストリーミング ポート間に指定した深さの FIFO を挿入して、ストールが発生しないようにします。値は整数で指定します。
計算ユニットの SLR への割り当て
現在のところ、データセンター アクセラレータ カード上のザイリンクス デバイスでは、複数の SLR (Super Logic Region) を含むスタックド シリコン デバイスを使用して、グローバル メモリを含むデバイス リソースを提供しています。最高のパフォーマンスにするには、ポートをグローバル メモリ バンクに割り当てる際、カーネル ポートのメモリへのマップ に説明されているように、CU インスタンスを接続されているグローバル メモリと同じ SLR に割り当てることをお勧めします。この場合、カーネル インスタンスまたは CU を手動でグローバル メモリと同じ SLR に割り当て、最高のパフォーマンスが得られるようにします。
CU は、コンフィギュレーション ファイルで connectivity.slr オプションを使用すると、SLR に割り当てることができます。設定ファイルの connectivity.slr オプションの構文は次のとおりです。
[connectivity]
#slr=<compute_unit_name>:<slr_ID>
slr=vadd_1:SLR2
slr=vadd_2:SLR3
説明:
<compute_unit_name>:connectivity.nkオプションで定義されている CU のインスタンス名 (複数のカーネル インスタンスの作成 を参照)、または複数の CU が指定されていない場合は<kernel_name>_1。<slr_ID>: CU を割り当てる SLR 番号。SLR0、SLR1、という形式で指定します。
CU を SLR に割り当てる場合は、CU ごとに個別に指定する必要がありますが、この割り当て自体は必須ではありません。割り当てた CU が別の SLR にあるグローバル メモリに接続される場合、ツールは自動的に SLR クロッシング レジスタを挿入してタイミング クロージャを達成しやすくします。SLR が割り当てられていない場合は、v++ リンカーで自動的に CU が SLR に割り当てられます。
v++ リンク プロセスで --config オプションを使用して設定ファイルを指定します。v++ -l --config config_slr.cfg ...クロック周波数の管理
--clock オプションは、データセンター アクセラレータ カードのレガシ プラットフォームではサポートされません。古いプラットフォームでは、カーネルはプラットフォームのデフォルトの動作周波数で動作します。一般的に、エンベデッド プロセッサ プラットフォームおよび新しいデータセンター アクセラレータ カードでは、デバイス バイナリで複数のカーネルを異なるクロック周波数のプラットフォームに接続できます。各カーネル、またはカーネル固有のインスタンスは、指定されたクロック周波数または複数のクロックに接続でき、異なるカーネルがプラットフォームで生成された異なるクロック周波数を使用できます。
コンパイル中にカーネル周波数を指定するには、--hls.clock コマンドを使用します。これで、指定した周波数をターゲットにしたカーネルをコンパイルでき、Vitis HLS ツールを使用して指定された周波数でカーネル ロジックの検証できるようになります。これはコンパイル用のインプリメンテーション ターゲットにすぎませんが、最適化とフィードバックができます。
リンク処理中に、カーネルがプラットフォームに接続されてデバイス バイナリをビルドする場合、v++ コマンドの --clock オプション を使用してカーネルのクロック周波数を指定できます。
- Vitis コンパイラーを使用して HLS コードをコンパイルします。RTL カーネルの場合は、手順 2 に進みます。
v++ -c -k <krnl_name> --hls.clock freqHz:<krnl_name>注記: Vitis HLS カーネルがコンパイルされる頻度を変更するには、--hls.clock arg:kernelNameを使用します。argは Hz である必要があります (たとえば 250 MHz は250000000Hzです)。 - リンク中に、カーネル内の各クロック信号のクロック周波数またはクロック ID を次のコマンドで指定します。
v++ -l ... --clock.freqHz <freqHz>:kernelName.ap_clk
クロック ID を指定する場合、カーネル周波数はプラットフォーム上の指定されたクロックの周波数で指定されます。クロック周波数を指定すると、プラットフォームはプラットフォーム クロックをスケーリングして、指定された周波数を作成しようとします。場合によっては、クロック周波数はある程度の近似でしか達成できないことがあります。この場合、--clock.tolerance または --clock.default_tolerance を指定して、許容範囲を示すことができます。指定されたクロック周波数を許容範囲内でスケーリングできない場合、警告メッセージが表示され、カーネルがデフォルトのクロックに接続されます。
Vivado 合成およびインプリメンテーション結果の管理
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) に説明されているように複数のステップがあります。Vivado ツール用の Tcl スクリプトをステップの前に実行するか (PRE)、後に実行するか (POST) を指定できます。Tcl スクリプトを割り当てることができるステップは、
SYNTH_DESIGN、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.PLACE_DESIGN.ARGS.MORE OPTIONS}={-no_bufg_opt} 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>: プロパティの値を指定します。
この例では、オブジェクトは run、インスタンスはデフォルトのインプリメンテーション run (
impl_1)、プロパティはさまざまなステップ名の引数で、この場合は DIRECTIVE、IS_ENABLED、および {MORE OPTIONS} です。コマンドの 構文の詳細は、--vivado オプション を参照してください。 - Vivado インプリメンテーション プロセスでオプションのステップを有効にする。
ビルド プロセスは、Vivado 合成とインプリメンテーションを実行してデバイス バイナリを生成します。インプリメンテーション ステップの中には、デフォルトのビルド プロセスの一部として有効にして実行されるものもあれば、オプションで任意に有効にできるものもあります。
オプションのステップは、
--list_stepsコマンドを使用するとリストでき、ます。これには、vpl.impl.power_opt_design、vpl.impl.post_place_power_opt_design、vpl.impl.phys_opt_design、およびvpl.impl.post_route_phys_opt_designが含まれます。オプションのステップは、
--vivado.propオプションを使用するとイネーブルにできます。たとえば、PHYS_OPT_DESIGN ステップをイネーブルにするには、コンフィギュレーション ファイルに次を含めます。[vivado] prop=run.impl_1.steps.phys_opt_design.is_enabled=1前述のようにオプションのステップが有効になっている場合、次の「--to_step または --from_step の実行実行」に示す
-from_step/-to_stepコマンドの一部として指定するか、--linkhook オプション の説明に従って、そのステップの前または後に Tcl スクリプトが実行されるようにします。 - パラメーターをツールに渡して処理を制御します。
--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_configTcl コマンドのオプションを、名前と値のペアで指定しします。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コマンドの機能です。重要: 指定したオプションが指定したレポート タイプに正しく適用可能なものであることはチェックされません。無効なオプションを指定すると、レポートが実行されたときにエラーが返されます。
タイミング クロージャのための複数のインプリメンテーション ストラテジの実行
困難なデザインでは、複数の異なるストラテジを使用して Vivado インプリメンテーションを複数回繰り返すことで、タイミング クロージャを達成できます。このトピックでは、ハードウェア ビルド (-t
hw) で複数のインプリメンテーション ストラテジを同時に起動する方法と、問題のなかった実行を見つけて使用し、デバイス バイナリを生成してビルドを完了する方法について説明します。
--vivado オプション で説明されるように、--vivado.impl.strategies コマンドを使用すると、1 つのビルド パスに実行する複数のストラテジを指定できます。コマンド ラインは、次のようになります。
v++ --link -s -g -t hw --platform xilinx_zcu102_base_202010_1 -I . \
--vivado.impl.strategies "Performance_Explore,Area_Explore" -o kernel.xclbin hello.xo
上記の例の場合、Performance_Explore および Area_Explore ストラテジが Vivado ビルド内で同時に実行され、どの結果がベストなのかを確認できます。ALL を指定すると、ツール内で使用可能なすべてのストラテジを実行するようにを指定できます。
このオプションは、次の形式のコンフィギュレーション ファイルでも決定できます。
#Vivado Implementation Strategies
[vivado]
impl.strategies=Performance_Explore,Area_Explore
Vitis コンパイラは、最初に完了したタイミングを満たす実行結果を自動的に選択し、そのビルド プロセスを続行して、デバイス バイナリを生成します。ただし、すべての実行が完了するまで待機し、完了した実行からベストの結果を選択してから、ツールに続行するように指示することもできます。これには、次のように --advanced.compiler 指示子を使用する必要があります。
[advanced]
param=compiler.multiStrategiesWaitOnAllRuns=1
また、すべてのインプリメンテーション ストラテジが完了した後で、その結果を手動で確認することもできます。この後、to_step を使用して Vivado をインタラクティブに起動する方法 で説明するように、--reuse_impl オプションを使用してインプリメンテーション実行のいずれかの結果を使用します。
to_step を使用して Vivado をインタラクティブに起動する方法
Vitis コンパイラでは、ビルド プロセスを --to_step で指定した段階を終了してから停止し、デザインまたはファイルを手動で変更して、--from_step で指定した段階からビルドを再開できます。--from_step は Vitis コンパイラに --to_step で中断した段階からコンパイルを再開するように指示します。--to_step および --from_step については、Vitis コンパイラの一般オプション を参照してください。
--to_step および --from_step オプションはシーケンシャル ビルド オプションで、v++ --link
--from_step と v++
--link --to_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 で指定する前にイネーブルにする必要があります。インタラクティブ設計での 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 も指定して、ビルド プロセスで作成される一時ファイルを保存する必要があります。このコマンドは、ハードウェア ビルドのリンク プロセスを指定し、ビルドを合成段階まで実行して、ビルド プロセスで生成される一時ファイルを保存します。
--interactive コマンドを使用すると、Vitis コンパイラで構築されたプロジェクトで Vivado ツールを直接起動できます。これにより、ビルド ディレクトリの <temp_dir>/link/vivado/vpl/prj にある Vivado プロジェクトが開き、デザインをインタラクティブに編集できます。
v++ --target hw --link --interactive --save-temps --platform <PLATFORM_NAME> <XO_FILES>
Vivado IDE をこのモードで起動すると、合成 run またはインプリメンテーション run を開いてプロジェクトを制御できます。タイミング クロージャを達成するため、必要に応じて run の詳細を変更し、異なるインプリメンテーション方法を試してみます。結果をデザイン チェックポイント (DCP) として保存するかプロジェクト ビットストリーム (.bit) を生成し、Vitis 環境で デバイス バイナリを生成するのに使用します。
Vivado IDE 内で DCP を保存したら、ツールを閉じて、Vitis 環境に戻ります。v++ コマンド ラインで以前にインプリメントされた DCP ファイルを使用して xclbin を生成するには、--reuse_impl オプションを適用します。
--reuse_impl オプションはインクリメンタル ビルド オプションで、--reuse_impl を使用して Vitis コンパイラを再開する際は、ビルドを開始する際に指定した --to_step と同じプロジェクト ディレクトリを使用する必要があります。次のコマンドは、Vivado ツールから指定した DCP ファイルを使用してリンク プロセスを実行し、入力ファイルから project.xclbin を作成します。
v++ --link --platform <PLATFORM_NAME> -o'project.xclbin' project.xo --reuse_impl ./_x/link/vivado/routed.dcp
v++ --link --platform <PLATFORM_NAME> -o'project.xclbin' project.xo --reuse_bit ./_x/link/vivado/project.bitその他の Vivado オプション
次に、v++ コマンド ラインまたは設定ファイルで使用可能な追加のオプションの一部を示します。
--export_script/--custom_scriptで Tcl スクリプトを編集および使用すると、コンパイルまたはリンク プロセスを変更できます。--remote_ip_cache: Vivado 合成用のリモート IP キャッシュ ディレクトリを指定します。--no_ip_cache: Vivado 合成の IP キャッシュをオフにします。これにより、キャッシュ データが消去され、ビルド プロセス中にすべての IP が再合成されます。
レポート生成の制御
v++-R オプション (または --report_level) は、ハードウェア エミュレーションおよびシステム ターゲット用のコンパイルまたはリンクで生成されるレポートの情報レベルを制御します。生成するレポートの数が少ないほうが実行は高速です。
コマンド ライン オプションは次のとおりです。
$ v++ -R <report_level>
<report_level> には、次のいずれかを指定します。
-R0: 最小限のレポートを生成し、中間デザイン チェックポイント (DCP) は生成しません。-R1: R0 のレポートと次の情報を生成します。- 各カーネルのデザイン特性 (
report_failfast)。 - 最適化後のフル デザインのデザイン特性。
- その後の確認または Vivado Design Suite で使用するため、最適化後のデザイン チェックポイント (DCP) を保存。
ヒント:report_failfastは、デバイス使用に関して発生する可能性のある問題、クロック制約の問題、および達成不可能なターゲット周波数 (MHz) を検出するユーティリティです。- 各カーネルのデザイン特性 (
-R2: R1 のレポートと次の情報を生成します。- 各インプリメンテーション段階後に保存された DCP を含む、Vivado ツールで生成された標準レポート。
- 配置後の各 SLR の特性。
-Restimate: Vitis HLS でシステム見積もりレポート (システム見積もりレポートを参照) を強制的に生成します。ヒント: このオプションは、ソフトウェア エミュレーション ビルド (-t sw_emu) で有益です。