C モデルと RTL インプリメンテーション - 2023.2 日本語

Vitis 高位合成ユーザー ガイド (UG1399)

Document ID
UG1399
Release Date
2023-12-18
Version
2023.2 日本語

ストリームは、ソフトウェア (および RTL 協調シミュレーション中のテストベンチ) では無限大のキューとしてモデル化されます。ストリームを C++ でシミュレーションするために、深さを指定する必要はありません。ストリームは関数内または関数へのインターフェイスに使用できます。内部ストリームは関数パラメーターとして渡すことができます。

ストリームは C++ ベースのデザインでのみ使用できます。各 hls::stream<> オブジェクトは 1 プロセスで書き込まれ、1 プロセスで読み出されるようにする必要があります。

hls::streamVivado IP フローのトップレベル インターフェイスでが使用される場合、デフォルトで FIFO インターフェイス (ap_fifo) として RTL にインプリメントされますが、オプションで AXI4-Stream インターフェイス (axis) としてインプリメントすることもできます。Vitis カーネル フローでは、デフォルトで AXI4-Stream インターフェイス (axis) としてインプリメントされます。

hls::stream がデザイン関数内で使用され、ハードウェアに合成される場合は、デフォルトで深さ 2 の FIFO としてインプリメントされます。補間が使用される場合など、ハードウェアで生成されるエレメントすべてが保持できるように FIFO の深さを増加する必要のあることもあります。ハードウェアで生成されるデータ サンプルすべてを保持するのに十分な大きさがないと、FIFO が停止する可能性があります (C/RTL 協調シミュレーションおよびハードウェア インプリメンテーションで確認できます)。FIFO の深さは、STREAM 指示子に depth オプションを使用して調整できます。

重要: デフォルトの DATAFLOW 以外の領域で 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 に書き込まれるデータ サンプルすべてを保持するのに十分な大きさではなく、デッドロックが発生する可能性があることを示しています。