浮点:用FPGA嵌入式处理器实现您的构想

2010-12-18 10:35:40 来源:《半导体器件应用》2009年11月刊

在采用数值处理技术创建嵌入式应用时,通常以整数或定点表示法来确保算术运算尽量简单,这一点至关重要。因其不仅有助于使成本和功耗降至最低,而且还能尽可能地加速硬件部署。
FPGA非常适用于执行定点运算,并能在逻辑或基于软件或硬件处理器的实施方案中创建高度并行的数据路径解决方案。Virtex®-5 FPGA产品系列中FXT系列的最新硬件处理器Xilinx® PowerPC® 440可提供超标量功能,让用户能够对器件编程,使其以高达550MHz的时钟速率并行执行一个或两个定点运算。
尽管用户能通过对器件进行编程来执行大多数采用整数或定点算术的运算,但通常须重新运算并插入比例运算以确保计算结果足够精确。对于复杂运算而言,这不仅耗时,而且还会导致程序变为专用型且不可重用。理想的替代方法是采用标准浮点表示法来提供一种适用于多个应用的高动态范围。这样人们就无需修改算法即可获得适用于任何特定应用或操作环境的定点实施方案,也无需为随后的项目及应用而大范围地修改代码。
虽然赛灵思为基于IBM浮点性能库的PowerPC 440处理器提供了一种行之有效的仿真浮点解决方案,但处理器内核仍需占用数十个周期来执行每条运算。而采用浮点运算单元(FPU)形式的浮点运算硬件加速功能可缩短该运算周期。Virtex-5 FXT系列中的PowerPC 440处理器提供了有效接口,能够将赛灵思软FPU等硬件加速器连接至该处理器内核。该方案可通过结构协处理器总线(FCB)将PowerPC 440处理器上的128位辅助处理器单元(APU)接口桥接至协处理器。使用该类协处理器赛灵思 LogiCORE IP Virtex-5 APU-FPU),Virtex-5 FXT用户可以选择软件仿真或者专用软逻辑FPU在PowerPC上自如地实现浮点运算。图1显示了通过FCB将PowerPC 440处理器连接至Virtex-5 APU-FPU的典型实施方案。
关于PowerPC 440 FPU
赛灵思针对嵌入在Virtex-5 FXT FPGA中的PowerPC 440处理器专门设计了APU-FPU。FPU通过APU接口与处理器的紧密结合可让浮点运算单元直接执行原生PowerPC浮点指令,这相对软件仿真而言,速度一般可提高6倍。
除少数情况外,赛灵思PowerPC FPU一般符合单精度和双精度浮点运算的IEEE-754标准。赛灵思提供了为2:1和3:1 APU-FPU时钟速率而优化的变量,使PowerPC处理器能够以最高频率运行。自发性指令发送不仅会隐藏运算时延,而且还会减少每条指令的周期。此外,这些优化的实施方案可充分发挥器件的高性能DSP特性,以缩短运算符时延并减少逻辑计数与功耗。赛灵思在其嵌入式开发套件(EDK)中支持APU-FPU流。
图2为FPU架构的整体框架图。APU-FPU由执行单元、寄存器文件、总线接口以及所有管理浮点指令执行情况所必需的控制逻辑组成。
FPU含有两个变量。双精度变量可执行除PowerPC ISA图形子集(fsel、fres和frsqrte)以外的所有浮点指令,其中也包括单精度变量执行的指令。这意味着您能使用带各种商用编译器和操作系统的FPU(具体请参见:www.xilinx.com/ ise/embedded/epartners/listing.htm)。
赛灵思编译器支持的APU-FPU单精度变量使用的资源较少。当FPU被占用时,双精度操作将通过软件仿真来执行。
软FPU比软件仿真法平均快6倍。单精度FPU通常比双精度快13%。
将APU-FPU连接至PowerPC 440
有两种方法可将APU-FPU连接至PowerPC 440处理器:1) 利用赛灵思Platform Studio设计工具中的Base System Builder (BSB)向导;2) 将APU-FPU单元添加至当前设计方案中即可。
您首先需利用BSB向导确定目标板和所期望的处理器(PowerPC或MicroBlaze),然后通过一系列复选框和下拉菜单选择设计中所需的IP。借助BSB向导,能够轻松快速地组装并测试基础处理器系统。您只需勾选您要选择的FPU框,即可实现APU-FPU连接(见图3顶部)。该向导可实现一个经过优化能以处理器时钟三分之一速率运行的双精度FPU。您也可定制更高时钟速率的FPU和单精度FPU。
如果不想使用向导,您也可通过另一种方法来实现,即按照系统组装视图拖动IP Catalog下的APU- FPU IP,然后对FPU进行配置即可。图3底部图片显示了IP Catalog (见左下方)和系统组装视图中新添加的FPU。右击FPU并选择Configure IP,然后您便可选取想要的精度(单精度或双精度)并确定您希望该FPU是针对低时延(三分之一时钟速率)或是高速率(二分之一时钟速率)而进行优化;最后将FPU连接至FCB并将FPU/FCB时钟链接至适当的时钟(通常是二分之一或三分之一处理器时钟速率。)
让浮点尽在掌握之中
Virtex-5 APU-FPU提供免费的Platform Studio,支持浮点定制。您可分别采用约2500个或约4900个LUT寄存器对来实现单或双精度FPU,也可在无需添加FPGA逻辑的情况下运行具有浮点仿真功能的软件应用。
性能水平可预先选择:选择适当的FPU,或实施设计并确定软件仿真是否满足要求;如未满足,可升级软FPU。
显而易见,如果能从软件仿真中获得足够的性能,则无需FPU。但如果需要更高的性能,可使用APU-FPU。如果应用需要FPU或正在使用与之配套的编译器,可选择双精度FPU。如果应用仅需单精度运算且您正在使用赛灵思GNU编译器,则单精度FPU会降低逻辑要求。谨记,如果选择双精度FPU,它将执行单精度运算,然后将运算结果进行四舍五入,以提供单精度FPU的精确度。
典型性能增益
当您在评估是需要硬FPU还是软FPU时,应首先确定代码的浮点密集程度。代码通常包括不同浮点、整数、存储器以及逻辑运算等。因此,尽管基准可作为潜在性能提升的指示器,但运行您自己的代码会更好。
表1列出了400MHz Virtex-5 FXT PowerPC 440处理器、软件仿真以及与该处理器相连的200MHz双精度APU-FPU的基准数据,透过该表可清晰了解APU-FPU执行浮点密集代代码的性能表现。
表中所列数据是赛灵思用于评估处理器浮点单元性能的一组基准数据的子集。平均而言,软FPU可比软件仿真快6倍,而单精度FPU可比双精度FPU快13%。
在浮点占主导地位的情况下,可通过优化代码来提高软FPU的性能,以充分利用FPU管线。FIR滤波器基准就是一例很好的潜在性能增益。未经优化的代码是典型的“教科书代码”,虽便于阅读,但大多数FPU执行时往往效率低下。然而,通过实施循环展开、最大限度地延长FPU寄存器中常数的保留时间,以及交叉存取其他代码与浮点指令,设计方案的性能可得到显著提高。在本例中,优化滤波器代码比未经优化的代码快3.8倍,比软件仿真快30倍。
总之,Virtex-5 FXT借助其PowerPC 440处理器可为嵌入式应用提供众多选择。您可在有无FPU的情况下执行设计方案、用性能较高的FPU来替代软件仿真技术、为Virtex-5 FXT量身定制处理能力资源,所有这些都是为了满足您的最佳设计需求,让“一切尽在您的掌握之中”。
表 1  400MHz处理器与200-MHz FPU的典型浮点性能 
基准*  单位  软件仿真 双精度
 FPU 通过软件
实现
 FPU加速
1k快速傅里叶变换 迭代/秒 83  637  7.6
FIR滤波器 (未经优化)  每秒百万浮点指令  6.5  51.4  7.9
FIR滤波器 (优化代码)  每秒百万浮点指令 6.5  194  30
Whetstone  每秒百万浮点指令 6.2  34.8  5.6
Bytemark LU分解 迭代/秒 8.1  43.6  5.4
Bytemark 神经中枢网 迭代/秒  0.255  1.42  5.6
SPEC PID  迭代/秒 1.07  3.826  3.56

* EDK 10.1 SP2 GNU 带标志的编译器:-O3 -funroll-循环 

本文为哔哥哔特资讯原创文章,未经允许和授权,不得转载,否则将严格追究法律责任;
Big-Bit 商务网

请使用微信扫码登陆

x
凌鸥学园天地 广告