Vitis HLS 学习笔记--聚合与解聚-AXI主接口

目录

1. 简介

2. 用法及语法

3. 详细解读

4. 总结


1. 简介

在使用 Vitis HLS 工具进行硬件设计时,如果你在接口上使用了结构体,工具会自动把结构体里的所有元素组合成一个整体。就像把一堆零件组装成一个玩具一样。这样做的好处是,数据可以作为一个单元一起处理,而不是分开处理每个元素。

默认情况下,Vitis HLS 会自动做这个组合工作,你不需要特别告诉它去做。此外,为了确保数据的整齐排列,工具可能会在结构体的元素之间填充一些空位,这就像在书架上放书时,为了让书看起来整齐,你可能会在它们之间插入一些支撑物一样。通常,这种排列是按照4字节的大小来进行的,但你也可以设置成其他大小的对齐方式。

2. 用法及语法

#pragma HLS aggregate variable=<variable> compact=<arg>

其中:

variable=<variable>,指定要聚合的变量。

compact=[bit | byte | none | auto],指定已聚合的结构体的对齐方式。可选设置包括:

  • 按位级对齐
  • 按字节级对齐
  • 无对齐
  • 由工具自动判定对齐方式(默认行为)

示例一:

将函数 func 内含 3 个 8 位字段的结构体指针 AB 聚合到一个新的 24 位指针内并按位级对齐。

typedef struct{unsigned char R;unsigned char G;unsigned char B;
} pixel;pixel AB;#pragma HLS aggregate variable=AB compact=bit

示例二:

将含 3 个 8 位字段(R、G 和 B)的结构体阵列 AB[16] 聚合到一个含 16 个元素的 24 位新阵列内。

typedef struct{unsigned char R;unsigned char G;unsigned char B;
} pixel;pixel AB[16];#pragma HLS aggregate variable=AB

3. 详细解读

  • 对于 Vitis Kernel Flow,结构体的所有元素聚合都在 4 字节位置对齐。
  • 对于 Vivado IP Flow,结构体的所有元素聚合都在 1 字节位置对齐。
  • 此对齐可能需要添加位填充,以对齐各元素或者使各元素保持对齐。

可根据结构体元素的声明顺序推断出生成的新字宽标量的位对齐方式。结构体的第一个元素取矢量的 LSB,最后一个元素则与矢量的 MSB 对齐。
如果结构体包含阵列,那么 AGGREGATE 编译指示执行的操作与 ARRAY_RESHAPE 类似,可将重构的阵列与结构体中的其它元素组合在一起。在该结构体内部声明的所有阵列都将全部分区并重构为单一大宽度标量,与其它标量元素封装在一起。

默认情况下,聚合的结构体将进行填充而不是打包,但在 Vivado IP 流程中,可使用 AGGREGATE 编译指示或指令的compact=bit 选项将其打包。但定义为 AXI4 接口的任意端口(m_axi、s_axilite 或 axis)都无法使用compact=bit。

综合示例:

struct A {char Vchar;short Vshort;
};int example (A* arr) {
#pragma HLS interface m_axi port = arr depth = 10
#pragma HLS interface s_axilite port = arr//#pragma HLS aggregate variable = arr compact = autoint sum = 0;for (unsigned i = 0; i < 10; i++) {auto tmp = arr[i];sum += tmp.Vchar + tmp.Vshort;}return sum;
}

TestBench:

#include <iostream>struct A {char Vchar;short Vshort;
};extern int example (A* arr);int main() {A arr[N];for (unsigned i = 0; i < 10; i++) {arr[i].Vchar = i;arr[i].Vshort = i;}auto ret = example(arr);std::cout << "ret = " << ret << std::endl;if (ret != 90)return 1;return 0;
}

Waveform:

通过 Handshake 的 gmem_RVALID 信号,判断 maxi 传输时间段: 

通过查看 gmem_RVALID 有效期间的信号,可以看到结构体变量A在 gmem_RDATA[63:0] 中的分布:

看上去比较奇怪。

4. 总结

