基於FPGA的移位寄存器流水線結構FFT處理器設計與實現

2020-12-16 電子產品世界
0 引言

  快速傅立葉變換(FFT)在雷達、通信和電子對抗等領域有廣泛應用。近年來現場可編程門陣列(FPGA)的飛速發展,與DSP技術相比,由於其並行信號處理結構,使得FPGA能夠很好地適用於高速信號處理系統。由於Altera等公司研製的FFT IP核,價錢昂貴,不適合大規模應用,在特定領域中,設計適合於自己領域需要的FFT處理器是較為實際的選擇。

  本文設計的FFT處理器,基於FPGA技術,由於採用移位寄存器流水線結構,實現了兩路數據的同時輸入,相比傳統的級聯結構,提高了蝶形運算單元的運算效率,減小了輸出延時,降低了晶片資源的使用。在OFDM系統的實際應用中,因它可以採用快速傅立葉變換,能方便快捷地實現調製和解調,故結合MIMO技術,設計的FFT處理器結構,可以很好地應用於2根天線的MIMO-OFDM系統中。

  1 FFT處理的應用及DIF FFT算法原理

  圖1給出一個2根天線MIMO-OFDM系統中FFT的使用。快速傅立葉變換算法基本上分為兩大類:時域抽取(DIT)和頻域抽取(DIF),這裡設計的FFT處理器採用基-2 DIF算法。

  對於N點序列x(N),其傅立葉變換

  將x(n)分成上、下兩部分,得:

  這樣將兩個N點的DFT分成兩個N/2點的DFT,分的方法是將x(k)按序號k的奇、偶分開。通過這種方式繼續分下去,直到得到兩點的DFT。採用DIF方法設計的FFT,其輸入是正序,輸出是按照奇偶分開的倒序。

  2 移位寄存器流水線結構的FFT

  在傳統流水線結構的FFT中,需要將全部數據輸入寄存器後,可開始蝶形運算。在基-2 DIF算法中可以發現,當前N/2個數據進入寄存器後,運算便可以開始,此後進入的第N/2+1個數據與寄存器第一個數據進行蝶形運算,以此類推。

  由於採用頻域抽取法,不需要對輸入的數據進行倒序處理,簡化了地址控制,這樣,可以採用移位寄存器的方式,依次將前N/2個數據移入移位寄存器,在N/2+l時刻,第一個數據移出移位寄存器,參與運算。相對於傳統的RAM讀寫方式,採用移位寄存器存儲結構綜合後的最大工作頻率為500 MHz,遠大於RAM方式的166 MHz。

  當移位寄存器相繼有數據移出時,在移位寄存器中會出現空白位。此時,引入第二路數據,在第一路數據依次移出進行蝶算時,第二路數據依次補充到移位寄存器的空白位中,為運算做準備。通過這樣一種類似「桌球操作」的結構,可以使蝶形運算模塊中的數據不間斷地輸入,運算效率達到100%。不同於傳統的「桌球操作」結構,由於使用移位寄存器,不需要兩塊RAM,可以省掉一半的寄存器。圖2為256點FFT處理器的第一級結構。

  基於上述基本原理,將這種移位寄存器結構擴展到整個FFT系統的各級,可以發現各級使用的移位寄存器數量是遞減的。現使用一個8點結構來進行說明。

  如圖3所示,數據由輸入l和輸入2進入第一級。通過開關進行選通控制。由於是N=8的運算,所以各級分別加入4級、2級和1級的移位寄存器。

  分兩路來說明運算過程:

  將K1打到位置①,第一路數據進入移位寄存器,待第一路的前4個數據存入4級移位寄存器後,第一路進入的第5個數據與移位寄存器移出的第1個數據進行蝶形運算。

  由於輸出結果有上下兩路,第二級是一個四點的DFT,所以對於上路的輸出結果x0(0)+x0(4)類似於第一級,直接存入下一級寄存器,為四點運算做準備,下路的輸出,先存入本級2級移位寄存器中,等到上路的四點運算開始,第二級的移位寄存器有空白位時,移入第二級,為下路的四點運算做準備。所以第一級蝶形運算上路輸出前N/4=2個進入下一級寄存器,下路輸出的數據依次存入本級移位寄存器中。

  當第一級的輸出前N/4=2個數據x0(0)+x0(4)和x0(1)+x0(5)存入第二級移位寄存器時,運算便可以開始,這時開關K2打到位置②,此時第一級上路輸出的數據x0(2)+x0(6),即第一級上路輸出的第三個數據與第二級移位寄存器移出的第一個數據,即x0(O)+x0(4)進行蝶形運算,輸出的第四個數據x0(3)+x0(7)與x0(1)+x0(5)進行蝶算。在這個運算過程中,第一級的2級移位寄存器移出數據依次移位存入到第二級的移位寄存器產生的空白位中。

  兩個時鐘後,第一級上路輸出的四個數據完成了蝶形運算,K2打到位置①,在接下來的兩個時鐘裡,第一級中2級移位寄存器的輸出依次與此時第二級中2級移位寄存器的輸出數據進行蝶形運算,即與,與完成第一級下路輸出的四個數據的蝶形運算。

  此時,第一路在第一級運算後的輸出數據,在第二級完成了全部的蝶形運算。第二級的輸出結果同第一級一樣,蝶形運算的上路輸出前N/8=1個進入下一級寄存器,後一個數據直接進入後一級進行碟算,下路輸出的數據存入本級移位寄存器中。

  第三級的運算與第二級和第一級類似,即移入1級寄存器的數據與其後一個數據進行碟算,同時使前一級寄存器的輸出數據進入後一級寄存器的空白位中,然後開關打到位置②,對下路輸出數據進行碟算。

  對於第二路數據,通過開關控制,在第二級中,待第一路第一級下路輸出數據進行蝶形運算時,移入寄存器的空白位,為運算做準備,由於前級運算周期是後級運周期的兩倍,對於第二級碟算模塊而言,數據仍然是不間斷輸入的。通過這樣兩路數據的交替運算和存儲,實現「桌球操作」,從而提高了蝶形運算模塊的運算效率。圖4是256點FFT的具體運算輸入和輸出時序圖。對於只有一路數據的應用場合,可以在前級加入,門控開關和數據緩衝寄存器分成兩路數據,實現一路數據的不間斷讀入。

  由於採用移位寄存器結梅,各級寄存器使用的數量都是固定的,即為N/2+N/4。其中,N為該級DFT運算的點數,各級使用的移位寄存器深度逐級遞減,從而大大降低了寄存器的使用數量。

  此外,由於各級結構固定,所以大點數FFT只是小點數FFT基礎上級數的增加,而且由於移位寄存器的輸出相對於RAM而言不需要複雜的地址控制,所以這種結構的FFT處理器具有非常好的可擴展性。比如需要實現512點的FFT,只需要在256點的基礎上增加一級即可。

