説明
デフォルトでは、配列変数は RAM としてインプリメントされます。
- 最上位関数の配列パラメーターは、RAM インターフェイスのポートとしてインプリメントされます。
- 一般配列は、読み出しおよび書き込みアクセス用に RAM としてインプリメントされます。
- 下位関数、またはループ ベースのデータフロー最適化に関連する配列は、RAM のピンポン バッファー チャネルを使用してインプリメントされます。
配列に格納されているデータが順次に消費または生成される場合は、STREAM プラグマを指定して RAM ではなく FIFO を使用し、ストリーミング データを使用する方が効率的です。
重要: 最上位関数の引数の INTERFACE タイプが
ap_fifo
に指定されている場合は、配列は自動的にストリーミングとしてインプリメントされます。詳細は、インターフェイスの定義 を参照してください。構文
C ソースの必要なロケーションの境界内に配置します。
#pragma HLS stream variable=<variable> type=<type> depth=<int>
説明:
-
variable=<variable>
- ストリーミング インターフェイスとしてインプリメントする配列の名前を指定します。
-
depth=<int>
- DATAFLOW チャネルの配列ストリーミングにのみ適用されます。RTL にインプリメントされる FIFO の深さは、デフォルトでは C コードで指定した配列と同じサイズになります。このオプションを使用すると、FIFO のサイズを変更して別の深さを指定できます。
配列が DATAFLOW 領域にインプリメントされる場合は、
depth
オプションで FIFO のサイズを削減する方法がよく使用されます。たとえば、DATAFLOW 領域ですべてのループおよび関数がデータを II=2 のレートで処理する場合、データはクロック サイクルごとに生成および消費されるので、大型 FIFO は必要ありません。この場合、depth
オプションを使用して FIFO サイズを 1 に削減すると、RTL デザインのエリアを大幅に削減できます。ヒント:config_dataflow -depth
コマンドを使用すると、DATAFLOW 領域のすべての配列をストリーミングできます。STREAM プラグマで指定したdepth
オプションは、指定した<variable>
のconfig_dataflow -depth
設定よりも優先されます。 - type=<arg>
- FIFO、PIPO、同期共有 (
shared
)、非同期共有 (unsync
) のいずれかを選択するメカニズムを指定します。サポートされるタイプは、次のとおりです。-
fifo
: 指定したdepth
の FIFO バッファー。 -
pipo
: 指定された深さ (デフォルトは 2) の「バンク」数を持つピンポン バッファー -
shared
: 通常のピンポン バッファーのように、深さあり、配列データの複製なしで同期される共有チャネル。プロデューサーとコンシューマー間の同期化の距離として使用される深さを十分に小さくすることで、一貫性を確実なものにできます。ヒント: shared のデフォルトの深さは 1 です。 -
unsync
: 個々のメモリ読み出しおよび書き込みを除き、同期化はありません。一貫性 (読み出し-書き込み、書き込み-読み出しの順) は、デザイン自体で確実なものにする必要があります。
-
例 1
次の例では、配列 A[10]
をストリーミングにし、FIFO としてインプリメントするよう指定しています。
#pragma HLS STREAM variable=A
例 2
次の例では、配列 B
が深さ 12 の FIFO でストリーミングされるように設定しています。
#pragma HLS STREAM variable=B depth=12 type=fifo
例 3
配列 C
は、PIPO としてストリーミングをインプリメントしています。
#pragma HLS STREAM variable=C type=pipo