创建多个 AXI 接口 - 2022.1 简体中文

Vitis 统一软件平台文档 应用加速开发 (UG1393)

Document ID
UG1393
Release Date
2022-05-25
Version
2022.1 简体中文

OpenCL 内核、C/C++ 内核和 RTL 内核采用不同方法来向 AXI 接口分配函数参数。

  • 对于 OpenCL 内核,需要使用 --max_memory_ports 选项来为内核实参上的每个全局指针生成一个 AXI4 接口。AXI4 接口名称是根据实参列表上的全局指针顺序来命名的。

    以下代码取自 GitHub 上的 Vitis 加速示例ocl_kernels 类别中的 gmem_2banks_ocl 示例:

    __kernel __attribute__ ((reqd_work_group_size(1, 1, 1)))
    void apply_watermark(__global const TYPE * __restrict input, 
    __global TYPE * __restrict output, int width, int height) {
     ...
    }

    在此示例中为第一个全局指针 input 分配的 AXI4 名称是 M_AXI_GMEM0,为第二个全局指针 output 分配的名称是 M_AXI_GMEM1

  • 对于 C/C++ 内核,通过在 HLS INTERFACE 编译指示中为不同全局指针指定不同的“bundle”名称,来生成多个 AXI4 接口。如需了解更多信息,请参阅 内核接口

    以下代码片段来自 gmem_2banks 示例,该示例将 input 指针分配给 bundle gmem0 并将 output 指针分配给 bundle gmem1。bundle 名称可以是任意有效的 C 字符串,而生成的 AXI4 接口名称将为 M_AXI_<bundle_name>。例如,输入指针的 AXI4 接口名为 M_AXI_gmem0,而输出指针的接口则为 M_AXI_gmem1。如需了解更多信息,请参阅 pragma HLS interface
    #pragma HLS INTERFACE m_axi port=input  offset=slave bundle=gmem0
    #pragma HLS INTERFACE m_axi port=output offset=slave bundle=gmem1
    
  • 对于 RTL 内核,在“RTL Kernel”Wizard 执行导入过程中,会生成端口名称。“RTL Kernel”Wizard 建议的默认名称为 m00_axim01_axi。如果不更改这些名称,那么在配置文件中通过 connectivity.sp 选项分配 DDR 存储体时,必须使用这些名称。如需了解更多信息,请参阅 将内核端口映射到存储器