SDSoC软硬件协同设计流程系列——1.基于SDSoC的软硬件协同设计流程简介

版权声明:本文为博主原创文章,欢迎转载,但请注明出处 https://blog.csdn.net/lulugay/article/details/83241716

基于SDSoC的软硬件协同设计流程简介

Software Define 的概念

近年来“Software Define”软件定义这个词持续火热,全球知名技术研究和咨询公司Gartner早在对2014年最有战略意义的十大技术与趋势做出预测时,便提出了软件定义一切(Software Defined Anything)的概念,他们预测这类技术会在未来三年里拥有巨大潜力,并在同行业中产生重大影响。两年后的今天回顾这一概念和技术的发展,不难看出,Software Define的确成为了行业风向标,其应用可谓无处不在。
一直关注Xilinx技术动向的工程师们对SDx这个词并不陌生,概括来讲,Xilinx的SDx指的是一系列新工具,专为系统和软件工程师而设计,可以使那些只有很少或根本没有FPGA设计经验的研发人员直接使用高级编程语言在强大的可编程硬件上进行设计,并且与那些嵌入芯片内部的或是在片外连接的业界标准处理器例如ARM或x86一起协同工作。 可以看到SDx系列目前有三个主要成员,包括SDSoC、SDAccel和SDNet。
SDSoC开发环境允许嵌入式和应用软件开发人员更广泛的利用Zynq® SoC和MPSoCs的性能,提供超过100倍的软件性能加速。SDAccel™ 开发环境针对的是OpenCL,C和C++的设计应用,与那些CPU和GPU在数据中心和医疗影像等领域的实现方案相比,利用FPGA进行加速可获得高达25倍的性能功耗比提升。SDNet是“软”定义网络的解决方案。具体来说就是SDNet结合Xilinx的全面可编程器件,打造出了“软”定义网络这样的交叉技术,从而将可编程能力和智能化功能从控制层扩展至数据层,不仅支持SDN,而且还可以突破性地支持任何软件定义网络架构。
从以上简要的介绍可以看出SDx系列的三个工具所针对的器件与市场各有侧重,但总体上都是面向软件和系统工程师的全面可编程抽象化设计工具,是Xilinx业界领先技术实力的进一步体现。其中,专门用作提高Xilinx异构Zynq SoC以及MPSoC的设计生产力而生的SDSoC开发环境就是这篇短文将要介绍的重点,在以下的篇幅中,我们会为大家分析SDSoC主要针对的市场和应用,SDSoC的各种创新,应用SDSoC的好处和优势等。

Vivado HLS简介

本章主要内容是介绍SDSoC,但在开始之前需要重复介绍一下Vivado HLS这个在高级抽象语言与底层硬件描述语言之间架起了一座桥梁的高阶综合工具。经过了三四年的上市推广,Vivado HLS早已不再是一个全新的工具,Xilinx已经有超过1000家成功的客户。HLS的灵活性和生产力优势是显而易见的,甚至Xilinx的IP开发部门在交付Vivado 2015.1版本及以后的部分视频IP时也都是使用HLS从C/C++语言开始设计。
Vivado HLS可以在很短的时间内生成与手工编码质量相当的RTL代码,并且允许用户将同样在C测试平台生成的测试向量用在C仿真和RTL验证中,从而大幅加速验证过程。对那些使用C / C ++描述规范的算法设计类客户来说,这是理想的解决方案,可以将其已有的各类浮点或定点算法无缝实现到FPGA硬件中,比较典型的应用就是各类视频运算、加解密等DSP算法等等。最近非常火热的FPGA+深度学习的应用,就有很多开发者使用HLS进行开发,并且取得了非常高的性能。
使用Vivado HLS可以实现真正意义上基于C语言的IP,通过HLS,我们可以把用户的C/C++以及System C算法以VHDL或Verilog的形式输出,然后通过Vivado IPI或SysGen等Xilinx的工具,整合到FPGA设计工程中去。使用Vivado HLS可以更便捷高效地完成从高阶抽象语言C/C++到Xilinx FPGA可编程逻辑硬件的设计实现过程。
Vivado HLS不仅是简单的翻译工具或是综合工具,更为重要的是,我们可以将其产生的RTL以IP的形式导出到Vivado IPI中,或者直接调用HLS生成的RTL文件到另一个RTL项目,甚至是输出到DSP设计的SysGen工程中。

Zynq SoC 开发流程
之所以要花几页篇幅来介绍Vivado HLS的作用与Zynq的架构,就是为了更清楚地描述全面可编程Zynq SoC的开发流程。对于以C/C++等高阶语言为起点来进行SoC开发的用户来说,由C/C++算法开始,首先需要对软硬件进行划分,选择哪些部分放入PL进行加速,哪些部分仍然在PS用软件实现。对那些被指定放入上PL用于硬件加速的部分,还需要完成C代码到RTL IP的转换。接下来,就是完成软/硬件之间的连接,包括使用怎样的DataMover、PS与PL之间的接口如何配置等,接下来还要完成配套的软件驱动程序。所有这些往往牵扯到数个不同团队和专业人员的通力合作,需要通过数次迭代来探索最佳的实现方案和系统架构。这个流程图很清晰地描绘了SoC的开发流程,每一步都是耗时耗力的工作。

不使用SDSoC的开发流程

 不使用SDSoC的开发流程
