hls::stream作为高层次设计中最总要的建模
templatetypename __STREAM_T__class stream{protected://保护类型std::string _name;//hls::stream的命名用于做标记使用std::deque__STREAM_T__ _data;//队列public://对外接口stream(){//无参构造函数static unsigned _counter 1;std::stringstream ss;char* _demangle_name abi::__cxa_demangle(typeid(*this).name(), 0, 0, 0);if (_demangle_name) {_name _demangle_name;free(_demangle_name);}else {_name hls_stream;}ss _counter;_name . ss.str();}stream(const std::string name){//有参构造函数_name name;//用于给hls::stream起名字}private:stream(const stream __STREAM_T__ chn):_name(chn._name), _data(chn._data) {}stream operator (const stream __STREAM_T__ chn) {_name chn._name;_data chn._data;return *this;}public:/// Overload and operators to implement read() and write()void operator (__STREAM_T__ rdata) {read(rdata);}void operator (const __STREAM_T__ wdata) {write(wdata);}};1.这个class类是vivado hls非常重要的建模2.很多task的并行处理都依赖这个class类3.这个是C仿真模型在C仿真的时候作为模拟FIFO功能的在综合的时候就是实际的FIFO资源4.和做了流运算符重载5.hls::stream在c仿真的时候在TB中是作为无限深度的FIFO来实现的6.hls::stream在综合的时候作为FIFO来设计不可能是无限深度FIFO所以设计的时候可以依据需要来指定FIFO深度如果你不指定系统默认指定的深度为2二、ap_ctrl_hs握手1.上电开始的时候ap_idle拉高的表示目前hls ip core是空闲的状态啥也没干2.当逻辑侧ap_start拉高或者SDK通过驱动调用API拉高ap_start这个是ap_idle拉低表示模块开始工作了3.ap_ready的作用是用于告知模块是否准备好接收新的数据了如果ap_ready拉低表示这个模块现在很忙没时间理会输入的数据只有ap_ready拉高新数据才能进入模块被采集到当新的数据被采集到那么这个时候ap_ready拉低那么这个时候表示模块又在忙4.ap_done表示模块或者说函数完成了一次传输设计当设计完成一次传输事务也就是执行了一次C语言函数块协议会以ap_done拉高来表明函数已经完成。