説明
重要:
Array_Partition
および Array_Reshape
プラグマおよび指示子は、最上位関数の M_AXI
インターフェイスではサポートされません。代わりに、ベクター データ型 で説明するように、hls::vector
データ型を使用できます。配列の分割と垂直配列マップを組み合わせ、要素数が少なくワード数の大きい新しい配列を 1 つ作成します。
set_directive_array_reshape
コマンドには、次の機能があります。
- 配列を複数の配列に分割 (
set_directive_array_partition
と同様)。 - 配列を垂直方向に自動的に結合し直し、ワード数の多い新しい配列を作成。
構文
set_directive_array_reshape [OPTIONS] <location> <array>
-
<location>
: 配列変数を含める場所をfunction[/label]
の形式で指定します。 -
<array>
: 再形成する配列変数を指定します。
オプション
-
-dim <integer>
-
注記: 複数次元の配列にのみ使用します。配列のどの次元を再形成するかを指定します。
- 0 を設定すると、すべての次元が指定したオプションで分割されます。
- その他の値を指定すると、その次元のみが分割されます。デフォルト値は 1 です。
-
-factor <integer>
-
注記: このオプションは、作成する一時的な小型の配列の数を指定します。
block
またはcyclic
再形成にのみ使用します。 -
-object
-
注記: コンテナー配列にのみ使用します。コンテナー内のオブジェクトを再形成します。このオプションを指定すると、オブジェクトのすべての次元が再形成されますが、コンテナーの次元はすべて保持されます。
-
-type (block|cyclic|complete)
-
-
block
再形成では、元の配列の連続したブロックから小型の配列を作成します。これにより、配列が N 個 (N は-factor
オプションで定義されている整数値) のブロックに分割され、その N 個のブロックがword-width*N
で 1 つの配列にまとめられます。デフォルトはcomplete
です。 -
cyclic
再形成では、元の配列の要素をインターリーブすることにより小型の配列を作成します。たとえば、-factor 3
の場合、要素 0 は新しく作成される 1 番目の配列に割り当てられ、要素 1 は 2 番目、要素 2 は 3 番目、要素 3 は 1 番目の配列に割り当てられます。最終的な配列は、新しい配列を 1 つの配列に垂直連結 (ワードを連結してワード数が大きいものを作成) したものになります。 -
complete
再形成では、配列を一時的に個々の要素に分割してから、ワード数の大きい 1 つの配列にまとめます。1 次元配列の場合、これはワード数が非常に大きいレジスタを 1 つ作成するのと同じです (元の配列が N 個の M ビット要素を含む場合、N*M
ビットのレジスタとなる)。これがデフォルトです。
-
-
-off
またはoff=true
- 指定された変数の ARRAY_RESHAPE 機能をディスエーブルにします。
例 1
関数 func
の 8 ビット配列 AB[17] を、5 つの要素を含む新しい 32 ビット配列 1 つに再形成します。
4 は 17 の因数ではないので、次のように分割されます。
- 配列 AB[17] のインデックス 17 は、形状変更された 5 番目の要素の下位 8 ビットです。
- 5 番目の要素の上位 8 ビットは使用されません。
set_directive_array_reshape -type block -factor 4 func AB
関数 func
の配列 AB[6][4] を、次元 [6][2] の新しい配列 1 つに分割します。この次元 2 の幅は 2 倍です。
set_directive_array_reshape -type block -factor 2 -dim 2 func AB
関数 func
の 8 ビット配列 AB[4][2][2] を、ビット幅が 4*2*2*8 (= 128) の 1 要素配列 (1 つのレジスタ) に再形成します。
set_directive_array_reshape -type complete -dim 0 func AB
例 2
次のコード例に示すように、パーティション分割された配列は、新しい構造の配列でアドレス指定できます。
struct SS
{
int x[N];
int y[N];
};
int top(SS *a, int b[4][6], SS &c) {...}
set_directive_array_reshape top b -type complete -dim 0
set_directive_interface -mode ap_memory top b[0]