0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Vitis软件平台、vitis实例、裸机SOC(SDK)程序移植教程

电子设计 来源:VagueCheung的博客 作者:VagueCheung的博客 2022-07-25 18:07 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

本文转载自:VagueCheung的博客

赛灵思公司(Xilinx)推出Vitis——这是一款统一软件平台,可以让包括软件工程师AI科学家在内的广大开发者都能受益于硬件灵活应变的优势。历经5年、投入总计1000人打造而成,Vitis统一软件平台无需用户深入掌握硬件专业知识,即可根据软件或算法代码自动适配和使用赛灵思硬件架构。此外,Vitis 平台不限制使用专有开发环境,而是可以插入到通用的软件开发工具中,并利用丰富的优化过的开源库,使开发者能够专注于算法的开发。Vitis独立于Vivado设计套件,后者仍然继续为希望使用硬件代码进行编程的用户提供支持。但是,Vitis也能够通过将硬件模块封装成软件可调用的函数, 从而提高硬件开发者的工作效率。

Vitis统一软件平台的四层架构

o4YBAGAKOeuARHC2AAOporZIYS4132.png

Vitis构建在基于堆栈的架构之上,共有四层。

第一层是基础层,是Vitis目标平台。该平台由电路板和预编程I/O构成;

第二层是Vitis 核心开发套件,覆盖开源赛灵思运行时库,以管理不同域间的数据移动, 包括子系统、即将发布的Versal ACAP内的AI 引擎和必要的外部主机。此外,该层也提供编译器、分析器和调试器等核心开发工具。这些工具均能与业界标准的构建系统与开发环境无缝集成;

在第三层,8个Vitis 库提供400余种优化的开源应用。这8个库分别是:Vitis 基本线性代数子程序(B LAS)库、Vitis 求解器库、Vitis安全库、Vitis视觉库、Vitis数据压缩库、Vitis计量金融库、Vitis数据库集和Vitis AI 库。借助这些库,软件开发者可以使用标准的应用编程接口(API)来实现硬件加速;

Vitis AI是Vitis 平台的第四层,也是最具有变革意义的一层。它集成了特定领域架构(DSA)。 DSA 提供了针对AI模型的硬件实现,开发者可以使用包括TensorFlow和Caffe等业界领先框架对其进行配置与编程。Vitis AI提供的工具链能在数分钟内完成优化、量化和编译操作,在赛灵思器件上高效地运行预先训练好的AI模型。此外,它也为从边缘到云端的部署提供了专用API,实现业界一流的推断性能与效率。赛灵思陆续还将推出另一个DSA(Vitis Video),支持从FFmpeg直接进行编码并提供同样超级简单且功能极强大的端到端视频解决方案。目前,由合作伙伴公司提供的DSA包括:与GATK 集成用于基因分析的Illumina,与ElasticSearch 集成用于大数据分析的BlackLynx, 以及当前我们客户正在使用的专有DSA。

Vitis拥有三大特点:第一是开放,第二是标准,第三是免费。首先,Vitis统一软件平台支持在赛灵思异构平台上开发嵌入式软件和加速应用,包括FPGA、SoC和Versal ACAP,为边缘、云和混合计算应用 加速提供了统一编程模型。其次,Vitis可与高层次框架进行集成,可以通过加速库采用C、C++Python进行开发,也可以使用基于RTL的加速器和低层次运行是API对实现方案进行粒度更精确的控制。

硬件加速应用程序开发流程:

对于基于FPGA的加速,Vitis核心开发套件支持用户通过API函数创建软件应用程序,例如OpenCL函数,在Alveo加速卡上运行加速硬核。Vitis核心开发套件也支持将软件程序运行在基于Linux嵌入式处理器平台上,例如ZYNQ的UltraScale+MPSOC设备。对于嵌入式处理器平台Vitis开发套件执行模型也通过OpenCL API和基于Linux的Xilinx运行库(XRT)来调度硬核和控制数据的搬移。(加速库和xilinx运行库在GitHub上可下载)

Vitis核心开发套件可支持Alveo U50、U200、U250、U280加速卡,也支持zcu102、zcu104、zc702、zc706嵌入式处理器平台。除了以上比较流行的平台外,同时也支持自定义平台。

