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