电子文章 | 电子资料下载 | 家电维修 | 维修资料下载 | 加入收藏 | 全站地图
您现在所在位置:电子爱好者电子文章FPGA基于C语言的设计方式简化FPGA/协处理器混合平台软硬件协同

基于C语言的设计方式简化FPGA/协处理器混合平台软硬件协同

11-20 16:12:21 | http://www.5idzw.com | FPGA | 人气:330
标签:fpga是什么,fpga教程,fpga培训,http://www.5idzw.com 基于C语言的设计方式简化FPGA/协处理器混合平台软硬件协同,http://www.5idzw.com

在最近几年中日益流行在高性能嵌入式应用中使用现场可编程门阵列(FPGA)。FPGA已经被证明有能力处理各种不同的任务,从相对简单的控制功能到更加复杂的算法操作。虽然FPGA在某些功能上比ASIC硬件具有时间和成本上的优势,但在面向软件应用中的FPGA比传统处理器和DSP的优势并没有体现出来。这很大程度上是由于过去割裂了硬件和软件开发工具和方法之间的关系。


   然而最近FPGA在软件设计工具方面的发展,及器件容量的持续增加为软件开发者创造了新的环境。在这种环境下,FPGA可视为软件编译器的一个可能的目标。现在,工具能够帮助软件工程师利用FPGA平台,同时在结合了传统处理器(或软处理器核)和FPGA的单一目标平台上,帮助这些开发者利用其所具有的高度算法并行性。


   基于FPGA的计算平台,尤其是那些具有嵌入式“软”处理器的平台,有能力实现非常高性能的应用。通过使用最新一代的硬件/软件协同设计工具,有可能使用多种面向软件的设计方式作为FPGA设计过程的一部分。


   使用基于FPGA的参考平台


   FPGA中使用嵌入式处理器的优势之一是能够在单个可编程器件上建立硬件/软件开发对象——等效硬件参考平台。 快速下载和测试新的软件/硬件配置的能力也能大大提高设计率。通过使用嵌入式处理器作为测试生成器,单独的硬件部件也可以快速地验证功能。


   这种快速原型平台的典型例子是Altera公司提供的Nios开发包。Cyclone或Stratix FPGA中都包括这个工具包,除了高性能的Nios 32位软核处理器核之外还包括多种硬件和软件外设接口。在设计过程中可以选择这种核,使用Altera SOPC Builder工具配置并下载到相应的FPGA中。板上本身的连接容许直接和各种不同的外部部件连接,从串口(RS232和USB)到Flash存储器和网络接口。


   在开发过程中使用这种板子并结合Altera工具,容许嵌入式系统设计者用应用原型所需的部件(包括嵌入式处理器)组成目标平台。然后,软件开发者能够关注应用本身,分析和试验不同的硬件/软件划分方案。


  权衡硬件和软件资源


   在一些高性能嵌入式应用中,从产品构建费用和开发成本考虑最佳的资源使用方案是混合处理器方案。在这种方案中非关键性能的功能由主处理器实现(它们可能是或不是嵌入式处理器核),而大计算量的部件是一个或多个DSP芯片、或者其它专用ASIC或FPGA。这种的解决方案通常需要丰富的硬件设计和工具的知识,但是在性能和成本方面上具有最佳的收益。


   对于系统中的每个处理单元(即标准处理器、DSP、FPGA或ASIC),需要不同水平的专用技能。例如,虽然DSP是软件可编程的,在工具上的初期投入小,但他们需要在DSP专门的设计技术方面有一些专门经验,通常需要汇编级的编程技能。在另一方面,FPGA在设计和工具经验上需要相对高的投入,在硬件设计语言作为主要的设计输入方式时尤其如此。


   然而FPGA和专用ASIC设计所需的经验和工具投入相比,显然FPGA在开发专用硬件上具有更低的风险。的确,相对于专用ASIC方案的简单性和低风险的设计过程是选择FPGA的关键因素。最近基于软件的FPGA设计工具使这种设计过程获得更大的效率。这反过来让系统设计者和软件应用开发者在实际的硬件上能够更快地尝试新的算法方式,使用迭代方式进行设计。


   这种迭代方式重要好处是能够一次改变一个单元(例如将关键的算法移至FPGA)。应用最初是完全用软件进行原型设计,并验证其正确性,然后由FPGA完成特定的功能,这是在每个步骤都要对系统重新进行验证的硬件实现过程。这种方式被证实能大大地缩短调试时间,降低引入难以调试的系统错误的风险。


   你如何在考虑“将设计的哪部分以硬件实现”上做出最明智的选择?一个普遍采用的方式是从用C,Matlab,SystemC或其它一些软件编程语言的软件模型开始。随着应用模型和部件算法的发展,设计者确定并发挥设计中的并行性(或重新设计算法),利用可编程硬件在建立并行结构方面的独有能力。增加并行度通常转化为增加硬件资源。使用软件模型验证假设,建立可重复的测试组,这些测试组可以作为模型,进一步提炼可以进行软件和硬件编译的内容。


  混合软硬件设计方法


   现今如何开发混合软件和硬件应用呢?如果设计是软件驱动的(现今越来越多的设计是这样),软件或系统工程师从编写代码(如上所述)来建立系统原型。 另一种是,工程师用更高级的工具如Simulink(来自Mathworks),基于UML的工具或其它系统设计环境开始。 在这个过程中,系统设计者或软件工程师将采用更高级的设计抽象以获得最大的效率,但是可能获得很低的性能结果。因为以这种方式自动选用的处理器类型是受限的,为性能转换低级代码的机会相对更少。有经验的嵌入式开发者可能会进一步用汇编语言优化应用的各个部分,或使用专用处理器(即DSP芯片)来提高性能。硬件工程师可以参与优化面向FPGA和ASIC实现的设计中的那部分接口。


   初始系统设计和划分完成之后,需要最高性能的各个部分可以手工描述出来,交给硬件工程师。工程师为FPGA或ASIC部分编写低层的HDL代码,他们的设计生产率通常非常低(软件工程师1/10或更少)。结果是系统速度增加了,但是代码和最初的软件代码无法对应,设计周期不再一致,系统规格的改变可能很痛苦。


   在这种情况下,系统设计者必须作为硬件/软件仲裁者,指定硬件/软件接口,锁定设计反映设计的前期时间。一旦硬件开发认真地展开,可能几乎没有机会再次从整体上把握。


  基于C的设计和原型工具加速开发过程


   在上述的方式中,最终的设计是软件和硬件源文件的组合。 一些需要软件的编译/调试工具流程,其它需要硬件设计流程和专业知识。 然而,随着基于C的FPGA设计工具的出现,使得在大部分的设计中可以采用熟悉的标准C语言,尤其在那些本身就是实现算法的硬件电路。 后面的性能转换可能会引入手工的硬件描述语言(HDL)取代自动生成的硬件(正如面向DSP处理器的源代码通常用汇编重新编写),但是因为设计直接从C代码编译成最初的FPGA实现,硬件工程师要参与性能转换的时间会进一步提早至设计阶段,系统可以用更高效率的软件设计模式来进行设计。


   CoDeveloper工具(Impluse Accelerated Technologies提供)允许C语言的应用编译后以FPGA网表形式建立硬件,包括允许描述高度并行和多过程应用描述所必须的C语言扩展。对于包括嵌入式处理器(如Altera的Nios软核处理器)的目标平台,CoDeveloper可以用来生成必要的硬件/软件接口,及生成特定过程的低级硬件描述。


   采用这种工具和硬件/软件方式获得成功的关键是软件和硬件处理资源之间合理的划分。好的划分方案不仅要考虑给定算法部件对计算量的需求,而且要考虑数据带宽需求。这是因为硬件/软件接口可能是主要的性能瓶颈。


   合理地利用高并行应用的编程模型也很重要。虽然它试图用传统编程方式如远程过程调用(RPC)将特定功能交由FPGA处理,但是研究表明面向数据流的通信方式更有效率,它不可能引入阻塞或造成应用死锁。在一些情况下,这意味着重新从整体上考虑设计,寻找新的方式对数据进行搬移和处理。这么做的结果是非常显著的:通过增加应用级的并行性,充分利用可编程逻辑资源,这可能将使一般算法比纯软件实现提升几个数量级。


   在这种应用的开发过程中(或重新工程化),设计工具是可视化的,能调试多个并行过程的互连。工具有助于量化地给出划分方式的结果,识别可能表示应用瓶颈的高数据吞吐量的区域。用户可以在工具的帮助下,进行更详细的分析和性能调整。


[1] [2]  下一页

,基于C语言的设计方式简化FPGA/协处理器混合平台软硬件协同