Vitis软件平台允许用户将数据中心应用程序移植到嵌入式平台上。Vitis核心开发套件不仅具有适用于硬核的V++编译器。也具有运行在X86主机的g++编译器和运行在Xilinx设备的嵌入式处理器的Arm编译器

Vitis与SDK对比:

pIYBAGAKOiuAcbwdAAFPhTf3mTA068.png

系统项目指的是什么?域domain可以理解成SDK中的BSP么?

系统项目就是指在Vitis中创建的application。

pIYBAGAKOnCAd4RrAAFR1EC4nTk200.png

Vitis软件平台 SDK
可在Vitis中直接创建一个平台项目(需要添加vivado生成的XSA文件或者从平台库中添加任意平台作为基础例如vck190.xsa、zc702.xsa、zc706.xsa、zcu102.xsa、zed.xsa) SDK是从vivado工程中导出硬件平台项目
为平台添加域 创建BSP
创建应用程序(通过平台的域) 创建应用程序(通过BSP)
改制一个预置平台 无提及
可在一个系统项目中管理多个应用程序 无提及
修改并且更新硬件 基本相同,工作流程可能有细微改变
在硬件上调试应用程序 基本相同,工作流程可能有细微改变
在一个系统项目下运行和调试应用程序 无提及
创建boot image 基本相同,工作流程可能有细微改变
Flash 编程 基本相同,工作流程可能有细微改变
生成设备树 基本相同,工作流程可能有细微改变
通过User-Modify/Custom FSBL测试应用程序 基本相同,工作流程可能有细微改变
修改域源文件 基本相同,工作流程可能有细微改变

实测Vitis编译时间要比SDK编译时间略长;

Vitis实现简单的HelloWord

基于黑金ZYNQ 7020开发板创建工程,打开vivado2019.2一步步创建工程,vivado部分还是与之前一模一样没有任何改变。

pIYBAGAKOr6AQoEfAAD0LutSQIw236.png

pIYBAGAKOweANY-LAABJdAmuS-U471.png

pIYBAGAKO5CANq9yAABvER9AfFw755.png

pIYBAGAKO86AWqTsAABoYHI-DVs374.png

pIYBAGAKPA2AMJK_AACXPiE3pBc295.png

pIYBAGAKPFyAa31QAABwD5HDRfk161.png

创建完工程,创建同一个 Block Design工程

o4YBAGAKPJyACVLjAAEqeU2WE4M440.png

添加ZYNQ 核

pIYBAGAKPOuAVHgeAACL23gTgW4011.png

双击ZYNQ核设置一下,这里设置跟板子一致UART1,波特率选择115200,没有用到PL,AXI也没使用。

pIYBAGAKPSqAC3NEAAD30cfmWWs263.png

o4YBAGAKPWqAP4JtAAClhVwyALY696.png

pIYBAGAKPaiAbfsfAADnDvbEND4033.png

时钟默认即可,黑金的7020最高可以跑到767Mhz。

pIYBAGAKPeeABSsTAADE1HNh-os689.png

pIYBAGAKPiWAS-etAADXWcnqBBo839.png

o4YBAGAKPmSAKsKNAACblvJcb_Y075.png

设置完成。自动连线。

o4YBAGAKPqKAA4PaAABfx4_yh3g463.png

pIYBAGAKPwGAb2zxAACmPmKfaGg432.png

生成文件:

pIYBAGAKP0CAXzd-AAGO3AvIcA4804.png

o4YBAGAKP3-AeOPHAABW2Gtluco646.png

生成顶层文件:

o4YBAGAKP7-AUoSRAAGElqgodyE015.png

o4YBAGAKQD2AOnK8AABGQGFKiAw989.png

至此PL部分完成了。

o4YBAGAKQHuAVqpaAAC4nqkpGlw077.png

导出设计到软件,没有用到PL,所以不用综合生成bit文件了,这里直接导出

pIYBAGAKQMOAem6IAADfkCbYXtk395.png

pIYBAGAKQQGAfb1bAAAxvSd0W7k381.png

导出完成,这里开始软件操作,打开vitis先创建一个 platform project导入刚才的设计xsa文件。

这里与SDK不同,SDK是从vivado直接Launch打开,而Vitis是独立与vivado IDE的开发工具。

o4YBAGAKQYWAVzsuAABzyW5HlwA499.png

pIYBAGAKQcqAWmI8AAFBsic-iq4965.png

o4YBAGAKQgmAKhCMAABv7dQaxOI359.png

