Vitis HLS 学习笔记--MAXI位宽拓展

news2024/11/15 14:04:53

目录

1. 简介

2. 用法解析

2.1 命令语法

2.2 实例展示

3. 注意事项

4. 总结


1. 简介

在 Vitis 工具流程中,Vitis HLS 能够自动将 m_axi 接口端口的大小调整为 512 位,以改善突发访问能力。但是,端口宽度自动调整仅支持标准 C 语言数据类型,不支持聚合类型,例如,ap_int、ap_uint、struct 或 array。

打个比方,你有一个水管,HLS 工具可以自动把这个水管变粗,让更多的水(数据)一次通过,这样就提高了效率。但是,这个自动变粗的魔法只适用于简单的水管(标准 C 语言数据类型),对于一些特殊设计的水管(比如 ap_int、ap_uint、struct 或 array 这些复杂的数据类型),它就不起作用了。

本文还展示一个例子,了解如何在Vivado IP流程中为m_axi端口启用自动端口扩展。

在 Vitis Kernel Flow 中,默认情况下以下两个config_interface设置是开启的:

config_interface -m_axi_max_widen_bitwidth 256
config_interface -m_axi_alignment_byte_size 64

在Vivado IP流程中,则需要显式设置它们。可以通过 GUI 或者编译指令设置。

2. 用法解析

2.1 命令语法

HLS 工具使用以下 2 条命令来自动调整端口宽度:

  • config_interface -m_axi_max_widen_bitwidth <N>:将 M-AXI 接口上的突发自动拓宽至指定的位宽。<N> 的值必须为 2 的幂(介于 0 到 1024 之间)。
  • config_interface -m_axi_alignment_byte_size <N>:突发拓宽还需要明确的对齐属性。假定映射到 m_axi 接口的指针至少对齐到所提供的宽度(以字节为单位,值为 2 的幂)。这样有助于自动进行突发拓宽。

或者通过 GUI 界面进行设置:

2.2 实例展示

#include <cstdlib>
#include <iostream>

constexpr uint64_t N = 64;
constexpr uint64_t MAXWBW = 256;

void example(int a[N], int b[N]) {
#pragma HLS INTERFACE m_axi port = a depth = N bundle = gmem max_widen_bitwidth = MAXWBW
#pragma HLS INTERFACE m_axi port = b depth = N bundle = gmem

    int buff[N];

    for (size_t i = 0; i < N; ++i) {
    #pragma HLS PIPELINE II = 1
        buff[i] = a[i];
        buff[i] = buff[i] + 100;
        b[i] = buff[i];
    }
}
  • #include <cstdlib> 和 #include <iostream>:这些是标准 C++ 头文件,用于包含有关内存分配和输入/输出的函数和类。
  • constexpr uint64_t N = 64; 和 constexpr uint64_t MAXWBW = 256;:这些是常量定义,其中 N 表示数组大小,MAXWBW 表示最大宽度。
  • #pragma HLS INTERFACE m_axi port = a depth = N bundle = gmem max_widen_bitwidth = MAXWBW 和 #pragma HLS INTERFACE m_axi port = b depth = N bundle = gmem:这些是 Vitis HLS 的指令,用于指定接口和内存映射。它们告诉综合工具如何处理输入和输出。
     

查看综合报告:

================================================================
== HW Interfaces
================================================================
* M_AXI
+------------+------------+---------------+---------+--------+----------+-----------+--------------+--------------+-------------+-------------+
| Interface  | Data Width | Address Width | Latency | Offset | Register | Max Widen | Max Read     | Max Write    | Num Read    | Num Write   |
|            | (SW->HW)   |               |         |        |          | Bitwidth  | Burst Length | Burst Length | Outstanding | Outstanding |
+------------+------------+---------------+---------+--------+----------+-----------+--------------+--------------+-------------+-------------+
| m_axi_gmem | 32 -> 256  | 64            | 0       | slave  | 0        | 256       | 16           | 16           | 16          | 16          |
+------------+------------+---------------+---------+--------+----------+-----------+--------------+--------------+-------------+-------------+

3. 注意事项

接口上的结构体会阻止端口的自动拓宽操作。必须将结构体拆分为多个独立元素才能启用MAXI位宽拓展功能。

使用端口宽度自动调整功能有利有弊,需在使用时审慎考量。此功能可缩短来自 DDR 的读取时延,因为该工具读取的是大矢量而不是数据类型大小。它还会添加更多必要资源,以缓冲巨型矢量,并将数据相应转换为数据路径大小。

