当前位置: 首页 > news >正文

hls::stream作为高层次设计中最总要的建模

template<typename __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拉高来表明函数已经完成。

http://www.cnnetsun.cn/news/2518580.html

相关文章:

  • Linux awk 数据分析、字段截取实战
  • 思源黑体TTF构建指南:免费商用多语言字体的终极解决方案
  • NotebookLM高效工作流构建:从零到精通的7步实战框架(附真实项目复盘数据)
  • 如何快速掌握Windows本地实时语音转文字:TMSpeech完整教程
  • 曝OpenAI日亏超5亿,但Anthropic快盈利了
  • 如何用Magpie解决Windows窗口模糊问题:免费窗口超分辨率工具终极指南
  • Blender 3MF插件:实现CAD到3D打印的无缝转换完整指南
  • C++学习笔记23:const 成员函数
  • 3分钟让Figma说中文:设计师必备的汉化插件完全指南
  • 无SDK环境下如何使用curl命令调试Taotoken大模型接口
  • 3PEAK思瑞浦 TP6002-FR DFN2X2-8 运算放大器
  • 软件测试的缺陷管理:这4个工具+5个流程,让你的缺陷管理更高效
  • 让 AI Agent 更可靠:Harness Engineering 与多 Agent 系统工程实践
  • 2026年图片去水印软件哪个好用?盘点当前值得收藏的去水印工具
  • 千问 LeetCode 2565. 最少得分子序列 Java实现
  • 千问 LeetCode 2569. 更新数组后处理求和查询 Java实现
  • 观察taotoken在多模型间自动路由的响应速度与成功率
  • 基于Python + LLM的AI导演系统设计与实现
  • 6款论文降AIGC工具亲测:AI痕迹彻底消失,这款便宜又好用
  • AI写作辅助软件的合规秘籍:如何界定“合理使用”与学术不端?
  • awesome-canvas进阶技巧:Canvas与WebGL结合开发高性能图形应用
  • easy-vibe 核心功能解析:解锁 Vibe Coding 的终极技巧
  • CANN/cannbot-skills Git差异统计
  • CANN/asc-devkit浮点转hif8 API
  • 如何通过3个步骤快速掌握Java反编译界面定制:终极指南
  • PHP版本管理的终极解决方案:3分钟掌握phpenv多版本切换技巧
  • B站直播神器:神奇弹幕全方位操作指南
  • H5P交互式视频制作终极指南:快速创建引人入胜的互动学习内容
  • 中小团队如何利用 Taotoken 统一管理多模型 API 密钥与成本
  • 一天一个开源项目(第108篇):Andrej Karpathy Skills - 用一个 CLAUDE.md 文件修复 LLM 编码的四个顽疾