SDSoC和SDAccel和SDNet和HLS工具介绍

SDSoC、SDAccel、SDNet和HLS工具傻傻分不清楚

Software Define 的概念
  近年来“Software Define ” 软件定义这个词持续火热,全球知名技术研究和咨询公司Gartner早在对2014年最有战略意义的十大技术与趋势做出预测时,便提出了软件定义一切(Software Defined Anything)的概念,他们预测这类技术会在未来三年里拥有巨大潜力,并在同行业中产生重大影响。两年后的今天回顾这一概念和技术的发展,不难看出,Software Define的确成为了行业风向标,其应用可谓无处不在。

  相信一直关注赛灵思技术动向的工程师们对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结合赛灵思的全面可编程器件,打造出了“软”定义网络这样的交叉技术,从而将可编程能力和智能化功能从控制层扩展至数据层,不仅支持SDN,而且还可以突破性地支持任何软件定义网络架构。

  从以上简要的介绍可以看出SDx系列的三个工具所针对的器件与市场各有侧重,但总体上都是面向软件和系统工程师的全面可编程抽象化设计工具,是赛灵思业界领先技术实力的进一步体现。

   另外,Vivado HLS可以在很短的时间内生成与手工编码质量相当的RTL代码,并且允许用户将同样在C测试平台生成的测试向量用在C仿真和RTL验证中,从而大幅加速验证过程。对那些使用C / C ++描述规范的算法设计类客户来说,这是理想的解决方案,可以将其已有的各类浮点或定点算法无缝实现到FPGA硬件中,比较典型的应用就是各类视频运算、加解密等DSP算法等等。

SDSoC™ 开发环境介绍
  SDSoC是Xilinx旗下,用于设计开发Zynq SoC和MPSoC异构嵌入式系统的基于Eclipse的集成开发环境,可以完成从C/C++到指定目标平台上功能完整的硬件/软件系统的编译、实现、调试执行等全过程。

  由SDSoC产生的系统是高性能的,同时也是复杂的硬件/软件协同工作系统。要了解在这样的系统中应用程序的执行过程是比较困难的,因为你需要同时关注在处理器上运行的软件部分和在硬件可编程逻辑上执行的加速部分,以及数据在二者之间的传递过程和顺序等。

  具体开发流程:

SDAccel™ 开发环境介绍

 传统的FPGA开发设计使用Verilog语言实现RTL设计,这种开发设计周期长、一些算法的verilog实现相比软件编程语言更加的晦涩难懂,而借助一些软件库可以轻松实现我们的想法,加快产品的研发周期,SDAccel开发环境让没有FPGA开发经验的软件工程师也能够受益于FPGA平台的优势。

  SDAccel FPGA软开发三步走

图1:SDAccel开发环境

图1:SDAccel开发环境

编译:
  软件开发过程中编译代码是第一阶段,而且代码的编译结果与CPU/GPU资源的使用规则一般都是固定的,程序开发人员只需要关心算法的具体实现就可以了。而FPGA的编译过程则是一大难题:编译结果怎么在FPGA的可编程逻辑资源中实现以及FPGA程序代码的存储方式等问题。
  SDAccel解决了这些问题,它能够识别选定FPGA型号的逻辑资源和内部存储结构类型,编译器能够在不同状态之间提取并行语句,使用基于阵列读写方式的自动内存结构,完成整个FPGA代码的编译过程。

调试:
  在软件开发过程中,完成编译过程并不代表应用程序开发正确,我们还需要在目标硬件上进行不断的调试,发现问题改正错误,软件的调试是一个非常容易理解的问题,但是FPGA得调试却是另一回事,为了能够实现FPGA的调试功能,SDAccel引用了软件调试中经常使用的printf和GBD。

  Printf的FPGA实现会浪费一些逻辑资源,这些资源本可以用于实现一些算法功能的,但是这里SDAccel做了一些改进优化,将printf的数据生成与解码显现分离开来,从硬件角度来看,生成printf数据只需要消耗非常少的逻辑资源,数据解码显示则完全有上位机完成,这样实现printf功能几乎对FPGA逻辑资源是零损耗。

  程序开发人员可以使用SDAccel的仿真模式进入在线仿真功能,可以像软件调试一样设置断点、单步调试等操作。

优化:
  FPGA应用的优化准则与CPU上的优化准则是一样的,只是实现方法不同,CPU上的优化是要关注处理的缓存大小和运算单元数量,而FPGA上的应用优化则关心所选器件型号的逻辑资源和运行时的性能。

