日前,赛灵思公司(Xilinx)面向全可编程SoC和MPSoC推出了一款软件定义SoC的开发环境SDSoC。这款开发环境极大地简化了SoC的编程体验,让嵌入式控制领域的系统架构师和软件工程师可以利用C/C++来同时做算法和功能的开发,并且在硬件平台搭建好之后便可以自由发挥,不再需要去求助于硬件工程师。
自赛灵思公司全球总裁兼CEO Moshe Gavrielov提出All Programmable Imperative(全可编程势在必行)的行业趋势后,该公司便一直在引领这个趋势——首先是取代标准芯片和定制芯片,其次是进入更广阔的嵌入式应用蓝海。那么,怎么样才能让更多的人能够使用赛灵思的产品呢?赛灵思推出了SDx的战略。
赛灵思自2014年4月开始先后发布了三款面向软件和系统工程师的软件定义开发环境SDx(图1,“SD”是软件定义的意思)。首先是针对网络推出的SDnet(“软”定义网络)。它能够让厂商用行为模型级的描述,把通信系统迅速实现出来。其次是针对数据中心推出的SDAccel(软件定义加速器)。在数据中心里要解决性能和功耗的问题,有很多应用场景要通过X86加FPGA的加速处理能力来做加速算法,SDAccel可以协助软件工程师把创意快速实现到整个X86和FPGA的流程中。此次推出的针对嵌入式设计SoC应用的SDSoC(软件定义SoC)意义更大,因为嵌入式控制无处不在,很多系统的设计和创新都是基于SoC平台进行设计的。这款设计环境将能使软件工程师也能够做硬件工程师的工作,在整个行业内必将产生出更大的影响力。那么,SDSoC具体是个怎么样的开发环境呢?它又有什么样的技术可以实现这样的目标呢?
图1:SDx三大法宝将FPGA运用拓展到软件工程师人群。
k6Uednc
SDSoC让嵌入式系统软件设计人员直接参与到硬件设计
“今天我们介绍的是SDSoC,为什么我们要做这个软件开发的环境呢?最主要是在我们的产品系列里有SoC产品,全可编程SoC。这些产品系列有一个共同特点——它们之中都有ARM处理器和FPGA可编程资源。它们是全部硬件、全部软件可编程的产品,在使用的过程中,可以面向很多不同应用的场景。传统上我们面向开发的对象是硬件工程师更多,我们想通过这个开发的环境,让做软件的人员可以直接参与到产品的设计,把软件的创意通过它来很快地实现,变成一个真实的产品。这就是为什么我们要做SDSoC开发环境的最主要的理由。”赛灵思全球销售与市场亚太地区副总裁杨飞先生首先解释说(图2)。
图2:赛灵思全球销售与市场亚太地区副总裁杨飞讲述设计SDSoC开发环境的初衷。
k6Uednc
赛灵思除了在半导体芯片领域持续领先,在设计方法论上更是不断创新。该公司五年前打造的Vivado设计套件,让设计工程师可以把他们设计通过该套件在硬件层面实现出来。同时,其还把设计层次拉高,可以让整个抽象性提高。这样做的好处是除了让传统硬件工程师可以参与以外,软件工程师和所有熟悉这样环境的工程师也可以有效地把FPGA给利用起来。SDx开发环境的推出,也是赛灵思认为很重要的一个策略方向,因为器件如果没有相关的设计方法论,整个设计时间和生产力就达不到用户想要的效果。
SDSoC工具面向Zynq全可编程SoC和MPSoC两个产品类型(都是基于ARM核的产品),其中包括28nm的Zynq SoC和16nm的MPSoC。
SDSoC提供类似ASSP编程体验的C/C++设计环境
工程师在做嵌入式设计的时候,可以用不同的方法论来解决相关问题——可以用CPU解决,也可以用ASSP(专用标准产品)来解决。CPU是纯软件编程的技术,有很多人会写C代码,因此CPU利用起来是比较灵活的。标准的ASSP是基于ARM和硬加速内核设计的,没有CPU这么灵活,但是也比较简单、比较容易。全可编程SoC性能很高、功能很好,但是其局限性是对硬件描述语言有认识的工程师才能开发相关产品。因此,其以前的应用环境没有CPU的开发环境这么好。“我们这次做的工作就是克服业界出现的问题,把整个SoC和MPSoC产品的开发环境做成跟平时习惯开发ASSP的软件工程师所习惯的环境,这样可以拉齐跟它们开发的关系。”杨总指出。
图3是SDSoC开发环境中所包含的资源功能。它与习惯开发的ASSP完全相同,可以用C/C++来做算法和功能的开发。它提供的系统级的特性描述功能可以做一些描述,比如有哪些函数希望用硬件来做,有哪些是希望用处理器来做,其中可以设计一些加速用的C和C++函数。最后是一个全系统优化的编译器。
图3:SDSoC开发环境与软件工程师习惯开发的ASSP完全相同,可以用C/C++来做算法和功能的开发。
k6Uednc
这样的流程与传统的Zynq开发流程不一样的是,它面对的对象不是传统的硬件工程师,而是面向的是系统架构师和软件工程师。软件工程师很多时候对底层的硬件(包括数据流怎么去连接)这个概念不太清楚,以前他们没法去做相关的工作。而通过这个自动化的开发环境,它可以面向软件类的工程师,让他们也可以有效地来开发相关产品。
SDSoC基于Eclipse IDE设计,让软件工程师轻松上手
SDSoC基于软件工程师所熟悉的Eclipse IDE开发环境设计(图4)。软件工程师所要做的工作只是要把设计通过C/C++编好,在Eclipse IDE环境里形成不同函数;然后右击函数,就会跳出菜单,从而便可选择是通过硬件还是通过软件来实现。此外,这些选项里所调用的资源还有很多是经过优化的库,这样,软件工程师的工作效率就会得到很大程度的提高。
图4:SDSoC基于Eclipse IDE开发环境设计,可以在硬件实现和软件实现之间进行切换。
k6Uednc
在SDSoC开发环境里有和ASSP开发一致的环境。为了让用户了解做这个设计,架构怎样才是最优,哪些功能可以用硬件来实现,哪些功能可以用软件来实现,该开发环境可以帮助做系统级的特性描述(图5)。这样便能让用户知道哪些部分要耗费多少资源,需要多少周期才能把事情做完;整个系统的设计里,有哪些通道是最关键的通道,对性能的影响在什么地方;应该怎么样选择来做最优设计等。嵌入式开发人员基本上都很熟悉相关环境,因此这对他们来说没有一个需要重新学习的过程。同时,这样还能使用户能够很快通过这个流程,找到系统级最优的设计。
图5:系统级的特性描述可对系统性能进行快速估算和自动测量。
k6Uednc
此外,在做完这些工作后,就可以进行全系统优化的编译工作(图6)。整个设计中可利用的资源包括CPU和用来做硬加速的FPGA。整个函数拆分起来,有一部分是ARM代码,一部分是硬件加速的函数。ARM代码与硬件加速器怎么样才能把其中的数据通道给打通呢?这个全系统优化的编译器里有自动连接的功能,可以让这些数据自动生成,令ARM和硬加速的部分连接在一起。
图6:全系统优化编译器可实现ARM代码与硬件加速器之间的自动连接。
k6Uednc
“这个流程的好处是,有了硬件和软件的整体化、全系统化优化的过程,与纯软件的设计相比,整个性能可以提升一百倍以上。对一个做系统的工程师来说,他感兴趣的是怎么样可以在把系统性能提高的同时,还可以用最低的功耗把设计给做出来。”杨总表示。
平台开发人员专家级使用模型对性能和功耗实现最佳平衡
“我们还支持另外一个模式,叫做平台开发人员专家级使用模型(图7)。比如你要做一个挑战性很大的应用的时候,做视频的分析,视频流量很大,它里面系统的结构要怎么优化、怎么设计。我们可以让这个系统架构工程师来看看原始的数据,这里头的算法怎么去切割、怎么去复制,然后在处理器的部分和逻辑的部分,怎么可以把它给安排好,找到最佳的路径。找到之后,就可以直接把这个成果交给这个工程师,让这个工程师继续编程软件,那很快这个设计就可以做完。”杨总说道,“本来一个开发的工作需要十来个月的时间,可能现在三到六个月就可以做完,整个设计周期可以提高很多。这就是我们提供的专家级使用的模型,令开发人员可以更加优化、更加快速地完成开发的工作。”
图7:平台开发人员专家级使用模型可针对性能和功耗找到理想的系统架构;令开发人员可以更加快速地完成开发优化的工作。
k6Uednc
一个例子是在做自动生成系统连接的时候,软件工程师并不知道其中数据是怎样流动的。处理器与逻辑之间可以通过ACP,也可以通过高性能带cache的、高性能不带cache的,或是通用接口的方式连接。它可以用软件,可以用DMA,可以用分散DMA,可以用处理器直接连接,也可以用FIFO的方式。用不同的资源来做,数据的移动速度是不一样的,当然速度越快越好,延时越小越好,因为这样系统的功能可以做到更高。SDSoC的工具就可以为软件工程师挑出一个最优的路径来走,这样他就不需要花时间来学习相关的工作,也不需要去计算这些报表,去决定怎么做。这是该工具可以帮助到他的地方,最重要的是可以缩短整个开发的流程。
为了加快开发的进度,SDSoC提供了很多库,包括赛灵思的库和其他第三方的库,有DSP、视频、定点、线性代数、BLAS、openCV的算法。用户不需要去做很多计算,就有很多现成的库可以使用。
SDSoC是一个综合的开发环境。接下来,赛灵思还将在该开发环境下,陆陆续续地提供一些针对某些特定应用场景的工具,即瞄准特定应用场景的库和支持。比如做视频、做图像、做软件无线电等相关应用的场景,赛灵思将会推出相关的配套元素。
SDSoC用户反馈:要早两年推出该有多好!
赛灵思SDSoC目前已有一些和客户合作的成功案例。赛灵思与ADI公司合作开发了一款Zynq SDR系统开发套件,通过SDSoC的开发环境,可以很快地把SDR平台的开发做出来(图8)。
图8:赛灵思与合作伙伴安富利、ADI开发的各种Zynq开发板,可令开发人员运用SDSoC和Vivado设计套件快速构建自己的定制平台。
k6Uednc
一家做医疗和无人机开发的公司Van Gogh Imaging,目前正在做3D计算机视觉的开发。ARM架构在智能性视觉方面优势很大,因为其中有算法和很高的数据带宽,通过硬加速可以做到很高性能的视频分析。有了SDSoC,在一个月之内就能把3D对象识别从概念变成现实的加速Zynq设计。
DAVE也是做嵌入式系统的公司。该公司利用SDSoC将Zynq SoC运用在一些医疗器械里,也是用很快的时间就把这些事情给做了出来。
“在国内推出SDSoC,很多客户反映,为什么两年前不推出来呢?以前需要一两年才能做好的事情,现在一两个月就可以做好。他们很期待这样的算法,可以令他们的生产力大幅提高。”杨总谈道。
从演示效果看SDSoC能够给用户带来什么价值
在介绍完SDSoC之后,让我们再来看下SDSoC的实际演示效果,了解一下这个工具是怎么用的,用了之后有什么好处,又会给客户带来什么价值?
赛灵思亚太地区Zynq业务拓展经理罗霖先生演示的例子是视频监控(图9)——对前后两人的图像分别做一次滤波;然后把这两幅图像相减,得到一个差分图像;再做一次中值滤波,合并输出。在整个画面上如果有运动物体的话,可以用红线把边缘勾勒出来。整个开发的例子是C代码和SDSoC开发工具。整个设计,包括优化多次迭代,在两个礼拜内就能完成;过去做完优化可能需要两个月的时间。因此,这样对大家的生产力是一个极大的提高。
图9:赛灵思亚太地区Zynq业务拓展经理罗霖先生演示视频监控的例子。通过对比可以看出,视频监控在采用硬件加速后可以做到实时效果。
k6Uednc
SDSoC目前支持的主流操作系统有Linux、FreeRTOS和裸机三种,今后赛灵思还会继续增加操作系统列表。“过去如果你用Zynq,光是把linux弄到Zynq上就需要很长时间。现在不需要担心要驱动任何程序,在这一部分就节省了大量的时间,我们全给弄好了。”罗经理表示。
最后,在演示效果时,罗霖对着摄像头挥手,谈道:“如果我不动,我手上是没有这个红色的边缘;如果我手稍微动一下,我手运动的轮廓都会有红色的边缘出来。现在这是硬件演示效果,大家可以看到非常流畅,是实时的。
“下面来看一下软件的效果。软件特别卡,一秒钟大概可以做到还不到一帧,非常不流畅。而硬件可以做到每秒60帧,就是可以看到系统的性能通过我们的SDSoC工具可以完全释放出来,有上百倍性能的提升。同时,在开发效率方面,可能过去要用两个月做的事情,现在用两个星期就可以做完。这就是SDSoC给开发者带来的价值。我们提供给软件工程师一个他们非常熟悉、非常易用的开发工具,这样他们能从第一天就上手,可以做SDSoC的开发。同时,他不用管上面的硬件细节,他只专注于他本身的算法和核心技术的开发。这样对于他来说,可以充分释放他的想象力跟创造力,打造出非常差异化的产品。”