亚洲狠狠干,亚洲国产福利精品一区二区,国产八区,激情文学亚洲色图

基于fpga實現(xiàn)65536點fft的裝置和方法

文檔序號:10534785閱讀:917來源:國知局
基于fpga實現(xiàn)65536點fft的裝置和方法
【專利摘要】本發(fā)明屬于數(shù)字信號處理領域,公開了一種基于FPGA實現(xiàn)65536點FFT的裝置和方法。通過在輸入輸出部分、存儲部分及處理部分提高一個時鐘周期內(nèi)能夠處理的數(shù)據(jù)點數(shù),從而加快FFT的運算速度。在輸入接口部分,通過采用大位寬的數(shù)據(jù)線實現(xiàn)并行數(shù)據(jù)輸入,節(jié)省數(shù)據(jù)輸入的時間;在存儲部分,用無沖突方式進行存儲,使得一個時鐘周期能夠同時讀寫16點的數(shù)據(jù),并將運算結(jié)果進行原位存儲節(jié)省RAM資源;在處理部分,通過采用基?16的運算核,加快處理速度,使得一個時鐘周期能夠處理16點的數(shù)據(jù);在輸出接口部分,同樣通過采用大位寬的并行輸出技術,實現(xiàn)處理結(jié)果的高速輸出。
【專利說明】
基于FPGA實現(xiàn)65536點FFT的裝置和方法
技術領域
[0001 ]本發(fā)明涉及數(shù)字信號處理領域,尤其涉及一種基于FPGA實現(xiàn)65536點FFT的裝置和 方法。
【背景技術】
[0002] 傅里葉變換在理論上有著極其重要的意義。隨著計算機技術的發(fā)展,離散傅里葉 變換(DFT)的出現(xiàn),使傅里葉變換在工程上進入實際應用階段。然而由于DFT算法的運算工 作量十分巨大,運算時間長,從而限制了這種數(shù)據(jù)處理方法的應用。隨后,快速傅里葉變換 (FFT)的出現(xiàn),將DFT的運算量從0(N2)降到了 0(Nlog2N)次,在數(shù)字信號處理技術領域?qū)崿F(xiàn) 了突破性的進展。FFT作為時域和頻域轉(zhuǎn)換的基本運算,已經(jīng)成為數(shù)字信號處理的必要手 段,廣泛應用于雷達、通信、聲納和圖像處理等領域。但隨著技術的推動和需求的牽引,數(shù)字 信號處理系統(tǒng)需要處理的數(shù)據(jù)量變得非常巨大,并要求達到全實時的處理速度,因此對FFT 運算速度的要求也越來越高。
[0003] 現(xiàn)有技術中對于提高FFT的運算速度,大部分采用了基-4算法,只有個別使用基4 核拼接實現(xiàn)了基16算法,但是實現(xiàn)點數(shù)只有4096點。X現(xiàn)有FFT處理IP核最高支持65536點的 FFT,但是其運算最快的結(jié)構(gòu)(流水數(shù)據(jù)流結(jié)構(gòu))進行這些數(shù)據(jù)處理仍然需要131448個時鐘, 因此對于實時信號處理來說,現(xiàn)有FFT技術均難以滿足實時性的要求。

【發(fā)明內(nèi)容】

