pragma HLS stream - 2019.2 Japanese

Vitis 統合ソフトウェア プラットフォームの資料: アプリケーション アクセラレーション開発 (UG1393)

Document ID
UG1393
Release Date
2020-02-28
Version
2019.2 Japanese

説明

デフォルトでは、配列変数は RAM としてインプリメントされます。

  • 最上位関数の配列パラメーターは、RAM インターフェイスのポートとしてインプリメントされます。
  • 一般配列は、読み出しおよび書き込みアクセス用に RAM としてインプリメントされます。
  • DATAFLOW 最適化に関連するサブ関数では、配列引数は RAM のピンポン バッファー チャネルを使用してインプリメントされます。
  • ループ ベースの DATAFLOW 最適化に関連する配列は、RAM のピンポン バッファー チャネルを使用してインプリメントされます。

配列に格納されているデータが順次に消費または生成される場合は、STREAM プラグマを指定して RAM ではなく FIFO を使用し、ストリーミング データを使用する方が効率的です。

重要: 最上位関数の引数の INTERFACE タイプが ap_fifo に指定されている場合は、配列は自動的にストリーミングとしてインプリメントされます。

構文

C ソースの必要なロケーションの境界内に配置します。

#pragma HLS stream variable=<variable> depth=<int> dim=<int> off 

説明:

variable=<variable>
ストリーミング インターフェイスとしてインプリメントする配列の名前を指定します。
depth=<int>
DATAFLOW チャネルの配列ストリーミングにのみ適用されます。RTL にインプリメントされる FIFO の深さは、デフォルトでは C コードで指定した配列と同じサイズになります。このオプションを使用すると、FIFO に異なる深さを指定できます。

配列が DATAFLOW 領域にインプリメントされる場合は、depth= オプションで FIFO のサイズを削減する方法がよく使用されます。たとえば、DATAFLOW 領域ですべてのループおよび関数がデータを II=2 のレートで処理する場合、データはクロック サイクルごとに生成および消費されるので、大型 FIFO は必要ありません。この場合、depth= オプションを使用して FIFO サイズを 1 に削減すると、RTL デザインのエリアを大幅に削減できます。

ヒント: config_dataflow -depth コマンドを使用すると、DATAFLOW 領域のすべての配列をストリーミングできます。depth= オプションを指定すると、その <variable> に対して config_dataflow コマンドを無効にできます。
dim=<int>
ストリーミングする配列の次元を指定します。デフォルトは次元 1 です。配列が <N> 次元の場合、0 ~ <N> の整数を指定します。
off
ストリーミング データをディスエーブルにします。DATAFLOW チャネルの配列ストリーミングにのみ適用されます。
ヒント: config_dataflow -default_channel fifo コマンドを使用すると、STREAM をデザインのすべての配列に適用するのと同じになります。off オプションを指定すると、その variable に対して config_dataflow コマンドを無効し、RAM ピンポン バッファー ベースのチャネルを使用したデフォルトでインプリメントできます。

例 1

次の例では、配列 A[10] をストリーミングにし、FIFO としてインプリメントするよう指定しています。

#pragma HLS STREAM variable=A

例 2

次の例では、配列 B が深さ 12 の FIFO でストリーミングされるように設定しています。

#pragma HLS STREAM variable=B depth=12

例 3

次の例では、配列 C のストリーミングをディスエーブルにし、config_dataflow でイネーブルになります。

#pragma HLS STREAM variable=C off