PE 関数の各引数は、最上位の compute()
関数の引数またはスタティックに宣言されたストリームに接続する必要があります。vpp::stream
は、HLS ストリーム ライブラリで説明されるように、Vitis HLS
hls::stream
から継承したものです。
vpp::stream
オブジェクトには、いくつかの追加機能があります。
-
vpp::stream
コンストラクターは、追加の引数post_check
(デフォルト値は true) を使用します。ほとんどのストリーム変数は、各計算呼び出しの最後に空になるはずですが、複数のcompute()
呼び出しでデータを伝送するように設計されるものもあります。ソフトウェア エミュレーションでは、デフォルトでvpp::stream
は各compute()
呼び出しの終了時に空であることがチェックされます。空でない場合はアサートされます。オプションのpost_check
引数を使用すると、このアサートをオフにできます。 -
DEPTH
パラメーターを使用すると、ハードウェアにインプリメントされる FIFO の深さを指定できます。ソフトウェアおよびハードウェア エミュレーション時に使用することもできます。 -
vpp::stream
変数は、hls::stream
型を指定できる PE 関数引数に渡すことができます。 -
Vitis ソフトウェア エミュレーションで適切な機能検証が実行されるようにするには、
vpp::stream
変数をstatic
に宣言する必要があります。ハードウェアでは、ストリーム/FIFO は暗示的に空にならないので、その内容が異なる実行間で保持され、static
変数と同じように動作します。
次のセクションでは、compute()
の本体スコープ内で基本的な C++ コーディングで、PE のパイプライン システムを構成するのによく使用されるスタイルについて説明します。パイプライン内の PE は、直接 AXI4-Stream 接続または AXI4 (M_AXI) グローバル メモリ アクセスを使用して、PE 間でデータを移動できます。