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
指针分配给 bundlegmem0
并将output
指针分配给 bundlegmem1
。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_axi
和m01_axi
。如果不更改这些名称,那么在配置文件中通过connectivity.sp
选项分配 DDR 存储体时,必须使用这些名称。如需了解更多信息,请参阅 将内核端口映射到存储器。