專利名稱:基于fpga的高速可變點fft處理器及其處理方法
技術領域:
本發明涉及數字信號處理技術領域,更進一步涉及通信和雷達信號處理中基于現場可編程門陣列(Field Programmable Gate Array, FPGA)的高速可變點流水線快速傅里葉變換(Fast Fourier Transform, FFT)處理器及其處理方法。本發明可用于解決數字信號處理技術中高速可變點數的FFT運算的實時處理,易于FPGA實現,可擴展性強。
背景技術:
隨著現場可編程門陣列FPGA(Field Programmable Gate Array)技術的迅速發展,采用并行度更大、速度更快的FPGA芯片來實現FFT已成為必然趨勢。FPGA技術的關鍵就是利用強有力的設計工具來縮短開發周期,提供豐富的片上資源,降低設計成本,并能夠并行處理數據,容易實現流水結構,且升級方便,提高設計的靈活性。傳統的采用原址運算的FFT處理器在實時專用處理器中得到廣泛應用。但采用原址運算的FFT處理器,其不同級同一位置蝶形輸入數據尋址不固定,所以每一級的存儲地址和控制邏輯不相同,從而增加了地址控制的難度和復雜性,其模塊的移植性比較低。南京航空航天大學申請的專利“基于FPGA實現高速FFT處理的方法”(申請號201010278997. 9,申請公告號CN101937424A)公開了一種改進基_2算法的FFT處理器。該FFT處理的中間數據采用順序存放的方式,每級輸入、輸出數據順序不變,因此幾何結構固定,其使用兩塊數組采用循環處理的方法進行計算。但是該方法存在的不足是,其電路循環處理的結構特點導致對于大點數的FFT運算實時性差,速度低;而且系統全部用16位寬,數據精度差;特別是不能進行可變點數的FFT運算處理,靈活性差。
發明內容
本發明的目的在于克服現有技術的不足,解決傳統FFT處理器控制邏輯復雜、模塊可移植性低的問題,提出了一種基于FPGA的高速可變點FFT處理器及其處理方法,并采用流水線結構方式實現了改進的基-2算法,可實現對數據的快速、可變點數的FFT運算處理。本發明基于FPGA的高速可變點流水線FFT處理器,包括多級處理模塊和一級輸出模塊,多級處理模塊的總級聯數由用戶進行FFT運算的序列的最大長度決定。多級處理模塊和輸出模塊以流水線方式級連;所述處理模塊中的存儲單元與控制單元、蝶形單元通過數據總線和控制總線相連;所述輸出模塊中的存儲單元與控制單元、輸出選擇單元通過數據總線和控制總線相連;處理模塊中的存儲單元,用于存儲處理模塊的輸入數據;處理模塊中的控制單元,用于控制和協調本級處理模塊的存儲單元、蝶形單元和下一級處理模塊的控制單元;處理模塊中的蝶形單元,用于完成每級處理模塊的蝶形處理,并把處理結果送給輸出模塊和下一級處理模塊的存儲單元;
輸出模塊,用于從不同級處理模塊選擇輸出結果來實現可變點數的FFT處理器。基于FPGA的高速可變點流水線FFT處理方法,包括如下步驟(I)初始設置用戶根據進行FFT運算的序列需要的長度,設置可變點流水線FFT處理器需要參與運算的處理模塊級數;⑵接收數據多級處理模塊的第一級處理模塊接收待進行FFT運算的輸入數據序列;(3)數據存儲第一級處理模塊的存儲單元接收待進行FFT運算的輸入數據序列,在第一級處理模塊的控制單元的控制下,將待進行FFT運算的輸入數據序列存入到“寫”狀態的存儲器組;第一級處理模塊的存儲單元中的數據選擇器將“讀”狀態的存儲器組的輸出數據傳送給第一級處理模塊的蝶形單元;(4)蝶形處理處理模塊中的蝶形單元采用蝶形公式對存儲單元傳來的數據進行處理,得到蝶形處理結果;(5)判斷FFT運算是否結束5a)將已經參與運算的處理模塊個數相加,得到的結果作為已經級聯的處理模塊數目;5b)判斷已經級聯的處理模塊數目是否與步驟⑴中所設置的需要參與FFT運算的處理模塊級數相等,如果是,則認為FFT運算完成,執行步驟¢)的操作;否則,認為運算未完成,執行步驟5c)的操作;5c)前級處理模塊中的蝶形單元將蝶形處理結果通過數據總線傳輸給本級處理模塊中的存儲單元,在本級控制單元控制下存入“寫”狀態存儲器組;本級處理模塊的存儲單元中的數據選擇器將“讀”狀態的存儲器組的輸出數據傳送給本級處理模塊的蝶形單元,執行步驟⑷的操作;(6)結果輸出輸出模塊接收多級處理模塊的運算結果,進行倒位序后,輸出最終結果。本發明與現有技術相比具有以下特點第一,由于本發明采用改進的基-2算法實現FFT處理器,可有效地克服現有技術基于原址運算的基-2FFT處理器尋址復雜、模塊可移植性差的問題,使得本發明的存儲控制邏輯簡單、模塊的可移植性高。第二,由于本發明采用流水線的工作方式,可有效地克服現有技術采用循環處理方式的FFT處理器無法實時處理數據的問題,使得本發明可實時快速處理數據。第三,由于本發明采用逐級位擴展的定點運算方式,使用乘法器實現蝶形運算處理,可有效克服現有技術基于CORDIC的FFT處理器處理周期多、數據精度差的問題,使得本發明處理周期少、數據結果精度高。
圖I為本發明處理器的整體結構框圖2為本發明處理器存儲單元的結構框圖;圖3為本發明處理器控制單元的結構框圖;圖4為本發明處理器蝶形單元的結構框圖;圖5為本發明處理 器輸出模塊的結構框圖。圖6為本發明處理方法的流程圖。
具體實施例方式下面結合附圖對本發明的FFT處理器做進一步的描述。參照附圖1,本發明的可變點流水線FFT處理器包括多級處理模塊和一級輸出模塊,多級處理模塊和輸出模塊以流水線方式級連;處理模塊中的存儲單元與控制單元、蝶形單元通過數據總線和控制總線相連;多級處理模塊的總級聯數由用戶進行FFT運算的序列的最大長度決定(序列長度為2的整數冪),本實施例中處理模塊的總級數為10,可處理的最長數據序列為1024點,通過設置需要參與運算的處理模塊級數可實現2 1024點的FFT運算處理。比如對于512點的數據序列進行FFT運算,則需要9級處理模塊參與運算,每一級處理模塊接收前一級處理模塊的處理結果,進行蝶形處理后,將處理結果輸出給下一級處理單元,經過9級處理模塊的蝶形處理,輸出模塊將第9級處理模塊的處理結果作為最終結果輸出。下面以本實施例1024可變點流水線FFT處理器為例,結合附圖6對本發明基于FPGA的高速可變點FFT處理方法做進一步描述,其步驟如下步驟I.接收數據和級數選擇信號當使能信號(en)有效(高電平有效)時,FFT處理器開始接收待進行FFT運算的輸入數據序列和級數選擇信號(num)。步驟2.數據存儲第一級處理模塊接收輸入數據序列和級數選擇信號,在第一級處理模塊的控制單元的控制下將輸入數據順序存入存儲單元的“寫狀態”存儲器組中,存儲單元的數據選擇器將“讀狀態”的存儲器組的數據傳給處理模塊的蝶形單元。為了實現數據的實時處理,存儲單元中的存儲器分為兩組構成“乒乓”結構,兩組存儲器在任意時刻都有一組存儲器為“讀狀態”,而一組存儲器為“寫狀態”;由于輸入的是復數數據,其實部和虛部分開存儲,所以兩組存儲器分別有一個實部存儲器和一個虛部存儲器,參照附圖2。實施例中存儲單元中的存儲器調用FPGA中的雙口 RAM核,每次可以讀或寫兩個數據,雙口 RAM的存儲深度與FFT處理器能處理的最大點數相同,本實施例中為1024深度。控制單元產生雙口 RAM核的讀/寫地址以及讀/寫使能信號;控制單元包括一個計數器、一個信號產生器和一個信號選擇器,參照附圖3。當處理模塊的輸入使能(en)有效時計數器開始計數;信號產生器接收計數器的計數值,進行移位和位拼接操作,產生一系列對應不同點數FFT的雙口 RAM的使能信號和讀/寫地址;級數選擇信號(num)控制信號選擇器從信號產生器產生的一系列使能信號和讀/寫地址中選擇當前需要的RAM使能信號和讀/寫地址。控制單元將輸入使能信號(en)延遲若干個周期傳遞給下一級處理模塊,延遲的周期數為從本級存儲單元取數據開始到本級處理模塊的數據處理結束所消耗的周期數;
步驟3.蝶形處理處理模塊中的蝶形單元采用蝶形公式對存儲單元傳來的數據進行處理,得到蝶形處理結果;蝶形公式表述如下
權利要求
1.基于FPGA的高速可變點FFT處理器,包括多級處理模塊和一級輸出模塊,多級處理模塊和輸出模塊以流水線方式級連;所述處理模塊中的存儲單元與控制單元、蝶形單元通過數據總線和控制總線相連;所述輸出模塊中的存儲單元與控制單元、輸出選擇單元通過數據總線和控制總線相連; 所述處理模塊中的存儲單元,用于存儲處理模塊的輸入數據; 所述處理模塊中的控制單元,用于控制和協調本級處理模塊的存儲單元、蝶形單元和下一級處理模塊的控制單元; 所述處理模塊中的蝶形單元,用于完成每級處理模塊的蝶形處理,并把處理結果送給輸出模塊和下一級處理模塊的存儲單元; 所述輸出模塊,用于從不同級處理模塊選擇輸出結果來實現可變點數的FFT處理器。
2.根據權利要求書I所述的基于FPGA的高速可變點FFT處理器,其特征在于,多級處理模塊的總級聯數由用戶進行FFT運算的序列的最大長度決定。
3.根據權利要求書I所述的基于FPGA的高速可變點FFT處理器,其特征在于,所述的存儲單元包括四個存儲器和一個數據選擇器,四個存儲器分為兩組構成“乒乓”結構,同組的數據存儲器又分為一個實部存儲器和一個虛部存儲器;實部存儲器、虛部存儲器通過各自的數據總線分別與數據選擇器相連,數據選擇器從兩組存儲器中選擇其中一組的數據輸出給蝶形單元。
4.根據權利要求書I所述的基于FPGA的高速可變點FFT處理器,其特征在于,所述控制單元包括一個計數器、一個信號產生器和一個信號選擇器,計數器和信號產生器相連,信號產生器和信號選擇器相連。
5.基于FPGA的高速可變點FFT處理方法,包括如下步驟 (1)初始設置 用戶根據進行FFT運算的序列需要的長度,設置可變點流水線FFT處理器需要參與運算的處理模塊級數; (2)接收數據 多級處理模塊的第一級處理模塊接收待進行FFT運算的輸入數據序列; (3)數據存儲 第一級處理模塊的存儲單元接收待進行FFT運算的輸入數據序列,在第一級處理模塊的控制單元的控制下,將待進行FFT運算的輸入數據序列存入到“寫”狀態的存儲器組;第一級處理模塊的存儲單元中的數據選擇器將“讀”狀態的存儲器組的輸出數據傳送給第一級處理模塊的蝶形單元; (4)蝶形處理 處理模塊中的蝶形單元采用蝶形公式對存儲單元傳來的數據進行處理,得到蝶形處理結果; (5)判斷FFT運算是否完成 5a)將已經參與運算的處理模塊個數相加,得到的結果作為已經級聯的處理模塊數目; 5b)判斷已經級聯的處理模塊數目是否與步驟(I)中所設置的需要參與FFT運算的處理模塊級數相等,如果是,則認為FFT運算完成,執行步驟¢)的操作;否則,認為運算未完成,執行步驟5c)的操作; 5c)前級處理模塊中的蝶形單元將蝶形處理結果通過數據總線傳輸給本級處理模塊中的存儲單元,在本級控制單元控制下存入“寫”狀態存儲器組;本級處理模塊的存儲單元中的數據選擇器將“讀”狀態的存儲器組的輸出數據傳送給本級處理模塊的蝶形單元,執行步驟⑷的操作; (6)結果輸出 輸出模塊接收多級處理模塊的運算結果,進行倒位序后,輸出最終結果。
6.根據權利要求書5所述的基于FPGA的高速可變點FFT處理方法,其特征在于,所述步驟(4)中的蝶形公式表述如下 K2/) = x(i) + x(i+^)xW;;y(2i+1) = x(i) - x(i+nZ7)X W;; 其中,y代表處理模塊輸出的數據序列,2i和2i+l分別代表處理模塊的輸出數據I (2i)和y(2i+l)在輸出數據序列中的對應位置,i = O,1,2,…,N/2, N為FFT處理器處理的數據點數,X代表處理模塊輸入的數據序列,i和i+N/2分別代表處理模塊的輸入數據x(i)和x(i+N/2)在輸入數據序列中的對應位置,代表旋轉因子。
全文摘要
本發明公開一種基于FPGA的高速可變點FFT處理器及其處理方法,本發明的FFT處理器包括多級處理模塊和一級輸出模塊,多級處理模塊和輸出模塊以流水線方式級連。本發明處理方法的具體步驟為1、初始設置;2、接收數據;3、數據存儲;4、蝶形處理;5、判斷FFT運算是否完成;6、結果輸出。本發明主要解決現有FFT處理器控制復雜,模塊可移植性差和硬件實現困難的問題;通過使用改進結構的基-2算法,本發明FFT處理器的每級結構固定,控制邏輯簡單,模塊可移植性強,很適合在單片FPGA中實現,同時可以獲得高速度、高精度的特性。
文檔編號G06F17/14GK102945224SQ20121036455
公開日2013年2月27日 申請日期2012年9月18日 優先權日2012年9月18日
發明者馬佩軍, 謝輝輝, 舒浩, 史江義, 田映輝, 邸志雄, 湯海華 申請人:西安電子科技大學