hls::stream()
时间: 2023-12-13 20:32:31 浏览: 41
hls::stream<>是Vivado HLS中用于对流传输数据结构进行建模的C++模板类。使用hls::stream<>类实现的流传输具有类似于无限深度FIFO的行为,无需定义大小,按顺序对其执行读取和写入。顶层接口上的hls::stream<>默认情况下使用ap_fifo接口来实现,设计内部的hls::stream<>作为FIFO来实现,深度为2。可以使用最优化指令STREAM来更改此默认大小。使用hls::stream<>的写入流接口有两种方式:使用write函数写或者使用C++风格的<<运算符写。从流里面取数据的接口也有两种方式:使用read函数读或者使用C++风格的>>运算符读。需要注意的是,从hls::stream<>读取数据之后,无法再次对其进行读取。
相关问题
在Vivado HLS中的Test Bench的.cpp文件如何输出hls::stream<double> data_out数据流
在Vivado HLS中,可以通过在Test Bench的.cpp文件中使用C++标准库中的ofstream类来输出hls::stream<double>数据流。具体步骤如下:
1. 在Test Bench的.cpp文件中包含<fstream>头文件和<ap_axi_sdata.h>头文件:
```c++
#include <fstream>
#include <ap_axi_sdata.h>
```
2. 定义ofstream对象和hls::stream<double>对象:
```c++
ofstream output_file;
hls::stream<ap_axiu<32, 2, 5, 6> > data_in;
```
其中,ap_axiu是Vivado HLS中的数据类型,用于表示带有AXI Stream接口的数据流。
3. 打开输出文件:
```c++
output_file.open("data_out.txt");
```
4. 从hls::stream<double>对象中读取数据,并将数据输出到文件中:
```c++
ap_axiu<32, 2, 5, 6> tmp;
while(data_out.read_nb(tmp)) {
output_file << tmp.data.to_double() << endl;
}
```
其中,to_double()是ap_fixed类型的成员函数,用于将ap_fixed类型数据转换为double类型数据。
5. 关闭输出文件:
```c++
output_file.close();
```
通过以上步骤,就可以在Vivado HLS中的Test Bench的.cpp文件中输出hls::stream<double>数据流了。
在Vivado HLS中的Test Bench的.cpp文件如何用printf输出hls::stream<double> data_out数据流
在Vivado HLS中的Test Bench的.cpp文件中,可以通过以下方式使用printf输出hls::stream<double> data_out数据流:
1. 首先需要包含stdio.h和hls_stream.h头文件,如下所示:
```
#include<stdio.h>
#include "hls_stream.h"
```
2. 然后,在主函数中定义一个hls::stream<double>类型的变量,用于接收模块输出的数据流,如下所示:
```
int main()
{
hls::stream<double> data_out;
//...
}
```
3. 在模块调用结束后,使用while循环读取数据流中的数据并使用printf输出,如下所示:
```
while (!data_out.empty())
{
double data = data_out.read();
printf("data_out = %f\n", data);
}
```
这样就可以将hls::stream<double>数据流中的数据输出到控制台上了。