描述
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
以下示例显示的 Dot
结构体内包含 RGB
结构体作为元素。如果您将 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
...
}