Vitis HLS 学习笔记--理解串流Stream(1)

目录

1. 介绍

2. 示例

2.1 代码解析

2.2 串流数据类型

2.3 综合报告

3. 总结


1. 介绍

在Vitis HLS中,hls::stream是一个用于在C/C++中进行高级合成的关键数据结构。它类似于C++标准库中的std::stream,但是专门设计用于硬件描述语言(如Verilog或VHDL)中的数据流。hls::stream提供了一种方便的方法来处理数据流,使得在设计硬件加速器时更加灵活和可控。

hls::stream<> 类实现的串流具有如下属性:

  • hls::stream<> 的行为与无限深度的 FIFO 相似。
  • 按顺序对其执行读取和写入。即,从 hls::stream<> 读取数据之后,无法再次对其进行读取
  • 顶层接口上的 hls::stream<> 默认情况下使用 ap_fifo 接口来实现或者作为 AXIS 接口来实现。
  • 串流可定义为局部或全局,并且始终作为内部 FIFO 来实现。全局作用域内定义的串流遵循的规则与任何其它全局变量相同。

常见有两种串流声明方法:

  • hls::stream<Type>:指定串流的数据类型。设计内部的 hls::stream<> 作为 FIFO 来实现,默认深度为 2。STREAM 编译指示或指令可用于更改深度。
  • hls::stream<Type, Depth>:指定串流的数据类型和 FIFO 深度。设置深度以防止停滞。如果设计中的任意任务生产或使用样本的速度大于指定深度,那么 FIFO 可能因无法读取(或写入)而变为空(或满),从而导致停滞。

2. 示例

2.1 代码解析

#include "ap_axi_sdata.h"
#include "ap_int.h"
#include "hls_stream.h"typedef ap_axiu<64, 0, 0, 0> trans_pkt;struct data {ap_int<64> data_filed;ap_int<1>  last;
};void example(hls::stream<trans_pkt> & inStreamTop,hls::stream<data>      & outTop) {
#pragma HLS INTERFACE axis register_mode = both register port = inStreamToptrans_pkt in_val;in_val = inStreamTop.read();data out_val = {in_val.data, in_val.last};outTop.write(out_val);
}

该示例会生成如下IP:

请注意,虽然顶层函数参数 inStreamTop 和 outTop,同为 hls::stream 类型的数据,但是综合成的 IP 却有很大的差别:

  • 指令 #pragma HLS INTERFACE axis 会限定 inStreamTop 以 AXI Stream 接口来实现。
  • 默认的 hls::stream 会以 ap_fifo 接口来实现,outTop。

我么可以看下标准的 fifo 接口:

可以看到,outTop 与 FIFO_WRITE 具有一致的接口信号。

在此例中,我们有个数据打包的操作:

data out_val = {in_val.data, in_val.last};

目的是将 AXI Stream 中的 TLAST 也作为数据的一部分,给到 FIFO 接口中。所以我们 outTop 中的 outTop_din[64:0] 有65位。

2.2 串流数据类型

针对 hls::stream 以 AXI Stream 实现的情况,当串流数据类型 (T) 为简单的整数类型时,有 2 种预定义的 AXI4-Stream 实现类型可用:

  • AXI4-Stream 类的有符号实现
hls::axis<ap_int<WData>, WUser, WId, WDest>

 或者使用简写:

ap_axis<Wdata, WUser, WId, WDest>

  • AXI4-Stream 类的无符号实现
hls::axis<ap_uint<WData>, WUser, WId, WDest>

  或者使用简写:

ap_axiu<WData, WUser, WId, WDest>

2.3 综合报告

================================================================
== HW Interfaces
================================================================
* AXIS
+-------------+---------------+-------+-------+-------+--------+-------+--------+
| Interface   | Register Mode | TDATA | TKEEP | TLAST | TREADY | TSTRB | TVALID |
+-------------+---------------+-------+-------+-------+--------+-------+--------+
| inStreamTop | both          | 64    | 8     | 1     | 1      | 8     | 1      |
+-------------+---------------+-------+-------+-------+--------+-------+--------+* AP_FIFO
+-----------+------------+
| Interface | Data Width |
+-----------+------------+
| outTop    | 65         |
+-----------+------------+* TOP LEVEL CONTROL
+-----------+------------+-----------------------------------+
| Interface | Type       | Ports                             |
+-----------+------------+-----------------------------------+
| ap_clk    | clock      | ap_clk                            |
| ap_rst_n  | reset      | ap_rst_n                          |
| ap_ctrl   | ap_ctrl_hs | ap_done ap_idle ap_ready ap_start |
+-----------+------------+-----------------------------------+

其中 AXIS 和 AP_FIFO 的报告均符合预期。

