您的位置 首页 制造

FPGA 解决方案和规范控制器内核比较

FPGA 解决方案和标准控制器内核比较, MicroBlaze处理器是赛灵思(Xilinx)在嵌入式开发套件 (EDK) 中提供的两款32位内核之一,是实现硬件加速的灵活工具。图1是MicroBlaz

 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;
r |= v 1;
s–;
}
r = s;
return r;

  这段程序运转适当顺畅,不过就算在专门针对速度优化的MicroBlaze(运用五级流水线)上运转处理一个32 位字的算法,也用了220个周期。要履行2万次位回转操作,在速度为50MHz的MicroBlaze上约需88ms。

  客户企图选用略有不同的办法来优化算法,但仍作为纯软件处理计划来施行。

  要进一步提高功用,就要选用纯硬件处理计划,经过一种新的方法来让硬件加快器充分发挥功用。

 为了加快这种根底操作,只需求在MicroBlaze快速单工链路(FSL)上衔接一个十分简略的内核。规范FSL施行计划运用FSL总线(包含同步或异步FIFO)将数据从 MicroBlaze内核传输到FSL 硬件加快器IP核。带FIFO 的FSL总线与FIFO可对上述两者间的数据存取进行去耦。

  假如选用带FIFO的规范FSL总线,则一般情况下履行时刻为4个周期:一个周期用来将MicroBlaze上的数据经过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和硬件加快器的数据线衔接起来即可。假如需求,可再增加握手信号。

  例如,运用位回转IP,只需一个写入信号即可。IP会一向很快运转,足以对MicroBlaze的任何恳求做出及时呼应。

  IP自身十分简略。以下是摘抄 VHDL 代码中的一段:

architecture behavioral of
  fsl_bitrev is
  – data value sent by microblaze:
  signal data_value :
std_logic_vector(0 to 31) := (others=>’0′);
begin
  – bitreversed value to write back:
FSL_M_Data = data_value;
process(FSL_Clk)
begin
  if rising_edge(FSL_CLK) then
if (FSL_S_Exists = ‘1’) then
— create the bitreversed data:
data_value(0) = FSL_S_Data(31);
data_value(1) = FSL_S_Data(30);
data_value(2) = FSL_S_Data(29);

 data_value(30) = FSL_S_Data(1);
 data_value(31) = FSL_S_Data(0);
end if;
end if;
end process;
end architecture behavioral;

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/bandaoti/zhizao/134122.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部