基于FPGA的移位寄存器流水線結(jié)構(gòu)FFT處理器
第三級的運算與第二級和第一級類似,即移入1級寄存器的數(shù)據(jù)與其后一個數(shù)據(jù)進行碟算,同時使前一級寄存器的輸出數(shù)據(jù)進入后一級寄存器的空白位中,然后開關(guān)打到位置②,對下路輸出數(shù)據(jù)進行碟算。
對于第二路數(shù)據(jù),通過開關(guān)控制,在第二級中,待第一路第一級下路輸出數(shù)據(jù)進行蝶形運算時,移入寄存器的空白位,為運算做準(zhǔn)備,由于前級運算周期是后級運周期的兩倍,對于第二級碟算模塊而言,數(shù)據(jù)仍然是不間斷輸入的。通過這樣兩路數(shù)據(jù)的交替運算和存儲,實現(xiàn)“乒乓操作”,從而提高了蝶形運算模塊的運算效率。圖4是256點FFT的具體運算輸入和輸出時序圖。對于只有一路數(shù)據(jù)的應(yīng)用場合,可以在前級加入,門控開關(guān)和數(shù)據(jù)緩沖寄存器分成兩路數(shù)據(jù),實現(xiàn)一路數(shù)據(jù)的不間斷讀入。
由于采用移位寄存器結(jié)梅,各級寄存器使用的數(shù)量都是固定的,即為N/2+N/4。其中,N為該級DFT運算的點數(shù),各級使用的移位寄存器深度逐級遞減,從而大大降低了寄存器的使用數(shù)量。
此外,由于各級結(jié)構(gòu)固定,所以大點數(shù)FFT只是小點數(shù)FFT基礎(chǔ)上級數(shù)的增加,而且由于移位寄存器的輸出相對于RAM而言不需要復(fù)雜的地址控制,所以這種結(jié)構(gòu)的FFT處理器具有非常好的可擴展性。比如需要實現(xiàn)512點的FFT,只需要在256點的基礎(chǔ)上增加一級即可。
3 具體模塊的設(shè)計
3.1 控制與地址產(chǎn)生模塊
由于兩路數(shù)據(jù)同時輸入,為了防止發(fā)生兩路數(shù)據(jù)間的串?dāng)_,對數(shù)據(jù)的控制顯得極其關(guān)鍵。從上面的算法結(jié)構(gòu)分析中知道,由于后級的DFT運算點數(shù)是前一級的一半,所以后一級的開關(guān)轉(zhuǎn)換周期也是前一級的一半,基于這種關(guān)系,可以使用一個8位計數(shù)器的每一位狀態(tài)來對各級開關(guān)進行控制。最高位控制第一級,同時由于上一級數(shù)據(jù)進入下一級需要一個時鐘,所以下一級的開關(guān)轉(zhuǎn)換時刻要比上一級延遲一個時鐘周期。
對于移位寄存器,在實現(xiàn)時,各級的前級移位寄存器深度為N/2-1,從本質(zhì)而言,是使運算開始的時鐘上升沿到來時,數(shù)據(jù)已經(jīng)出現(xiàn)在碟算模塊輸入線上,而不需要下一個時鐘的驅(qū)動來移出寄存器,比如第二級移位寄存器的級數(shù)為63。這樣,運算周期正好是2的倍數(shù),從而方便使用計數(shù)器的各位直接對開關(guān)進行控制。
同時,計數(shù)器還可以用來產(chǎn)生所需旋轉(zhuǎn)因子的RAM地址。根據(jù)各級蝶形運算所需旋轉(zhuǎn)因子的規(guī)律,可以利用計數(shù)器的高位補零來產(chǎn)生查找表的地址。比如,對于第一級,因為需要在最低位第一次出現(xiàn)1時提供,第二次出現(xiàn)1時提供,…,以此類推,周期為128,所以可以使用計數(shù)器的低七位作為地址。對于第二級,由于所需要的地址為偶數(shù),可以由計數(shù)器的[6:1]和最低位置O產(chǎn)生。表l為8點時使用三位計數(shù)器輸出旋轉(zhuǎn)因子的地址情況。
控制和地址產(chǎn)生模塊的仿真結(jié)果如圖5所示,其中sel代表開關(guān)控制,addr代表產(chǎn)生的地址。
評論