ストリームを介して通信するハードウェア アクセラレータ パイプラインのサポートは、FPGA、FPGA ベースの SoC、および Versal アダプティブ SoC デバイスの主な利点の 1 つであり、通信システムだけでなく DSP および画像処理アプリケーションでも使用されています。ストリーミングに使用されるカーネル ポートはそのカーネル内で定義されるので、ホスト プログラムでは呼び出されません。データは、別のカーネルに転送されて処理される前に、グローバルメモリに戻す必要はありません。次に説明するように、カーネル間の接続は v++
リンク プロセス中に直接定義されます。
あるカーネルのストリーミング データ出力ポートを別のカーネルのストリーミング データ入力ポートに、または PL カーネルと ADF グラフ アプリケーションの PLIO 間で接続するには、リンキング中に --connectivity.sc
オプションを使用します。このオプションは、コマンド ラインで指定するか、v++ コマンド で説明されるように、--config
オプションで指定した config
ファイルから指定します。
重要:
--connectivity.sc
カーネルがそれ自体を駆動すると、エラーが発生します。プロデューサー カーネルのストリーミング出力ポートをコンシューマー カーネルのストリーミング入力ポートに接続するには、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
stream_connect=vadd_2.stream_in:ai_engine_0.DataIn0
説明:
-
<cu_name>
:connectivity.nk
オプションで指定される CU のインスタンス名 (複数のカーネル インスタンスの作成 を参照)。cu_name
は、複数のカーネル インスタンスの作成 で説明するように、コンフィギュレーション ファイルで指定できるほか、特に指定がない場合は、ツールで自動的に定義されます。ヒント: Versal AI エンジン ポートへの接続を指定する場合、上記のように<cu_name>
はai_engine_0
になります。 -
<output_port>
または<input_port>
: プロデューサーまたはコンシューマー カーネルで定義されているストリーミング ポート。重要: 出力ポートと入力ポートの幅が一致しない場合、Vitis コンパイラはビルド プロセス内で 2 つのポート間にデータ幅コンバーターを自動的に挿入します。データ幅コンバーターを含めると、大きなビット幅の出力を小さなビット幅の入力に切り詰めたり、小さなビット幅を大きなビット幅に拡張したりできます。 -
[:<fifo_depth>]
: 2 つのストリーミング ポート間に指定した深さの FIFO を挿入して、ストールが発生しないようにします。値は整数で指定します。