Xcell出版物
  杂志
    嵌入式杂志
   
  给Xcell投稿
  在Xcell杂志做广告
  免费订阅
   
  联系我们

    

主页 : Xcell出版物 : 杂志 : 嵌入式杂志 :文章
加速PowerPC软件应用程序



作者:David Pellerin,技术主管,Impulse Accelerated Technologies公司
david.pellerin@impulsec.com
Greg Edvenson,高级软件工程师,Pico Computing公司
greg@picocomputing.com
Kunal Shenoy,设计工程师,Xilinx公司
kunal.shenoy@xilinx.com

Dan Isaacs,APD部嵌入式PowerPC营销主管, Xilinx公司
dan.isaacs@xilinx.com (9/1/05)


利用定制APU外设,C-to-Hardware工具可以快速创建Virtex-4硬件加速器。
文章的英文版PDF链接
文章英文版PDF 295 KB


Xilinx® Virtex-4TM FX系列FPGA器件为嵌入式系统开发者提供了创建高性能硬件加速应用的新方法。 借助于集成的业界标准PowerPC TM处理器和创新的辅助处理器单元(APU)接口,Virtex-4 FX器件使系统设计者可以将定制硬件加速器高效地连接到集成的处理器上,从而获得前所未有的性能。

过去,由于编写低级硬件描述来实现较高级的软件功能是很复杂的,所以希望利用FPGA来实现算法加速的软件编程人员遇到了很大的技术障碍。

本文中,我们将介绍如何通过软件到硬件工具让嵌入式系统设计者和软件编程人员充分利用Virtex-4 FX FPGA的强大功能。 这类工具的出现为会使用C语言进行编程的人员带来了FPGA的性能优势。现在,对于广泛的应用领域(包括图像处理、DSP和数据加密)而言,加速基于FPGA的设计变得更轻松、更实用。

从软件到FPGA硬件
由于FPGA具有整体并行结构,所以它们具有大大加速嵌入式软件应用的潜力。 但是,与传统的处理器相比,由于这些器件需要不同的(面向硬件的)技能,所以除了对硬件非常了解的软件编程人员外,对其它人来说,基于FPGA的系统的创建和编程仍然是一个挑战。 不过,这种情况在逐渐改变。 随着简化的基于FPGA的计算平台和用于平台构建的新型工具的推出,阻碍FPGA采用的大多数障碍已被排除。 另外,用于FPGA的软件到硬件工具的推出,也极大地提高了这些器件作为软件可编程计算平台的实用性。

这些工具使基于FPGA的平台被认为是用于嵌入式系统的传统处理器可行的替代物,它们满足两种基本需要。 在前端,软件到硬件编译器工具接受用嵌入式软件编程人员所熟悉的语言编写的高级描述。 嵌入式系统设计的实际标准是标准C,C++和Java也开始被采用。

在后端,已有的综合与布局和布线技术,与系统级平台构建工具组合在一起,使设计者可以面向特定开发板开发基于可编程逻辑的完整系统。 现在,通过目前已有的工具,这两种需要都得到了满足。

在软件到硬件编译领域,Impulse CoDeveloper (图1)之类的编译器工具,可以从软件算法的较高级的C语言描述方面,简化FPGA硬件的生成。 这些工具在软件编程和较低级硬件设计之间起到了纽带作用。

Xilinx Platform Studio可以满足平台构建的工具,它支持多种基于Xilinx FPGA的开发板和系统。 Platform Studio使那些对低级FPGA设计知之甚少或没有经验的嵌入式系统设计者可以在单个FPGA中构建完整的系统,包括一个或多个处理器和相关的外设。 当这些工具和平台敏感型从软件到硬件的编译器整合在一起时,完整的系统就可以包括最初用C语言编写的定制加速器。

加速嵌入式应用
Virtex-4 FX系列器件为嵌入式应用的硬件加速提供了理想的平台。 例如,Virtex-4 FX12 FPGA包括12,000多个逻辑单元、可以在高达450 MHz的速度下运行的集成PowerPC 405核、2个通过设备控制寄存器(DCR)接口或通过FPGA逻辑架构由处理器配置的10/100/1000以太网MAC。

让我们看一看嵌入式处理器块(如图2所示),PowerPC 405 CPU与独特的、创新的APU控制器直接耦合,它为在FPGA逻辑中实现的硬件加速器提供直接存取。 APU控制器支持三种指令:PowerPC浮点指令、APU加载与存储指令、自定义指令(UDI)。 通过PowerPC 405经由DCR总线动态地、或通过bitstream在FPGA配置过程中静态地将UDI编程到APU控制器中。 APU支持的指令由在FPGA逻辑中实现的硬件加速协处理引擎来执行。

