新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于VHDL和高精度浮點(diǎn)運(yùn)算器的基2 FFT在FPGA上的設(shè)計(jì)仿真

基于VHDL和高精度浮點(diǎn)運(yùn)算器的基2 FFT在FPGA上的設(shè)計(jì)仿真

作者: 時間:2017-06-05 來源:網(wǎng)絡(luò) 收藏

作為數(shù)字信號處理中的重要的手段之一,主要在數(shù)字通信、語音信號處理、圖像處理、功率譜估計(jì)、仿真、系統(tǒng)分析、雷達(dá)理論、光學(xué)、醫(yī)學(xué)、地震以及數(shù)值分析等方面得到廣泛應(yīng)用。基于實(shí)現(xiàn),具有軟件編程的靈活性及電路擴(kuò)展性強(qiáng)等優(yōu)點(diǎn)。隨著集成電路技術(shù)進(jìn)步和制造工藝水平的提高,芯片具有的功能越來越強(qiáng),成為快速實(shí)時實(shí)現(xiàn)的重要手段。采用基2法完成基于浮點(diǎn)運(yùn)算器的FFT。

本文引用地址:http://www.butianyuan.cn/article/201706/349067.htm

1 基于FPGA浮點(diǎn)運(yùn)算器的FFT

1.1 浮點(diǎn)的IEEE標(biāo)準(zhǔn)格式

設(shè)計(jì)采用單精度浮點(diǎn)運(yùn)算,IEEE定義的二進(jìn)制浮點(diǎn)格式為32位。結(jié)構(gòu)表示如圖1所示。

將32位分為3部分:31位為符號位S,S為0時表示正數(shù),為1時表示負(fù)數(shù);30~23為指數(shù)E,是一個0~255之間的八位二進(jìn)制數(shù),其實(shí)際的指數(shù)是E-127,所表示的指數(shù)范圍是2-127~2128;22~0表示尾數(shù)F,小數(shù)點(diǎn)前還隱藏了一位‘1’,單精度尾數(shù)可表示最大數(shù)為2(23+1)=16 777 216。因?yàn)?0716 777 216108,所以單精度浮點(diǎn)數(shù)的有效位數(shù)是7位,即浮點(diǎn)數(shù)的精度為10-6。為方便FFT的運(yùn)算,文中采用原碼存儲。

1.2 基2的DIT-FFT算法

中采用復(fù)數(shù)形式表示數(shù)據(jù)。對于一個2點(diǎn)的,輸入復(fù)數(shù)為A=x+jX,B=y+jY;經(jīng)運(yùn)算,輸出復(fù)數(shù)A’=(x+ycosφ+ Ysinφ)+j(X+Ycosφ-ysinφ),B’=[x-(ycosφ+Ysinφ)]+j[X-(Ycosφ-ysinφ)]。

設(shè)計(jì)主要針對8點(diǎn)FFT進(jìn)行設(shè)計(jì),8點(diǎn)FFT算法的原理圖如圖2所示。

整個FFT過程中共有三級,每級蝶形運(yùn)算有4個蝶形運(yùn)算單元。在數(shù)據(jù)輸入時按照自然順序輸入,最后倒序輸出。

1.3 FFT處理器

FFT處理器主要對數(shù)據(jù)進(jìn)行蝶形運(yùn)算及數(shù)據(jù)存取。設(shè)計(jì)采用基2蝶形運(yùn)算器,包括存儲器ROM和RAM,控制器及地址產(chǎn)生單元等。其FFT的結(jié)構(gòu)模型如圖3所示。



1.3.1 蝶形處理單元

蝶形處理單元是整個FFT的中心環(huán)節(jié),采用復(fù)數(shù)表示,將實(shí)部與虛部分別存儲,利用基2的DIT-FFT算法實(shí)現(xiàn)運(yùn)算。

蝶形運(yùn)算過程包括一個乘法運(yùn)算和一個加/減法運(yùn)算。數(shù)據(jù)的讀取由時鐘單元的信號來控制:當(dāng)時鐘為c0時,讀取y;c1時,讀取Y;c2時,讀取x;c3時,讀取X。經(jīng)蝶形運(yùn)算后得到x’=x+(ycosφ+Ysinφ),X’=X+(Ycosφ-ysinφ),y’=x-(ycosφ+Ysinφ),Y’=X-(Ycosφ-ysinφ)然后將數(shù)據(jù)寫入同樣地址的RAM中,至此,2點(diǎn)的蝶形運(yùn)算單元完成。在蝶形運(yùn)算共需一個乘法器和兩個加法器。

(1)浮點(diǎn)乘法器。乘法過程對浮點(diǎn)數(shù)的符號位、指數(shù)以及尾數(shù)分別進(jìn)行計(jì)算,符號異或,指數(shù)相加再減127,尾數(shù)加入隱含的‘1’后再進(jìn)行乘法運(yùn)算,如果尾數(shù)相乘的結(jié)果有溢出則指數(shù)加1尾數(shù)取前23位,若無溢出,則取最高位后的23位。但若輸入的數(shù)據(jù)有一個是0,則輸出為0。

