周劍敏+謝文雷+葛斌+陳虞蘇
摘 要 介紹了基于FPGA芯片進行FIR濾波器的設計過程,具體涉及到MATLAB對FIR濾波器的仿真、數(shù)據(jù)的量化和生成;FPGA對FIR濾波器的設計、仿真和數(shù)據(jù)生成,最后形成FPGA和MATLAB聯(lián)合設計FIR濾波器。
關鍵詞 FGPA;FIR;MATLAB
中圖分類號:TN911 文獻標識碼:A 文章編號:1671-7597(2014)03-0034-01
濾波器在信息領域應用非常廣泛。隨著現(xiàn)代技術的發(fā)展,如何在FPGA上進行濾波器設計是非常迫切的。FPGA是通過硬件描述語言進行程序設計的,要把基于數(shù)學基礎的濾波器在FPGA上設計出來還是有一定難度的。而用MATLAB進行濾波器設計又顯的非常簡單。因此需要把MATLAB和FPGA技術結合起來,進行濾波器設計,這樣就能事半功倍。本文將以一個簡單的FIR濾波器為例,用MATLAB和FPGA進行聯(lián)合設計濾波器。
1 基本流程
一般采用MATLAB和FPGA聯(lián)合設計有多種方法。一種是由MATLAB軟件設計出濾波器系統(tǒng),并在MATLAB中利用工具直接轉換成VHDL代碼;一種是由MATLBA軟件設計出FIR關鍵系數(shù)和測試文件,然后在FPGA中使用系數(shù)設計濾波器,使用測試文件形成測試結果,最后再由MATLAB把測試結果驗證,證明FPGA設計濾波器的正確性。第一種方法在濾波器系統(tǒng)較為復雜的時候,很難滿足設計要求,調試時反而顯得復雜。本文采用第二種方法進行濾波器的聯(lián)合設計。
2 MATLAB的FIR系數(shù)和測試文件生成
在設計時,使用MATLAB產(chǎn)生濾波器系數(shù)和測試文件。MATLAB里有各種專門的FIR濾波器系數(shù)生成函數(shù),如B=fir1(N,Wn,'high')函數(shù)。
B:表示返回的FIR濾波器的單位脈沖響應,長度為N+1。
N:表示濾波器的階數(shù)。
Wn:表示濾波器的截至頻率。
High:表示是高通濾波器。
用戶只要按濾波器設計要求,獲取B系數(shù)就能得到浮點數(shù)表示的FIR濾波器系數(shù)。
濾波器系數(shù)生成后,需要有測試文件測試濾波器的特性。用戶可以根據(jù)濾波器的特性,利用MATLAB自動生成測試文件。如利用MATLAB程序:
sin_t = 0:1/fs:0.1;
sin_c1 = 2 * pi * f_1 * sin_t;
sin_c2 = 2 * pi * f_2 * sin_t;
sj = 1/3*sin(sin_c1) + sin(sin_c2);
自動就生產(chǎn)了含有2個頻率成份的浮點數(shù)表示的sj信號。
若僅僅是檢測MATLAB設計的FIR濾波器是否正確,可以把sj輸入到FIR濾波器中,觀察濾波器輸出就可以判斷。目前是要在FPGA中設計并驗證濾波器。所以需要把MATLAB生成的濾波器系數(shù)和測試文件量化成符合FPGA需要的二進制表示的整數(shù)。
使用MATLAB,對sj信號進行12位量化過程如下:
bin_long = 12;
sj_quan_12 = round(sj /max(sj))*(2^(bin_long-1)-1));
量化完成后,還需要把參數(shù)寫成文件,等待FPGA的調用。MATLAB中把測試文件寫成文件如下:
fidout=fopen('result.txt','w'); %open result file and wait for write
for i=1:length(sj_quan_12)
for j=1:bin_long
fprintf(fidout,'%s',sj_quan_12(i,j));
if mod(j,bin_long)==0
fprintf(fidout,'\r\n');
end
end
end
fclose(fidout);
3 FPGA程序設計
本文利用XILINX公司的FPGA芯片XC6SLX45作為硬件載體,使用VHDL語言進行FIR程序編寫。具體元件說明如下:
COMPONENT fir_book
PORT(
rst : IN std_logic;--復位信號輸入
clk : IN std_logic;--時鐘輸入
xin : IN std_logic_vector(11 downto 0);--測試文件/實際信號輸入
yout : OUT std_logic_vector(28 downto 0)—FIR濾波輸出
);
END COMPONENT;
xin為FIR濾波器的輸入端,同時也是仿真時,MATLAB生成的測試文件輸入端。yin是xin經(jīng)過FPGA內部設計的FIR濾波器濾波后的輸出信號。
在FPGA中輸入MATLAB的測試文件的程序如下:
file invect:text is "e:\\matlab_study \result.txt";
if not(endfile(invect)) then
readline(invect,vline);
read(vline,v);
xin<=v;
end if;
在FPGA中輸出仿真給MATLAB測試的程序如下:
file outvect:text open write_mode is "e:\\matlab_study \result_out.txt";
write(lineout,viout,right,10);
writeline(outvect,lineout);
4 結論
在不需要經(jīng)過硬件環(huán)境實際測試情況下,可以通過MATLAB生成濾波器系數(shù)和測試文件,再由FGPA按生成的濾波器系數(shù)和測試文件仿真生成結果文件,最后MATLAB測試結果文件,驗證FPGA濾波器設計的正確性?;贔PGA和MATLAB的濾波器設計具有很強的實用性和參考意義。
參考文獻
[1]任志健,萬智萍,朱俊南,朱柏輝.ARM嵌入式遠程視頻監(jiān)控數(shù)據(jù)采集系統(tǒng)設計[J].計算技術與自動化,2013(2):100-1104.
[2]Lattice Semiconductor Corporation. Lattice ECP3 Family Data Sheet[EB/OL].2010.http://www.latticesemi.com.
[3]Elpida Memory Inc. 1G bits DDR2 SDRAM [EB/OL].2009. http://www.elpida.com.
[4]Winbond Inc. 3V 64M-BIT SERIAL FLASH MEMEORY WITH DUAL/QUAD SPI&QPI[EB/OL].2009.http://www.winbond.com.
[5]ATMEL Corporation . 3-Wire Serial EEPROs [EB/OL].2009. http://www.atmel.com.
[6]Aptina Imaging Corporation . 1/2.5-Inch 5Mp CMOS Digital Image Sensor [EB/OL].2005.http://www.aptina. com.
[7]MARVELL Corporation . Alaska 88e1118r Technical Product Brief[EB/OL].2011.http://www.marvell. com.endprint