您的位置 首页 应用

MicroBlaze在硬件加速中的应用技术

MicroBlaze处理器是赛灵思(Xilinx)在嵌入式开发套件 (EDK) 中提供的两款32位内核之一,是实现硬件加速的灵活工具。图1是MicroBlaze的典型设计。该内核含有一个32位乘法器,

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;

假如在两者之间没有运用 FSL总线的情况下添加这个IP,您有必要对项目的MHS文件进行如下修正:
BEGIN microblaze

PARAMETER C_FSL_LINKS = 1

PORT FSL0_S_EXISTS = net_vcc
PORT FSL0_S_DATA = FSL0_S_DATA
PORT FSL0_M_DATA = FSL0_M_DATA
PORT FSL0_M_WRITE = FSL0_M_EXISTS
PORT FSL0_M_Full = net_gnd
END
BEGIN fsl_bitrev
PARAMETER INSTANCE = fsl_bitrev_0
PARAMETER HW_VER = 1.00.a
PORT FSL_S_DATA = FSL0_M_DATA
PORT FSL_S_EXISTS = FSL0_M_EXISTS
PORT FSL_M_Data = FSL0_S_DATA
PORT FSL_M_Full = net_gnd
PORT FSL_Clk = clk_50_0000MHz
END

现在功率显着进步。硬核仅在两个周期内可完结位回转操作:一个周期用于把数据写入IP,另一个周期则担任读回成果。处理2万个位回转操作现在只需0.8ms。

与开始选用的算法比较,功率进步了110倍。与功率最高的最新软件算法比较,此算法仍使体系功用进步了11倍。

当然,本例只需在您的CPU不供给位回转寻址功用的情况下才有用。大多数 DSP都有此功用,但大多数微控制器都不具有这个功用。具有添加这个功用的特性可大起伏进步这种算法的处理速度。

尽管修正不大,但收效十分显着。咱们乃至将代码压缩到两个字巨细。当然,现在硬件要求添加一些芯片。不过以此为价值取得比任何规范微控制器更高的速度,是值得的。

 事例2:高速浮点功用

现在咱们给出另一个 MicroBlaze算法加快示例。一个客户宣称他的浮点处理在MicroBlaze体系上运转十分慢。他运用的算法可选用简略的环路一起得出几个成果。

for (i=0;i512;i++) {
f_sum += farr[i];
f_sum_prod += farr[i] * farr[i];
f_sum_tprod += farr[i] *
farr[i] * farr[i];
f_sqrt + =
sqrt(farr[i]);
if (min_f > farr[i]) { min_f =
farr[i]; }
if (max_f farr[i]) { max_f =
farr[i]; }
}

一切数值均是单精度浮点值。咱们首要想到的是最根底的一个问题:浮点单元 (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[i])变为f_sqrt += sqrtf(farr[i]),就会调用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;i512;i++) {
putfsl(farr[i],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相媲美。

首要,找出履行时刻过长的中心算法,然后对其加快——经过简略调整软件,运用硬件,或运用硬件加快器进行更为杂乱的调整。如此一来,您的处理器体系会强于规范控制器。

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

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

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

微信扫一扫关注我们

返回顶部