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

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

3天内不再提示

如何利用SDSoC工具来创建嵌入式C/C++/OpenCL应用开发

YCqV_FPGA_EETre 来源:未知 作者:刘勇 2017-12-27 09:16 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

教你如何使用Xilinx SDSoC

实现在ARTY Z7上进行软硬协同设计

细心的小伙伴们可能早已留意到,在Digilent今年全新出品的Zynq评估板中,无论是第二代经典入门级的Zynq™ Board -ZYBO Z7,还是创客最爱的ARTY Z7,都全面支持Xilinx SDSoC开发环境。意味着如果你是一名系统或软件工程师,现在无需深度的硬件专业知识,就能广泛地利用Zynq® SoC,畅享超过100倍的软件性能加速。

本篇干货教程中,我们就将带你入门了解如何使用Xilinx SDSoC工具来创建嵌入式C/C++/OpenCL应用开发,并实现直接在ARTY Z7嵌入式视觉开发平台的器件上进行软件设计。

01

SDSoC软硬协同设计与其开发流程

由于集成了ARM处理器内核与可编程逻辑,对于众多应用开发而言,Zynq 非常的灵活。这意味着开发人员可以将设计按不同元素来优化划分,例如将其中那些高层次决策的部分放入ARM内核(PS端),并将诸如图像处理流水线等需要加速的部分用可编程逻辑(PL端)来实现。

当然,传统的Zynq开发流程会将Vivado和SDK分离开来,这种方法很难在可编程逻辑(PL)和处理系统(PS)之间分配功能,因此无法获得最优的系统性能。

通过SDSoC,则可以解决上述问题。SDSoC是一个系统最优编译器,支持软件定义的整个系统开发,包括PS和PL。标准的SDSoC开发流程如下:

  1. 使用高层次语言开发应用

  2. 使用提供的性能监视器来分析设计从而确定性能瓶颈

  3. 使用SDSoC将造成性能瓶颈的功能用可编程逻辑来实现加速

  4. 重新验证性能,如果有必要也可以加速其它功能模块

正是因为高层次综合(HLS)和互联框架的结合才使得各种功能模块可以在PS和PL之间轻松的转换:

  • 使用Vivado HLS加速某个功能模块

  • 分析通信功能

  • 建立AXI通信

  • 生成软件存根

为了能够使可编程逻辑获得最佳的性能,我们需要给加速的功能模块定义一些优化参数,这样才能够确定HLS工具执行哪些优化操作。我们可以使用高层次语言(比如C/C++/OpenCL)来开发基于Zynq的设计。为了支持SDSoC的使用,我们需要一个面向SDSoC的基础平台来定义底层硬件和软件环境。

对于Arty Z7,点击「阅读原文」,在“下载代码”按钮中可以找到Arty Z7对应的SDSoC基础平台,下载之后就可以在Arty Z7上开发相关的应用了。

02

创建一个新的SDSoC工程

在这一教程中,我们将探究如何使用SDSoC平台来加速矩阵乘法的性能

使用SDSoC工具创建一个新的SDSoC工程,具体操作步骤如下:File -> New -> Xilinx SDx Project。这会打开一个新工程的对话框,包括支持的平台规范、操作系统选择和示例应用选择。详细图解如下。

创建一个新工程:

选择Arty7 Z7-20作为硬件平台。这里,在新工程对话框的第二页选择一个新的平台,点击添加自定义平台选项(add custom platform)。然后对应找到已下载好的Arty Z7-20平台,添加好后这个平台就能在构建列表中看到,在此基础上我们可以选择它应用到我们的工程中:

选择操作系统(OS)和目标CPU

然后选择示例应用:

03

SDx项目设置页面

完成项目新建之后,将在SDSoC开发环境中看到SDx项目设置页面。我们使用这个项目设置选项卡可以在PS和PL之间转移功能。实现方式是:选择“Add HW Function”按钮,然后选择所需要移植到PL中的功能。

如果我们想将原本在PS中运行的功能转移到PL中来实现加速,那么我们应当遵循以下几条规则:

  • 这个功能不能包含任何操作系统级的系统调用

  • 这个功能必须完整

  • C结构体需要有界并固定大小

  • 结构体的实现是明确的

