<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

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

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

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

作為數字信號處理中的重要的手段之一,主要在數字通信、語(yǔ)音信號處理、圖像處理、功率譜估計、仿真、系統分析、雷達理論、光學(xué)、醫學(xué)、地震以及數值分析等方面得到廣泛應用?;?a class="contentlabel" href="http://dyxdggzs.com/news/listbylabel/label/FPGA">FPGA實(shí)現,具有軟件編程的靈活性及電路擴展性強等優(yōu)點(diǎn)。隨著(zhù)集成電路技術(shù)進(jìn)步和制造工藝水平的提高,芯片具有的功能越來(lái)越強,成為快速實(shí)時(shí)實(shí)現的重要手段。采用基2法完成基于浮點(diǎn)運算器的FFT。

本文引用地址:http://dyxdggzs.com/article/201706/349067.htm

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

1.1 浮點(diǎn)的IEEE標準格式

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

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

1.2 基2的DIT-FFT算法

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

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

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

1.3 FFT處理器

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



1.3.1 蝶形處理單元

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

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

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

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


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

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

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

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

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

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

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

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

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

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

數據的讀取靠時(shí)鐘信號來(lái)控制。

1.4 FFT仿真結果分析

圖7中輸入8點(diǎn)數據為[-l,1,2,-0.5,-3,-1,2,0]。仿真結果經(jīng)轉換后,用10進(jìn)制表示的最后結果為[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仿真后結果為[-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]兩結果很接近,誤差較小,仿真結果正確。


2 結束語(yǔ)

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



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

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>