3 具體模塊的設計

  3.1 控制與地址產生模塊

  由於兩路數據同時輸入,為了防止發生兩路數據間的串擾,對數據的控制顯得極其關鍵。從上面的算法結構分析中知道,由於後級的DFT運算點數是前一級的一半,所以後一級的開關轉換周期也是前一級的一半,基於這種關係,可以使用一個8位計數器的每一位狀態來對各級開關進行控制。最高位控制第一級,同時由於上一級數據進入下一級需要一個時鐘,所以下一級的開關轉換時刻要比上一級延遲一個時鐘周期。

  對於移位寄存器,在實現時,各級的前級移位寄存器深度為N/2-1,從本質而言,是使運算開始的時鐘上升沿到來時,數據已經出現在碟算模塊輸入線上,而不需要下一個時鐘的驅動來移出寄存器,比如第二級移位寄存器的級數為63。這樣,運算周期正好是2的倍數,從而方便使用計數器的各位直接對開關進行控制。

  同時,計數器還可以用來產生所需旋轉因子的RAM地址。根據各級蝶形運算所需旋轉因子的規律,可以利用計數器的高位補零來產生查找表的地址。比如,對於第一級,因為需要在最低位第一次出現1時提供,第二次出現1時提供,…,以此類推,周期為128,所以可以使用計數器的低七位作為地址。對於第二級,由於所需要的地址為偶數,可以由計數器的[6:1]和最低位置O產生。表l為8點時使用三位計數器輸出旋轉因子的地址情況。

  控制和地址產生模塊的仿真結果如圖5所示,其中sel代表開關控制,addr代表產生的地址。

  3.2 蝶形運算模塊

  蝶算模塊由一個複數加法器,一個複數減法器和一個旋轉因子的複數乘法器構成,如圖6所示。

  旋轉因子乘法器通常由4次實數乘法和2次加/減法運算實現,但因為cos和sin的值可以預先存儲,通過下面的算法可以簡化複數乘法器:

  (1)存儲如下三個係數:C,C+S,C-S

  (2)計算:E=X-Y和Z=C*E=C*(X-Y)

  (3)用R=(C-S)*Y+Z,I=(C+S)*X-Z,

  得到需要的結果。

  這種算法使用了3次乘法,1次加法和2次減法,但是需要使用存儲3個表的ROM資源。

  設計中數據的輸入為16位複數,所以將旋轉因子cos(2kπ/N),sin(2kπ/N)量化成帶符號數的16位二進位數後,存儲到ROM中,由於值域不同,需要注意C+S和C-S的表要比C表多1位精度。

  運算後的結果需要除以量化時乘以的倍數16b011111llllllllll。具體實現時由於除法運算在FPGA器件需要消耗較多的資源,設計中採用二進位數移位的方法來實現除法運算。為了防止數據溢出,設計對輸出結果除以2。圖7為蝶形運算模塊的RTL級結構圖。

  3.3 倒序輸出模塊

  由頻域抽取的基-2算法可知,運算結果需要倒序輸出。可以先將結果存儲到RAM中,然後使用O~255的二進位數倒序產生RAM讀取地址,依次將結果讀出,其中實現一個8位二進位數倒序的算法如下:

  (1)將8位數字的相鄰兩位交換位置;

  (2)將相鄰的兩位看作1組,相鄰兩組交換位置;

  (3)將相鄰的4位看作1組,相鄰兩組交換位置。

  經過這樣的交換位置後,輸出即為原來8位二進位數的倒序。

  舉例對於8位二進位數10110110來說,第一次交換位置的結果是01111001,第二次交換位置的結果是11010110,最後交換位置的結果是01101101。可見正好是原來數字的倒序。

  另外,由於設計的是兩路數據同時寫入,一路數據讀出,所以讀取的頻率是寫入頻率的2倍,使用PLL實現原始時鐘的二倍頻,用來讀取RAM。倒序模塊仿真結果如圖8所示。

  最終生成的FFT處理器模塊圖如圖9所示。

  4 仿真結果

  各級間數據時序情況如圖10所示,設計的FFT處理器仿真結果如圖1l所示。採用一路階梯遞增信號和另一路:XXXX信號進行仿真,通過與Matlab計算結果進行對比,結果基本一致,可以滿足系統要求。系統總的延時由延時最大的第一級決定,為第一級運算的延時加上倒序輸出的延時,總共是(256+128)×clk,相對於一般流水線結構(256×讀入周期+7×128×蝶算周期+128×讀入周期),系統延時大為減少。

  通過仿真可知,系統最大頻率由蝶形運算模塊的最大工作頻率決定。使用QuartusⅡ軟體時序仿真後,得到處理器的工作頻率為72 MHz。

  5 結語

  通過採用移位寄存器流水線結構,可以有效地提高FFT處理器中蝶形運算單元的效率,減少寄存器的使用數量,並且簡化了地址控制,提高處理器的工作頻率,具有良好的可擴展性,同時可以實現兩路數據的同時輸入,從而增大了一倍的數據吞吐量。對於工作頻率要求較高,數據吞吐量較大,尤其對於需要兩路數據輸入的場合,比如兩天線的MIMO-OFDM系統,具有很大的實用價值。

