set_directive_array_reshape - 2023.1 日本語

Vitis 高位合成ユーザー ガイド (UG1399)

Document ID
UG1399
Release Date
2023-05-16
Version
2023.1 日本語

説明

重要: 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 ビットのレジスタとなる)。これがデフォルトです。

例 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]