================================================================
== SW I/O Information
================================================================
* Top Function Arguments
+-------------+-----------+---------------------------------------------+
| Argument    | Direction | Datatype                                    |
+-------------+-----------+---------------------------------------------+
| inStreamTop | in        | stream<hls::axis<ap_uint<64>, 0, 0, 0>, 0>& |
| outTop      | out       | stream<data, 0>&                            |
+-------------+-----------+---------------------------------------------+

软件IO依然提供了丰富的信息。

虽然示例代码中使用了简写“ ap_axiu<64, 0, 0, 0>”,报告仍然还原了全称。

3. 总结

在Vitis HLS中,hls::stream是一个关键的数据结构,用于处理数据流。它类似于C++标准库中的std::stream,但专门设计用于硬件描述语言。hls::stream具有类似无限深度的FIFO的行为,支持顺序读写操作,并可灵活定义数据类型和FIFO深度。通过示例代码和综合报告,我们了解到hls::stream在硬件设计中的重要作用,以及如何根据需求配置不同的接口实现。这使得在设计硬件加速器时更加灵活、可控。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/835619.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于springboot实现贸易行业crm系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现贸易行业crm系统演示 摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了基于springboot的贸易行业crm系统的开发全过程。通过分析基于springboot的贸易行业crm系统管理的不足&#xff0c;创建…

【栈】Leetcode 字符串解码

题目讲解 394. 字符串解码 算法讲解 这道题有四种情况&#xff1a;1.遍历的时候遇到数字&#xff0c;我们计算并保存数字&#xff0c;将它加入到数字栈中&#xff1b;2.遍历的时候遇到[&#xff0c;我们就把字符保存&#xff0c;加入到字符栈中&#xff1b;3.当遇到]&#x…

如何远程控制另一部手机:远程控制使用方法

在现今高科技的社会中&#xff0c;远程控制手机的需求在某些情境下变得越来越重要。不论是为了协助远在他乡的家人解决问题&#xff0c;还是为了确保孩子的在线安全&#xff0c;了解如何实现这一功能都是有益的。本文将为您简要介绍几种远程控制手机的方法及其使用要点。 KKVi…

交直流充电桩检测有哪些实验项目

交直流充电桩检测是为了保证充电桩的正常运行和使用安全&#xff0c;对充电桩的各项性能进行检测的过程。 1. 充电功能检测&#xff1a;检测充电桩的充电功能是否正常&#xff0c;包括充电电流、电压、功率等参数的测量和调整&#xff0c;以及充电过程中的故障诊断和处理。 2.…

2024年4月24日华为春招实习试题【三题】-题目+题解+在线评测,2024.4.24,华为机试

2024年4月24日华为春招实习试题【三题】-题目题解在线评测&#xff0c;2024.4.24&#xff0c;华为机试 &#x1f3e9;题目一描述&#xff1a;输入格式输出格式样例1样例2样例3数据范围解题思路一&#xff1a;dfs解题思路二&#xff1a;直接二分查找哇&#xff01;解题思路三&am…

实验室一块GPU都没有?这个云平台直接送4090免费无门槛代金券!

你有没有一些年代久远的老照片&#xff0c;或是网络下载的图片和视频&#xff0c;低分辨率、模糊还有噪点&#xff0c;如果能一键修复成高清就好了&#xff01;现在在AI算法工程师圈子里很火的GpuMall智算云&#xff0c;上面的镜像可以一键帮你修复照片&#xff01;比如我们用R…

【碳化硅】陷阱(traps)对SiC MOSFET阈值电压漂移的影响

这篇文章是关于硅碳化物(SiC)金属氧化物半导体场效应晶体管(MOSFET)的阈值电压漂移问题的研究。文章的主要目的是通过研究不同的陷阱(traps)对阈值电压漂移的影响,来解决SiC MOSFET的可靠性问题。 摘要(Abstract) 文章提出了一种研究方法,用于分析影响SiC MOSFET阈值…

LabVIEW学习记录4-局部变量、全局变量、共享变量

【LabVIEW】局部变量、全局变量、共享变量 一、变量定义二、内存分配三、竞争状态四、变量创建及简单使用示例4.1 局部变量4.1.1 局部变量的创建4.1.2 局部变量的编程实例 4.2 全局变量4.2.1 创建4.2.2 调用4.2.3 编程实例 4.3 共享变量 一、变量定义 LabVIEW&#xff08;Labor…

【Web后端】servlet基本概念

1.ServletAPI架构 HttpServlet继承GenericServletGenericServlet实现了Servlet接口&#xff0c;ServletConfig接口,Serializable接口自定义Servlet继承HttpServlet 2.Servlet生命周期 第一步&#xff1a;容器加载Servlet第二步&#xff1a;调用Servlet的无参构造方法&#xf…