在 Vitis HLS 设计中,使用 #pragma HLS aggregate 指令可以将结构体中的元素聚合成一个整体,这样可以作为一个单元一起处理。这种聚合默认是按照4字节对齐,但也可以通过指定 compact 参数来改变对齐方式。例如,compact=bit 会按位级对齐,而 compact=byte 则按字节级对齐。在 Vivado IP Flow 中,默认对齐是1字节,而在 Vitis Kernel Flow 中是4字节。聚合可以优化数据传输和存储,但可能需要位填充以保持对齐。在定义 AXI4 接口时,不能使用 compact=bit。

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

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

相关文章

【西瓜书】大题

1.线性回归 思路&#xff1a;ywxb&#xff0c;w为一维数组&#xff0c;求均方误差MSE&#xff0c;对w和b分别求偏导为0得到关于w和b的闭式求解。预测第十年的代入ywxb求解即可。 2.查准率、查全率 思路&#xff1a;先计算每个算法测试结果的混淆矩阵&#xff0c;再根据混淆矩阵…

pyrouge(ROUGE-1.5.5)的安装步骤和使用说明(适用于Linux 系统)

摘要&#xff1a;本文讲解了如何配置和使用文本摘要的评价指标ROUGE(linux 系统)。 ✅ NLP 研 1 选手的学习笔记 简介&#xff1a;小王&#xff0c;NPU&#xff0c;2023级&#xff0c;计算机技术 研究方向&#xff1a;摘要生成、大语言模型生成 文章目录 一、为啥要写这篇博客&…

问题汇总:MPU6050(软件iic)

以下为个人问题汇总&#xff0c;排查点汇总可能大有缺陷&#xff0c;如有错误&#xff0c;欢迎指正。 排查点汇总 检查软件iic的时序操作用示波器或逻辑分析仪检查波形 无法使用逻辑分析仪进行I/O引脚波形分析 充当SDA、SCL的引脚要配置为推挽输出; 另外&#xff0c;逻辑分…

DeepSORT(目标跟踪算法)中的解三角方程计算标准化残差(解线性方程组)

DeepSORT&#xff08;目标跟踪算法&#xff09;中的解三角方程计算标准化残差&#xff08;解线性方程组&#xff09; flyfish 《DeepSORT&#xff08;目标跟踪算法&#xff09;中的计算观测值与状态估计的马氏距离》这篇文章介绍了Cholesky 分解。Cholesky 分解将协方差矩阵分…

c++序列化和反序列化简单demo

序列化和反序列化是指将数据结构或对象转换为一种可以存储或传输的格式&#xff08;序列化&#xff09;&#xff0c;然后再将其恢复为原来的数据结构或对象&#xff08;反序列化&#xff09;。在C中&#xff0c;通常使用标准库和一些辅助库来实现序列化和反序列化。下面是一个简…

mybatis条件构造bug

一、需求背景 &#xff08;本文源自微博客,且已获得授权&#xff09; 根据传递的参数&#xff0c;使用mybatis-plus动态构造查询语句。参数对象如下&#xff1a; private Integer id;private String ip;/*** 状态:0封锁;1:已解封*/private Integer status;/*** 开始时间*…

挑战绝对不可能:再证有长度不同的射线

黄小宁 一空间坐标系中有公共汽车A&#xff0c;A中各座位到司机处的距离h是随着座位的不同而不同的变数&#xff0c;例如5号座位到司机处的距离是h3&#xff0c;…h5&#xff0c;…。A移动了一段距离变为汽车B≌A&#xff0c;B中5号座位到司机处的距离h’h3&#xff0c;…h’h5…

2002NOIP普及组真题 3. 产生数

线上OJ 地址&#xff1a; 【02NOIP普及组】产生数 核心思想&#xff1a;组合数 dfs 高精度 1、如果一个数字有 3 位&#xff0c;每位有 2种可能性&#xff0c;则数字的 组合数 为 2*2*2 8 种 。故&#xff0c;只要求出每一位数字有多少种变体即可。 求 0 ~ 9 每一个数字的…

mysql 如何分布式部署

MySQL的分布式部署是一个涉及多个步骤和配置的过程&#xff0c;以确保数据库系统能够支持大规模数据存储、高并发访问和容错性。以下是MySQL分布式部署的主要步骤和要点&#xff0c;结合参考文章中的相关信息进行整理&#xff1a; 一、前期准备 环境准备&#xff1a; 选择合…

LLVM Cpu0 新后端 系列课程总结