选择Vivado导出的设计,点击 finish完成

o4YBAGAKQk-AeffXAABntidiqCk983.png

pIYBAGAKQquABnDsAAEv5OZCubM013.png

创建一个Application project:

o4YBAGAKQuqAcggwAAD5QKXbUr0062.png

o4YBAGAKQymAcJrdAAFJMOAGNYs460.png

pIYBAGAKQ2qAQAYiAAByTtpg-fI706.png

o4YBAGAKQ62AfstwAAA-ltSrND8241.png

o4YBAGAKQ-uAQ11AAAB0cy16KA8513.png

o4YBAGAKRCqAImi_AAEyFv6rDA4410.png

编译helloworld工程

o4YBAGAKRGyAOjHUAAEFfstjnHk566.png

给板子接好上电,连接串口助手软件,打开串口设置如下,com口根据实际而定。

o4YBAGAKRK6AFPTxAABK6rwDYos949.png

下载运行

o4YBAGAKRO6AcAZ7AAD4z84d0ms021.png

已经输出了“hello world”

o4YBAGAKRS2AN4ANAACArXPXMDM913.png

移植vivado2019.2之前版本的SOC工程:

1)Vivado部分:

使用Vivado 2019.2打开之前版本的vivado工程项目 ,重新综合生成bit流文件,如果工程中不设计PL部分则不需要生成bit文件。综合通过之后导出硬件

File——Export——Export HardWare,导出成功后会发现在vivado工程路径中会多出一个.XSA文件(个人理解与SDK导出的Hdf文件大同小异);

pIYBAGAKRW6AWV1vAAEGI-3Lpa4878.png

2)Vitis部分:

打开Vitis工具,创建一个Platform,设置项目名,添加vivado工程路径中的.XSA文件。创建完Platform之后接下来创建一个Application项目,复制原工程SDK中的相应文件(.c和.h),粘贴到Vitis Apllication。

pIYBAGAKRayAPeUhAAB8d8_HEfo221.png

点击编译。右键app——DebugAs——DebugConfigurations

pIYBAGAKRe6AMhv1AAEhFOKdWPo603.png

尝试分别选择上图中3个Debug Configuration,运行均能正确实现原SDK工程的功能;

还不清楚这三个配置有什么区别。

总结:SDK工程的移植基本没什么太大的变化,Vitis只是将SDK从Vivado中抽离出来单独运行而已;