在项目设置控制面板上,我们也可以控制加速模块和PL与PS之间数据移动网络传递数据的操作频率。

SDSoC Project Settings – 此界面显示的是SDSoC主要的控制功能:

Add HW Function界面 – 显示可以用于加速的函数:

04

预估性能选项与启动调试器

当SDSoC构建时会生成必要的bin文件,我们可以将其放到SD卡中来启动运行或者下载到Zynq中用于调试。构建过程需要一定的时间,因此在很多情况下当我们选择一个函数用于加速时,我们可以先运行一个功能,估计一下需要的总资源和预期的加速效果。通过在项目设置菜单中点击“估计性能(estimate performance)”选项就可以实现上述这一步。

整个构建过程完成后就会生成一个结果报告,估计运行结果界面如下图:

如果我们构建这个设计时没有点击预估性能选项,那么我们可以使用调试器(debugger)像正常应用那样下载和运行示例程序。要想启动调试器,在工程上右击,然后选择Debug As ->Launch on Hardware(SDSoC Debugger)。参考下图启动调试界面,这里我们会将应用下载到Arty Z7,并在编程入口使Zynq挂起。将SDSoC终端与Arty Z7 UART(串口)连接我们就可以看到示例程序的运行结果:

05

利用好SDSoC开发环境中库的优势

当我们开发自己的SDSoC应用时,我们需要了解SDSoC提供的库和加速栈资源。

为了帮助开发者能够更快地开发最终应用,SDSoC提供了一些HLS库,开发者可以将其应用到自己的设计中,具体包括:

  • reVison Stack– 提供了一个三元素开发栈,我们可以使用OpenCV、Caffe和一系列通用的神经网络开源框架到嵌入式视觉应用中。reVision包括多重加速能力的OpenCV。

  • 数学库– 提供了标准数据库可综合的实现。

  • IP库– 提供了可以实现FFT、FIR和移位寄存器LUT功能的IP库。

  • 线性代数库– 提供了通用线性代数功能的库资源。

  • 任意精度数据类型库– 提供无二次幂和有符号/无符号整数任意数据长度的支持,这个库可以让开发者更加高效的使用FPGA资源。

06

总结

通过这个项目中的例子,我们看到借助SDSoC,我们可以在PS与PL之间轻松地转移软件(SW)函数,并通过将之转移到PL端来实现性能上的提升。

So,如果此刻,你已经对利用SDSoC来实现软硬协同开发与优化产生了兴趣,赶快拿起一块Arty Z7,参照着教程尝试一下快感吧!

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

    关注

    135

    文章

    9499

    浏览量

    388652
  • 嵌入式
    +关注

    关注

    5186

    文章

    20145

    浏览量

    328744
  • Xilinx
    +关注

    关注

    73

    文章

    2192

    浏览量

    129913

原文标题:在Arty Z7上入门Xilinx SDSoC开发工具

