首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AXI4流接口:如何管理HLS中的浮点数组来生成HW加速器,并在RTL项目中安全地连接它们?

AXI4流接口:如何管理HLS中的浮点数组来生成HW加速器,并在RTL项目中安全地连接它们?
EN

Stack Overflow用户
提问于 2016-07-08 10:34:34
回答 1查看 3.7K关注 0票数 3

最后,我想做的是在Vivado Design中使用一个具有单精度浮点数组的流接口来构建硬件加速器。HLS用户指南UG902显示,可以使用不同的接口创建HW加速器(从C、C++、SystemC、OpenCL代码开始)。

如果要使用AXI4流接口,则HLS会合成信号处理和TVALID,但它不会合成将生成的RTL接口连接到Zynq处理系统(在我的例子中是ARM9核)所需的信号。为了解决这个问题,Xilinx为您提供了使用这个库的可能性。

代码语言:javascript
复制
#include "ap_axi_sdata.h"

在内部有一个结构模板:

代码语言:javascript
复制
#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;
};

我有两个问题:

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

如何在不遇到这两个问题的情况下处理和管理带有浮点数据的HLS流接口?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-08 10:46:43

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

代码语言:javascript
复制
struct my_data{
  float data;
  bool last;
};

我可以给你一个例子,说明你应该如何使用它:

代码语言:javascript
复制
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];
        }
     }

如果你这样做,经过合成,你就会得到这样的结果:

为了避免错误,您必须注意:,每当您使用流接口的数据时,您应该小心地管理接口的其余信号.

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38264547

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档