审核编辑 黄昊宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • SDK
    SDK
    +关注

    关注

    3

    文章

    1113

    浏览量

    52142
  • Vitis
    +关注

    关注

    0

    文章

    159

    浏览量

    8440
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    如何使用AMD Vitis硬件在环功能运行Vitis子系统设计

    到目前为止,本文关于 AMD Versal AIE 验证和 AMD Vitis 新的验证功能的研究,所有内容都基于仿真完成。
    的头像 发表于 04-02 10:29 7742次阅读
    如何使用AMD <b class='flag-5'>Vitis</b>硬件在环功能运行<b class='flag-5'>Vitis</b>子系统设计

    Danalto Cardina框架成功集成Qorvo UWB SoCSDK

    定位智能软件领域的先驱企业Danalto近日宣布,其Cardinal云定位引擎(CLE)已成功集成Qorvo最新推出的超宽带(UWB)系统级芯片(SoC)及其面向工业与企业应用的软件开发套件(
    的头像 发表于 03-03 09:44 528次阅读

    Nordic nRF Connect SDK裸机选项v1.0.0版本的亮点

    我们近期发布了nRF Connect SDK裸机选项的新版本(v1.0.0)。本次更新带来了令人兴奋的新功能和改进,希望您会喜欢。
    的头像 发表于 01-16 11:18 1777次阅读

    基于Vitis Model Composer完成全流程AI Engine开发

    基于Vitis Model Composer进行AI Engine(AIE)开发,核心优势体现在AIE专属优化、开发流程简化、灵活的适配性、高效验证及量产适配等方面。
    的头像 发表于 12-31 11:20 6392次阅读
    基于<b class='flag-5'>Vitis</b> Model Composer完成全流程AI Engine开发

    全新AMD Vitis统一软件平台2025.2版本发布

    AMD Vitis统一软件平台 2025.2 版现已推出,此版本为使用 AMD Versal AI Engine 的高性能 DSP 应用提供了更出色的设计环境,还增强了仿真功能以加快复杂设计。
    的头像 发表于 12-12 15:06 942次阅读

    如何在AMD Vitis Unified IDE中使用系统设备树

    您将在这篇博客中了解系统设备树 (SDT) 以及如何在 AMD Vitis Unified IDE 中使用 SDT 维护来自 XSA 的硬件元数据。本文还讲述了如何对 SDT 进行操作,以便在 Vitis Unified IDE 中实现更灵活的使用场景。
    的头像 发表于 11-18 11:13 3424次阅读
    如何在AMD <b class='flag-5'>Vitis</b> Unified IDE中使用系统设备树

    AMD Vitis AI 5.1测试版现已开放下载

    AMD Vitis AI 5.1全新发布——新增了对 AMD Versal AI Edge 系列神经网络处理单元( NPU )的支持。Vitis AI 包含优化的 NPU IP、模型编译工具和部署 API,可在嵌入式平台上实现可
    的头像 发表于 11-08 09:24 1505次阅读

    深度技术解析nRF Connect SDK裸机选项方案

    。 nRF Connect SDK裸机选项基于经过市场验证的SoftDevice,这是预构建的低功耗蓝牙协议堆栈,该协议堆栈为大多数nRF5 SDK用户所熟悉,并由nrfx提供独立于RTOS以外的底层通用驱动
    发表于 10-31 23:11

    AMD Vitis AI 5.1测试版发布

    AMD Vitis AI 5.1全新发布——新增了对 AMD Versal AI Edge 系列神经网络处理单元 (NPU) 的支持。Vitis AI 包含优化的 NPU IP、模型编译工具和部署 API,可在嵌入式平台上实现可
    的头像 发表于 10-31 12:46 1077次阅读

    如何在应用程序调试期间分析栈和堆使用情况

    随着 AMD Vitis 统一软件平台 2021.2 的发布,Vitis 引入了一个 Tcl 脚本,用于在应用程序运行的特定时间点协助查找栈
    的头像 发表于 10-24 16:54 1110次阅读
    如何在应用<b class='flag-5'>程序</b>调试期间分析栈和堆使用情况

    如何在AMD Vitis Unified 2024.2中连接到QEMU

    在本篇文章我们将学习如何在 AMD Vitis Unified 2024.2 中连接到 QEMU。 这是本系列的第 2 篇博文。要了解如何设置和使用 QEMU + 协同仿真,请参阅开发者分享|在 AMD Versal 自适应 SoC 上使用简单的 QEMU + 协同仿真示
    的头像 发表于 08-06 17:24 2064次阅读
    如何在AMD <b class='flag-5'>Vitis</b> Unified 2024.2中连接到QEMU

    如何在Unified IDE中创建视觉库HLS组件

    最近我们分享了开发者分享|AMD Vitis HLS 系列 1 - AMD Vivado IP 流程(Vitis 传统 IDE)和开发者分享|AMD Vitis HLS 系列 2:AMD
    的头像 发表于 07-02 10:55 1738次阅读
    如何在Unified IDE中创建视觉库HLS组件

    全新AMD Vitis统一软件平台2025.1版本发布

    全新 AMD Vitis 统一软件平台 2025.1 版正式上线!此最新版本为使用 AMD Versal AI 引擎的高性能 DSP 应用提供了改进后的设计环境。
    的头像 发表于 06-24 11:44 2009次阅读

    使用AMD Vitis Unified IDE创建HLS组件

    这篇文章在开发者分享|AMD Vitis HLS 系列 1 - AMD Vivado IP 流程(Vitis 传统 IDE) 的基础上撰写,但使用的是 AMD Vitis Unified IDE,而不是之前传统版本的
    的头像 发表于 06-20 10:06 2660次阅读
    使用AMD <b class='flag-5'>Vitis</b> Unified IDE创建HLS组件

    如何使用AMD Vitis HLS创建HLS IP

    本文逐步演示了如何使用 AMD Vitis HLS 来创建一个 HLS IP,通过 AXI4 接口从存储器读取数据、执行简单的数学运算,然后将数据写回存储器。接着会在 AMD Vivado Design Suite 设计中使用此 HLS IP,并使用嵌入式 Vitis
    的头像 发表于 06-13 09:50 2385次阅读
    如何使用AMD <b class='flag-5'>Vitis</b> HLS创建HLS IP