説明
重要:
Array_Partition
および Array_Reshape
プラグマおよび指示子は、最上位関数の M_AXI
インターフェイスではサポートされません。代わりに、ベクター データ型 で説明するように、hls::vector
データ型を使用できます。配列をより小型の配列または個々の要素に分割します。この結果、次のようになります。
- 1 つの大型メモリではなく、複数の小型メモリまたは複数のレジスタを含む RTL が生成されます。
- ストレージの読み出しおよび書き込みポートの数が増加します。
- デザインのスループットが向上する可能性があります。
- より多くのメモリ インスタンスまたはレジスタが必要となります。
構文
C ソースの配列変数が定義されている関数内に配置します。
#pragma HLS array_partition variable=<name> \
type=<type> factor=<int> dim=<int> off=true
説明:
-
variable=<name>
- 必須の引数で、パーティションする配列変数を指定します。
-
type=<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 を指定した場合、最初の次元のみが分割されます。
-
off=true
- 指定された変数の ARRAY_PARTITION 機能をディスエーブルにします。
dim
、factor
、またはtype
では動作しません。
例 1
次の例では、13 要素の配列 AB[13] をブロック分割を使用して 4 つの配列に分割しています。
#pragma HLS array_partition variable=AB type=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 type=block factor=2 dim=2
例 3
次の例では、2 次元配列 in_local
の 2 番目の次元を個々の要素に分割しています。
int in_local[MAX_SIZE][MAX_DIM];
#pragma HLS ARRAY_PARTITION variable=in_local type=complete dim=2
例 4
次のコード例に示すように、パーティション分割された配列は、新しい構造の配列でアドレス指定できます。
struct SS
{
int x[N];
int y[N];
};
int top(SS *a, int b[4][6], SS &c) {
#pragma HLS array_partition type=complete dim=1 variable=b
#pragma HLS interface mode=ap_memory port = b[0]
#pragma HLS interface mode=ap_memory port = b[1]
#pragma HLS interface mode=ap_memory port = b[2]
#pragma HLS interface mode=ap_memory port = b[3]