圖5的波形為兩浮點(diǎn)數(shù)的乘法運(yùn)算,輸入以16進(jìn)制表示,分別將不同類型的數(shù)據(jù)搭配進(jìn)行測試,結(jié)果表示仿真正確。


(2)浮點(diǎn)加法器。加法運(yùn)算是將兩數(shù)指數(shù)比較,存儲較大的指數(shù),將指數(shù)小的尾數(shù)移位,再進(jìn)行加減操作,規(guī)格化后輸出。加法過程由多個模塊組合實(shí)現(xiàn),包括比較模塊,右移模塊、加/減法模塊、前導(dǎo)零檢測模塊、左移模塊和結(jié)果整合輸出模塊。

比較模塊主要對指數(shù)操作,判斷指數(shù)的大小,較大的指數(shù)暫作結(jié)果的指數(shù),較小指數(shù)的數(shù)做移位操作,其階差為移位量。以下程序采用for循環(huán)來實(shí)現(xiàn)移位,S(5 downto 0)存儲階差,最大值是32。

然后尾數(shù)經(jīng)加減運(yùn)算后規(guī)格化并輸出,為了以標(biāo)準(zhǔn)浮點(diǎn)格式輸出,規(guī)格化需要前導(dǎo)零檢測。

然后進(jìn)行移位操作,最后將規(guī)格化后的數(shù)據(jù)整合輸出,就完成兩個浮點(diǎn)數(shù)的加法運(yùn)算。

圖6的波形為兩個輸入浮點(diǎn)數(shù)的加法運(yùn)算數(shù)據(jù),以16進(jìn)制表示。上述數(shù)據(jù)分別將不同類型的數(shù)據(jù)搭配運(yùn)算,數(shù)據(jù)表明該仿真結(jié)果正確。

1.3.2 地址產(chǎn)生單元

地址產(chǎn)生單元主要是跟蹤FFT運(yùn)算進(jìn)度,進(jìn)而更好地調(diào)配存儲單元,及控制各相關(guān)模塊的運(yùn)行。

(1)通過計(jì)數(shù)器來跟蹤記錄FFT計(jì)算的狀況。為方便對存儲單元操作,采用計(jì)數(shù)器來記錄FFT的計(jì)算情況。8點(diǎn)的FFT,每個單元包括4個數(shù)據(jù),所以用一個4位計(jì)數(shù)器Butterfly表示全部的運(yùn)算狀態(tài)。一個2位級計(jì)數(shù)器Stage表示三級蝶形單元。當(dāng)Butterfly計(jì)數(shù)為4時,級計(jì)數(shù)器Stage加1,當(dāng)Stage計(jì)數(shù)為3時,表示FFT的計(jì)算操作完成。當(dāng)Butterfly計(jì)數(shù)為15時,輸入輸出信號置‘1’,反饋回控制器輸入輸出操作完成。

(2)ROM讀取的地址。旋轉(zhuǎn)因子存儲在ROM中,由實(shí)部cos(2×k×π/8)和虛部sin(2×k×π/8)兩部分組成,讀取由時鐘單元的信號控制。由圖2可以看出每一級參加蝶形運(yùn)算的旋轉(zhuǎn)因子不同。

(3)RAM數(shù)據(jù)地址。在整個地址單元中,分配RAM中數(shù)據(jù)的地址是重點(diǎn),8點(diǎn)蝶形運(yùn)算共需16個存儲單元,數(shù)據(jù)地址的產(chǎn)生遵循一定規(guī)則。例如,Butterfly的信號為“a3a2a1a0”,則x,y的地址產(chǎn)生規(guī)則如表1所示。

數(shù)據(jù)的讀取靠時鐘信號來控制。

1.4 FFT仿真結(jié)果分析

圖7中輸入8點(diǎn)數(shù)據(jù)為[-l,1,2,-0.5,-3,-1,2,0]。仿真結(jié)果經(jīng)轉(zhuǎn)換后,用10進(jìn)制表示的最后結(jié)果為[0,3.76775-1.06065i,-8-0.5i,0.23225-1.06065i,0.5,0.23225+1.06065i,-8+0.5i.3.76775+1.06065i]。Matlab仿真后結(jié)果為[-0.5000,3.7678-1.0607i,-0.8000-0.5000i,0.2322-1.0607i,0.5000,0.2322+1.0607i,-0.8000+0.5000i,3.7678+1.0607i]兩結(jié)果很接近,誤差較小,仿真結(jié)果正確。


2 結(jié)束語

文中在分析了FFT算法后,描述了運(yùn)算的蝶形單元,地址生成單元及FFT的實(shí)現(xiàn)過程。從實(shí)際設(shè)計(jì)出發(fā),完成了基于FPGA的單精度浮點(diǎn)運(yùn)算器的FFT設(shè)計(jì),精度達(dá)到10-6。其輸出結(jié)果與Matlab仿真結(jié)果相近,達(dá)到了利用FPGA實(shí)現(xiàn)FFT的目的。



關(guān)鍵詞: 蝶形運(yùn)算 FFT FPGA

評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