set_directive_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

语法

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