ストリーミング データとは、データ サンプルが最初のサンプルからシーケンシャル順に送信されるタイプのデータ転送のことです。ストリーミングには、アドレス管理は必要ありません。
ストリーミング データを使用するデザインは C で記述するのが困難な場合があります。複数の読み出しおよび書き込みを実行するためにポインターを使用すると、型修飾子とテストベンチの構築方法が記述されるので、問題が発生する可能性があります。
重要:
hls::stream
クラスは、C++ デザインでのみ使用されます。
Vitis HLS には、ストリーミング データ構造を記述するための C++ テンプレート クラスの hls::stream<>
が含まれます。hls::stream<>
クラスを使用してインプリメントしたストリームには、次の属性があります。
- C コードでは、
hls::stream<>
が無限深さの FIFO のように動作します。hls::stream<>
のサイズを定義する必要はありません。 - これらは、シーケンシャルに読み出されて書き込まれます。つまり、データが
hls::stream<>
から読み出されると、それが再び読み出されることはありません。 - 最上位インターフェイスの
hls::stream<>
は、デフォルトで AMD Vivado™ IP フローのap_fifo
インターフェイス、または AMD Vitis™ カーネル フローの axis インターフェイスとしてインプリメントされます。 - ストリームはローカルまたはグローバルに定義でき、常に内部 FIFO としてインプリメントされます。グローバル スコープで定義されるストリームは、その他のグローバル変数と同じ規則に従います。
- ストリームの宣言方法には次の 2 つがあります。
-
hls::stream<Type>
: ストリームのデータ型を指定します。hls::stream<>
は、デフォルト深さ 2 の FIFO としてインプリメントされます。STREAM プラグマまたは指示子を使用すると、深さを変更できます。 -
hls::stream<Type, Depth>
: ストリームのデータ型と FIFO の深さを指定します。深さは、ストールを回避するために設定します。デザイン内のどのタスクでも指定の深さを超えるレートでサンプルを生成または消費できる場合、FIFO が空 (またはフル) になり、読み出し (または書き込み) を実行できないためにストールすることがあります。
-
このセクションでは、ストリーミング データを使用したデザインを hls::stream<>
クラスを使用してより簡単に記述する方法を示します。このセクションには、次のトピックが含まれます。
- ストリームを使用した記述とストリームの RTL インプリメンテーションの概要。
- ストリームの使用方法。
- ブロッキング読み出しおよび書き込み。
- ノンブロッキング読み出しおよび書き込み。
- FIFO の深さの制御。
注記:
hls::stream
クラスは常に C++ 参照引数として関数間で使用されます。たとえば、&my_stream
がその例です。