当封装在高度集成的小型器件(如Pico Computing E-12 卡(参见“系列开发平台”))中时,FX12器件成为一个完整的嵌入式开发平台,完全不需要或需要很少的硬件设计专门技术。 对于需要一系列硬件外设(例如,对视频和音频信号的直接存取)的嵌入式应用开发人员来说,同样基于FX12器件的Xilinx ML403板,提供了出色的嵌入式系统开发平台。

片上Virtex-4 FX APU控制器在FPGA逻辑架构和片上PowerPC流水线之间提供了灵活的高带宽接口。 FPGA逻辑架构中实现的处理器模块(FCM),通过APU接口与嵌入式PowerPC处理器连接,允许创建定制硬件加速器。 这些硬件加速器用作PowerPC的扩展,因此,可以让CPU卸载苛刻的计算任务。

软件工程师可以从汇编程序或C代码中访问FCM。 提供汇编程序助记符,用做自定义指令和预定义的加载/存储指令,使编程者可以将硬件加速功能调入正常的程序流程。 编程者也可以定义专为FCM的硬件功能而设计的定制指令。 与C-to-hardware编译器工具整合时,APU控制器使得软件编程人员可以创建硬件加速的软件应用,而不需要或需要很少的FPGA设计专门技术。

C-to-hardware工具提高了设计的生产率
为了有效利用任何计算平台,软件编程人员需要适当的编译器和调试工具。 Impulse Accelerated Technologies公司推出的Impulse C,允许从软件描述直接编译硬件加速器,实现软件编程人员对FPGA的访问。

这些加速器一般由一个或多个软件子程序表示,被自动编译到高效、高性能的硬件中,这些硬件可以直接映射到FPGA逻辑门中。 以Virtex-4 FPGA为例, Impulse C还能够利用APU自动生成软件/硬件接口。 对于组合了传统的和基于FPGA的处理的应用而言,这特别有用。

由于Impulse C基于标准C,所以可以使用流行的C和C++开发环境(包括Microsoft Visual Studio和基于GCC的工具),来开发和调试FPGA算法。 CoDeveloper软件到硬件编译器将特定的C语言子程序转换为低级FPGA硬件(参见图3),同时优化生成的逻辑并识别并行机会。 编译器还可以打开环路,生成环路流水线以便利用FPGA中可能的极端并行水平。 仪器设备和其监测功能为高度并行的多进程应用提供调试可视化,帮助系统设计者识别数据流瓶颈和其它需要加速的领域。

对于涉及嵌入式PowerPC和MicroBlaze™处理器的应用,Impulse C编译器自动创建硬件/软件接口,并生成与Xilinx Platform Studio兼容的输出。 这样,就可以为基于FPGA的平台产生高性能、混合硬件/软件应用,而无需编写低级VHDL或Verilog。

对于包含多个硬件和软件元素的大型应用,Impulse C包括接口库(请参见“利用FPGA中的并行”)和相关编译器特性,允许在多级和独立同步进程中实现并行。 这些进程可以映射到在嵌入式PowerPC或MicroBlaze处理器上运行的软件上或映射到FPGA硬件上。

对于所有这些应用,前端编译器工具和后端平台构建工具的组合是非常重要的。 设计过程是高度反复的,反映这样一个事实:在最前面做出的决定(如C编码的类型和系统级划分的决定)可以对C编译、综合、布局和布线与最终位图生成之后获得的结果产生巨大的影响。 在该过程的每部分上,这些工具都会提供反馈,使您进入平台开发流程的随后阶段(可能非常费时)之前即可评价和估计性能。

