ストリームは、ソフトウェア (および RTL 協調シミュレーション中のテストベンチ) では無限大のキューとしてモデル化されます。ストリームを C++ でシミュレーションするために、深さを指定する必要はありません。ストリームは関数内または関数へのインターフェイスに使用できます。内部ストリームは関数パラメーターとして渡すことができます。
ストリームは C++ ベースのデザインでのみ使用できます。各 hls::stream<>
オブジェクトは 1 プロセスで書き込まれ、1 プロセスで読み出されるようにする必要があります。
hls::stream
が Vivado IP フローのトップレベル インターフェイスでが使用される場合、デフォルトで FIFO インターフェイス (ap_fifo
) として RTL にインプリメントされますが、オプションで AXI4-Stream インターフェイス (axis
) としてインプリメントすることもできます。Vitis カーネル フローでは、デフォルトで AXI4-Stream インターフェイス (axis
) としてインプリメントされます。
hls::stream
がデザイン関数内で使用され、ハードウェアに合成される場合は、デフォルトで深さ 2 の FIFO としてインプリメントされます。補間が使用される場合など、ハードウェアで生成されるエレメントすべてが保持できるように FIFO の深さを増加する必要のあることもあります。ハードウェアで生成されるデータ サンプルすべてを保持するのに十分な大きさがないと、FIFO が停止する可能性があります (C/RTL 協調シミュレーションおよびハードウェア インプリメンテーションで確認できます)。FIFO の深さは、STREAM 指示子に depth
オプションを使用して調整できます。
hls::stream
変数を使用する場合は、正しくサイズ指定するようにしてください。
hls::stream
をタスク (サブ関数またはループ) 間のデータ転送に使用する場合は、データが 1 つのタスクから次のタスクに流れる DATAFLOW 領域にタスクをインプリメントすることを考慮してみてください。デフォルト (DATAFLOW 以外) では、各タスクが次のタスクの開始前に完了するので、hls::stream
変数をインプリメントするのに使用した FIFO のサイズをプロデューサー タスクで生成されるデータ サンプルすべてを保持すのに十分な大きさにする必要があります。hls::stream
変数のサイズを増加しないと、次のようなエラー メッセージが表示されます。
ERROR: [XFORM 203-733] An internal stream xxxx.xxxx.V.user.V' with default size is
used in a non-dataflow region, which may result in deadlock. Please consider to
resize the stream using the directive 'set_directive_stream' or the 'HLS stream'
pragma.
このエラー メッセージは、DATAFLOW でない領域 、デフォルトの FIFO の深さ 2 がプロデューサー タスクにより FIFO に書き込まれるデータ サンプルすべてを保持するのに十分な大きさではなく、デッドロックが発生する可能性があることを示しています。