基于FPGA的FFT算法硬件實(shí)現(xiàn)
可以看出,圖3減少了一個(gè)旋轉(zhuǎn)因子復(fù)乘模塊,不但節(jié)約了一次乘法運(yùn)算時(shí)間,也省略了第一級(jí)旋轉(zhuǎn)因子,更好地利用了硬件結(jié)構(gòu)。
首先,在QuartusⅡ環(huán)境中對(duì)4點(diǎn)蝶形運(yùn)算時(shí)序仿真,采用流水線設(shè)計(jì),連續(xù)輸入連續(xù)輸出,仿真結(jié)果如圖4所示。本文引用地址:http://cafeforensic.com/article/191332.htm
由圖4可以看出,輸出比輸入延時(shí)6個(gè)時(shí)鐘,這在系統(tǒng)的控制核心地址產(chǎn)生單元的設(shè)計(jì)中需要考慮到。
1.3 地址產(chǎn)生與時(shí)序控制
對(duì)于1 024.點(diǎn)基4 FFT運(yùn)算,需要5級(jí)蝶形運(yùn)算,每一級(jí)運(yùn)算都要有寫地址和讀地址,根據(jù)FFT同址運(yùn)算的特點(diǎn)可知,當(dāng)前的寫地址即是上一級(jí)蝶形運(yùn)算的讀地址。因此完成FFT運(yùn)算需要設(shè)計(jì)6級(jí)RAM地址。其中第1級(jí)的寫地址即是數(shù)據(jù)輸入的順序地址,不予討論。最后一級(jí)讀地址為數(shù)據(jù)正序輸出所需的地址。其余4級(jí)為1 024點(diǎn)數(shù)據(jù)對(duì)應(yīng)的FFT蝶形運(yùn)算。
第一級(jí)讀取節(jié)點(diǎn)地址的順序應(yīng)該是:(0,256,512.768),(1,257,513,769),……,(255,511.767,1 023)。易觀察其讀地址的規(guī)律如下:設(shè)讀取次序的二進(jìn)制編碼為bit[9:0];則讀地址的二進(jìn)制編碼為{bit[1:O],bit[9:2]},并且依次可以推出第2、3、4級(jí)的讀地址二進(jìn)制編碼分別為{bit[9:8],bit[1:0],bit[7:2]},{bit[9:6],bit[1:0],bit[5:2]}、{bit[9:4],bit[1:0],bit[3:2]},而最后一級(jí)輸出數(shù)據(jù)的地址二進(jìn)制編碼則為:{bit[1:0],bit[3:2],bit[5:4],bit[7:6],bit[9:8]}。圖5給出了第1級(jí)讀地址和第2級(jí)讀地址的部分?jǐn)?shù)據(jù),也可以看出第2級(jí)的寫地址即是第1級(jí)的讀地址。
圖1中的地址產(chǎn)生單元作為系統(tǒng)的控制核心,不僅要生成每一級(jí)的RAM讀寫地址,還要產(chǎn)生RAM寫使能信號(hào)、輸出有效信號(hào)以及4點(diǎn)蝶形運(yùn)算單元和旋轉(zhuǎn)因子產(chǎn)生單元的啟動(dòng)信號(hào),由于時(shí)序電路還需要考慮器件延時(shí),例如上文提到的4點(diǎn)蝶形運(yùn)算輸出比輸入延時(shí)6個(gè)時(shí)鐘,以及RAM存取數(shù)據(jù)輸出比輸入延時(shí)1個(gè)時(shí)鐘,這些都需要在控制核心中考慮到。
1.4 旋轉(zhuǎn)因子產(chǎn)生
對(duì)于1 024點(diǎn)FFT蝶形運(yùn)算,需要1 024個(gè)旋轉(zhuǎn)角度(即2π的1 024等份),其中第一級(jí)不需要復(fù)乘運(yùn)算,第6級(jí)只是將數(shù)據(jù)進(jìn)行整序沒有運(yùn)算單元,其他4級(jí)都需要旋轉(zhuǎn)因子。本設(shè)計(jì)采用將旋轉(zhuǎn)因子預(yù)置于ROM中,通過查找表方法得出每一級(jí)運(yùn)算的所需的旋轉(zhuǎn)因子。根據(jù)旋轉(zhuǎn)因子的可約性,后幾級(jí)運(yùn)算所需的旋轉(zhuǎn)因子都可以在第一級(jí)運(yùn)算的旋轉(zhuǎn)因子中找到,因此無需另外存儲(chǔ)。旋轉(zhuǎn)因子在ROM中的存儲(chǔ)規(guī)律是:旋轉(zhuǎn)因子相位角p處存儲(chǔ)旋轉(zhuǎn)因子W=*****。定義一個(gè)10 bit的計(jì)數(shù)器count[9:0],則第2、3、4、5級(jí)ROM的相位角規(guī)律按照Verilog語法可表示為
為了節(jié)省資源,本設(shè)計(jì)只在ROM單元中存儲(chǔ)了前256個(gè)旋轉(zhuǎn)因子數(shù)據(jù),即第一象限因子其余象限的因子可通過象限轉(zhuǎn)換后得到,這樣就大大節(jié)省了存儲(chǔ)單元的硬件資源。圖6為旋轉(zhuǎn)因子產(chǎn)生單元在QuartusⅡ環(huán)境中仿真結(jié)果的部分?jǐn)?shù)據(jù)。
評(píng)論