pragma HLS array_partition - 2019.2 Japanese

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

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

説明

配列をより小型の配列または個々の要素に分割します。この結果、次のようになります。

  • 1 つの大型メモリではなく、複数の小型メモリまたは複数のレジスタを含む RTL が生成されます。
  • ストレージの読み出しおよび書き込みポートの数が増加します。
  • デザインのスループットが向上する可能性があります。
  • より多くのメモリ インスタンスまたはレジスタが必要となります。

構文

C ソースの配列変数が定義されている関数内に配置します。

#pragma HLS array_partition variable=<name> \
<type>  factor=<int>  dim=<int>

説明:

variable=<name>
必須の引数で、パーティションする配列変数を指定します。
<type>
分割タイプを指定します (オプション)。デフォルトは complete です。次のタイプがサポートされます。
cyclic
元の配列の要素がインターリーブされて小型配列に分割されます。新しい各配列に要素が 1 つずつ配置され、すべての配列に配置されたら最初の配列に戻って、配列が完全に分割されるまでそれが繰り返されます。たとえば factor=3 の場合、要素は次のように割り当てられます。
  • 要素 0 は 1 番目の新しい配列。
  • 要素 1 は 2 番目の新しい配列。
  • 要素 2 は 3 番目の新しい配列。
  • 要素 3 は再び 1 番目の新しい配列。
block
元の配列の連続したブロックから小型配列が作成されます。N が factor= 引数で定義される整数だとすると、1 つの配列が N 個のブロックに分割されます。
complete
配列が個々の要素に分割されます。1 次元配列の場合は、メモリが個々のレジスタに分割されます。これがデフォルトの <type> です。
factor=<int>
作成する小型配列の数を指定します。
重要: 完全分割では指定しません。ブロック分割およびサイクリック分割では、factor= は必須です。
dim=<int>
多次元配列のどの次元を分割するかを指定します。<N> 次元の配列の場合、0 ~ <N> の整数を指定します。
  • 0 を指定すると、多次元配列のすべての次元が指定したタイプおよび係数オプションで分割されます。
  • 0 以外の値を指定すると、指定した次元のみが分割されます。たとえば、1 を指定した場合、最初の次元のみが分割されます。

例 1

次の例では、13 要素の配列 AB[13] をブロック分割を使用して 4 つの配列に分割しています。

#pragma HLS array_partition variable=AB block factor=4
ヒント: 4 は 13 の因数ではないので、次のように分割されます。
  • 3 つの配列に要素が 3 個ずつ含まれます。
  • 1 つの配列に 4 つの要素 (AB[9:12]) が含まれます。

例 2

次の例では、2 次元配列 AB[6][4] の 2 番目の次元を次元 [6][2] の配列 2 つに分割しています。

#pragma HLS array_partition variable=AB block factor=2 dim=2

例 3

次の例では、2 次元配列 in_local の 2 番目の次元を個々の要素に分割しています。

int in_local[MAX_SIZE][MAX_DIM];
#pragma HLS ARRAY_PARTITION variable=in_local complete dim=2