文章出处:【微信号:FPGA-EETrend,微信公众号:FPGA开发圈】欢迎添加关注!文章转载请注明出处。

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    C语言在嵌入式开发中的应用

    C 语言在汽车电子控制系统开发中的主导地位。 2、设备驱动程序 设备驱动程序是嵌入式系统中连接硬件和软件的桥梁,它负责实现嵌入式系统与外部设备之间的通信和控制。
    发表于 11-21 08:09

    嵌入式C/C++回归测试四大最佳实践(附自动化测试工具TESSY使用教程)

    嵌入式开发中,一次微小的代码改动都可能引发“蝴蝶效应”,如何守护系统的稳健?推荐专业的自动化测试工具#TESSY,源自戴姆勒-奔驰,是嵌入式C/C+
    的头像 发表于 10-31 14:21 182次阅读
    <b class='flag-5'>嵌入式</b><b class='flag-5'>C</b>/<b class='flag-5'>C++</b>回归测试四大最佳实践(附自动化测试<b class='flag-5'>工具</b>TESSY使用教程)

    嵌入式需要掌握哪些核心技能?

    : 1)C语言与底层编程 核心地位:C语言是嵌入式开发的基石,需精通指针操作、内存管理、位运算,直接操控硬件资源。 延伸技能:C++用于复杂项目架构设计,汇编语言优化底层性能(如启动代
    发表于 10-21 16:25

    AMD 2025.1版嵌入式软件和工具的新增功能

    AMD 2025.1 版嵌入式软件和工具是面向新一代嵌入式系统开发而打造的综合平台,全面加速概念构想到部署落地。
    的头像 发表于 08-15 15:32 1026次阅读

    入行嵌入式应该怎么准备?

    知识: 一、C/C++编程C/C++嵌入式系统开发中最常用的编程语言。熟练掌握
    发表于 08-06 10:34

    Perforce QAC产品简介:面向C/C++的静态代码分析工具(已通过SO 26262认证)

    Perforce QAC专为C/C++开发者打造,支持多种编码规范、功能安全标准(ISO 26262)等,广泛用于汽车、医疗、嵌入式开发领域,可帮助快速识别关键缺陷、提升代码质量、实现
    的头像 发表于 07-10 15:57 828次阅读
    Perforce QAC产品简介:面向<b class='flag-5'>C</b>/<b class='flag-5'>C++</b>的静态代码分析<b class='flag-5'>工具</b>(已通过SO 26262认证)

    嵌入式软件开发常用的软件有哪些?

    软件功能。 2. Visual Studio 简称VS: 它是一个IDE,集成开发环境。验证C程序或是进行c#程序开发,可以用它。一些与嵌入式
    发表于 07-03 17:06

    嵌入式开发入门指南:从零开始学习嵌入式

    随着物联网、智能硬件的发展,嵌入式开发成为热门技能之一。以下将为初学者提供一份详细的嵌入式开发入门指南,涵盖学习路径、必备工具、推荐资源等内容。 1. 嵌入式系统的定义与应用
    发表于 05-15 09:29

    如何成为一名嵌入式软件工程师?

    体系 1)编程语言与工具 C/C++嵌入式软件开发中最常用的编程语言,因其高效性和对硬件的直接控制能力而备受青睐。 RTOS(实时操
    发表于 04-15 14:37

    Python在嵌入式系统中的应用场景

    你想把你的职业生涯提升到一个新的水平?Python在嵌入式系统中正在成为一股不可缺少的新力量。尽管传统上嵌入式开发更多地依赖于CC++语言,Python的优势在于其简洁的语法、丰富的
    的头像 发表于 03-19 14:10 1187次阅读

    源代码加密、源代码防泄漏c/c++与git服务器开发环境

    嵌入式开发企业中使用的c/c++开发语言,这类开发环境主要做电子信息行业比较多,员工通过c语言
    的头像 发表于 02-12 15:26 871次阅读
    源代码加密、源代码防泄漏<b class='flag-5'>c</b>/<b class='flag-5'>c++</b>与git服务器<b class='flag-5'>开发</b>环境

    使用SEGGER工具实现嵌入式应用开发

    嵌入式系统的可能性是无限的,从创建智能家居设备到为工业自动化提供动力,但是有这么多的工具、技术和流程要学习,你从哪里开始呢?
    的头像 发表于 01-10 16:27 1086次阅读

    为什么嵌入式驱动开发工程师可以拿高薪?

    场景下可以提供额外的优势。 熟练使用C/C++进行嵌入式系统编程,便于理解内存管理、指针、数据结构等高级特性。 3)项目实践: 通过动手做项目积累经验,这是
    发表于 01-07 16:56

    HighTec C/C++编译器套件全面支持芯RISC-V IP

    是基于LLVM开源汽车级C/C++编译器工具,已通过ISO 26262 ASIL D的安全认证。从事RISC-V架构开发的汽车软件开发者受益
    的头像 发表于 12-23 09:04 1997次阅读
    HighTec <b class='flag-5'>C</b>/<b class='flag-5'>C++</b>编译器套件全面支持芯<b class='flag-5'>来</b>RISC-V IP

    新手怎么学嵌入式?

    的运行机制。例如,了解数据结构中的链表、栈和队列,对于在嵌入式编程中管理数据非常有帮助。 2. 选择合适的编程语言 嵌入式开发中常用的编程语言有 CC++
    发表于 12-12 10:51