在 FPGA 上的主机与内核之间会发生两种类型的数据传输。在主机 CPU 与加速器之间通过全局存储体来传输数据指针。标量数据从主机直接传输至内核。
往来内核传输数据所耗费的时间也会对应用架构的吞吐量目标产生影响。由于数据传输的高开销,考虑如何将计算与应用中存在的通信(数据移动)加以重叠就显得尤为重要。请参阅 Vitis HLS 用户指南(UG1399) 中的设计高效内核 。
Vitis 核开发套件中包含的 Vitis HLS 工具会为 C/C++ 内核函数的参数自动分配接口端口。这些端口分配是在 v++
编译进程中完成的。以下章节提供了有关这些接口端口的更多详细信息,包括是否允许手动分配端口或者使用 INTERFACE 编译指示来覆盖默认分配。如果代码中不含用户定义的 INTERFACE 编译指示,那么 Vitis 工具将分配以下接口协议:
-
AXI4 主接口 (
m_axi
) 分配到 C/C++ 函数的指针实参。 -
AXI4-Lite 接口 (
s_axilite
) 分配到标量实参、阵列的控制信号、全局变量以及软件仿真的返回值。 - Vitis HLS 会自动推断突发传输事务以聚集存储器访问,从而最大程度提升吞吐量带宽和/或最大程度减小时延。如需了解有关突发传输的更多信息,请参阅 Vitis HLS 用户指南(UG1399) 中的 AXI 突发传输 。
- 使用
hls::stream
来定义参数类型时,Vitis HLS 工具会推断axis
串流接口。