Description
The set_directive_disaggregate
command lets you deconstruct a struct
variable into
its individual elements. The number and type of elements created are determined by
the contents of the struct itself.
Syntax
set_directive_disaggregate <location> <variable>
- <
location
> is the location (in the formatfunction[/label]
) where the variable to disaggregate is found. - <
variable
> specifies the struct variable name.
Options
This command has no options.
Example 1
The following example shows the struct variable a
in function top
will
be disaggregated:
set_directive_disaggregate top a
Example 2
Disaggregated structs can be addressed in your code by the using standard C/C++ coding style as shown below. Notice the different methods for accessing the pointer element (a) versus the reference element (c);
struct SS
{
int x[N];
int y[N];
};
int top(SS *a, int b[4][6], SS &c) {
set_directive_disaggregate top a
set_directive_interface -mode s_axilite top a->x
set_directive_interface -mode s_axilite top a->y
set_directive_disaggregate top c
set_directive_interface -mode ap_memory top c.x
set_directive_interface -mode ap_memory top c.y
Example 3
The following example shows the Dot
struct containing the RGB
struct
as an element. If you apply set_directive_disaggregate
to variable
Arr
, then only the top-level Dot
struct is disaggregated.
struct Pixel {
char R;
char G;
char B;
};
struct Dot {
Pixel RGB;
unsigned Size;
};
#define N 1086
void DUT(Dot Arr[N]) {
...
}
set_directive_disaggregate DUT Arr
If you want to disaggregate the whole struct, Dot
and RGB
, then
you can assign the set_directive_disaggregate
as shown below.
void DUT(Dot Arr[N]) {
#pragma HLS disaggregate variable=Arr->RGB
...
}
set_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]) {
...
}