--connectivity オプション - 2020.1 Japanese

Vitis 統合ソフトウェア プラットフォームの資料: アプリケーション アクセラレーション開発 (UG1393)

Document ID
UG1393
Release Date
2020-08-20
Version
2020.1 Japanese

カーネルのリンク で説明したように、さまざまな --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 もインスタンシエートされます。