采用硬件加速發(fā)揮MicroBlaze處理能力
例如,使用位反轉(zhuǎn)IP,只需一個(gè)寫入信號(hào)即可。IP會(huì)一直很快運(yùn)行,足以對(duì)MicroBlaze的任何請(qǐng)求做出及時(shí)響應(yīng)。
本文引用地址:http://www.ex-cimer.com/article/106702.htmIP本身非常簡(jiǎn)單。以下是摘錄 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總線的情況下添加這個(gè)IP,您必須對(duì)項(xiàng)目的MHS文件進(jìn)行如下修改:
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
現(xiàn)在效率顯著提高。硬核僅在兩個(gè)周期內(nèi)可完成位反轉(zhuǎn)操作:一個(gè)周期用于把數(shù)據(jù)寫入IP,另一個(gè)周期則負(fù)責(zé)讀回結(jié)果。處理2萬個(gè)位反轉(zhuǎn)操作現(xiàn)在只需0.8ms。
與最初采用的算法相比,效率提升了110倍。與效率最高的最新軟件算法相比,此算法仍使系統(tǒng)性能提升了11倍。
當(dāng)然,本例只有在您的CPU不提供位反轉(zhuǎn)尋址功能的情況下才有效。大多數(shù) DSP都有此功能,但大多數(shù)微控制器都不具備這個(gè)功能。具備增加這個(gè)功能的特性可大幅度提升這種算法的處理速度。
雖然修改不大,但收效十分明顯。我們甚至將代碼壓縮到兩個(gè)字大小。當(dāng)然,現(xiàn)在硬件要求增加一些芯片。不過以此為代價(jià)獲得比任何標(biāo)準(zhǔn)微控制器更高的速度,是值得的。
評(píng)論