仅当工具可看到突发访问时,自动调整端口宽度大小功能才能调整端口大小。因此,突发所需的所有前置条件(如 AXI突发传输 中所述)都必须得到满足后才能调整端口大小。这些前置条件包括:

  • 必须按单调递增访问顺序(访问的存储器位置和访问时间两方面都是如此)。不能访问位于先前访问的两处存储器位置之间的存储器位置,即没有重叠。
  • 从全局存储器进行访问时使用的模式应采用顺序访问模式,并具有下列附加要求:
    • 需对非矢量类型执行顺序访问
    • 顺序访问的起始位置需对齐到拓宽后的字大小
    • 顺序访问的长度需被拓宽因子整除

4. 总结

在Vitis工具流程中,Vitis HLS可以通过自动调整m_axi接口端口宽度至512位来提高突发访问能力。这种自动端口扩展仅适用于标准C语言数据类型,不支持聚合类型。为了在Vivado IP流程中启用这一功能,必须显式设置config_interface命令。设置m_axi_max_widen_bitwidth和m_axi_alignment_byte_size可以指定接口的最大位宽和对齐字节数。代码实例展示了如何通过HLS指令配置接口和内存映射,以优化性能。使用此功能需注意结构体会阻止端口拓宽,且自动调整端口宽度功能仅在满足突发访问的前提条件时才能生效。此功能可缩短读取时延,但也会增加资源需求。

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

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

相关文章

2024年自然语言处理科学与信息检索技术国际会议(ICNLPSIRT 2024)

2024年自然语言处理科学与信息检索技术国际会议(ICNLPSIRT 2024) 2024 International Conference on Natural Language Processing Science and Information Retrieval Technology (ICNLPSIRT 2024) 会议地点&#xff1a;武汉&#xff0c;中国 网址&#xff1a;http://www.i…

短剧看剧系统投流版系统搭建,前端uni-app

目录 前言&#xff1a; 一、短剧看剧系统常规款短剧系统和投流版的区别&#xff1f; 二、后端体系 1.管理端&#xff1a; 2.代理投流端 三、功能区别 总结&#xff1a; 前言&#xff1a; 23年上半年共上新微短剧481部&#xff0c;相较于2022年全年上新的454部&#xff0…

RE_Python

python的exe文件解包 要确保使用工具的环境是和Python version一样&#xff08;我这里是需要3.11&#xff09; 不然&#xff0c;ezpy.exe_extracted文件夹点进去&#xff0c;类似PYZ-00.pyz_extracted的文件夹会是空的&#xff01;&#xff01; pyc反编译问题 ImportError:…

AIGC+营销:AI在营销领域的演变与营销人员的新角色

一、AI在营销领域的演变 随着AI技术的不断发展&#xff0c;营销领域也迎来了新的变革。从目前的“AI Copilot”阶段&#xff0c;到未来的“AI Agent”和“AI自主营销团队”阶段&#xff0c;AI的角色将逐渐从辅助人类到独立承担更多职责。 AI Copilot&#xff08;副驾驶&#…

glm-4v-9b 部署

glm-4v-9b 模型文件地址 GLM-4 仓库文件地址 官方测试 硬件配置和系统要求 官方测试硬件信息: OS: Ubuntu 22.04Memory: 512G…

爱校对繁体字校对上线——让企业文档更精准

在港澳台地区&#xff0c;企业每天都要处理大量繁体字文档&#xff0c;确保文档的准确性和专业性至关重要。爱校对全新推出的繁体字校对服务&#xff0c;专为企业设计&#xff0c;自动检测并修正拼写和语法错误&#xff0c;让您的文档管理更加轻松高效&#xff0c;提升企业形象…

光伏无人机踏勘需要使用哪些设备?用到哪些原理?

随着全球能源结构的转型和绿色能源的大力推广&#xff0c;光伏电站的建设和运维正成为能源领域的热点。然而&#xff0c;光伏电站的选址、建设和后期运维过程中&#xff0c;往往面临着地形复杂、设备分散、巡检难度大等挑战。在这一背景下&#xff0c;无人机踏勘技术以其独特的…

BC8 十六进制转十进制

BC8 十六进制转十进制 废话不多说上题目&#xff1a; 代码如下&#xff1a; #include<stdio.h> int main() {printf("%15d", 0XABCDEF);return 0; }这里总结下C语言的常见语法点&#xff1a; 1&#xff1a;%m.n&#xff0c;m表示整个数值占多少位包括小数点&am…

自养号测评防关联的关键点解析, 确保店铺权重和买家账号的安全稳定