想好好熟悉一下llvm开发一个新后端都要干什么&#xff0c;于是参考了老师的系列文章&#xff1a; LLVM 后端实践笔记 代码在这里&#xff08;还没来得及准备&#xff0c;先用网盘暂存一下&#xff09;&#xff1a; 链接: https://pan.baidu.com/s/1yLAtXs9XwtyEzYSlDCSlqw?…

AtCoder Beginner Contest 355

C - Bingo 2 题意 有一个 n n n\times n nn 的网格&#xff0c;初始全白&#xff0c;有 t t t 次操作&#xff0c;每次操作涂黑一个指定的格子。 问执行第几个操作后&#xff0c;有一行或一列或对角线的格子全部被涂黑。 思路 如果暴力判断&#xff0c;那么总时间复杂度…

一文搞懂线性回归模型

1、简单介绍 线性回归模型是一种基础的预测建模技术&#xff0c;用于分析一个或多个自变量&#xff08;特征&#xff09;与因变量&#xff08;目标&#xff09;之间的关系。它的基本假设是目标变量&#xff08;y&#xff09;与特征&#xff08;X&#xff09;之间存在线性关系。…

提升篇---接口和抽象类的本质区别

大家好&#xff0c;这里是教授.F 语法区别&#xff1a; 方法实现&#xff1a;接口中定义的方法默认都是抽象的&#xff0c;不包含方法的实现&#xff1b;而抽象类可以包含抽象方法和具体方法的实现。 多继承&#xff1a;一个类只能继承一个抽象类&#xff0c;但可以实现多个接…

测试与开发

目录 按照测试目标分类 界面测试 功能测试 性能测试 可靠性测试 安全性测试 易用性测试 按照执行方式分类&#xff1a; 测试方法 白盒测试 语句覆盖 条件覆盖 判定条件覆盖 条件组合覆盖 路径覆盖 黑盒测试 灰盒测试 按照测试阶段分类 单元测试 集成测试 …

【iOS】界面推出的方法

【iOS】界面推出的方法 在学习过程中我们发现在iOS中有两种界面推出的方法&#xff1a;push 和 present这两种方法都可以用来推出一个新的界面 但是这两者是存在区别的 push 方法是通过 UINavigationController 进行导航,新的视图控制器会被压入导航栈中&#xff0c;可以跨级…

写给大数据开发,如何去掌握数据分析

这篇文章源于自己一个大数据开发&#xff0c;天天要做分析的事情&#xff0c;发现数据分析实在高大上很多&#xff0c;写代码和做汇报可真比不了。。。。 文章目录 1. 引言2. 数据分析的重要性2.1 技能对比2.2 业务理解的差距 3. 提升数据分析能力的方向4. 数据分析的系统过程4…

前端 JS 经典:Promise 详解

1. Promise 由来 在以前我们实现异步是用的回调函数&#xff0c;当一个异步请求需要依赖上一个异步请求返回的结果的时候&#xff0c;就会形成如下这种的调用结构。 请求1(function (结果1) {请求2(function (结果2) {请求3(function(结果3)) {请求4(function(结果4) {})}});…

Windows下载安装RabbitMQ客户端(2024最新篇)

文章目录 RabbitMQ认知RabbitMQ下载RabbitMQ安装 更多相关内容可查看 RabbitMQ认知 定义&#xff1a;RabbitMQ是一个消息中间件&#xff0c;它接受并转发消息。你可以把它当做一个快递站点&#xff0c;当你要发送一个包裹时&#xff0c;你把你的包裹放到快递站&#xff0c;快递…

2024年土建施工员考试题库及答案

一、单选题 1.某工程项目桩基工程采用套管成孔灌注桩&#xff0c;为了保证施工质量&#xff0c;桩管灌满混凝土后开始拔管&#xff0c;按照规定&#xff0c;管内应保持不少于&#xff08;&#xff09;m高的混凝土。 A.1 B.1.5 C.2 D.2.5 答案&#xff1a;C 解析&…

免费!GPT-4o发布,实时语音视频丝滑交互

We’re announcing GPT-4o, our new flagship model that can reason across audio, vision, and text in real time. 5月14日凌晨&#xff0c;OpenAI召开了春季发布会&#xff0c;发布会上公布了新一代旗舰型生成式人工智能大模型【GPT-4o】&#xff0c;并表示该模型对所有免费…