[0004] 針對上述問題,本發(fā)明的目的在于提供基于FPGA實現(xiàn)65536點FFT的裝置和方法, 克服現(xiàn)有技術中FFT處理運算速度慢的問題。
[0005] 本發(fā)明的技術思路是:通過在輸入輸出部分、存儲部分及處理部分提高一個時鐘 周期內(nèi)能夠處理的數(shù)據(jù)點數(shù),從而加快FFT的運算速度。在輸入接口部分,通過采用大位寬 的數(shù)據(jù)線實現(xiàn)并行數(shù)據(jù)輸入,節(jié)省數(shù)據(jù)輸入的時間;在存儲部分,使得一個時鐘周期能夠同 時讀寫16點的數(shù)據(jù);在處理部分,通過采用基-16的運算核,加快處理速度,使得一個時鐘周 期能夠處理16點的數(shù)據(jù);在輸出接口部分,同樣通過采用大位寬的并行輸出技術,實現(xiàn)處理 結(jié)果的高速輸出。
[0006] 為達到上述目的,本發(fā)明的實施例采用如下技術方案予以實現(xiàn)。
[0007] 技術方案一:
[0008] 一種基于FPGA實現(xiàn)65536點FFT的裝置,所述裝置包括:
[0009] 數(shù)據(jù)輸入模塊,用于在一個時鐘周期內(nèi)同時輸入16點數(shù)據(jù);
[0010] 數(shù)據(jù)選通模塊,設置有數(shù)據(jù)輸入使能端和運算結(jié)果輸入使能端,所述數(shù)據(jù)輸入使 能端用于將數(shù)據(jù)輸入模塊輸入的數(shù)據(jù)選通到RAM存儲模塊進行存儲,所述運算結(jié)果使能端 用于將基-16蝶形運算模塊輸出的運算結(jié)果數(shù)據(jù)選通到RAM存儲模塊進行存儲;
[0011] RAM地址生成模塊,用于生成RAM存儲模塊的存儲地址;所述RAM地址生成模塊在一 個時鐘周期內(nèi)同時生成16個地址;
[0012] RAM存儲模塊,用于存儲所述數(shù)據(jù)輸入模塊輸入的65536點數(shù)據(jù);或者用于存儲基-16蝶形運算模塊輸出的運算結(jié)果數(shù)據(jù);
[0013] 第一調(diào)序模塊,用于從所述RAM存儲模塊中并行讀入16點數(shù)據(jù),并將所述16點數(shù)據(jù) 按照基-16蝶形運算的輸入要求進行調(diào)序;
[0014] 基-16蝶形運算模塊,用于預先存儲基-16蝶形運算的旋轉(zhuǎn)因子,并根據(jù)所述旋轉(zhuǎn) 因子和所述第一調(diào)序模塊輸入的16點數(shù)據(jù)進行基-16蝶形運算,得到運算結(jié)果數(shù)據(jù);
[0015] 第二調(diào)序模塊,用于將所述運算結(jié)果數(shù)據(jù)按照原位存儲的原則進行調(diào)序,并將調(diào) 序后的結(jié)果數(shù)據(jù)對應存儲在所述RAM存儲模塊中。
[0016] 本發(fā)明技術方案一的特點和進一步的改進為:
[0017] (1)所述RAM存儲模塊為雙端口RAM,包含數(shù)據(jù)輸入端口和運算結(jié)果輸入端口,所述 數(shù)據(jù)輸入端口用于在數(shù)據(jù)輸入使能端的控制下存儲數(shù)據(jù)輸入模塊輸入的數(shù)據(jù);所述運算結(jié) 果輸入模塊用于在運算結(jié)果輸入使能端的控制下存儲基-16蝶形運算模塊輸出的運算結(jié)果 數(shù)據(jù)。
[0018] (2)所述RAM存儲模塊包含16個子存儲模塊,分別為RAM0-RAM15,每個子存儲模塊 存儲4096點數(shù)據(jù);
[0019]所述65536點數(shù)據(jù)以16點數(shù)據(jù)為一組依次存儲于16個子存儲模塊中,且所述65536 點數(shù)據(jù)中間隔為1、16、256、4096的數(shù)據(jù)不能存儲于相同的子存儲模塊中,從而實現(xiàn)16點數(shù) 據(jù)無沖突并行輸出。
[0020] (3)-個時鐘周期進行一次基-16蝶形運算,所述一次基-16蝶形運算需要進行兩 級復數(shù)乘法和四級復數(shù)加法,其中兩級復數(shù)乘法共進行23次復數(shù)乘法運算,四級復數(shù)加法 共進行64次復數(shù)加法運算。
[0021] (4)65536點FFT的實現(xiàn)需要進行四級基-16蝶形運算,每級進行4096次蝶形運算, RAM存儲模塊中的數(shù)據(jù)存儲采用塊浮點的數(shù)據(jù)格式,數(shù)據(jù)存儲范圍為-32768至32767,所述 裝置還包括溢出檢測和數(shù)據(jù)截斷模塊,用于在第二級、第三級和第四級的基-16蝶形運算之 前計算對應的上一級基-16蝶形運算結(jié)果的溢出位寬,并根據(jù)所述溢出位寬對運算結(jié)果進 行數(shù)據(jù)截斷處理。
[0022] 技術方案二:
[0023] 一種基于FPGA實現(xiàn)65536點FFT的方法,應用于如技術方案一中任一項所述的裝置 中,65536點FFT的實現(xiàn)需要進行四級基-16蝶形運算,所述方法包括如下步驟:
[0024]步驟1,數(shù)據(jù)輸入模塊輸入需要處理的數(shù)據(jù),所述數(shù)據(jù)輸入模塊在一個時鐘周期內(nèi) 同時輸入16點數(shù)據(jù);
[0025] 步驟2,數(shù)據(jù)選通模塊選通數(shù)據(jù)輸入使能端,使所述數(shù)據(jù)輸入模塊輸入的65536點 數(shù)據(jù)存儲于RAM存儲模塊;
[0026] 步驟3,RAM地址生成模塊生成所述數(shù)據(jù)輸入模塊輸入的數(shù)據(jù)在所述RAM存儲模塊 中的存儲地址;
[0027] 步驟4,所述數(shù)據(jù)輸入模塊輸入的數(shù)據(jù)按照所述RAM地址生成模塊生成的地址存儲 于所述RAM存儲模塊,所述RAM地址生成模塊在一個時鐘周期內(nèi)同時生成16個地址;
[0028] 步驟5,所述第一調(diào)序模塊從所述RAM存儲模塊中并行讀入16點數(shù)據(jù),并將所述16 點數(shù)據(jù)按照基-16蝶形運算的輸入要求進行調(diào)序;
[0029] 步驟6,所述基-16蝶形運行模塊中預先存儲有基-16蝶形運算的旋轉(zhuǎn)因子,所述 基-16蝶形運算模塊根據(jù)所述旋轉(zhuǎn)因子和所述第一調(diào)序模塊輸入的16點數(shù)據(jù)進行基-16蝶 形運算,得到運算結(jié)果數(shù)據(jù);
[0030] 步驟7,第二調(diào)序模塊將所述基-16蝶形運算模塊得到的運算結(jié)果數(shù)據(jù)按照原位存 儲的原則進行調(diào)序,并將調(diào)序后的結(jié)果數(shù)據(jù)對應存儲在所述RAM存儲模塊中;
[0031 ]步驟8,RAM地址生成模塊生成所述第二調(diào)序模塊輸入的運算結(jié)構(gòu)數(shù)據(jù)在所述RAM 存儲模塊中的存儲地址;
[0032]步驟9,所述數(shù)據(jù)選通模塊選通運算結(jié)果輸入使能端,使得第二調(diào)序模塊將所述 基-16蝶形運算模塊輸出的運算結(jié)果數(shù)據(jù)按照所述RAM地址生成模塊生成的地址存儲到所 述RAM存儲模塊;
[0033] 步驟10,將步驟5至步驟9重復執(zhí)行4096次,完成第一級基-16蝶形運算;
[0034] 步驟11,將步驟5至步驟10重復執(zhí)行4次,完成四級基-16蝶形運算。
[0035]本發(fā)明技術方案二的特點和進一步的改進為:
[0036] (1)所述RAM存儲模塊為雙端口RAM,包含數(shù)據(jù)輸入端口和運算結(jié)果輸入端口,所 述數(shù)據(jù)輸入端口用于在數(shù)據(jù)輸入使能端的控制下存儲數(shù)據(jù)輸入模塊輸入的數(shù)據(jù);所述運算 結(jié)果輸入模塊用于在運算結(jié)果輸入使能端的控制下存儲基-16蝶形運算模塊輸出的運算結(jié) 果數(shù)據(jù)。
[0037] (2)所述RAM存儲模塊包含16個子存儲模塊,分別為RAM0-RAM15,每個子存儲模塊 存儲4096點數(shù)據(jù);
[0038]將65536點數(shù)據(jù)以16點數(shù)據(jù)為一組依次存儲于16個子存儲模塊中,且所述65536點 數(shù)據(jù)中間隔為1、16、256、4096的數(shù)據(jù)不能存儲于相同的子存儲模塊中,從而實現(xiàn)16點數(shù)據(jù) 無沖突并行輸出。
[0039] (3)-個時鐘周期進行一次基-16蝶形運算,所述一次基-16蝶形運算需要進行兩 級復數(shù)乘法和四級復數(shù)加法,其中兩級復數(shù)乘法共進行23次復數(shù)乘法運算,四級復數(shù)加法 共進行64次復數(shù)加法運算,基-16蝶形運算的每次計算結(jié)果采用對應的寄存器進行數(shù)據(jù)暫 存。
[0040] (4)RAM存儲模塊中的數(shù)據(jù)存儲采用塊浮點的數(shù)據(jù)格式,數(shù)據(jù)存儲范圍為-32768至 32767,在第二級、第三級和第四級的基-16蝶形運算之前需要計算對應的上一級基-16蝶形 運算結(jié)果的溢出位寬,并根據(jù)所述溢出位寬對運算結(jié)果進行數(shù)據(jù)截斷處理。
[0041] 本發(fā)明技術方案與現(xiàn)有技術相比,具有以下有益效果:(1)處理速度快,用基-16核 FFT算法可以在一個時鐘周期內(nèi)同時處理16點數(shù)據(jù)的FFT運算,在相同的處理點數(shù)下需要更 少的運算時間;(2)數(shù)據(jù)的輸入輸出速度快,本發(fā)明技術方案采用多路并行數(shù)據(jù)輸入輸出方 式,一個時鐘周期可以輸入輸出16點數(shù)據(jù),相較于Xilinx公司所提供的IP核一次只能輸入 輸出1-4點數(shù)據(jù),消除了數(shù)據(jù)輸入輸出瓶頸,提高了數(shù)據(jù)的輸入輸出效率;(3)節(jié)省RAM資源, 本發(fā)明技術方案采用原位存儲設計,數(shù)據(jù)讀取運算后還是存儲到原來的RAM中,僅需要使用 一個65536點的RAM存儲空間,幾乎是Xilinx公司提供的IP核所使用RAM資源的1/4,最大限 度地減少了RAM資源的使用。
【附圖說明】
[0042]為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術中的技術方案,下面將對實施例或現(xiàn) 有技術描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本 發(fā)明的一些實施例,對于本領域普通技術人員來講,在不付出創(chuàng)造性勞動的前提下,還可以 根據(jù)這些附圖獲得其他的附圖。
[0043]圖1為本發(fā)明實施例提供的一種基于FPGA實現(xiàn)65536點FFT的裝置結(jié)構(gòu)示意圖; [0044]圖2為本發(fā)明實施例提供的一種基于FPGA實現(xiàn)65536點FFT的方法流程示意圖一;
[0045]圖3為本發(fā)明實施例提供的基-16蝶形運算模塊的運算過程示意圖;
[0046]圖4為本發(fā)明實施例提供的一種基于FPGA實現(xiàn)65536點FFT的方法流程示意圖二。
【具體實施方式】
[0047]下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術方案進行清楚、完 整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例?;?本發(fā)明中的實施例,本領域普通技術人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他 實施例,都屬于本發(fā)明保護的范圍。
[0048]本發(fā)明技術方案通過采用基-16蝶形運算模塊作為數(shù)據(jù)處理單元,則65536點數(shù)據(jù) 的FFT需要4級運算,每一級進行4096次蝶形運算。數(shù)據(jù)串行輸入后先存儲到RAM存儲模塊 中,然后按照一定的規(guī)律每次讀取一組16點數(shù)據(jù),進行16路并行蝶形運算后原位存儲,然后 處理下一組數(shù)據(jù),一級運算完畢后進行下一級運算。每一級4096次蝶形運算后會得到一個 溢出位寬,在下一級運算時根據(jù)該位寬信息將數(shù)據(jù)進行截斷處理,以防止數(shù)據(jù)溢出,如此下 去實現(xiàn)65536點數(shù)據(jù)的FFT運算。
[0049]本發(fā)明實施例提供一種基于FPGA實現(xiàn)65536點FFT的裝置,如圖1所示,所述裝置包 括:
[0050]數(shù)據(jù)輸入模塊1,用于在一個時鐘周期內(nèi)同時輸入16點數(shù)據(jù)。
[0051]示例性的,數(shù)據(jù)輸入模塊采用大位寬數(shù)據(jù)線高速輸入所要處理的數(shù)據(jù)。本發(fā)明技 術方案中數(shù)據(jù)輸入模塊可以根據(jù)輸入數(shù)據(jù)位寬進行選擇設置,支持1、2、4、8、16個數(shù)據(jù)同時 輸入。設置為16時,在一個時鐘周期內(nèi)可以同時輸入16個數(shù)據(jù),能夠提高數(shù)據(jù)輸入速度。 [0052]數(shù)據(jù)選通模塊2,設置有兩個使能端:數(shù)據(jù)輸入使能端和運算結(jié)果輸入使能端,數(shù) 據(jù)輸入使能端用于將數(shù)據(jù)輸入模塊輸入的數(shù)據(jù)選通到RAM存儲模塊進行存儲;運算結(jié)果輸 入使能端用于將基-16蝶形運算模塊輸出的運算結(jié)果數(shù)據(jù)選通到RAM存儲模塊進行存儲。 [0053]具體的,當數(shù)據(jù)輸入模塊輸入數(shù)據(jù)時,數(shù)據(jù)選通模塊使數(shù)據(jù)輸入使能端有效,并將 數(shù)據(jù)輸入模塊輸入的數(shù)據(jù)選通到RAM存儲模塊進行存儲;當數(shù)據(jù)經(jīng)過基-16蝶形運算模塊運 算結(jié)束后,將運算結(jié)果進行存儲時,數(shù)據(jù)選通模塊使運算結(jié)果輸入使能端有效,并將基-16 蝶形運算模塊輸出的運算結(jié)果選通到RAM存儲模塊進行存儲。
[0054] 具體的,所述RAM存儲模塊為雙端口RAM,包含數(shù)據(jù)輸入端口和運算結(jié)果輸入端口, 所述數(shù)據(jù)輸入端口用于在數(shù)據(jù)輸入使能端的控制下存儲數(shù)據(jù)輸入模塊輸入的數(shù)據(jù);所述運 算結(jié)果輸入模塊用于在運算結(jié)果輸入使能端的控制下存儲基-16蝶形運算模塊輸出的運算 結(jié)果數(shù)據(jù)。
[0055] RAM地址生成模塊3,用于生成RAM存儲模塊的存儲地址;所述RAM地址生成模塊在 一個時鐘周期內(nèi)同時生成16個地址。
[0056] RAM存儲模塊4,用于存儲所述數(shù)據(jù)輸入模塊輸入的65536點數(shù)據(jù);或者用于存儲 基-16蝶形運算模塊輸出的運算結(jié)果數(shù)據(jù)。
[0057]所述RAM存儲模塊包含16個子存儲模塊,分別為RAM0-RAM15,每個子存儲模塊存儲 4096點數(shù)據(jù);
[0058]所述65536點數(shù)據(jù)以16點數(shù)據(jù)為一組依次存儲于16個子存儲模塊中,且所述65536 點數(shù)據(jù)中間隔為1、16、256、4096的數(shù)據(jù)不能存儲于相同的子存儲模塊中,從而實現(xiàn)16點數(shù) 據(jù)無沖突并行輸出。
[0059] DIT-FFT要求間隔為1、16、256、4096的點不能存儲在同一個1^11中。1^11地址生成模 塊所設計的存儲方式是:16個數(shù)據(jù)為一組依次存儲到16個RAM的地址為0的區(qū)域,地址為1的 區(qū)域……AAM地址每增加1數(shù)據(jù)存儲的起始RAM編號就加1,這樣進行存儲的數(shù)據(jù)就可以實 現(xiàn)無沖突16路并行讀取。對于65536點的DIT-FFT,第一級抽取間隔為4096,第二級抽取間隔 為2048,第三級抽取間隔為256,第四級抽取間隔為16。因此間隔為1、16、256、4096的點不能 存儲在同一個RAM中,否則讀取運算時會產(chǎn)生沖突。分析后得到數(shù)據(jù)存儲規(guī)律如表1所示。
[0060]表1 RAM數(shù)據(jù)存儲規(guī)律
[0063] 需要補充的是,RAM存儲模塊中的數(shù)據(jù)往出讀取時需要根據(jù)要求的數(shù)據(jù)間隔進行 讀取數(shù)據(jù),所以RAM地址生成模塊在每一級運算時生成的地址都不相同,其中第1、2、3、4級 的地址間隔分別為4096、256、16、1,即第i級的地址間隔為65536/16 1。
[0064] 第一調(diào)序模塊5,用于從所述RAM存儲模塊中并行讀入16點數(shù)據(jù),并將所述16點數(shù) 據(jù)按照基-16蝶形運算的輸入要求進行調(diào)序。
[0065] 為了實現(xiàn)高速運算,采用無沖突存儲方式進行存儲,以同時并行讀取16點數(shù)據(jù),使 基-16蝶形運算模塊能夠全速運行。由于從16個RAM讀出的數(shù)據(jù)的順序和基-16蝶形運算模 塊要求的數(shù)據(jù)輸入順序不一致,因此設計第一調(diào)序模塊將存儲在不同RAM里的數(shù)據(jù)按照蝶 形運算單元的輸入要求進行調(diào)序。
[0066] 示例性的,如第一次蝶形運算輸入的16個數(shù)據(jù)為0,4096,…,15*4096,要求RAM0接 入基-16蝶形運算模塊的第一個輸入,而第二次蝶形運算輸入的16個數(shù)據(jù)為1,1+4096,1+2* 4096,…,1+15*4096,要求將RAM1調(diào)序到基-16蝶形運算模塊的第一個輸入。
[0067] 基-16蝶形運算模塊6,用于預先存儲基-16蝶形運算的旋轉(zhuǎn)因子,并根據(jù)所述旋轉(zhuǎn) 因子和所述第一調(diào)序模塊輸入的16點數(shù)據(jù)進行基-16蝶形運算,得到運算結(jié)果數(shù)據(jù)。
[0068] 具體的,一個時鐘周期進行一次基-16蝶形運算,所述一次基-16蝶形運算需要進 行兩級復數(shù)乘法和四級復數(shù)加法,其中兩級復數(shù)乘法共進行23次復數(shù)乘法運算,四級復數(shù) 加法共進行64次復數(shù)加法運算。
[0069] 第二調(diào)序模塊7,用于將所述運算結(jié)果數(shù)據(jù)按照原位存儲的原則進行調(diào)序,并將調(diào) 序后的結(jié)果數(shù)據(jù)對應存儲在所述RAM存儲模塊中。
[0070] 需要說明的是,65536點FFT的實現(xiàn)需要進行四級基-16蝶形運算,每級進行4096次 蝶形運算,RAM存儲模塊中的數(shù)據(jù)存儲采用塊浮點的數(shù)據(jù)格式,數(shù)據(jù)存儲范圍為-32768至 32767,因此所述裝置還包括溢出檢測和數(shù)據(jù)截斷模塊8,用于在第二級、第三級和第四級的 基-16蝶形運算之前計算對應的上一級基-16蝶形運算結(jié)果的溢出位寬,并根據(jù)所述溢出位 寬對運算結(jié)果進行數(shù)據(jù)截斷處理。
[0071]本發(fā)明實施例還提供一種基于FPGA實現(xiàn)65536點FFT的方法,應用于上述實施例所 述的裝置中,65536點FFT的實現(xiàn)需要進行四級基-16蝶形運算,如圖2所示,所述方法包括如 下步驟:
[0072]步驟1,數(shù)據(jù)輸入模塊輸入需要處理的數(shù)據(jù),所述數(shù)據(jù)輸入模塊在一個時鐘周期內(nèi) 同時輸入16點數(shù)據(jù)。
[0073]步驟2,數(shù)據(jù)選通模塊選通數(shù)據(jù)輸入使能端,使所述數(shù)據(jù)輸入模塊輸入的65536點 數(shù)據(jù)存儲于RAM存儲模塊。
[0074] 步驟3,RAM地址生成模塊生成所述數(shù)據(jù)輸入模塊輸入的數(shù)據(jù)在所述RAM存儲模塊 中的存儲地址。
[0075] 步驟4,所述數(shù)據(jù)輸入模塊輸入的數(shù)據(jù)按照所述RAM地址生成模塊生成的地址存儲 于所述RAM存儲模塊,所述RAM地址生成模塊在一個時鐘周期內(nèi)同時生成16個地址。
[0076] 所述RAM存儲模塊為雙端口 RAM,包含數(shù)據(jù)輸入端口和運算結(jié)果輸入端口,所述數(shù) 據(jù)輸入端口用于在數(shù)據(jù)輸入使能端的控制下存儲數(shù)據(jù)輸入模塊輸入的數(shù)據(jù);所述運算結(jié)果 輸入模塊用于在運算結(jié)果輸入使能端的控制下存儲基-16蝶形運算模塊輸出的運算結(jié)果數(shù) 據(jù)。
[0077] 所述RAM存儲模塊包含16個子存儲模塊,分別為RAM0-RAM15,每個子存儲模塊存儲 4096點數(shù)據(jù)。
[0078]將65536點數(shù)據(jù)以16點數(shù)據(jù)為一組依次存儲于16個子存儲模塊中,且所述65536點 數(shù)據(jù)中間隔為1、16、256、4096的數(shù)據(jù)不能存儲于相同的子存儲模塊中,從而實現(xiàn)16點數(shù)據(jù) 無沖突并行輸出。
[0079]步驟5,所述第一調(diào)序模塊從所述RAM存儲模塊中并行讀入16點數(shù)據(jù),并將所述16 點數(shù)據(jù)按照基-16蝶形運算的輸入要求進行調(diào)序。
[0080] 步驟6,所述基-16蝶形運行模塊中預先存儲有基-16蝶形運算的旋轉(zhuǎn)因子,所述 基-16蝶形運算模塊根據(jù)所述旋轉(zhuǎn)因子和所述第一調(diào)序模塊輸入的16點數(shù)據(jù)進行基-16蝶 形運算,得到運算結(jié)果數(shù)據(jù)。
[0081] -個時鐘周期進行一次基-16蝶形運算,所述一次基-16蝶形運算需要進行兩級復 數(shù)乘法和四級復數(shù)加法,其中兩級復數(shù)乘法共進行23次復數(shù)乘法運算,四級復數(shù)加法共進 行64次復數(shù)加法運算,基-16蝶形運算的每次計算結(jié)果采用對應的寄存器進行數(shù)據(jù)暫存。 [0082]將調(diào)序后的數(shù)據(jù)輸入基-16蝶形運算單元,同時讀取預先存儲在ROM里的旋轉(zhuǎn)因 子,進行16點的FFT變換?;?16蝶形運算模塊是FFT運算的基本單元,F(xiàn)FT的基-16分解公式 為:
[0084] 示例性的,如圖3所示為基-16蝶形運算模塊的具體運算過程:每一列節(jié)點可以用 一次運算得到,第一列運算是輸入數(shù)據(jù)同旋轉(zhuǎn)因子相乘,第二列運算是加減和乘_j的運算, 第三列運算是一部分數(shù)據(jù)不變,另一部分數(shù)據(jù)乘以固定旋轉(zhuǎn)因子,最后是加減和乘-j的運 算。要注意一部分數(shù)據(jù)乘以固定旋轉(zhuǎn)因子另一部分數(shù)據(jù)不變時,不變的數(shù)據(jù)要通過移位寄 存器實現(xiàn)另一部分數(shù)據(jù)的同步。
[0085] 需要補充的是,在基-16蝶形運算模塊中設置有多個寄存器,用于對基-16蝶形運 算模塊的中間結(jié)果進行暫存,目的是加快運算速度,比如四個數(shù)的加法,同時進行的話一個 時鐘周期需要進行三個加法運算,比較慢,因此可以將兩個數(shù)分別相加,一個時鐘周期進行 了兩個加,然后數(shù)據(jù)暫存,再進行一個加就可以了。
[0086]旋轉(zhuǎn)因子ROM用來存儲旋轉(zhuǎn)因子。數(shù)據(jù)處理第一級實現(xiàn)了4096個16點FFT,第二級 實現(xiàn)了256個256點FFT,第三級實現(xiàn)了 16個4096點FFT,第四級實現(xiàn)了65536點的FFT。不同的 點數(shù)對應的旋轉(zhuǎn)因子是不同的,但是小點數(shù)的旋轉(zhuǎn)因子其實是包含在大點數(shù)的旋轉(zhuǎn)因子中 的,因此只需要存儲65536點FFT的旋轉(zhuǎn)因子,其他點數(shù)的旋轉(zhuǎn)因子通過地址偏移得到。
[0087] 步驟7,第二調(diào)序模塊將所述基-16蝶形運算模塊得到的運算結(jié)果數(shù)據(jù)按照原位存 儲的原則進行調(diào)序,并將調(diào)序后的結(jié)果數(shù)據(jù)對應存儲在所述RAM存儲模塊中。
[0088] 由于數(shù)據(jù)運算后要進行原位存儲,所以采用調(diào)序2模塊將基16蝶形運算單元的運 算結(jié)果按照RAM的存儲規(guī)則進行調(diào)序。該過程可以看做步驟5的逆過程。
[0089] 步驟8,RAM地址生成模塊生成所述第二調(diào)序模塊輸入的運算結(jié)構(gòu)數(shù)據(jù)在所述RAM 存儲模塊中的存儲地址。
[0090] 步驟9,所述數(shù)據(jù)選通模塊選通運算結(jié)果輸入使能端,使得第二調(diào)序模塊將所述 基-16蝶形運算模塊輸出的運算結(jié)果數(shù)據(jù)按照所述RAM地址生成模塊生成的地址存儲到所 述RAM存儲模塊。
[0091] 步驟10,將步驟5至步驟9重復執(zhí)行4096次,完成第一級基-16蝶形運算;
[0092] 步驟11,將步驟5至步驟10重復執(zhí)行4次,完成四級基-16蝶形運算。
[0093] RAM存儲模塊中的數(shù)據(jù)存儲采用塊浮點的數(shù)據(jù)格式,數(shù)據(jù)存儲范圍為-32768至 32767,在第二級、第三級和第四級的基-16蝶形運算之前需要計算對應的上一級基-16蝶形 運算結(jié)果的溢出位寬,并根據(jù)所述溢出位寬對運算結(jié)果進行數(shù)據(jù)截斷處理。
[0094]本設計采用塊浮點的數(shù)據(jù)格式,對數(shù)據(jù)進行動態(tài)的縮放處理,以保證數(shù)據(jù)精度和 運算速度。具體地,在每一次蝶形運算后對輸出的16個復數(shù),共32個數(shù)據(jù)進行溢出檢測處 理,也就是比較大小,然后記錄最大值的溢出位數(shù),并和本級的最大溢出位數(shù)進行比較保留 較大值。這樣一級4096次蝶形運算后就得到了本級的溢出位寬,在下一級進行數(shù)據(jù)處理時 根據(jù)該溢出位寬將數(shù)據(jù)進行截斷,并加到整體的塊浮點指數(shù)上。
[0095]通過所設計的控制模塊來實現(xiàn)整個FFT運算的流程控制。該控制模塊采用一個14 位的信號step[13:0]作為地址生成等模塊運行的參考。step[ll:0]的每個值代表一次蝶形 運算,step[ 13:12]代表所處的級。從開始進行數(shù)據(jù)處理,該寄存器在每個時鐘周期都進行 加一計數(shù),在每級結(jié)束就暫停計數(shù),下一級開始運算就繼續(xù)計數(shù)。直到整個運算結(jié)束。
[0096]本發(fā)明實施例提供的一種基于FPGA實現(xiàn)65536點FFT的方法流程示意圖具體可參 照圖4進行。
[0097]本發(fā)明的設計方法,與現(xiàn)有技術相比,具有以下有益效果:
[0098] (1)處理速度快。用基-16核FFT算法可以在一個時鐘周期內(nèi)同時處理16個點的FFT 運算,在相同的處理點數(shù)下需要更少的運算時間。本設計中每一級運算都采用流水線設計, 提高了處理速度。蝶形運算單元設計時,每一步都用一個寄存器進行數(shù)據(jù)暫存,這樣就可以 實現(xiàn)流水線式數(shù)據(jù)處理,一級4096次蝶形運算只需要16個時鐘的數(shù)據(jù)潛伏期,加上4096個 時鐘即可實現(xiàn)一級處理。因此,所設計的算法能夠大幅度提高運算速度,仿真結(jié)果表明進行 65536點FFT運算只需要16448個時鐘周期,幾乎是Xilinx公司所提供IP核處理速度的8倍。
[0099] (2)數(shù)據(jù)的輸入輸出速度快。所設計的多路并行數(shù)據(jù)輸入輸出方式,一個時鐘周 期可以輸入輸出16個數(shù)據(jù),相較于Xilinx公司所提供的IP核一次只能輸入輸出1-4個數(shù)據(jù), 消除了數(shù)據(jù)輸入輸出瓶頸,提高了數(shù)據(jù)的輸入輸出效率。
[0100] (3)節(jié)省RAM資源。本設計采用原位存儲設計,數(shù)據(jù)讀取運算后還是存儲到原來的 RAM中,僅需要使用一個65536點的RAM存儲空間,幾乎是Xilinx公司提供的IP核所使用RAM 資源的1/4,最大限度地減少了 RAM資源的使用。
[0101] 本領域普通技術人員可以理解:實現(xiàn)上述方法實施例的全部或部分步驟可以通過 程序指令相關的硬件來完成,前述的程序可以存儲于計算機可讀取存儲介質(zhì)中,該程序在 執(zhí)行時,執(zhí)行包括上述方法實施例的步驟;而前述的存儲介質(zhì)包括:ROM、RAM、磁碟或者光盤 等各種可以存儲程序代碼的介質(zhì)。
[0102] 以上所述,僅為本發(fā)明的【具體實施方式】,但本發(fā)明的保護范圍并不局限于此,任何 熟悉本技術領域的技術人員在本發(fā)明揭露的技術范圍內(nèi),可輕易想到變化或替換,都應涵 蓋在本發(fā)明的保護范圍之內(nèi)。因此,本發(fā)明的保護范圍應以所述權(quán)利要求的保護范圍為準。
【主權(quán)項】
1. 一種基于FPGA實現(xiàn)65536點FFT的裝置,其特征在于,所述裝置包括: 數(shù)據(jù)輸入模塊,用于在一個時鐘周期內(nèi)同時輸入16點數(shù)據(jù); 數(shù)據(jù)選通模塊,設置有數(shù)據(jù)輸入使能端和運算結(jié)果輸入使能端,所述數(shù)據(jù)輸入使能端 用于將數(shù)據(jù)輸入模塊輸入的數(shù)據(jù)選通到RAM存儲模塊進行存儲,所述運算結(jié)果使能端用于 將基-16蝶形運算模塊輸出的運算結(jié)果數(shù)據(jù)選通到RAM存儲模塊進行存儲; RAM地址生成模塊,用于生成RAM存儲模塊的存儲地址;所述RAM地址生成模塊在一個時 鐘周期內(nèi)同時生成16個地址; RAM存儲模塊,用于存儲所述數(shù)據(jù)輸入模塊輸入的65536點數(shù)據(jù);或者用于存儲基-16蝶 形運算模塊輸出的運算結(jié)果數(shù)據(jù); 第一調(diào)序模塊,用于從所述RAM存儲模塊中并行讀入16點數(shù)據(jù),并將所述16點數(shù)據(jù)按照 基-16蝶形運算的輸入要求進行調(diào)序; 基-16蝶形運算模塊,用于預先存儲基-16蝶形運算的旋轉(zhuǎn)因子,并根據(jù)所述旋轉(zhuǎn)因子 和所述第一調(diào)序模塊輸入的16點數(shù)據(jù)進行基-16蝶形運算,得到運算結(jié)果數(shù)據(jù); 第二調(diào)序模塊,用于將所述運算結(jié)果數(shù)據(jù)按照原位存儲的原則進行調(diào)序,并將調(diào)序后 的結(jié)果數(shù)據(jù)對應存儲在所述RAM存儲模塊中。2. 根據(jù)權(quán)利要求1所述的一種基于FPGA實現(xiàn)65536點FFT的裝置,其特征在于,所述RAM 存儲模塊為雙端口 RAM,包含數(shù)據(jù)輸入端口和運算結(jié)果輸入端口,所述數(shù)據(jù)輸入端口用于在 數(shù)據(jù)輸入使能端的控制下存儲數(shù)據(jù)輸入模塊輸入的數(shù)據(jù);所述運算結(jié)果輸入模塊用于在運 算結(jié)果輸入使能端的控制下存儲基-16蝶形運算模塊輸出的運算結(jié)果數(shù)據(jù)。3. 根據(jù)權(quán)利要求1所述的一種基于FPGA實現(xiàn)65536點FFT的裝置,其特征在于,所述RAM 存儲模塊包含16個子存儲模塊,分別為RAM0-RAM15,每個子存儲模塊存儲4096點數(shù)據(jù); 所述65536點數(shù)據(jù)以16點數(shù)據(jù)為一組依次存儲于16個子存儲模塊中,且所述65536點數(shù) 據(jù)中間隔為1、16、256、4096的數(shù)據(jù)不能存儲于相同的子存儲模塊中,從而實現(xiàn)16點數(shù)據(jù)無 沖突并行輸出。4. 根據(jù)權(quán)利要求1所述的一種基于FPGA實現(xiàn)65536點FFT的裝置,其特征在于,一個時鐘 周期進行一次基-16蝶形運算,所述一次基-16蝶形運算需要進行兩級復數(shù)乘法和四級復數(shù) 加法,其中兩級復數(shù)乘法共進行23次復數(shù)乘法運算,四級復數(shù)加法共進行64次復數(shù)加法運 算。5. 根據(jù)權(quán)利要求1所述的一種基于FPGA實現(xiàn)65536點FFT的裝置,其特征在于,65536點 FFT的實現(xiàn)需要進行四級基-16蝶形運算,每級進行4096次蝶形運算,RAM存儲模塊中的數(shù)據(jù) 存儲采用塊浮點的數(shù)據(jù)格式,數(shù)據(jù)存儲范圍為-32768至32767; 所述裝置還包括溢出檢測和數(shù)據(jù)截斷模塊,用于在第二級、第三級和第四級的基-16蝶 形運算之前計算對應的上一級基-16蝶形運算結(jié)果的溢出位寬,并根據(jù)所述溢出位寬對運 算結(jié)果進行數(shù)據(jù)截斷處理。6. -種基于FPGA實現(xiàn)65536點FFT的方法,應用于如權(quán)利要求1-4中任一項所述的裝置 中,65536點FFT的實現(xiàn)需要進行四級基-16蝶形運算,其特征在于,所述方法包括如下步驟: 步驟1,數(shù)據(jù)輸入模塊輸入需要處理的數(shù)據(jù),所述數(shù)據(jù)輸入模塊在一個時鐘周期內(nèi)同時 輸入16點數(shù)據(jù); 步驟2,數(shù)據(jù)選通模塊選通數(shù)據(jù)輸入使能端,使所述數(shù)據(jù)輸入模塊輸入的65536點數(shù)據(jù) 存儲于RAM存儲模塊; 步驟3,RAM地址生成模塊生成所述數(shù)據(jù)輸入模塊輸入的數(shù)據(jù)在所述RAM存儲模塊中的 存儲地址; 步驟4,所述數(shù)據(jù)輸入模塊輸入的數(shù)據(jù)按照所述RAM地址生成模塊生成的地址存儲于所 述RAM存儲模塊,所述RAM地址生成模塊在一個時鐘周期內(nèi)同時生成16個地址; 步驟5,所述第一調(diào)序模塊從所述RAM存儲模塊中并行讀入16點數(shù)據(jù),并將所述16點數(shù) 據(jù)按照基-16蝶形運算的輸入要求進行調(diào)序; 步驟6,所述基-16蝶形運行模塊中預先存儲有基-16蝶形運算的旋轉(zhuǎn)因子,所述基-16 蝶形運算模塊根據(jù)所述旋轉(zhuǎn)因子和所述第一調(diào)序模塊輸入的16點數(shù)據(jù)進行基-16蝶形運 算,得到運算結(jié)果數(shù)據(jù); 步驟7,第二調(diào)序模塊將所述基-16蝶形運算模塊得到的運算結(jié)果數(shù)據(jù)按照原位存儲的 原則進行調(diào)序,并將調(diào)序后的結(jié)果數(shù)據(jù)對應存儲在所述RAM存儲模塊中; 步驟8, RAM地址生成模塊生成所述第二調(diào)序模塊輸入的運算結(jié)構(gòu)數(shù)據(jù)在所述RAM存儲 模塊中的存儲地址; 步驟9,所述數(shù)據(jù)選通模塊選通運算結(jié)果輸入使能端,使得第二調(diào)序模塊將所述基-16 蝶形運算模塊輸出的運算結(jié)果數(shù)據(jù)按照所述RAM地址生成模塊生成的地址存儲到所述RAM 存儲模塊; 步驟10,將步驟5至步驟9重復執(zhí)行4096次,完成第一級基-16蝶形運算; 步驟11,將步驟5至步驟10重復執(zhí)行4次,完成四級基-16蝶形運算。7. 根據(jù)權(quán)利要求6所述的一種基于FPGA實現(xiàn)65536點FFT的方法,其特征在于,所述RAM 存儲模塊為雙端口 RAM,包含數(shù)據(jù)輸入端口和運算結(jié)果輸入端口,所述數(shù)據(jù)輸入端口用于在 數(shù)據(jù)輸入使能端的控制下存儲數(shù)據(jù)輸入模塊輸入的數(shù)據(jù);所述運算結(jié)果輸入模塊用于在運 算結(jié)果輸入使能端的控制下存儲基-16蝶形運算模塊輸出的運算結(jié)果數(shù)據(jù)。8. 根據(jù)權(quán)利要求6所述的一種基于FPGA實現(xiàn)65536點FFT的方法,其特征在于,所述RAM 存儲模塊包含16個子存儲模塊,分別為RAM0-RAM15,每個子存儲模塊存儲4096點數(shù)據(jù); 將65536點數(shù)據(jù)以16點數(shù)據(jù)為一組依次存儲于16個子存儲模塊中,且所述65536點數(shù)據(jù) 中間隔為1、16、256、4096的數(shù)據(jù)不能存儲于相同的子存儲模塊中,從而實現(xiàn)16點數(shù)據(jù)無沖 突并行輸出。9. 根據(jù)權(quán)利要求6所述的一種基于FPGA實現(xiàn)65536點FFT的裝置,其特征在于,一個時鐘 周期進行一次基-16蝶形運算,所述一次基-16蝶形運算需要進行兩級復數(shù)乘法和四級復數(shù) 加法,其中兩級復數(shù)乘法共進行23次復數(shù)乘法運算,四級復數(shù)加法共進行64次復數(shù)加法運 算,基-16蝶形運算的每次計算結(jié)果采用對應的寄存器進行數(shù)據(jù)暫存。10. 根據(jù)權(quán)利要求6所述的一種基于FPGA實現(xiàn)65536點FFT的方法,其特征在于,RAM存儲 模塊中的數(shù)據(jù)存儲采用塊浮點的數(shù)據(jù)格式,數(shù)據(jù)存儲范圍為-32768至32767,在第二級、第 三級和第四級的基-16蝶形運算之前需要計算對應的上一級基-16蝶形運算結(jié)果的溢出位 寬,并根據(jù)所述溢出位寬對運算結(jié)果進行數(shù)據(jù)截斷處理。
【文檔編號】G06F17/14GK105893326SQ201610186675
【公開日】2016年8月24日
【申請日】2016年3月29日
【發(fā)明人】賈艷艷
【申請人】西安科技大學
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1