现在很多大卖都是自己管理几百个账号&#xff0c;交给服务商不是特别靠谱。你不知道服务商账号质量怎么样&#xff0c;账号一天下了多少你也不清楚&#xff0c;如果下了很多单万一封号被关联了怎么办&#xff0c;你也不知道服务商用什么卡给你下单&#xff0c;用一些低汇率和黑…

数据结构之初始泛型

找往期文章包括但不限于本期文章中不懂的知识点&#xff1a; 个人主页&#xff1a;我要学编程(ಥ_ಥ)-CSDN博客 所属专栏&#xff1a;数据结构&#xff08;Java版&#xff09; 目录 深入了解包装类 包装类的由来 装箱与拆箱 面试题 泛型 泛型的语法与使用…

【iOS】MRC下的单例模式批量创建单例

单例模式的介绍和ARC下的单例请见这篇&#xff1a;【iOS】单例模式 目录 关闭ARC环境MRC下的单例ARC下的单例批量创建单例Demo 关闭ARC环境 首先关闭ARC环境&#xff0c;即打开MRC&#xff1a; 或是指定某特定目标文件为非ARC环境&#xff1a; 双击某个类文件&#xff0c;指定…

Spring Boot整合WebSocket和Redis实现直播间在线人数统计功能

&#x1f604; 19年之后由于某些原因断更了三年&#xff0c;23年重新扬帆起航&#xff0c;推出更多优质博文&#xff0c;希望大家多多支持&#xff5e; &#x1f337; 古之立大事者&#xff0c;不惟有超世之才&#xff0c;亦必有坚忍不拔之志 &#x1f390; 个人CSND主页——Mi…

【PyTorch】PyTorch深度学习框架实战(二):torchrun

一、引言 PyTorch由facebook人工智能研究院研发&#xff0c;2017年1月被提出&#xff0c;是一个开源的Python机器学习库&#xff0c;基于Torch&#xff0c;用于自然语言处理等应用程序。PyTorch既可以看作加入了GPU支持的numpy&#xff0c;同时也可以看成一个拥有自动求导功能的…

【React】vscode 中 React 自动补齐标签设置

1.打开设置 2.搜索 includeLanguages 3. 在Emmet 下&#xff0c;点击“添加项”&#xff0c;添加一项 javascript --> javascriptreact 4. 重启vs code

【SkyWalking】使用PostgreSQL做存储K8s部署

拉取镜像 docker pull apache/skywalking-ui:10.0.1 docker tag apache/skywalking-ui:10.0.1 xxx/xxx/skywalking-ui:10.0.1 docker push xxx/xxx/skywalking-ui:10.0.1docker pull apache/skywalking-oap-server:10.0.1 docker tag apache/skywalking-oap-server:10.0.1 xxx…

第一波因为AI失业的设计师

“学了很多年美术&#xff0c;画功不如AI输入词条几十秒就出的画” 200多年前&#xff0c;摄影技术刚诞生时&#xff0c;画家们也是眼睁睁看着照相机攻城略地&#xff0c;法国著名设计师保罗德拉罗也留下了那句经典的论断&#xff1a;“从今天起&#xff0c;绘画死亡了。”但历…

解锁俄罗斯市场:如何选择优质的俄罗斯云服务器

在当前云计算市场上&#xff0c;很多大型的云厂商并没有俄罗斯服务器的云节点&#xff0c;这给许多企业在拓展海外业务时带来了一定的困扰。然而&#xff0c;俄罗斯作为一个经济发展迅速的国家&#xff0c;其市场潜力不可忽视。因此&#xff0c;选择一台优质的俄罗斯云服务器成…

仪表板展示|DataEase看中国:2024年高考数据前瞻

背景介绍 2024年高考即将来临。根据教育部公布的数据&#xff0c;2024年全国高考报名人数为1342万人&#xff0c;相比2023年增加了51万人。高考报名人数的增加&#xff0c;既体现了我国基础教育的普及范围之广&#xff0c;也反映了社会对高等教育的重视和需求。 随着中央和各…

系统与软件工程软件测试文档

组织级软件测试文档结构图集 组织级测试过程文档集 组织级测试规格说明描述组织层面的测试信息&#xff0c;并且不依赖于项目。其在组织级测试过程中的典型事例包括&#xff1a; 测试方针&#xff1a;测试方针定义了组织内适用的软件测试的目的和原则&#xff0c;它定义了测试…

ElasticSearch教程(详解版)

本篇博客将向各位详细介绍elasticsearch&#xff0c;也算是对我最近学完elasticsearch的一个总结&#xff0c;对于如何在Kibana中使用DSL指令&#xff0c;本篇文章不会进行介绍&#xff0c;这里只会介绍在java中如何进行使用&#xff0c;保证你看完之后就会在项目中进行上手&am…