问题描述
我有两个变量:
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> data
的 hls::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
。一个流可能包含许多元素,在这种情况下,您可能需要添加一个循环来读取和写入多个值。