pragma HLS alias - 2023.2 简体中文

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

Document ID
UG1399
Release Date
2023-12-18
Version
2023.2 简体中文

描述

指定两个或两个以上的 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 列表中每个端口的指针相对于阵列原始指针的偏移。
注释: offsetdistance 互斥。

示例

对于以下 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