采用硬件加速發(fā)揮MicroBlaze處理能力
例如,使用位反轉IP,只需一個寫入信號即可。IP會一直很快運行,足以對MicroBlaze的任何請求做出及時響應。
本文引用地址:http://butianyuan.cn/article/106702.htmIP本身非常簡單。以下是摘錄 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倍。與效率最高的最新軟件算法相比,此算法仍使系統(tǒng)性能提升了11倍。
當然,本例只有在您的CPU不提供位反轉尋址功能的情況下才有效。大多數 DSP都有此功能,但大多數微控制器都不具備這個功能。具備增加這個功能的特性可大幅度提升這種算法的處理速度。
雖然修改不大,但收效十分明顯。我們甚至將代碼壓縮到兩個字大小。當然,現在硬件要求增加一些芯片。不過以此為代價獲得比任何標準微控制器更高的速度,是值得的。
評論