【生信技能树】数据挖掘全流程

R包的安装&#xff0c;每次做分析的时候先运行这段代码把R包都安装好了&#xff0c;这段代码不需要任何改动&#xff0c;每次分析直接运行。 options("repos""https://mirrors.ustc.edu.cn/CRAN/") if(!require("BiocManager")) install.packag…

TFS(淘宝分布式存储引擎

TFS&#xff08;淘宝分布式存储引擎&#xff09; 什么是TFS&#xff1f; ​ 根据淘宝2016年的数据分析&#xff0c;淘宝卖家已经达到900多万&#xff0c;有上十亿的商品。每一个商品有包括大量的图片和文字(平均&#xff1a;15k)&#xff0c;粗略估计下&#xff0c;数据所占的…

IaC实战指南:DevOps的自动化基石

基础设施即代码&#xff08;Infrastructure as Code&#xff0c;IaC&#xff09;是指利用脚本、配置或编程语言创建和维护基础设施的一组实践和流程。通过IaC&#xff0c;我们可以轻松测试各个组件、实现所需的功能并在最小化停机时间的前提下进行扩展。更值得一提的是&#xf…

ETLCloud中如何执行Java Bean脚本

ETLCloud中如何执行Java Bean脚本 在ETLCloud这一强大的数据集成和转换平台中&#xff0c;执行Java Bean脚本的能力为其增添了更多的灵活性和扩展性。Java Bean脚本不仅仅是一段简单的代码&#xff0c;而是一种强大的工具&#xff0c;可以帮助用户定制和优化数据处理的每一个环…

按键配合LDO实现开关功能

今天给大家分享一个学到的按键开关电路&#xff0c;适合没有足够空间给自锁开关的场景&#xff0c;既可以用于USB供电控制也可以用于电池供电控制。话不多说上电路图先。 核心任务就是通过按键控制LDO芯片的使能管脚的电平状态&#xff0c;这枚NCP芯片高电平使能&#xff0c;VB…

代码随想录算法训练营第四十五天|70. 爬楼梯 (进阶)、322. 零钱兑换、279.完全平方数

70. 爬楼梯 &#xff08;进阶&#xff09; 思路&#xff1a; 我们之前做的 爬楼梯 是只能至多爬两个台阶。 这次改为&#xff1a;一步一个台阶&#xff0c;两个台阶&#xff0c;三个台阶&#xff0c;.......&#xff0c;直到 m个台阶。问有多少种不同的方法可以爬到楼顶呢&a…

Q1季度空气净化器行业线上市场(京东天猫淘宝)销售数据分析

随着人们对健康生活方式的追求&#xff0c;以及消费升级的推动&#xff0c;空气净化器市场正在逐步恢复增长态势。 根据鲸参谋数据显示&#xff0c;今年Q1季度空气净化器在线上市场&#xff08;京东天猫淘宝&#xff09;综合销量超90万件&#xff0c;同比去年增长4%&#xff1…

【Java orm 框架比较】十一 新增 原生jdbc对比

迁移到&#xff08;https://gitee.com/wujiawei1207537021/spring-orm-integration-compare&#xff09; orm框架使用性能比较 比较mybatis-plus、lazy、sqltoy、mybatis-flex、easy-query、mybatis-mp、jpa、dbvisitor、beetlsql、dream_orm、wood、hammer_sql_db、原生jdbc…

1055: 邻接矩阵到邻接表

解法&#xff1a; #include<iostream> using namespace std; int arr[100][100]; int main() {int n;cin >> n;for (int i 0; i < n; i) {for (int j 0; j < n; j) {cin >> arr[i][j];}}for (int i 0; i < n; i) {for (int j 0; j < n; j) …

中东电商Noon测评Hepsiburada贺百狮,Souq,Temu,Nice One,MEIG如何自己养号补单?

养买家号进行中东跨境电商测评&#xff0c;是一个需要细心和技术的过程&#xff0c;特别是在不同的电商平台上Noon&#xff08;Namshi&#xff09;、Hepsiburada&#xff08;贺百狮&#xff09;、Souq&#xff08;亚马逊&#xff09;、Nice One、MEIG、Wadi、Temu。需要搭建完整…

洁净环境微生物监测的解决方案

药品污染控制 Manufacturing 无菌药品生产污染控制意义 01 CCS策略 无菌药品生产污染控制策略&#xff08;CCS) &#xff1a;来自于现行产品和工艺理解&#xff0c;为确保工艺性能和产品质量&#xff0c;所计划的一套体系&#xff0c;针对微生物、热原/内毒素和微粒的控制方…