FFT(快速傅里葉變換)作為數字信號處理的核心算法具有重要的研究價值,,可應用于傅里葉變換所能涉及的任何領域,,如圖像處理,、音頻編碼,、頻譜分析,、雷達信號脈沖壓縮等數字信號處理領域。FFT的鮮明特征之一是計算離散傅里葉變換(DFT)的高效算法,,把計算N點DFT的乘法運算量從N2次降低到N/2*log2N次,。而采用FPGA實現FFT的緣由在于:FPGA具有并行處理、流水線處理,、易編程,、片上資源豐富等方面特點,用于實現高速,、大點數的FFT優(yōu)勢明顯,。
本設計使用的軟件編程環(huán)境是Xilinx公司的Vivado 2018.3,筆者將從FFT IP核的創(chuàng)建,,模塊文件的編寫,,波形仿真等方面來具體講解FFT在Xilinx FPGA上的實現。
1.FFT IP核的創(chuàng)建
?。?)在Vivado軟件主界面,,打開IP Catalog,,在搜索框內輸入FFT,然后找到Digital Signal Processing->Transforms->FFTs目錄下的Fast Fourier Transform,,雙擊進入配置界面,。
(2)進入到配置界面,,左邊是IP核的接口圖,、實現的一些細節(jié)信息和FFT的延遲,右邊是Configuration,、Implementation和Detailed Implementation三個標簽卡,。
Vivado的FFT IP核支持多通道輸入(Number of Channels)和實時更改FFT的點數(Run Time Configurable Transform Length)。Configuration標簽下可設置FFT的點數(Transform Length)和工作時鐘(Target Clock Frequency),,以及選擇一種FFT結構,。FFT的結構包括流水線Streaming、基4 Burst,、基2 Burst和輕量級基2 Burst,,它們的計算速度和消耗的資源依次減少,可根據工程實際進行選擇,。
Implementation標簽卡下可設置FFT的數據格式為定點Fixed Point或浮點Float Point,;輸出截位方式選擇:不截位(Unscaled),截位(Scaled),,塊浮點(Block Floating Point),;設置輸入數據的位寬和相位因子位寬。還有一些可選的附加信號,,如時鐘使能(ACLKEN),,復位信號(ARESETn,低有效)等,?!癘utput Ordering”用以選擇FFT計算結果以自然順序(Nature Order)或位倒序(Bit/Digit Reversed Order)輸出。
Detailed Implementation里可設置優(yōu)化方式,、存儲的類型,。存儲類型分為兩種:Block RAM(塊RAM)和Distributed RAM(分布式RAM);優(yōu)化方式可選擇資源最優(yōu)或者速度最優(yōu)。
?。?)配置完成后,,可在Latency下看到計算fft所需的時間,可以以此衡量設計是否滿足實時處理的要求,。如不滿足,,可選擇性能更好的FFT結構或選擇可以提高運算速度的優(yōu)化選項
2.模塊文件的編寫
IP核工作必須要滿足一定的時序要求,所以需要將數據按照一定時序送入IP核。IP核交互是用AXI-Stream接口,,關于AXI-Stream接口的時序可自行查一些相關資料,,這里不做詳細介紹。簡言之,,AXI-Stream接口分為主機(master)和從機(slave),,主機為發(fā)起端,從機為響應端,,只有ready信號和valid信號同時為高時數據才能被有效寫入或讀出,。舉個例子,主機檢測從機發(fā)出的ready信號,,當為高時將valid信號拉高即可從從機讀出或向從機寫入數據,。
利用modelsim進行功能仿真時我們將仿真時長設置為20us。為了直觀驗證fft是否正確,,可將輸入的時域數據的實部和做完fft后信號功率值的數據格式均設置為anolog(模擬),,如下圖,可以看到fft后的功率譜為兩根獨立的譜線,,分別代表50Hz和200Hz兩個頻率點,,和matlab仿真結果一致。
對于該IP核更復雜的應用,,大家可以閱讀Xilinx官方提供的文檔,,根據自己的實際需要進行設計。
更多信息可以來這里獲取==>>電子技術應用-AET<<