syn.directive.disaggregate - 2024.1 日本語

Vitis 統合ソフトウェア プラットフォームの資料: アプリケーション アクセラレーション開発 (UG1393)

Document ID
UG1393
Release Date
2024-07-03
Version
2024.1 日本語

説明

syn.directive.disaggregate コマンドを使用すると、struct 変数が個別の要素に分割されます。作成される要素の数とタイプは、その構造体の内容によって決まります。

重要: 最上位関数への引数として使用される構造体は、デフォルトでは集約されますが、このプラグマまたは指示子を使用して分割できます。

構文

syn.directive.disaggregate=<location> <variable>
  • <location>: 分割する変数のディレクトリで、function[/label] の形式で指定します。
  • variable: 変数名を指定します。

オプション

このコマンドにはオプションはありません。

例 1

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

syn.directive.disaggregate=top a

例 2

分割された構造体は、次に示すように、標準の C/C++ コーディング スタイルを使用して、コード内でアドレス指定できます。指示子を使用する場合:
syn.directive.disaggregate=top a
syn.directive.disaggregate=top c

このコードは、次のような構造で使用されます。

struct SS
{
  int x[N];
  int y[N];
};
  
int top(SS *a, int b[4][6], SS &c) {

syn.directive.interface=mode=s_axilite top a->x
syn.directive.interface=mode=s_axilite top a->y

syn.directive.interface=mode=ap_memory top c.x
syn.directive.interface=mode=ap_memory top c.y
重要: ポインターの要素にアクセスする方法 (a) と、リファレンスの要素にアクセスする方法 (c) が異なることに注意してください。

例 3

次の例は、RGB 構造体を要素として含む Dot 構造体を示しています。Arr 変数に syn.directive.disaggregate を適用すると、最上位の Dot 構造体のみが分割されます。

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

struct Dot { 
Pixel RGB; 
unsigned Size; 
}; 

#define N 1086 
void DUT(Dot Arr[N]) {
... 
} 

syn.directive.disaggregate=DUT Arr

構造体全体 (Dot および RGB) を分割する場合は、次のように set_directive_disaggregate を割り当てます。

void DUT(Dot Arr[N]) { 
#pragma HLS disaggregate variable=Arr->RGB 
... 
} 

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