vpp::stream を使用したストリーム接続 - 2023.2 日本語

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

Document ID
UG1393
Release Date
2023-12-13
Version
2023.2 日本語

PE 関数の各引数は、最上位の compute() 関数の引数またはスタティックに宣言されたストリームに接続する必要があります。vpp::stream は、『Vitis 高位合成ユーザー ガイド』 (UG1399) の「HLS ストリーム ライブラリ」で説明されるように、Vitis HLS hls::stream から継承したものです。

vpp::stream オブジェクトには、いくつかの追加機能があります。

  • vpp::stream コンストラクターは、追加の引数 post_check (デフォルト値は true) を使用します。ほとんどのストリーム変数は、各計算呼び出しの最後に空になるはずですが、複数の compute() 呼び出しでデータを伝送するように設計されるものもあります。ソフトウェア エミュレーションでは、デフォルトで vpp::stream は各 compute() 呼び出しの終了時に空であることがチェックされます。空でない場合はアサートされます。オプションの post_check 引数を使用すると、このアサートをオフにできます。
  • DEPTH パラメーターを使用すると、ハードウェアにインプリメントされる FIFO の深さを指定できます。ソフトウェアおよびハードウェア エミュレーション時に使用することもできます。
    ヒント: DEPTH のデフォルト値は 1024 に設定されており、通常はハードウェア コンパイルでリソースが使用されすぎてしまいます。compute() のスコープで使用するストリームには深さを指定して、リソースを節約することをお勧めします。深さを小さい値 2 に指定してソフトウェア エミュレーションを実行して機能をテストすると、必要な深さを決定しやすくなります。
  • vpp::stream 変数は、hls::stream 型を指定できる PE 関数引数に渡すことができます。
  • Vitis ソフトウェア エミュレーションで適切な機能検証が実行されるようにするには、vpp::stream 変数を static に宣言する必要があります。ハードウェアでは、ストリーム/FIFO は暗示的に空にならないので、その内容が異なる実行間で保持され、static 変数と同じように動作します。

次のセクションでは、compute() の本体スコープ内で基本的な C++ コーディングで、PE のパイプライン システムを構成するのによく使用されるスタイルについて説明します。パイプライン内の PE は、直接 AXI4-Stream 接続または AXI4 (M_AXI) グローバル メモリ アクセスを使用して、PE 間でデータを移動できます。