説明
デフォルトでは、配列変数は RAM としてインプリメントされます。
- 最上位関数の配列パラメーターは、RAM インターフェイスのポートとしてインプリメントされます。
- 一般配列は、読み出しおよび書き込みアクセス用に RAM としてインプリメントされます。
- DATAFLOW 最適化に関連するサブ関数では、配列引数は RAM のピンポン バッファー チャネルを使用してインプリメントされます。
- ループ ベースの DATAFLOW 最適化に関連する配列は、RAM のピンポン バッファー チャネルを使用してインプリメントされます。
配列に格納されているデータが順次に消費または生成される場合は、STREAM
プラグマを指定して RAM ではなく 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