基于FPGA的移位寄存器流水線結(jié)構(gòu)FFT處理器設(shè)計(jì)與實(shí)
基于上述基本原理,將這種移位寄存器結(jié)構(gòu)擴(kuò)展到整個(gè)FFT系統(tǒng)的各級(jí),可以發(fā)現(xiàn)各級(jí)使用的移位寄存器數(shù)量是遞減的?,F(xiàn)使用一個(gè)8點(diǎn)結(jié)構(gòu)來進(jìn)行說明。
如圖3所示,數(shù)據(jù)由輸入l和輸入2進(jìn)入第一級(jí)。通過開關(guān)進(jìn)行選通控制。由于是N=8的運(yùn)算,所以各級(jí)分別加入4級(jí)、2級(jí)和1級(jí)的移位寄存器。本文引用地址:http://cafeforensic.com/article/191644.htm
分兩路來說明運(yùn)算過程:
將K1打到位置①,第一路數(shù)據(jù)進(jìn)入移位寄存器,待第一路的前4個(gè)數(shù)據(jù)存入4級(jí)移位寄存器后,第一路進(jìn)入的第5個(gè)數(shù)據(jù)與移位寄存器移出的第1個(gè)數(shù)據(jù)進(jìn)行蝶形運(yùn)算。
由于輸出結(jié)果有上下兩路,第二級(jí)是一個(gè)四點(diǎn)的DFT,所以對(duì)于上路的輸出結(jié)果x0(0)+x0(4)類似于第一級(jí),直接存入下一級(jí)寄存器,為四點(diǎn)運(yùn)算做準(zhǔn)備,下路的輸出,先存入本級(jí)2級(jí)移位寄存器中,等到上路的四點(diǎn)運(yùn)算開始,第二級(jí)的移位寄存器有空白位時(shí),移入第二級(jí),為下路的四點(diǎn)運(yùn)算做準(zhǔn)備。所以第一級(jí)蝶形運(yùn)算上路輸出前N/4=2個(gè)進(jìn)入下一級(jí)寄存器,下路輸出的數(shù)據(jù)依次存入本級(jí)移位寄存器中。
當(dāng)?shù)谝患?jí)的輸出前N/4=2個(gè)數(shù)據(jù)x0(0)+x0(4)和x0(1)+x0(5)存入第二級(jí)移位寄存器時(shí),運(yùn)算便可以開始,這時(shí)開關(guān)K2打到位置②,此時(shí)第一級(jí)上路輸出的數(shù)據(jù)x0(2)+x0(6),即第一級(jí)上路輸出的第三個(gè)數(shù)據(jù)與第二級(jí)移位寄存器移出的第一個(gè)數(shù)據(jù),即x0(O)+x0(4)進(jìn)行蝶形運(yùn)算,輸出的第四個(gè)數(shù)據(jù)x0(3)+x0(7)與x0(1)+x0(5)進(jìn)行蝶算。在這個(gè)運(yùn)算過程中,第一級(jí)的2級(jí)移位寄存器移出數(shù)據(jù)依次移位存入到第二級(jí)的移位寄存器產(chǎn)生的空白位中。
兩個(gè)時(shí)鐘后,第一級(jí)上路輸出的四個(gè)數(shù)據(jù)完成了蝶形運(yùn)算,K2打到位置①,在接下來的兩個(gè)時(shí)鐘里,第一級(jí)中2級(jí)移位寄存器的輸出依次與此時(shí)第二級(jí)中2級(jí)移位寄存器的輸出數(shù)據(jù)進(jìn)行蝶形運(yùn)算,即與,與完成第一級(jí)下路輸出的四個(gè)數(shù)據(jù)的蝶形運(yùn)算。
此時(shí),第一路在第一級(jí)運(yùn)算后的輸出數(shù)據(jù),在第二級(jí)完成了全部的蝶形運(yùn)算。第二級(jí)的輸出結(jié)果同第一級(jí)一樣,蝶形運(yùn)算的上路輸出前N/8=1個(gè)進(jìn)入下一級(jí)寄存器,后一個(gè)數(shù)據(jù)直接進(jìn)入后一級(jí)進(jìn)行碟算,下路輸出的數(shù)據(jù)存入本級(jí)移位寄存器中。
第三級(jí)的運(yùn)算與第二級(jí)和第一級(jí)類似,即移入1級(jí)寄存器的數(shù)據(jù)與其后一個(gè)數(shù)據(jù)進(jìn)行碟算,同時(shí)使前一級(jí)寄存器的輸出數(shù)據(jù)進(jìn)入后一級(jí)寄存器的空白位中,然后開關(guān)打到位置②,對(duì)下路輸出數(shù)據(jù)進(jìn)行碟算。
對(duì)于第二路數(shù)據(jù),通過開關(guān)控制,在第二級(jí)中,待第一路第一級(jí)下路輸出數(shù)據(jù)進(jìn)行蝶形運(yùn)算時(shí),移入寄存器的空白位,為運(yùn)算做準(zhǔn)備,由于前級(jí)運(yùn)算周期是后級(jí)運(yùn)周期的兩倍,對(duì)于第二級(jí)碟算模塊而言,數(shù)據(jù)仍然是不間斷輸入的。通過這樣兩路數(shù)據(jù)的交替運(yùn)算和存儲(chǔ),實(shí)現(xiàn)“乒乓操作”,從而提高了蝶形運(yùn)算模塊的運(yùn)算效率。圖4是256點(diǎn)FFT的具體運(yùn)算輸入和輸出時(shí)序圖。對(duì)于只有一路數(shù)據(jù)的應(yīng)用場(chǎng)合,可以在前級(jí)加入,門控開關(guān)和數(shù)據(jù)緩沖寄存器分成兩路數(shù)據(jù),實(shí)現(xiàn)一路數(shù)據(jù)的不間斷讀入。
由于采用移位寄存器結(jié)梅,各級(jí)寄存器使用的數(shù)量都是固定的,即為N/2+N/4。其中,N為該級(jí)DFT運(yùn)算的點(diǎn)數(shù),各級(jí)使用的移位寄存器深度逐級(jí)遞減,從而大大降低了寄存器的使用數(shù)量。
此外,由于各級(jí)結(jié)構(gòu)固定,所以大點(diǎn)數(shù)FFT只是小點(diǎn)數(shù)FFT基礎(chǔ)上級(jí)數(shù)的增加,而且由于移位寄存器的輸出相對(duì)于RAM而言不需要復(fù)雜的地址控制,所以這種結(jié)構(gòu)的FFT處理器具有非常好的可擴(kuò)展性。比如需要實(shí)現(xiàn)512點(diǎn)的FFT,只需要在256點(diǎn)的基礎(chǔ)上增加一級(jí)即可。
3 具體模塊的設(shè)計(jì)
3.1 控制與地址產(chǎn)生模塊
由于兩路數(shù)據(jù)同時(shí)輸入,為了防止發(fā)生兩路數(shù)據(jù)間的串?dāng)_,對(duì)數(shù)據(jù)的控制顯得極其關(guān)鍵。從上面的算法結(jié)構(gòu)分析中知道,由于后級(jí)的DFT運(yùn)算點(diǎn)數(shù)是前一級(jí)的一半,所以后一級(jí)的開關(guān)轉(zhuǎn)換周期也是前一級(jí)的一半,基于這種關(guān)系,可以使用一個(gè)8位計(jì)數(shù)器的每一位狀態(tài)來對(duì)各級(jí)開關(guān)進(jìn)行控制。最高位控制第一級(jí),同時(shí)由于上一級(jí)數(shù)據(jù)進(jìn)入下一級(jí)需要一個(gè)時(shí)鐘,所以下一級(jí)的開關(guān)轉(zhuǎn)換時(shí)刻要比上一級(jí)延遲一個(gè)時(shí)鐘周期。
評(píng)論