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

news2024/12/26 9:31:38

目录

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 = auto

    int 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.coloradmin.cn/o/1794924.html

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

相关文章

【System Verilog and UVM基础入门4】程序和接口

目录 方法task和函数function 接口 [System Verilog特性] 方法task和函数function 首先要明白一个事情!Task任务,是消耗时间的,函数function是不消耗时间的! 这样写看着是不是很高大上呢?此外,如果我们想修改时钟周期怎么办呢?这时我们可以在task clk_gen(int period…

从报名到领证:软考高级【系统分析师】报名考试全攻略

本文共计13156字&#xff0c;预计阅读39分钟。包括七个篇章&#xff1a;报名、准考证打印、备考、考试、成绩查询、证书领取及常见问题。 不想看全文的可以点击目录&#xff0c;找到自己想看的篇章进行阅读。 一、报名篇 报名条件要求&#xff1a; 1.凡遵守中华人民共和国宪…

盛夏之约,即将启程,2024中国北京消防展将于6月26举行

盛夏之约&#xff0c;即将启程&#xff0c;2024中国北京消防展将于6月26举行 盛夏之约&#xff0c;即将启程&#xff01;备受瞩目的2024中国&#xff08;北京&#xff09;消防技术与设备展览会将于6月26-28 日在北京.首钢会展中心盛大召开。作为消防安全和应急救援的年度盛会&…

Camtasia Studio2024永久免费版及最新版本功能讲解

在当前数字化时代&#xff0c;视频内容的制作与编辑变得愈发重要。无论是企业宣传、在线教育还是个人Vlog制作&#xff0c;一款功能强大且易于上手的视频编辑软件成为了刚需。Camtasia Studio作为市场上备受欢迎的视频编辑与屏幕录像工具&#xff0c;凭借其强大的功能与用户友好…

Golang——gRPC与ProtoBuf介绍

一. 安装 1.1 gRPC简介 gRPC由google开发&#xff0c;是一款语言中立&#xff0c;平台中立&#xff0c;开源的远程过程调用系统。gRPC客户端和服务器可以在多种环境中运行和交互&#xff0c;例如用java写一个服务器端&#xff0c;可以用go语言写客户端调用。 1.2 gRPC与Protob…

android睡眠分期图

一、效果图 做医疗类项目&#xff0c;经常会遇到做各种图表&#xff0c;本文做的睡眠分期图。 二、代码 引入用到的库 api joda-time:joda-time:2.10.1 调用代码 /*** 睡眠* 分期*/private SleepChartAdapter mAdapter;private SleepChartAttrs mAttrs;private List<SleepI…

day26-单元测试

1. 单元测试Junit 1.1 什么是单元测试&#xff1f;&#xff08;掌握&#xff09; 1.2 Junit的特点&#xff1f;&#xff08;掌握&#xff09; 1.3 基本用法&#xff1a;&#xff08;掌握&#xff09; 实际开发中单元测试的使用方式&#xff08;掌握&#xff09; public class …

安徽京准NTP时钟系统:GPS北斗卫星授时下的生活重塑

安徽京准NTP时钟系统&#xff1a;GPS北斗卫星授时下的生活重塑 安徽京准NTP时钟系统&#xff1a;GPS北斗卫星授时下的生活重塑 时间的流逝自古以来时钟都是人类生活与活动的基础。然而&#xff0c;随着科技的进步&#xff0c;我们对时间管理和测量的方法已经发生了翻天覆地的变…

【UML用户指南】-09-对基本结构建模-类图

目录 1、概述 2、引入 3、过程 4、常用建模技术 4.1、对简单协作建模 4.2、对逻辑数据库模式建模 4.3、正向工程 1、概述 类图是面向对象系统建模中最常见的图。 类图显示一组类、接口、协作以及它们之间的关系 类图用于对系统静态设计视图建模。其大多数涉及到对系统的…

完整指南:远程管理 Linux 服务器的 Xshell6 和 Xftp6 使用方法(Xshell无法启动:要继续使用此程序........,的解决方法)

&#x1f600;前言 在当今软件开发领域&#xff0c;远程管理 Linux 服务器已成为日常工作的重要组成部分。随着团队成员分布在不同的地理位置&#xff0c;远程登录工具的使用变得至关重要&#xff0c;它们为开发人员提供了访问和管理服务器的便捷方式。本文将介绍两款功能强大的…

深度学习框架-----Tensorflow2基础

一、基础概念 1、深度学习框架基础概念 深度学习框架的出现降低了入的槛。我们不在需要丛从复杂的神经网络和反向传播算法开始编代码&#xff0c;可以依据需要&#xff0c;使用已有的模型配置参数&#xff0c;而模型的参数自动训练得到。我们也可以在已有模型的基础上增加自定…

[word] word怎样转换成pdf #职场发展#经验分享#职场发展

word怎样转换成pdf word怎样转换成pdf&#xff1f;word格式是办公中常会用到的格式&#xff0c;word格式编辑好了要想转换成pdf格式再来传输的话需要怎么操作呢&#xff1f;小编这就给大家分享下操作方法&#xff0c;一起来学习下吧&#xff01; 1、安装得力PDF转换器&#x…

vmware将物理机|虚拟机转化为vmware虚机

有时&#xff0c;我们需要从不同的云平台迁移虚拟机、上下云、或者需要将不再受支持的老旧的物理服务器转化为虚拟机&#xff0c;这时&#xff0c;我们可以用一款虚拟机转化工具&#xff1a;vmware vcenter converter standalone&#xff0c;我用的是6.6的版本&#xff0c;当然…

【Linux取经路】信号的发送与保存

文章目录 一、重新理解发送信号二、信号的保存、阻塞信号的概念三、信号集操作函数3.1 sigprocmask3.2 sigpending 四、阻塞信号代码验证五、结语 一、重新理解发送信号 进程通过位图来实现对普通信号&#xff08;1-31号信号&#xff09;的保存&#xff0c;该位图保存在进程的…

DSP28335模块配置模板系列——ADC配置模板

一、配置步骤 1.使能并配置高速时钟HSPCLK、ADC校验 EALLOW;SysCtrlRegs.PCLKCR0.bit.ADCENCLK 1; EDIS;EALLOW;SysCtrlRegs.HISPCP.all ADC_MODCLK; // HSPCLK SYSCLKOUT/(2*ADC_MODCLK)ADC_cal();EDIS; 这里ADC_MODCLK3&#xff0c;所以HSPCLK时钟为150/625Mhz 2.配…

C语言基础——数组(2)

ʕ • ᴥ • ʔ づ♡ど &#x1f389; 欢迎点赞支持&#x1f389; 个人主页&#xff1a;励志不掉头发的内向程序员&#xff1b; 专栏主页&#xff1a;C语言基础&#xff1b; 文章目录 前言 一、二维数组的创建 1.1 二维数组的概念 1.2二维数组的创建 二、二维数组…

javascript导入excel文件

导入文件用到一个 xlsx.core.js 的包。 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><script type"tex…

晶振时钟外设总线

如果芯片只有一个时钟信号脚怎么接晶振&#xff1f; 答&#xff1a;如果芯片只有一个时钟信号引脚&#xff0c;说明这是一个时钟输入脚&#xff08;OSC IN&#xff09;&#xff0c;为有源晶振&#xff08;晶体振荡器&#xff09;应用方案&#xff0c;请选择有源晶振并连接其时…

AMD显卡和英伟达显卡哪个好?

显卡是计算机中负责处理图形和视频输出的硬件设备&#xff0c;主要分为两种类型&#xff1a;AMD的A卡和NVIDIA的N卡。那么AMD显卡和英伟达显卡哪个好&#xff1f;怎么选&#xff1f; 答&#xff1a;不能一概而论地说哪个好&#xff0c;因为它们各有优势&#xff0c;选择应基于…

echaerts图例自动滚动并隐藏翻页按钮

效果图 代码 legend: {itemHeight: 14,itemWidth: 14,height: "300", //决定显示多少个// 通过 CSS 完全隐藏翻页按钮pageButtonItemGap: 0,pageButtonPosition: end,pageIconColor: transparent, // 隐藏翻页按钮pageIconInactiveColor: transparent, // 隐藏翻页按…