描述
指定两个或两个以上的 M_AXI 指针实参指向存储器(DDR 或 HBM)内的同一个底层缓冲器。通过设置指针间的距离或偏移来设置指针间的混叠。
重要:
syn.directive.alias 适用于已映射到 M_AXI 接口的顶层函数实参。
Vitis HLS 将不同指针视为独立通道,通常不提供任何依赖关系分析。但如果主机为多个指针分配单个缓冲器,则可通过 syn.directive.alias 来告知此关系。这种通信方式可保留依赖关系分析。通过 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