Description
The DISAGGREGATE pragma 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.
Important: Structs used as
arguments to the top-level function are aggregated by default, but can be disaggregated with
this directive or pragma. Refer to AXI4-Stream Interfaces for
important information about disaggregating structs associated with streams.
Syntax
Place the pragma in the C source within the boundaries of the region, function, or loop.
#pragma HLS disaggregate variable=<variable>
Options
Where:
-
variable=<variable>
: Specifies the struct variable to disaggregate.
Example 1
The following example shows the struct variable a
in function top
will be disaggregated:
#pragma HLS disaggregate variable=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) {
#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