新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 采用硬件加速发挥MicroBlaze处理能力

采用硬件加速发挥MicroBlaze处理能力

作者:Karsten Trott博士 赛灵思(德国慕尼黑) 现场应用工程师时间:2010-03-09来源:电子产品世界收藏

  为了加速这种基础操作,只需要在快速单工链路(FSL)上连接一个非常简单的内核。标准FSL实施方案使用FSL总线(包括同步或异步FIFO)将数据从 内核传输到FSL 器IP核。带FIFO 的FSL总线与FIFO可对上述两者间的数据存取进行去耦。

本文引用地址:http://www.eepw.com.cn/article/106702.htm

  如果采用带FIFO的标准FSL总线,则一般情况下执行时间为4个周期:一个周期用来将上的数据通过FSL写入FIFO;一个周期用来将数据从FIFO 传输到FSL IP;一个周期用来把结果从FSL IP传送回 FSL总线的FIFO中;最后一个周期则负责从FSL总线读出结果并传输至 MicroBlaze。

  MicroBlaze到FSL总线的连接以及FSL总线到FSL IP的连接可在EDK的图形视图中轻松创建。

  这样代码要长得多,效率也有大幅度提升,但时间还是太长了,执行2万次操作现在仍然大概需要52ms。

  随后客户在互联网上进行了一些调查,找到一种更好的算法,把代码改编为:

unsigned x = value;
   unsigned r;
   x = (((x & 0xaaaaaaaa) >> 1) | ((x
& 0x55555555) << 1));
   x = (((x & 0xcccccccc) >> 2) | ((x
& 0x33333333) << 2));
 x = (((x & 0xf0f0f0f0) >> 4) | ((x
& 0x0f0f0f0f) << 4));
 x = (((x & 0xff00ff00) >> 8) | ((x
& 0x00ff00ff) << 8));
 r = ((x >> 16) | (x << 16));
 return r;

  这个代码看起来效率高,短小精悍。而且它不需要会造成流水线中断的分支。它在这个核心系统上运行只需29 个周期。

  不过这个算法需要在1 、2、4、8和16位之间进行移位操作。我们在MicroBlaze的属性窗口中激活桶式移位器。不管移位操作的长度如何,采用桶式移位器可允许我们在一个周期内完成移位指令。这样可以让纯软件算法在 MicroBlaze上运行得稍快一些。

  激活MicroBlaze硬件上的桶式移位器可将处理算法所需时间缩短到22个周期。与第一个版本的软件算法相比,此算法得到了显著改善。目前采用此算法,执行所有 2万次操作只需8.8ms,效率提升了10倍,不过仍未达到客户要求。

  不过效率还有提升的空间。算法中的时延非常关键,应尽可能地缩短。但在我们的实施方案中,采用两根FSL总线仍需要四个时钟周期。不过我们可以通过将 MicroBlaze与器之间的现有连接方式改为直接连接,便可将时延减半,缩短至两个时钟周期。这样一个周期用于将数据写入 FSL器IP,而另一个周期则负责读回结果。

  在采用直接连接方式时,需注意几个问题。首先,协IP应存储输入,并以寄存方式提供结果。请注意在执行此操作时没有使用带FIFO的FSL总线。

  此外,以不同时钟速率运行 MicroBlaze和FSL硬件加速器IP 容易发生问题。为避免发生冲突,设计人员最好将MicroBlaze和 FSL硬件加速器IP的运行速率设为一致。

  不过,如何在不使用FSL总线的情况下将MicroBlaze和FSL硬件加速器IP直接连接起来呢?这很简单,只需将MicroBlaze和硬件加速器的数据线连接起来即可。如果需要,可再添加握手信号。



评论


相关推荐

技术专区

关闭