首页 > 解决方案 > 如何将 Xilinx HLS 流的一部分传输到另一个函数?

问题描述

我有两个变量:

void func1(hls::stream<ap_axiu<8,1,1,1>> &a);
void func2(hls::stream<ap_uint<8>> &b);

其中ap_axiu定义为:

template<int D,int U,int TI,int TD>
  struct ap_axiu{
    ap_uint<D>       data;
    ap_uint<(D+7)/8> keep;
    ap_uint<(D+7)/8> strb;
    ap_uint<U>       user;
    ap_uint<1>       last;
    ap_uint<TI>      id;
    ap_uint<TD>      dest;
  };

我想调用func2inside func1,使用参数 a 的数据func1(见定义ap_axiu)。所以func看起来像这样:

void func1(hls::stream<ap_axiu<8,1,1,1>> &a) {
   func2(???);
}

where???应该是ap_uint<D> datavariable 的一部分hls::stream<ap_axiu<8,1,1,1>> a,由 . 包围hls::stream< >

我怎样才能在 C++ 中做到这一点?我对模板没有太多经验,也无法在 Google 上找到它。

标签: c++templatesxilinxvivado-hls

解决方案


尝试这个:

void func1(hls::stream<ap_axiu<8,1,1,1>> a)
{
    ap_axiu<8,1,1,1> input = a.read();
    hls::stream<ap_uint<8>> intermediate;
    intermediate.write(input.data);
    func2(intermediate);
}

这个想法是读取整个结构a并将您关心的一个字段推入intermediate,以便您可以调用func2.

这假设您只想将单个元素从 传输func1func2。一个流可能包含许多元素,在这种情况下,您可能需要添加一个循环来读取和写入多个值。


推荐阅读