C++ AXI4流媒体接口:如何管理HLS中的浮点阵列以生成硬件加速器,并在RTL项目中安全地连接它们?

C++ AXI4流媒体接口:如何管理HLS中的浮点阵列以生成硬件加速器,并在RTL项目中安全地连接它们?,c++,interface,floating-point,streaming,vivado-hls,C++,Interface,Floating Point,Streaming,Vivado Hls,最后,我想做的是在Vivado Design Suite中使用带有单精度浮点数组的流接口来构建硬件加速器。HLS用户指南显示,可以使用不同的接口创建HW加速器(从C、C++、SystemC、OpenCL代码开始)。 如果您想使用AXI4流媒体接口,HLS会合成TREADY和TVALID信号,但不会合成将生成的RTL接口连接到Zynq处理系统(我的例子中是ARM9内核)所需的信号TLAST。 为了解决这个问题,Xilinx为您提供了使用这个库的可能性 #include "ap_axi_sdata.

最后,我想做的是在Vivado Design Suite中使用带有单精度浮点数组的流接口来构建硬件加速器。HLS用户指南显示,可以使用不同的接口创建HW加速器(从C、C++、SystemC、OpenCL代码开始)。 如果您想使用AXI4流媒体接口,HLS会合成TREADY和TVALID信号,但不会合成将生成的RTL接口连接到Zynq处理系统(我的例子中是ARM9内核)所需的信号TLAST。 为了解决这个问题,Xilinx为您提供了使用这个库的可能性

#include "ap_axi_sdata.h"
里面有一个结构模板:

#include "ap_int.h"
template<int D,int U,int TI,int TD>
struct ap_axis{
ap_int<D> data;
ap_uint<D/8> keep;
ap_uint<D/8> strb;
ap_uint<U> user;
ap_uint<1> last;
ap_uint<TI> id;
ap_uint<TD> dest;
};
#包括“ap_int.h”
模板
结构ap_轴{
ap_int数据;
ap_!;
亚太经合组织统计数据库;
用户;
最后一次;
ap单元id;
目的地;
};
我有两个问题:

  • 如果我只想使用TLAST而不想使用其他的,我会尝试将U、TI和TD设置为零,但我会得到一个错误
  • 如果我想使用“float”而不是“ap_int”,并且我试图在模板内更改它,我会得到另一个错误

如何在HLS中处理和管理浮点数据流接口而不遇到这两个问题?

对于我来说,解决这一问题的最简单方法是声明自己的结构数据类型,而不使用上面提到的库。默认情况下,VivadoHLS使用信号TDATA、TVALID和TREADY实现轴接口。如果还需要TLAST和单精度单点数据,则应声明自己的数据类型,该类型应如下所示:

struct my_data{
  float data;
  bool last;
};
我可以给你一个关于如何使用它的例子:

void my_function(my_data input[25], my_data output[25])
{
#pragma HLS INTERFACE axis port=output
#pragma HLS INTERFACE axis port=input
#pragma HLS INTERFACE s_axilite port=return


    float tmp_data;
    float tmp_last;

    int k=0;

    for(k=0;k<25;k++)
        {
            tmp_data[k] = input[k].data;
            tmp_last[k] = input[k].last;
        }


        for(k=0;k<25;k++)
        {
            output[k].data = tmp_data[k];
            output[k].last = tmp_last[k];
        }
     }
void my_函数(my_数据输入[25],my_数据输出[25])
{
#pragma HLS接口轴端口=输出
#pragma HLS接口轴端口=输入
#pragma HLS接口s_axilite端口=返回
浮动tmp_数据;
最后浮动tmp_;
int k=0;

对于(k=0;Ky甚至不接近C!C不是C++)不是C。亲爱的朋友,PAG 313,你可以找到这个句子:“重要:术语“C代码””。在本指南中使用的代码是用C、C++、SystemC和OpenCL API C编写的,除非特别注明。“我刚才试过了,它看起来很好。在HLS的同步之后,生成的RTL IP没有错误地连接到系统。验证设计没有错误。非常感谢。