描述
指定两个或两个以上的 M_AXI
指针实参指向存储器(DDR 或 HBM)中的同一个底层缓冲器,并通过设置相互间的距离或偏移来表明指针之间的任何混叠。
重要: ALIAS 编译指示适用于已映射到
M_AXI
接口的顶层函数实参。Vitis HLS 将不同指针视为独立通道,通常不提供任何依赖关系分析。但如果主机为多个指针分配单个缓冲器,则可通过 ALIAS 编译指示或指令来告知此关系,并且可维护依赖关系分析。ALIAS 编译指示支持在 Vitis HLS 中通过定义缓冲器内指针之间的距离来执行数据依赖关系分析。
ALIAS 的要求:
- 分配给 ALIAS 编译指示的所有端口都必须分配给
M_AXI
接口,并分配给不同捆绑,如以下示例所示 - 每个端口仅限在一条 ALIAS 编译指示或指令内使用
- 分配给 ALIAS 编译指示的所有端口的
depth
必须相同 - 指定偏移时,指定的端口数与偏移数必须相同,一个端口对应一个偏移
- INTERFACE 的偏移必须指定为从偏移或直接偏移,不支持
offset=off
语法
pragma HLS alias ports=<list> [distance=<int> | offset=<list...>]
其中:
-
ports=<list>
- 用于指定要混叠的端口。
-
distance=<integer>
- 指定传递到列表中的端口的指针值之间的距离。
-
offset=<list>
- 指定传递到
ports
列表中每个端口的指针相对于阵列原始指针的偏移。
注释:
offset
与 distance
互斥。示例
对于以下 top
函数:
void top(int *arr0, int *arr1, int *arr2, int *arr3, ...) {
#pragma HLS interface mode=m_axi port=arr0 bundle=hbm0 depth=0x40000000
#pragma HLS interface mode=m_axi port=arr1 bundle=hbm1 depth=0x40000000
#pragma HLS interface mode=m_axi port=arr2 bundle=hbm2 depth=0x40000000
#pragma HLS interface mode=m_axi port=arr3 bundle=hbm3 depth=0x40000000
以下编译指示用于为指定的阵列指针定义混叠,并定义指针之间的
distance
:#pragma HLS ALIAS ports=arr0,arr1,arr2,arr3 distance=10000000
或者,以下编译指示用于指定指针之间的
offset
,达成效果与以上命令相同:#pragma HLS ALIAS ports=arr0,arr1,arr2,arr3 offset=00000000,10000000,20000000,30000000