我们来总结一下利用Impulse和Xilinx工具来设计一个典型的、基于PowerPC的应用所需的步骤:

  1. 应用最初是用标准C编写的,使用通用C开发工具。 这些工具包括现有的工具如Visual Studio、 Eclipse或GCC和GDB,也包括更复杂的交叉开发工具。 在这个阶段,用于验证的基线(一个软件测试平台,也是使用C编写的)已经建立,使您对后来设计的反复修改可以进行快速测试。
  2. 可以调用一个C编译器(如gprof)或其它编译器,使用不太复杂的方法来识别计算热点。 这些热点通常可以被隔离到一些需要加速的C子程序或内部代码环路中。 应用监测(通过在软件测试过程中提供C代码来实现)有助于识别这些热点和分析数据移动。
  3. 使用Impulse C库中提供的软件到硬件接口功能,数据流或共用存储器在PowerPC上运行的主算法和FPGA中运行的硬件加速子程序之间创建抽象连接。 现在,修改后的软件算法包括一个或多个独立的同步进程,并在一个标准C环境下再次被仿真,从而确保其正常工作。
  4. 代表硬件加速器的C语言子程序(也被称为进程)被Impulse C编译器分析和优化,产生与FPGA综合工具兼容的硬件描述文件。 这个阶段产生的优化报告,可以帮助您了解不同代码风格带来的影响,并对最初的C代码进行适当的修改以改善性能。 在该编译过程中,产生了代表硬件到软件接口的附加编译器输出,包括(如Virtex-4 FPGA)必需的APU接口逻辑。 这时,也生产了软件运行时间库,与处理器部分上设定的提取流和共用存储器接口相对应。
  5. 生成的硬件和软件文件从Impulse工具(作为PCORE外设)输出,并直接输入到Xilinx Platform Studio环境中。
C应用中指定的流和共用存储器接口被映射到APU、PLB或其它适当的接口,以及其它元件(如标准处理器外设或非标准IP块)上,以创建完整的系统。 从Platform Studio接口内部开始构建整个应用(硬件和软件),产生一个可下载的比特文件。

评估FPGA加速
使用Pico E-12卡和Xilinx ML403开发套件,以及Impulse C和Platform Studio,我们来比较一下带有和没有APU硬件加速的嵌入式PowerPC 405处理器的性能,我们只使用C编程技术。 为了研究一系列潜在的应用领域,我们选择下面三种有代表性的算法:

  1. 一个图像滤波器。 利用这个算法,我们可以评估两个用于处理图像数据流的流水线硬件程序。 本试验所选择的算法是一个在512 x 512图像缓冲器上运行的较简单的3 x 3沿检测功能。 这个算法使我们可以通过Virtex-4 APU接口,快速评估数据流的性能,以及评估使用多个、流水线硬件进程的潜在加速。
  2. 一个三倍DES加密引擎。 这种算法使我们可以评价不同C级优化策略的影响,以及调整和优化早期C代码来实现编程模型的实用性。 处理一百万个字符块(每块有8个字符)来获得本试验的性能数据。
  3. 一个不规则图形发生器。 该算法是计算密集型的,可以使用多种方法来探索尺寸/性能空间。 对于本试验,我们在用作APU外设的FPGA中创建单个硬件进程。 该硬件进程与运行在嵌入式PowerPC上的单个控制软件进程通信。 采用该算法的设计,生成了一个1024 x 768像素图像,并可以选择图形的准确度,可以对这个设计进行升级,以便轻松地增加附加硬件加速器进程,最高可以达到目标FPGA的极限。
对于每种算法,在Impulse C编译器中选择编译器环路打开、流水线和最高延迟的组合。 这样,可以对应用进行优化(大多数情况下,不需要修改原始C代码),以便在生成的硬件中获得需要的尺寸、周期延迟和最高时钟速率的平衡。 大多数情况下,我们确定,在FPGA架构中使用相对较低的时钟速率(50MHz)和随周期增长的吞吐量(通过使用自动流水线),在给定的软件到硬件数据通信开销下,可以产生最佳的整体效果。

将这些算法用做一个基线,相同的C代码被编译到FPGA(做为APU加速器)和仅使用软件应用的嵌入式PowerPC处理器上进行大量的测试。 这些测试的结果总结在表1中。

如表中所示,与仅使用PowerPC软件的算法相比,即使在降低的FPGA时钟速率下,硬件加速算法的性能也有很显著的提高。

结论
本文中,我们展示了如何使用基于FPGA的平台和C-to-hardware工具来创建高度加速的系统,而无需低级硬件设计技巧。 当在Pico E-12之类的卡中或Xilinx ML403之类的原型板上实现时,Virtex-4 FX器件对FPGA器件在高性能嵌入式计算中的应用方式产生了革命性的改变。

当软件到硬件工具如Impulse C,与Platform Studio的平台构建能力相结合时,实现了此类器件的高效编程。
利用FPGA中的并行
任何软件到硬件设计流程的关键之处都在于使用并行来提高性能。 使用FPGA加速C应用时,可以在两种不同的等级下使用并行:应用系统级和特定子程序或环路内的语句级(语句块)。 尽管人们不断试图发明高度自动化的、可以利用两种并行等级的编译器技术,但是现在最好的方法是将自动化方面的努力(以软件到硬件编译器为代表)集中到低级问题上,同时,为软件编程人员提供合适的、简便易用的编程模型,以实现较高级的、粗粒度并行。 这样,编程人员可以决定进行硬件/软件划分,并试验可替代的算法,将低级任务优化任务留给自动编译器工具。 这种方法对于Virtex-4器件这类包括嵌入式处理器的平台来说,尤其有用。