相關焦點

  • 基於FPGA的可擴展高速FFT處理器的設計與實現
    摘 要:本文提出了基於FPGA實現傅立葉變換點數可靈活擴展的流水線FFT處理器的結構設計以及各功能模塊的算法實現,包括高組合數FFT算法的流水線實現結構、級間混序讀/寫RAM地址規律、短點數FFT陣列處理結構以及補碼實現CORDIC算法的流水線結構等。
  • 一種基於FPGA的視頻邊緣檢測系統設計
    摘要:對於視頻圖像檢測與識別的需要,提出了一種基於FPGA的視頻邊緣檢測系統設計方案,並完成系統的硬體設計。通過FPGA控制攝像頭進行視頻採集,雙埠SDRAM對圖像數據進行緩存,FPGA再對數據進行實時處理。
  • 基於FPGA的m序列信號發生器設計
    基於FPGA與Verilog硬體描述語言設計井實現了一種數據率按步進可調、低數據誤碼率、反饋多項式為本文引用地址:http://www.eepw.com.cn/article/263588.htm  系統時鐘為20MHz,m序列信號發生器輸出的數據率為20~100 kbps,通過2個按鍵實現20 kbps步進可調與系統復位,輸出誤碼率小於1%.  m序列是最長線性反饋移位寄存器序列的簡稱,它是由帶線性反饋的移位寄存器產生的周期最長的一種偽隨機序列。是由移位寄存器、反饋抽頭及模2加法器組成。
  • 基於FPGA的可配置FFT_IFFT處理器的設計與實現
    2 可配置FFT/IFFT 處理器設計2.1 FFT/IFFT 處理器整體結構可配置FFT/IFFT 處理器整體結構如圖1 所示。圖中, 基4 蝶形單元主要完成輸入的4 路並行計算。FFT_IFFT處理器是OFDM系統中數據處理的核心單元,是OFDM系統中數據正交調製和解調的關鍵。本文設計實現了一種用於P2P移動無線通信手持終端產品,採用單碟形4路並行結構,兼容802.11g協議,可配置FFT_IFFT處理器,在處理速度、實現面積、功耗方面均滿足802.11g系統及手持移動無線通信終端的要求。
  • 基於FPGA的帶Cache的嵌入式CPU的設計與實現
    MIPS32TM指令集開放,指令格式規整,易於流水線設計,大量使用寄存器操作。與CISC(Complex Instruction Set Computer)微處理器相比,RISC具有設計更簡單、設計周期更短等優點,並可以應用更多先進的技術,開發更快的下一代處理器。
  • 基於FPGA的正交數字混頻器中數控振蕩器的設計與實現
    首先推導了算法產生正餘弦信號的實現過程,然後給出了在中設計數控振蕩器的頂層電路結構,並根據算法特點在設計中引入流水線結構設計。本文引用地址:http://www.eepw.com.cn/article/201809/388994.htmCORDIC算法;/餘弦信號正交特性好等特點。而且的相位、幅度均已數位化,可以直接進行高精度的數字調製解調。
  • 基於改進的CORDIC算法的FFT復乘及其FPGA實現
    在FFT運算中,核心操作是蝶形運算,而蝶形運算的主要操作是向量旋轉,實現向量旋轉可用複數乘法運算來實現,但複數乘耗費了FFT運算中大量的乘法器資源。CORDIC算法只需簡單的移位與加減運算就能實現向量旋轉,具有使用資源少、硬體規模小等優勢。因此在FFT蝶形運算中用其代替傳統FFT運算中的複數乘法器,可以獲得更好的性能。
  • 基於CORDIC 2FSK調製器的FPGA設計
    提出一種基於流水線CORDIC算法的2FSK調製器的FPGA實現方案,可有效地節省FPGA的硬體資源,提高運算速度。最後,給出該方案的硬體測試結果,驗證了設計的正確性。0 引言 頻移鍵控(FSK)是用不同頻率的載波來傳送數位訊號,並用數字基帶信號控制載波信號的頻率。
  • 基於FPGA的高速流水線浮點乘法器設計與實現
    同時由於基於IEEE754 標準的浮點運算具 有動態範圍大,可實現高精度,運算規律較定點運算更為簡捷等特點,浮點運算單元的設計 研究已獲得廣泛的重視。本文介紹了 32 位浮點乘法器的設計,採用了基4 布思算法,改進的4:2 壓縮器及布思 編碼算法,並結合FPGA自身特點,使用流水線設計技術,在實現高速浮點乘法的同時,也 使是系統具有了高穩定性、規則的結構、易於FPGA 實現及ASIC 的HardCopy 等特點。
  • 基於FPGA的CORDIC算法的改進及實現
    由於這些固定的角度與計算基數有關,運算只有移位和加/減。若用傳統的乘、除等計算方法,需要佔用大量的硬體資源,甚至算法是難以實現的,這樣就不能滿足設計者的要求。CORDIC算法正是由此產生的,它僅在硬體電路上用到了移位和加/減,大大節約了硬體資源,使得這些算法在硬體上可以得到較好地實現,從而滿足設計者的要求。
  • 流水線技術在基於FPGA的DSP運算中的應用研究
    傳統的DSP設計方法主要有採用固定功能的DSP器件和採用DSP處理器兩種,由於它們靈活性差以及軟體算法在執行時的順序性,限制了它們在高速和實時系統中的應用。隨著深亞微米半導體製造工藝的不斷創新,百萬門可編程器件的不斷推出,為DSP提供了第3種有效的解決方案,即利用FPGA實現DSP運算硬體化。
  • 移位寄存器的特點_移位寄存器工作原理
    這種移位寄存器是一維的,事實上還有多維的移位寄存器,即輸入、輸出的數據本身就是一些列位。實現這種多維移位寄存器的方法可以是將幾個具有相同位數的移位寄存器並聯起來。   移位寄存器分類   根據移位方向,常把它分成左移寄存器、右移寄存器和雙向移位寄存器三種。
  • 【乾貨分享】從0開始學ARM-ARM模式、寄存器、流水線
    從0開始學ARM-CPU原理,基於ARM的SOC講解》有了計算機硬體架構的原理,下面我就可以學習ARM模式、寄存器、流水線等基礎知識。ARM的成功,一方面得益於它獨特的公司運作模式,另一方面,當然來自於ARM處理器自身的優良性能。作為一種先進的RISC處理器,ARM處理器有如下特點。支持Thumb(16位)/ARM(32位)雙指令集,能很好地兼容8位/16位器件。
  • FFT實時譜分析系統的FPGA設計和實現
    整個設計採用流水線工作方式,保證了系統的速度,避免了瓶頸的出現;整個系統採用FPGA實現,實驗表明,該系統既有DSP器件實現的靈活性又有專用 FFT晶片實現的高速數據吞吐能力,可以廣泛地應用於數位訊號處理的各個領域。
  • 寄存器和移位寄存器
    1.邏輯電路: 2.工作原理3.右移位寄存器的狀態表㈡ 4位左移位寄存器。5.優缺點:二、扭環計數器同環形計數器的分析過程7.4.4 順序脈衝發生器一、基本概念二、由環形計數器實現三、由雙向移位寄存器CT74LS194構成㈠ 順序正脈衝㈡ 順序負脈衝四、還可以用計數器+解碼器實現 現代教學方法與手段:DLCCAI或EWB演示移位寄存器和順序脈衝發生器的邏輯功能7.4 寄存器和移位寄存器
  • 基於JTAG接口實現ARM的FPGA在線配置
    SDR終端的實現往往都是基於可重配置的硬體環境,如現場可編程邏輯陣列(Field Programmable Gate Array,FPGA)、數位訊號處理器(Digital Signal Processor,DSP),而不是專用集成電路(Application Specific Integrated Circuit,ASIC)等特定的硬體電路和晶片。
  • 基於FPGA IP核的FFT實現與改進
    對於512點FFT處理器,如果該512個輸入數據不是信號周期的整數倍,即非整數倍周期截斷,則會出現頻譜洩露現象。窗函數處理的宗旨是減小頻譜洩露。常規的FFT硬體實現方法均不考慮由於非整數倍截斷導致的頻譜洩露問題。針對以上問題,本文設計了一種基於Altera IP核的512點FFT系統,同時通過對輸入信號的加窗處理,抑制了非整數倍信號周期截斷所產生的頻譜洩露。
  • 基於FPGA的視頻實時邊緣檢測系統
    對於視頻圖像的邊緣檢測,若採用軟體方式實現由於受到系統處理速度的限制,容易出現斷幀現象,這對於要求實時處理的情況下將是一個很大的缺陷。硬體實現主要有基於專用晶片,基於DSP和基於FPGA的3種處理方式。基於專用晶片方式並不適合前期產品的開發。基於DSP方式在運算速度、數據吞吐量等方面有限制。本設計基於FPGA實現,邊緣檢測採用流水線結構。實驗結果表明,該系統十分適合視頻數據的處理。
  • 用matlab來實現fpga功能的設計
    FPGA的邏輯結構不僅包括查找表、寄存器、多路復用器、存儲器,而且還有快速加法器、乘法器和I/O處理專用電路。FPGA具有實現高性能並行算法的能力,是構成高性能可定製數據通路處理器(數字濾波、FFT)的理想器件。如Virtex-II Pro FPGA包含高性能的可編程架構、嵌入式PowerPC處理器和3.125Gbps收發器等。
  • 基於PGL22G的物聯網Sensor HUB設計
    寄存器單元包括針對32位指令格式的通用寄存器,針對乘除法運算結果的乘除法結果寄存器,程序計數器,存放OpenMIPS相關操作指令的指令寄存器。用於數據處理的算數模塊(包括四則運算和部分特殊的數據移位操作),數據選擇模塊;針對於五級流水線設計的狀態模塊,其構成與實現於下一段介紹;針對本設計使用的五級流水線還添加了協處理器模塊用於工作狀態的配置。