如何将 Xilinx HLS 流的一部分传输到另一个函数?

问题描述

我有两个变量:

void func1(hls::stream<ap_axiu<8,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;
  };

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

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

其中 ??? 应该是变量 ap_uint<D> datahls::stream<ap_axiu<8,1>> a 部分,被 hls::stream< > 包围。

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

解决方法

试试这个:

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

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

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