DIY编程器网

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 444|回复: 0
打印 上一主题 下一主题

FPGA 解决方案和标准控制器内核比较

[复制链接]
跳转到指定楼层
楼主
发表于 2012-1-18 00:01:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
 MicroBlaze处理器是赛灵思(Xilinx)在嵌入式开发套件 (EDK) 中提供的两款32位内核之一,是实现硬件加速的灵活工具。图1是MicroBlaze的典型设计。该内核含有一个32位乘法器,但不含浮点单元(FPU)、桶式移位器或专用硬件加速器。对Xilinx公司Spartan FPGA 器件而言,默认系统含有区域优化的MicroBlaze(采用三级流水线),但大多数客户通常在开始时使用速度优化版(采用五级流水线)进行性能评估,其优点是小巧简洁,易于扩展。



  Xilinx客户针对这种处理器设计所要求的两个实际应用案例可说明MicroBlaze在硬件加速方面的作用。本文以 Spartan 器件为重点,比较 FPGA 解决方案和标准控制器内核,展现我们能够达到的性价比。这一方法同样适用于Virtex FPGA。
  案例1:实施位反转算法
  在第一个应用示例中,假定MicroBlaze处理器的运行速度仅为50MHz。采用 Spartan-3或Spartan-6器件可轻松实现这一速度。诸如本地存储器总线(指令和数据,LMB)以及处理器本机总线(PLB)等所有内部总线的运行速度均达到50MHz。为简单起见,假定没有连接外部DDR存储器。
  现在假设客户想要在这个CPU上实施位反转算法。MicroBlaze自身没有通过硬件直接提供这个功能。再假定每秒需要完成2万次位反转操作。
  要解决这个问题,大多数客户首先会采用纯软件方案,因为这样可轻松地实现想要的功能。而且如果性能足够高,无需进行任何修改。
  为此,让我们先从简单的软件算法出发,实施简短精悍的解决方案。结果确实简单、精巧而且容易理解,不过效率很低。
unsigned int v=value;
unsigned int r = v;
int s = sizeof(v) * CHAR_BIT - 1;
for (v >>= 1; v; v >>= 1)
{
r > 1) | ((x
& 0x55555555) > 2) | ((x
& 0x33333333) > 4) | ((x
& 0x0f0f0f0f) > 8) | ((x
& 0x00ff00ff) > 16) | (x '0');
begin
  -- bitreversed value to write back:
FSL_M_Data  farr) { min_f =
farr; }
  if (max_f < farr) { max_f =
farr; }
}
  所有数值均是单精度浮点值。我们首先想到的是最基础的一个问题:浮点单元 (FPU) 激活了吗?检查项目设置后,我们发现FPU仍然处于未启用状态。这就是为什么永远无法计算出这几个数的原因。FPU可在 MicroBlaze属性设置中加以激活。
  FPU支持共有两种。我们也选择扩展FPU (Extended FPU)来支持求平方根运算。现在,在50MHz 的MicroBlaze上需要 1,108,685个周期才能完成 512个值的全部循环。查看生成的汇编程序代码后,可以了解到创建平方根是仍然在使用数学库(Math-lib)功能。其在数学功能中的定义为:
  double sqrt(double);
  不过客户使用平方根函数仅为处理浮点数值。因此,MicroBlaze FPU定义了一个新的函数来取代原来的函数,解决这个问题:
  float sqrtf(float);
  把表达式f_sqrt += sqrt(farr)变为f_sqrt += sqrtf(farr),就会调用MicroBlaze内部的FPU内部平方根功能。现在执行代码只需要35,336个周期。特别是与第一个根本没有使用FPU的方案相比,我们再次通过小小的调整就实现了31倍的提升。在相同的执行时间内,可能需要大约1.5GHz的CPU才能给出上述这些结果。
 不过客户仍不满意,客户要求更高的速度。在这种情况下,把算法从浮点运算变为固点运算并不适合。因此,我们开发了一款新型专用硬件加速器(新型FSL IP)来加快对循环的处理。



  新的FSL IP使用CORE Generator模块浮点_v4_0来为4x ADD、2x MUL、1x GREATER、1x LESS和1x SQRT等操作创建9个示例。所有这些示例都可以实体化,并对相同的输入数据进行完全并行处理(图2)。
  FSL IP中实例的创建带有部分时延,但吞吐率仅为1。这要求为加速器内部的控制器硬件准备更多的芯片,不过这样可以在每个时钟周期内向协处理器提供新数据。
  在取回结果前,只有在处理循环末端才需要增加周期。
  我们采用直连方式把MicroBlaze连接到FSP IP时不需要FIFO。传输的所有数据都将缓存在IP内,并随即加以处理。
  从FSL IP返回到MicroBlaze的连接是使用FSL总线创建的。由于我们必须发回一些结果,因而这更加容易实现,而且可以更加简单地在IP内完成。部分CoreGen模块有一些已被添加到执行时间中的时延,并被getfsl()调用完全覆盖。MicroBlaze只需要等到所有结果都存入FSL总线FIFO。不过,只要数据率是1,即可完全实现所要求的吞吐率。
  FSL总线的额外延迟仅会占用为数不多的一些周期。使用FSL硬件加速器的C代码如下:for (i=0;i<512;i++) {
putfsl(farr,fsl0_id);
}
// get the min,max values:
getfsl(min_f,fsl0_id);
getfsl(max_f,fsl0_id);
// get the sum and products:
getfsl(f_sum,fsl0_id);
getfsl(f_sum_prod,fsl0_id);
getfsl(f_sum_tprod,fsl0_id);
getfsl(f_sqrt,fsl0_id);
  算法的最终实施仅需大约4,630个周期,而且依然是全浮点实施。
  硬件需要本来应该用于实施硬件加速器的更多芯片才能并行计算出所有结果。不过与扩展FPU实施方案相比,我们最终提升了大约7.6倍。否则,如果使用标准处理器来替换这个50MHz的处理器,可能需要大约380MHz的CPU才能胜任(假设硬件自带有浮点平方根函数)。
  更为显著的是与使用PFU的最初方案,而非平方根函数的对比效果:总体提升了大约239倍。这种效果可能需要12GHz左右的浮点处理器才能实现。
  如上述例子所示,有时候小小的调整就会显著影响算法的处理效果。实施这些调整,可以让您的50MHz MicroBlaze系统与高性能DSP相媲美。
  首先,找出执行时间过长的核心算法,然后对其加速——通过简单调整软件,使用硬件,或使用硬件加速器进行更为复杂的调整。如此一来,您的处理器系统会强于标准控制器。
                          
                       
                          
                               
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|文字版|手机版|DIY编程器网 ( 桂ICP备14005565号-1 )

GMT+8, 2025-12-28 06:45 , 耗时 0.093234 秒, 18 个查询请求 , Gzip 开启.

各位嘉宾言论仅代表个人观点,非属DIY编程器网立场。

桂公网安备 45031202000115号

DIY编程器群(超员):41210778 DIY编程器

DIY编程器群1(满员):3044634 DIY编程器1

diy编程器群2:551025008 diy编程器群2

QQ:28000622;Email:libyoufer@sina.com

本站由桂林市临桂区技兴电子商务经营部独家赞助。旨在技术交流,请自觉遵守国家法律法规,一旦发现将做封号删号处理。

快速回复 返回顶部 返回列表