SDNet开发环境介绍
  SDNet概念是赛灵思于今年3月在Interop 2014网络通讯展会期间面向全球发布的业界首款“软”定义网络解决方案。与采用固定数据层硬件并通过狭窄南向API连接到控制层的传统SDN架构不同,SDNet基于可编程的数据层,支持内容智能和丰富的南向API控制层连接,可与控制层进行智能协作,这一独特定位使其能够支持SDN和任何软件定义网络架构。赛灵思公司负责通信IP 和服务的全球高级副总裁Nick Possley认为,这种交叉技术的影响力将远远超过当今的SDN架构。

  SDN由于可以通过软件来定义网络拓扑、资源分配、处理机制等,是目前计算机领域相当火热的话题。它的优势在于不仅可以支持独立的线速度服务,还可以避免各种底层协议带来的复杂性,从而能够根据需求提供灵活的服务,对客户的服务进行重新配置,将服务以最短的时间提供给最终客户。在履行服务义务的时候,还能够在整个服务过程中进行实时的、“无中断”操作升级,这个功能对运营商和最终客户来说非常具有吸引力。

  然而Nick Possley同时指出,SDN固有的局限性也不可忽视,例如硬件平台固定无法编程,难以形成差异化;现场设备通常会遇到非常复杂的软硬件升级,甚至是整个配套网络的重新规划等。而这些,恰恰就是驱动赛灵思 实现“软”定义网络的原因。

SDN与SDNet的区别

  赛灵思方面称,SDNet的最大特点之一是指定内容但不规定方式。也就是说,SDNet将不会关心怎样(How)实现一个网络规划,而是更在意如何通过软件的方式实现系统级人员的需要(What),比如包的解析、编辑、调节、查找等。另一方面,赛灵思的SDNet支持系统架构者通过新型的高级网络抽象语言(高级包处理规范)自动生成数据平面功能,而无需了解底层设备架构或掌握复杂的硬件编程语言,非常适合不具备FPGA专业知识的计算机专业科研人员

  在SDNet的具体使用过程中,系统架构师和技术工程师实现了清晰的任务划分。前者负责定义SDNet规格,并使用SDNet编译器生成具体要求;后者则根据要求实现优化,包括具体的器件型号、与IT系统进行集成等。

SDN行业竞争产品格局分析

SDN行业竞争产品格局分析

目前SDN行业竞争产品主要包含三种,分别是ASSP、ASIC和SDNet+FPGA/SoC。“总体来说,SDNet软定义网络解决方案在以下几方面会更具优势,例如具备更佳且高度灵活的服务质量(QoS)、流程和会话感知功能、全面可编程的硬件数据层和I/O、线速支持网络功能虚拟化(NFV),包括各种用户自定义的定制化功能、以及1G到400G之间的可扩展线路速率。”Nick Possley说。

SDN的行业同类竞争产品

SDN的行业同类竞争产品

同样在虚拟局域网解析应用中,SDNet+FPGA/SoC方案只需三行半就可实现一个代码,在效率上远远高出ASSP的30多行代码,且开发人员无需掌握硬件基础架构知识。在架构方面,该方案可实现100%的代码重用,并很容易迁移到1Gbps-400Gbps的各种带宽标准上。

  但如果采用ASSP方式进行代码描述就非常辛苦,因为这些代码必须由非常专业的、熟知ASSP细节的软硬件工程师一起开发。当过度拘泥于具体实现细节时,就意味着限制了这些语言支持的广度和彼此间的交融性。此外,代码重构基本上是不可能实现的,导致产品生命周期、可移植性、带宽可扩展性方面经常受到质疑。

  从整个更新维护的角度来看,SDNet服务可以通过各种各样的Open,OpenSwitch、OpenFlow来支持新的更新;从固件升级来看,不需要重新设计硬件和线卡,不需要上门服务就可以快速升级,因此可以降低资本支出和运营支出。因此在SDNet软的定义环境里面,从核心到边远应用,整个网络中的各种设备都可以通过SDNet环境实现迅速地覆盖。

用SDNet实现的优势

用SDNet实现的优势

提供精确的服务-从核心到边缘

提供精确的服务-从核心到边缘

SDNet软件规范环境的发布,提供了高级编程接口,更加符合软件定义网理念。这为业界开发SDN在数据平面能否更灵活定义、开发环境能否更高级化和运行中能否进行功能定制等三大方面搬掉了‘三座大山’。目前,毕军教授和成功实现Zynq All Programmable SoC定制化SDN研发平台原型设计的西安交通大学胡成臣副教授,已经被赛灵思公司选为全球首批四个早期使用SDNet的先进学术研究团队(SDNet advance academic research group)之一,有望很快实现突破。

Vivao HLS SDAccel
  经过了三四年的上市推广,Vivado HLS早已不再是一个全新的工具,我们已经有超过1000家成功的客户。HLS的灵活性和生产力优势是显而易见的,甚至赛灵思的IP开发部门在交付 Vivado 2015.1版本及以后的部分视频IP时也都是使用HLS从C/C++语言开始设计。

  Vivado HLS可以在很短的时间内生成与手工编码质量相当的RTL代码,并且允许用户将同样在C测试平台生成的测试向量用在C仿真和RTL验证中,从而大幅加速验证过程。对那些使用C / C ++描述规范的算法设计类客户来说,这是理想的解决方案,可以将其已有的各类浮点或定点算法无缝实现到FPGA硬件中,比较典型的应用就是各类视频运算、加解密等DSP算法等等。

  使用Vivado HLS可以实现真正意义上基于C语言的IP,通过HLS,我们可以把用户的C/C++以及System C算法以VHDL或Verilog的形式输出,然后通过Vivado IPI或SysGen等赛灵思的工具,整合到你的FPGA设计工程中去。也就是说,使用Vivado HLS可以更便捷高效地完成从高阶抽象语言C/C++到赛灵思FPGA可编程逻辑硬件的设计实现过程。

  Vivado HLS不仅是简单的翻译工具或是综合工具,更为重要的是,我们可以将其产生的RTL以IP的形式导出到Vivado IPI中,或者直接调用HLS生成的RTL文件到另一个RTL项目,甚至是输出到DSP设计的SysGen工程中。

