基于FPGA的可配置FFT_IFFT處理器的設(shè)計(jì)與實(shí)現(xiàn)
目前,正交頻分復(fù)用OFDM(Orthogonal Frequency Division Multiplexing)技術(shù)已經(jīng)成為未來(lái)寬帶無(wú)線接入系統(tǒng)的基本實(shí)現(xiàn)技術(shù)之一,其抗多徑衰落和高頻帶利用率的優(yōu)點(diǎn)被廣泛應(yīng)用于無(wú)線通信系統(tǒng)中,是解決高速數(shù)據(jù)在無(wú)線信道中傳輸?shù)氖走x方案[1]。
式(4) 表明首先對(duì)X[k] 取共軛, 然后對(duì)其進(jìn)行FFT變換, 對(duì)其結(jié)果再取一次共軛, 乘因子1/N, 這樣就實(shí)現(xiàn)了IFFT 與FFT 處理模塊的復(fù)用。
2 可配置FFT/IFFT 處理器設(shè)計(jì)
2.1 FFT/IFFT 處理器整體結(jié)構(gòu)
可配置FFT/IFFT 處理器整體結(jié)構(gòu)如圖1 所示。圖中, 基4 蝶形單元主要完成輸入的4 路并行計(jì)算。OFDM數(shù)字基帶數(shù)據(jù)流需要高速連續(xù)處理[3], 故FFT 處理系統(tǒng)在輸入、輸出均采用了乒乓處理, 共需要4 組存儲(chǔ)單元,一組存儲(chǔ)單元需要4 塊RAM;RAM 地址產(chǎn)生單元主要
生成存儲(chǔ)單元寫(xiě)入及讀出數(shù)據(jù)的地址, 數(shù)據(jù)選擇模塊主要完成了乒乓操作RAM 的數(shù)據(jù)選擇;ROM 及其地址產(chǎn)生單元主要在控制單元的控制下將旋轉(zhuǎn)因子送入蝶形單元, 配置單元控制不同點(diǎn)數(shù)的數(shù)據(jù)流操作及其相應(yīng)地址配置。
FFT_IFFT處理器是OFDM系統(tǒng)中數(shù)據(jù)處理的核心單元,是OFDM系統(tǒng)中數(shù)據(jù)正交調(diào)制和解調(diào)的關(guān)鍵。本文設(shè)計(jì)實(shí)現(xiàn)了一種用于P2P移動(dòng)無(wú)線通信手持終端產(chǎn)品,采用單碟形4路并行結(jié)構(gòu),兼容802.11g協(xié)議,可配置FFT_IFFT處理器,在處理速度、實(shí)現(xiàn)面積、功耗方面均滿足802.11g系統(tǒng)及手持移動(dòng)無(wú)線通信終端的要求。
2.2 FFT/IFFT可配置方案
由基4算法分析可知,要分別完成1 024、256、64點(diǎn)的FFT計(jì)算,需要的迭代級(jí)數(shù)分別為5、4、3級(jí)。由于1 024點(diǎn)的FFT運(yùn)算可分解為4個(gè)256點(diǎn)的FFT運(yùn)算,而256點(diǎn)的FFT運(yùn)算又可分為4個(gè)64點(diǎn)的FFT運(yùn)算,64點(diǎn)的FFT運(yùn)算經(jīng)過(guò)3級(jí)迭代就可求出??梢酝ㄟ^(guò)簡(jiǎn)單的模式控制實(shí)現(xiàn)多點(diǎn)數(shù)的配置,如圖2所示。其中5級(jí)蝶形計(jì)算單元,每級(jí)蝶形單元結(jié)構(gòu)一致,采用順序蝶形計(jì)算,當(dāng)選擇模式0時(shí),數(shù)據(jù)直接送入第一級(jí),進(jìn)行1 024點(diǎn)的5級(jí)運(yùn)算;選擇模式1時(shí),數(shù)據(jù)通過(guò)選擇器跳過(guò)第1級(jí),數(shù)據(jù)送入第2級(jí),從而完成256點(diǎn)的4級(jí)迭代運(yùn)算;選擇模式2時(shí),數(shù)據(jù)通過(guò)選擇器跳過(guò)第1級(jí)和第2級(jí),數(shù)據(jù)送入第3級(jí),從而完成64點(diǎn)的三級(jí)迭代運(yùn)算。這樣就可以正確簡(jiǎn)單地實(shí)現(xiàn)系統(tǒng)要求的配置要求。
2.3 基本蝶形運(yùn)算單元設(shè)計(jì)
蝶形運(yùn)算單元的設(shè)計(jì)是整個(gè)FFT/IFFT處理器設(shè)計(jì)的關(guān)鍵。完成蝶形運(yùn)算的一次復(fù)數(shù)乘法包含4次實(shí)數(shù)乘法和2次實(shí)數(shù)加、減法,如果將乘數(shù)擴(kuò)大1位,可將計(jì)算化簡(jiǎn)為3次實(shí)數(shù)乘和5次實(shí)數(shù)加/減法。為了提高處理速度,本設(shè)計(jì)采用四級(jí)流水線處理方式,有效地減小了關(guān)鍵路徑時(shí)延。蝶形單元的數(shù)據(jù)從RAM輸入及輸出到RAM需要2個(gè)時(shí)鐘周期,這里引入2級(jí)流水;對(duì)輸入數(shù)據(jù)的實(shí)部和虛部分開(kāi)并行計(jì)算,一次復(fù)數(shù)乘法只需3個(gè)乘法累加器即可完成,用4個(gè)加法器及4個(gè)減法器即可完成基4蝶形單元后續(xù)數(shù)據(jù)處理,再次引入二級(jí)流水。整個(gè)蝶形單元處理時(shí)間為4個(gè)周期,采用四級(jí)流水線結(jié)構(gòu)后,以較小的資源代價(jià)有效提高了處理器的時(shí)鐘頻率。
2.4 乒乓RAM設(shè)計(jì)
為了滿足無(wú)線移動(dòng)通信要求,實(shí)現(xiàn)對(duì)連續(xù)數(shù)據(jù)流和突發(fā)數(shù)據(jù)流的處理,本文設(shè)計(jì)的FFT/IFFT處理器采用了輸入、輸出雙乒乓結(jié)構(gòu),保證了系統(tǒng)高吞吐率的要求。設(shè)計(jì)共使用4組RAM(RAM0~RAM3),每組RAM劃分為4塊存儲(chǔ)器。輸入數(shù)據(jù)寫(xiě)入RAM0組中的4塊存儲(chǔ)器,寫(xiě)完后開(kāi)始寫(xiě)入RAM1,與此同時(shí),從RAM0組中讀出數(shù)據(jù)送入蝶形單元進(jìn)行計(jì)算,其結(jié)果按照同址計(jì)算規(guī)則寫(xiě)回相應(yīng)的地址,直到M級(jí)蝶形運(yùn)算完成后,最終的計(jì)算結(jié)果寫(xiě)入RAM2。RAM2寫(xiě)滿后,即可從RAM2讀出計(jì)算結(jié)果,同時(shí)RAM1組中的數(shù)據(jù)將被讀出送入蝶形單元進(jìn)行運(yùn)算,其運(yùn)算結(jié)果按照同址運(yùn)算規(guī)律送回RAM1存儲(chǔ),M級(jí)蝶形運(yùn)算完成后,最終結(jié)果寫(xiě)入RAM3組,RAM3寫(xiě)滿后即可從中讀出運(yùn)算結(jié)果。
2.5 無(wú)沖突并行地址設(shè)計(jì)[4]
4路并行數(shù)據(jù)處理結(jié)構(gòu)需要保證每次讀取的一組數(shù)據(jù)分別存儲(chǔ)在不同的RAM中,否則在數(shù)據(jù)讀取時(shí)會(huì)產(chǎn)生地址沖突[5]。本設(shè)計(jì)中RAM地址采用二維地址,其中地址x表示每塊RAM中數(shù)據(jù)地址,y表示數(shù)據(jù)來(lái)自RAM塊的標(biāo)號(hào)。
3 FPGA實(shí)現(xiàn)及測(cè)試分析
本文FFT/IFFT處理器采用Verilg硬件語(yǔ)言描述,在Mentor公司的Modelsim仿真平臺(tái)上進(jìn)行了RTL功能仿真及時(shí)序仿真,其結(jié)果與Matlab仿真結(jié)果進(jìn)行比較顯示正確。處理器采用了Xilinx 公司Virtex-Ⅱ xc22v500 芯片進(jìn)行了驗(yàn)證,在SMIC COMS 0.18 ?滋m工藝下對(duì)設(shè)計(jì)的處理器進(jìn)行了綜合仿真。結(jié)果顯示:完成64點(diǎn)16 bit符號(hào)數(shù)復(fù)數(shù)FFT運(yùn)算只需要50個(gè)時(shí)鐘周期,完成256點(diǎn)FFT運(yùn)算需要256個(gè)時(shí)鐘周期,最大時(shí)鐘頻率可以達(dá)到167 MHz,處理器的單元核心面積為1.4 mm2。設(shè)計(jì)完全滿足了無(wú)線移動(dòng)手持終端設(shè)備高速小面積的設(shè)計(jì)要求。