具体到每一步的工作来看,传统的Zynq 设计流程大致分为五个步骤:
首先,系统架构师来决定将哪些部分用于软件实现,哪些部分放入硬件加速,即所谓的软硬件分区。划分为硬件实现的功能将需要使用RTL 代码来开发,或是使用HLS 将C/C++代码综合成Vivado 中可实现的IP。然后,要在Vivado IPI 中搭建DataMover 和接口。后是应用软件和驱动程序的开发。这无疑是一个十分耗时的过程,需要多个部门和团队之间的设计切换。有时候,即便这样完成后的设计可以正常工作,却可能无法满足你在吞吐量、延迟或面积等方面的设计性能要求。此时就可能需要通过修改系统连接来重新搭建硬件架构来对系统性能进一步优化。但这么做,又将导致软件应用程序和驱动程序的变化。因此,你往往需要与多个软件和硬件团队紧密合作,通过多次迭代设计来试着满足最终需求。
在某些情况下,设计不能满足你的性能要求的原因在于软件性能不够,或是硬件的占用率太高。这时候你就需要返回到最初的设计,重新修改软/硬件分区方案,然后前面所说的硬件实现,系统连接,软件驱动等所有步骤都要重新再来一边,这势必要求更多的团队一起配合,改变设计来探索另一种架构,而且可能面临更多次的设计迭代,进一步拉长设计周期。毫无疑问,用在系统优化上的时间对time-to-market 的影响巨大。此外,我们也注意到在Zynq SoC 的设计中,用户最关注的部分往往是算法的最终实现和算法模块的优化,包括IP 或是软件功能块。

使用SDSoC 的开发流程

使用SDSoC 的开发流程
SDSoC工具可以自动搭建软硬件之间的通讯部分,包括DataMover、软件驱动程序和硬件连接接口。工具还可以将整个开发过程抽象到C/C++的应用层面,以C/C++为起点来进行算法开发,当然,工具也可以调用以传统的IP方法开发的算法模块,包括已经由Vivado HLS转换后的RTL IP,也包括那些本身就由Verilog或VHDL硬件描述语言编写的IP。在调用这类IP时,只需将其封装为C可调用库的形式即可。在SDSoC中,我们能够轻松进行软件/硬件的划分,用户仅需在图形化界面中用鼠标单击指定那些需要进行硬件加速的模块即可。
相比较传统SoC设计流程,SDSoC通过自动生成硬件连接和软件驱动程序大大简化了Zynq SoC和MPSoC的开发过程。它会自动调用Vivado HLS来将那些用C/C++开发的算法模块转化为Vivado可综合的RTL IP,它也可以将那些已经优化过的HDL IP模块通过C可调用库的方式进行重用。用户可以在软件中通过简单点击某个功能块将其应用到PL上进行加速来迅速修改软/硬件的分区,因此,它也有助于系统架构设计人员运行快速假设性分析来评估系统的性能和面积。在应用SDSoC之后,我们可以非常迅速地将你的设计应用在Zynq系统上,即使第一遍实现后的性能不达标,也可以使用SDSoC快速选择不同的用于硬件加速的功能块,探索不同的硬件/软件分区方案,或是通过pragma等手段来指导工具产生不同的系统配置等方法来进一步优化设计。统计显示,使用SDSoC开发Zynq系统,可以将整体开发时间从原本的数周缩短至数日甚至数个小时。
现在我们稍作总结就会发现,SDSoC开发环境提供了一个大大简化的C/C++编程体验,用户现在可以在嵌入式开发人员所熟悉的基于Eclips的IDE上完成整个Zynq SoC的开发。SDSoC带来了业界首个C/C ++的全系统优化编译器,提供系统级的Profiling特征分析,自动将软件代码放入可编程逻辑中加速,自动产生系统连接和相关的库以加速开发。SDSoC也为用户和第三方平台开发者提供了流程支持,通过提供平台描述文件的手段,可以使他们自己设计的包含有Zynq SoC的开发板在SDSoC开发环境中使用。
应用SDSoC,开发人员可以从整个设计的C/C++代码开始系统级特征分析,从而找出系统设计的瓶颈。然后用户只需选择将那些性能瓶颈的功能块放入PL中加速。SDSoC的全系统优化编译器会使用Vivado HLS自动创建RTL IP,生成最优的系统连接,配置软件驱动程序。最终的结果是FPGA比特流文件,可执行elf文件和软件的引导映像。所有这些,完全由一个基于Eclipse的嵌入式开发环境生成。

SDSoC开发环境的优势

SDSoC提供给用户的是一个可以用来完成整个Zynq SoC和MPSoC开发的基于Eclipse的软件环境,这个环境对那些已经在使用DSP芯片、视频SoC 和CPU处理器的嵌入式开发人员来说是在熟悉不过的。在IDE中,用户可以简单地选择用来放入PL中加速的功能块,无需手动创建用于硬件实现的Vivado工程或是软件驱动程序。另外,已经有很多针对FPGA硬件优化过的IP库可以经由Vivado HLS导出,除了Xilinx和ARM,我们也有很多合作伙伴提供更多特定的算法库,包括视频类,加解密,OpenCV等等,帮助用户进一步提高生产力。
关于操作系统,目前的SDSoC版本中已经支持的目标平台Platform大都支持多种OS,包括Linux,FreeRTOS和Standalone,如果用户需要其他操作系统的支持,只要将所需OS打包到所用的目标平台中即可。具体做法涉及SDSoC目标平台的创建,稍后会在其他章节中做详细介绍。
Xilinx提供了很多关于SDSoC的开发文档,非常详细地介绍了SDSoC所有的内容,是学习SDSoC工具最好的资料。但是这些开发文档动辄上百页,想完整地看完需要耗费很长时间,而且并不是所有内容都经常被用到,因此本章挑选了使用SDSoC过程中较常见的操作并且给出了应用SDSoC的一些案例以便读者能够快速入门。本章不仅希望能够使读者快速掌握SDSoC,还希望读者通过查阅Xilinx的开发文档进一步学习SDSoC。

猜你喜欢

转载自blog.csdn.net/lulugay/article/details/83241716