説明
構造体のデータ フィールドをワード幅の広い 1 つのスカラーにグループ化します。
AGGREGATE プラグマは、構造体のすべての要素を 1 つの幅の広いベクターにグループ化し、構造体のすべてのメンバーを同時に読み出しおよび書き込みできるようにします。新しく作成された幅の広いワードのビット アライメントは、構造体の要素の宣言順から自動推論されます。最初の要素はベクターの LSB になり、構造体の最後の要素は MSB になります。
構造体に配列が含まれる場合、AGGREGATE プラグマにより ARRAY_RESHAPE プラグマと同様の処理が実行され、再形成された配列が構造体内のほかの要素とまとめられます。構造体内で宣言されている配列はすべて完全に分割されて幅の広いスカラーに再形成され、ほかのスカラー フィールドとまとめられます。
重要: 大きな配列を含む構造体に AGGREGATE 最適化を使用する場合は、注意が必要です。配列に int 型の要素が 4096 個含まれる場合、ベクター (およびポート) の幅は 4096x32=131072 ビットになります。Vitis HLS ツールでこの RTL デザインは作成できますが、FPGA インプリメンテーション中に論理合成でこれが配線できることはほとんどありません。
構文
グループ化する構造体変数の定義の近くに配置します。
#pragma HLS aggregate variable=<variable> compact=<arg>
説明:
-
variable=<variable>
- グループ化する変数を指定します。
-
compact=[bit | byte | none | auto]
- 集約された構造体のアライメントを指定します。アライメントは、ビット レベル、バイト レベル、なし、またはツールで自動的に決定 (デフォルト動作) のいずれかで実行できます。
例 1
func
関数内の 3 つの 8 ビット フィールド (typedef struct {unsigned char R, G, B;}
pixel
ピクセル) を含む構造体ポインター AB
を、ビット レベルでアライメントされた新しい 24 ビット ポインターに集約します。
typedef struct{
unsigned char R, G, B;
} pixel;
pixel AB;
#pragma HLS aggregate variable=AB compact=bit
例 2
構造体配列 AB[17]
と 3 つの 8 ビット フィールド (R、G、B) を、17 個の 24 ビット要素の配列 1 つにグループ化します。
typedef struct{
unsigned char R, G, B;
} pixel;
pixel AB[17];
#pragma HLS aggregate variable=AB