描述
指定两个或两个以上的 M_AXI
指针实参指向存储器(DDR 或 HBM)中的同一个底层缓冲器,并通过设置相互间的距离或偏移来表明指针之间的任何混叠。
重要:
syn.directive.alias
适用于已映射到 M_AXI
接口的顶层函数实参。
Vitis HLS 将不同指针视为独立通道,通常不提供任何依赖关系分析。但如果主机为多个指针分配单个缓冲器,则可通过 syn.directive.alias
来告知此关系,并且可保留依赖关系分析。这样即可支持在 Vitis HLS 中通过定义缓冲器内指针之间的距离来执行数据依赖关系分析。
syn.directive.alias
的要求:
- 所有端口都必须分配给
M_AXI
接口,并分配给不同捆绑,如以下示例所示 - 每个端口仅限在一条
syn.directive.alias
命令内使用 - 分配给
syn.directive.alias
的所有端口都必须设为相同深度 - 如果指定偏移,那么每个端口都必须有一个偏移
-
M_AXI
端口的偏移必须指定为slave
或direct
,不支持offset=off
语法
syn.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
:syn.directive.alias=top arr0,arr1,arr2,arr3 distance=10000000
或者,以下命令用于指定指针之间的
offset
,达成效果与以上命令相同:syn.directive.alias=top arr0,arr1,arr2,arr3 offset=00000000,10000000,20000000,30000000