Zynq SoC 器件架构
以下图片展示了赛灵思Zynq SoC器件的架构图。SDSoC所针对的器件就是包括Zynq SoC和下一代的MPSoC在内的多核异构可编程逻辑芯片。

Zynq-7000 系列是赛灵思推出的业界第一款将ARM A9双核处理器与28nm低功耗可编程逻辑紧密集成在一起的SoC产品。从图中可以可以看出左上角处理器所在的区域称作Processing System即PS,而其余可编程逻辑所在的区域则称作Programmable Logic即PL。
位于PS侧的ARM内部用硬件实现了AXI总线协议,提供GP、HP和ACP等性能各不相同的数个物理接口。而PL侧则需要使用可编程逻辑来搭建相应的AXI接口。在具体设计时,可以在Vivado IPI中使用赛灵思提供的IP如AXI-Stream等等来实现。此外,软硬件之间有数据交互的设计就牵扯到在软硬件之间如何进行数据搬移,这种情况下,我们还需要一个或数个DataMover,这也同样需要在PL侧使用可编程逻辑来搭建。

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

不使用SDSoC的开发流程
  具体到每一步的工作来看,传统的Zynq设计流程大致分为五个步骤:

首先,系统架构师来决定将哪些部分用于软件实现,哪些部分放入硬件加速,即所谓的软硬件分区。划分为硬件实现的功能将需要使用RTL代码来开发,或是使用HLS将C/C++代码综合成Vivado中可实现的IP。然后,要在Vivado IPI中搭建DataMover和接口。后是应用软件和驱动程序的开发。

  这无疑是一个十分耗时的过程,需要多个部门和团队之间的设计切换。有时候,即便这样完成后的设计可以正常工作,却可能无法满足你在吞吐量、延迟或面积等方面的设计性能要求。此时就可能需要通过修改系统连接来重新搭建硬件架构来对系统性能进一步优化。但这么做,又将导致软件应用程序和驱动程序的变化。因此,你往往需要与多个软件和硬件团队紧密合作,通过多次迭代设计来试着满足最终需求。

  在某些情况下,设计不能满足你的性能要求的原因在于 软件性能不够,或是硬件的占用率太高。这时候,你就需要返回到最初的设计,重新修改软/硬件分区方案,然后前面所说的硬件实现,系统连接,软件驱动等所有步骤都要重新再来一边,这势必要求更多的团队一起配合,改变设计来探索另一种架构,而且可能面临更多次的设计迭代,进一步拉长设计周期。

  毫无疑问,用在系统优化上的时间对time-to-market的影响巨大。此外,我们也注意到在Zynq SoC的设计中,用户最关注的部分往往是算法的最终实现和算法模块的优化,包括IP或是软件功能块。因此,SDSoC的设计理念也致力于解决这些用户最关注的问题。

应用了SDSoC的开发流程
  如图所示,在应用了SDSoC的Zynq设计流程中,工具可以自动搭建软硬件之间的通讯部分,包括DataMover、软件驱动程序和硬件连接接口。工具还可以将整个开发过程抽象到C/C++的应用层面,以C/C++为起点来进行算法开发,当然,工具也可以调用以传统的IP方法开发的算法模块,包括已经由Vivado HLS转换完成的。

总结
  对于SDSoC和SDAccel和SDNet和HLS工具而言,SDNet是最容易区分的,SDSoC是将c,c++转化成软件/硬件函数,进而决定这些函数是在PS端还是PL端口执行。我们可以通过SDSOC系统来决定数据量是在软件函数或者硬件函数中处理。为了达到高性能,每一个硬件函数都在一个独立的线程中处理。这里SDAccel和HLS可能在功能上有所相近,所以需要用心区分。

  Vivado HLS可以在很短的时间内生成与手工编码质量相当的RTL代码,并且允许用户将同样在C测试平台生成的测试向量用在C仿真和RTL验证中,而SDAccel™ 开发环境针对的是OpenCL™,C和C ++的设计应用用于设计开发Zynq SoC和MPSoC异构嵌入式系统的,可以完成从C/C++到指定目标平台上功能完整的硬件/软件系统的编译、实现、调试执行等全过程。从这两段话中可以很容易分析出具体的区别,首先就是SDAccel环境支持的编程语言更丰富,其次就是两者所做的工作和功能并不冲突,而且各有优点。

文章来源:Pieces_thinking的博客

推荐阅读