--connectivity オプション - 2022.1 日本語

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

Document ID
UG1393
Release Date
2022-05-25
Version
2022.1 日本語

カーネルのリンク で説明したように、さまざまな --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.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 を挿入して、ストールが発生しないようにします。値は整数で指定します。
重要: --connectivity.sc カーネルがそれ自体を駆動すると、エラーが発生します。

たとえば、計算ユニット 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 もインスタンシエートされます。

--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_argument_name>:<sptag[min:max]>

説明:

  • <cu_name>: --connectivity.nk オプションで指定した計算ユニットの名前です。別の名前を指定しない場合、これは通常 <kernel_name>_1 になります。
  • <kernel_argument_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.noc.connect

  --connectivity.noc.connect <arg> 

<arg><compute_unit_name>.<kernel_interface_name>:<noc interface> の形式で、PL カーネル インタフェースと Versal NoC 間の接続を指定します。有効な値は、内部メモリ コントローラー、または Versal NoC セルのマスター インターフェイスです。

Vitis コンパイラは、ダイナミック領域全体の NoC 接続および M_AXI プロパティ (データ幅 * クロック周波数) に基づいてカーネル帯域幅要件を見積もり、使用可能な帯域幅を超えないように必要に応じてスケーリングして、読み出しおよび書き込み帯域幅の NoC コンフィギュレーションを自動的に設定します。

次に例を示します。
[connectivity]
noc.read_bw=mm2s.M_AXI:2000.16
noc.write_bw=mm2s.M_AXI:2010.16
noc.connect=mm2s.M_AXI:M00_INI

--connectivity.noc.read_bw

--connectivity.noc.read_bw <arg>

<arg><compute_unit_name>.<kernel_interface_name>:<Bandwidth>.<Avg_burst_length> 形式で、接続の帯域幅とバースト長の両方を指定します。帯域幅は、達成された MB/s で指定されます。

このオプションは、M_AXI インターフェイスで想定される読み出しトラフィック特性を指定し、自動の Versal NoC コンフィギュレーションを上書きできるようにします。

--connectivity.noc.write_bw

--connectivity.noc.write_bw <arg>

<arg> は <compute_unit_name>.<kernel_interface_name>:<Bandwidth>.<Avg_burst_length> 形式で、接続の帯域幅とバースト長の両方を指定します。帯域幅は、達成された MB/s で指定されます。

このオプションは、M_AXI インターフェイスで想定される書き込みトラフィック特性を指定し、自動 Versal NoC コンフィギュレーションを上書きできるようにします。

--connectivity.connect

--connectivity.connect <X:Y>

このオプションは Vivado IP インテグレーターを使用して接続する場合に使用できますが、v++ は指定された接続でエラー チェックを実行しません。これを使用して、カーネルとターゲット プラットフォームの非 AXI エレメント間の一般的な接続 (GT ポートへの接続など) を指定します。

X および Y 接続は、IP インテグレーターの connect_bd_net または connect_bd_intf_net コマンドと互換性のある引数として指定する必要があります。<X:Y> の形式は次のとおりです。
src/hierarchy_name/cell_name/pin_name:dst/hierarchy_name/cell_name/pin_name

これらには、--conectivity.sc の使用を必要とする AXI4-Stream インターフェイス間の接続、または上記のように --connectivity.sp の使用を必要とする M_AXI インターフェイス間の接続は含まれません。

ヒント: このオプションは、コンフィギュレーション ファイルの [connectivity] セクション ヘッドの下で次のフォーマットを使用して指定できます。
[connectivity]
connect=<X:Y>