HLS ストリーム ライブラリ - 2023.2 日本語

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

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

ストリーミング データとは、データ サンプルが最初のサンプルからシーケンシャル順に送信されるタイプのデータ転送のことです。ストリーミングには、アドレス管理は必要ありません。

ストリーミング データを使用するデザインは 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 がその例です。