pragma HLS disaggregate - 2023.2 日本語

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

Document ID
UG1399
Release Date
2023-12-18
Version
2023.2 日本語

説明

DISAGGREGATE プラグマを使用すると、struct 変数を個別の要素に分割できます。作成される要素の数とタイプは、その構造体の内容によって決まります。

重要: 最上位関数への引数として使用される構造体は、デフォルトでは集約されますが、このプラグマまたは指示子を使用して分割できます。ストリームに関連付けられている構造体の分割に関する重要な情報は、AXI4-Stream インターフェイスを参照してください。

構文

C ソースの領域、関数、またはループ内に配置します。

#pragma HLS disaggregate variable=<variable>

オプション

説明:

  • variable=<variable>: 分割する構造体変数名を指定します。

例 1

次の例は、関数 top の構造体変数 a を分割します。

#pragma HLS disaggregate variable=a

例 2

分割された構造体は、次に示すように、標準の C/C++ コーディング スタイルを使用して、コード内でアドレス指定できます。ポインター要素 (a) とリファレンス要素 (c) にアクセスする方法の違いに注意してください。

struct SS
{
  int x[N];
  int y[N];
};
  
int top(SS *a, int b[4][6], SS &c) {
#pragma HLS disaggregate variable = a
#pragma HLS interface s_axilite port = a->x
#pragma HLS interface s_axilite port = a->y
  
// Following is now supported
#pragma HLS disaggregate variable = c
#pragma HLS interface ap_memory port = c.x
#pragma HLS interface ap_memory port = c.y

例 3

次の例は、RGB 構造体を要素として含む Dot 構造体を示しています。DISAGGREGATE プラグマを Arr 変数に適用すると、最上位の Dot 構造体のみが集約解除されます。

struct Pixel { 
char R; 
char G; 
char B; 
}; 

struct Dot { 
Pixel RGB; 
unsigned Size; 
}; 

#define N 1086 
void DUT(Dot Arr[N]) {
#pragma HLS disaggregate variable=Arr
... 
} 

構造体全体 (Dot および RGB) を集約解除する場合は、次のように DISAGGREGATE プラグマを割り当てます。

void DUT(Dot Arr[N]) { 
#pragma HLS disaggregate variable=Arr->RGB 
... 
} 
この場合、結果は次のようになります。
void DUT(char Arr_RGB_R[N], char Arr_RGB_G[N], char Arr_RGB_B[N], unsigned Arr_Size[N]) { 
#pragma HLS disaggregate variable=Arr->RGB 
... 
}