很多编程模型都可用于基于FPGA的可编程平台上,不过,成功的模型都包含下面的特性:它们通过类似数据流的设计划分和提取方法来支持模块性和并行性。 通信顺序进程(CSP)就是这样的一种编程模型。 在针对FPGA的应用级并行方面,CSP是非常高效的。 Impulse Accelerated Technologies公司推出的Impulse C工具中直接支持该编程模型。

Impulse C编程模型的核心是进程和流(如图4所示)。 进程是用标准语言编写(此时是C语言)的应用中独立同步、同时运行的部分。 进程通过接收数据、进行计算、和生成相关输出来完成应用中的工作。

与传统的C子程序不同,进程被认为是不变的;进程通常被调用一次(不管是在硬件中,还是在软件中),并且只要有数据流需要处理,进程就会继续。 此类应用处理的数据以流的形式(或者,有时以信息或共用存储器的形式,编程模型也支持这种形式)从一个进程流到另一个进程。 流代表并发进程间通信的单向通道;至于进程,因为缓冲的问题,流是自同步的。 因此,进程间同步的主要方法是在流上传送数据。

在此类系统中(并使用此类编程模型)分配处理能力的关键是在FPGA中执行一个或多个进程,以处理繁重的计算;并在嵌入式或外部微处理器上执行其它进程,以处理文件I/O、存储器管理、系统设置和其它不影响性能的任务。 使用这些工具(如那些包含Impulse C的工具),包含多个并行C进程的应用完全可以在软件中被模型化,利用标准的桌面C调试环境进行验证,然后,在应用功能完成后,逐渐移到FPGA中进行进一步的优化和加速。

系列开发平台
为嵌入式应用开发者,即软件编程人员,提供简便易用的硬件平台,是使FPGA成为可行的嵌入式开发平台的第一步。 越来越多的供应商提供基于FPGA的原型和高性能计算平台,其范围从低成本、单个FPGA系统到用于硬件加速计算的更大FPGA阵列。

正文(可以从Pico Computing获得,www.picocomputing.com)中提到的Pico E-12卡,是一种CompactFlash form-factor封装,功耗为2W。 它具有10/100/1000以太网、64MB Flash、128MB RAM和一系列外设适配器(如A/D、D/A、异步串行、同步串行、CAN总线、延迟控制和JTAG)。 适合软件开发人员使用的平台开发和编程工具支持该卡。 通过在低功耗、独立封装内提供大量的并行硬件计算资源,Pico E-12平台提高了桌面和便携式计算性能(图5)。

有两种类型的Pico E-12。 逻辑优化(LO)型基于Virtex-4 LX-25器件,而嵌入式处理器(EP)型基于Virtex-4 FX12器件,具有集成的PowerPC处理器。 两种情况下都使用板上加载程序,从64MB板上Flash存储器配置E-12卡上的FPGA。 这种独特的加载程序设计使新的FPGA映像根据需要交换到FPGA中。 大量的FPGA映像可以存储在Flash存储器中;通过E-12卡的外部接口,经由板上软件或外部软件与E-12卡的通信,可以随时加载任何映像。 通过交换序列,128MB外部RAM的内容保持不变,允许随后的FPGA映像在已有的RAM数据上运算。

Xilinx ML403(如图6所示),是第一个Virtex-4 FX嵌入式处理开发板,将Virtex-4 FX12与大量的软件可配置接口整合起来,包括网络接口,串行、并行、USB端口,LVDS和D/A与A/D接口,以及VGA驱动器。 因此,ML403是需要对外部硬件设备进行直接FPGA存取的嵌入式系统设计者的理想之选。

图7是具有Impulse生成的硬件加速器APU和只有软件实现的处理器之间的比较。 本实例中,两个系统都使用ML403。 您可以看到,APU加速类型比只有处理器类型的速度快得多。


带图形可打印PDF英文版本的文章。 PDF标识 (9/1/05) 295 KB

 
职位招聘 本地活动及在线座谈 本地新闻稿 投资者关系 反馈 法律声明 网站地图
© 1994-2008 Xilinx, Inc. All Rights Reserved.