pragma HLS disaggregate - 2022.1 Chinese

Vitis 高层次综合用户指南 (UG1399)

Document ID
UG1399
Release Date
2022-06-07
Version
2022.1 简体中文

描述

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
... 
} 

如果您要将整个结构体(包括 DotRGB)进行解聚,则可按如下所示对 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 
... 
}