摘要:根據(jù)3GPP協(xié)議規(guī)定,提出一種適于FPGA實現(xiàn)的解決方案。采用分而治之和WFTA的算式分解,最大限度地減少DFT的運算量;采用塊浮點動態(tài)截取多余位寬,減少系統(tǒng)面積;運用4個雙端口RAM讀寫,使系統(tǒng)能運行在流水線結(jié)構(gòu);采用對稱結(jié)構(gòu)存儲每一級的旋轉(zhuǎn)因子,最大化共享因子。
為了降低手機終端的功率損耗[1],LTE上行鏈路采用基于DFT擴頻OFDM(DFTS_OFDM)的單載波傳輸,又稱為單載波FDMA(SC_FDMA)。DFTS_OFDM方案的基本結(jié)構(gòu)如圖1所示。3GPP協(xié)議規(guī)定[2]上行PUSCH信道產(chǎn)生SC_FDMA符號要求DFT點數(shù)滿足式(1)。
由幾個參數(shù)的變化可以得到最小12點、最大1296點共35種模式的DFT[3]。現(xiàn)在已有的研究方法(如質(zhì)因子分解結(jié)合WFTA算法)解決非2n點DFT,但此法不夠靈活,不適合長度可變的DFT。在數(shù)字電視DTMB系統(tǒng)中,3780點FFT的處理采用分裂基與質(zhì)因子分解結(jié)合WFTA算法實現(xiàn),但對于LTE上行可配置長度DFT的實現(xiàn)還沒有一個成熟有效的方法。
根據(jù)LTE實時系統(tǒng)需求采用pipeline流水線結(jié)構(gòu)實現(xiàn)高速可配置的DFT設(shè)計,同時在結(jié)構(gòu)和資源利用上進行優(yōu)化,最后給出仿真圖形以及綜合結(jié)果,為上行LTE設(shè)計提供一種參考。
2 總體結(jié)構(gòu)及技術(shù)實現(xiàn)
2.1 整體結(jié)構(gòu)框圖
LTE DFT的模塊化總體結(jié)構(gòu)如圖3所示,根據(jù)算法分析可以知道LTE DFT的分而治之需要幾個階段才能完成,每個階段需要做多次小因子點的DFT,所以圖示是一個循環(huán)的形式。由狀態(tài)機控制這些階段的完成,直到最后一個循環(huán)結(jié)束輸出數(shù)據(jù)。
其中前處理進入WFTA模塊的包括對4個雙端口RAM的讀取控制以及對旋轉(zhuǎn)因子ROM的讀取,還有旋轉(zhuǎn)因子地址的計算。飽和操作根據(jù)系統(tǒng)的最大bit數(shù)限定,對經(jīng)過WFTA計算后的數(shù)據(jù)進行飽和處理,超過的bit數(shù)直接截取掉。
2.2 技術(shù)實現(xiàn)
2.2.1 4個雙端口RAM的數(shù)據(jù)存儲
為保證pipeline地處理每次循環(huán)的數(shù)據(jù),這里采用4個雙端口RAM對數(shù)據(jù)進行存取。對4、2、5、3四種小因子的WFTA計算來說,選4個RAM最方便,如果需要進行4點的WFTA計算,則從每個RAM中讀出一個數(shù)據(jù),這僅需要一個時鐘就可讀出4個數(shù)據(jù)。對2點的WFTA計算,則可以一個時鐘讀出兩組的2點WFTA進行計算。對3點的用一個時鐘,對于5點的用兩個時鐘讀取。
在基于原位計算的基礎(chǔ)上進行改進,加入旋轉(zhuǎn)數(shù)據(jù)模塊,是為了將本來是在一個RAM中的數(shù)據(jù)在填入RAM前進行旋轉(zhuǎn),使其在不同的RAM中便于下一階段pipeline讀取。圖4展示了一個最簡單的12點的填寫RAM實例,在開始第一階段前先將12點的輸入數(shù)通過載入buffer模塊用12個clk按圖3順序載入4個RAM中,也就是將數(shù)據(jù)倒位序放入4個RAM中。將倒位序之后的數(shù)據(jù)重新標號,即1對應(yīng)載入buffer的3,2對應(yīng)6等。這樣做的目的是為了方便計算地址。例如,在第一階段讀的過程中,0、1、2、3通過右移2bit,即除以4可以算出地址為0,它們分別對應(yīng)4個RAM的第0地址;同理4、5、6、7除以4可以得到1,即對應(yīng)1地址,依此類推。
根據(jù)公式4的推導可知在第一階段DFT的處理中不需要乘以旋轉(zhuǎn)因子,所以旋轉(zhuǎn)因子為0,在第一階段和第二階段中需要先乘以旋轉(zhuǎn)因子,旋轉(zhuǎn)因子按照公式推導處理列出在表中。在第一階段先處理0、1、2、3四點的WFTA,然后按原位順序填入4個RAM,接著處理4、5、6、7四點的WFTA,本來應(yīng)該也按原位填入RAM中,但是注意到在第二階段需要處理0、4、8三點的WFTA,如果還按照原位填入,則0、4、8三個數(shù)據(jù)在同一個RAM中,要讀取這3個數(shù)需要3個clk,顯然不適應(yīng)pipeline的處理。所以在做完4、5、6、7四點的WFTA之后將數(shù)據(jù)旋轉(zhuǎn)再寫入4個RAM中,同樣將8、9、10、11四點的結(jié)果也旋轉(zhuǎn),如圖4所示。這樣的讀寫RAM操作可以保證pipeline的處理。
2.2.2 旋轉(zhuǎn)因子的存取
根據(jù)式(4)的推導,每一級之間需要先乘以旋轉(zhuǎn)因子,對于旋轉(zhuǎn)因子的地址計算依據(jù)式(4)的推導。由于要實現(xiàn)35種可配置模式的DFT設(shè)計,所以在實現(xiàn)時要盡可能地考慮旋轉(zhuǎn)因子的共享存儲,從而盡可能地減少存儲這些旋轉(zhuǎn)因子的ROM大小。
一般做法是將N點的旋轉(zhuǎn)因子全部存儲,然后根據(jù)算出來的nk乘積來查找對應(yīng)的旋轉(zhuǎn)因子,這樣35中模式需要很多的ROM地址來存儲。這里將具有2的冪次方關(guān)系的旋轉(zhuǎn)因子共用,如12、24、48…768點DFT的旋轉(zhuǎn)因子共用,12點的旋轉(zhuǎn)因子是24點的一部分,24點的是48點的一部分等,這樣就只需要存儲具有兩的冪次方關(guān)系的DFT點數(shù)的最大那個點768點,又由于旋轉(zhuǎn)因子自身的對稱性,只存儲最大點數(shù)的1/8就可以了,其他部分通過對稱性來查找。具體實現(xiàn)步驟如下:
(1)根據(jù)2的冪次方關(guān)系特性,將35種模式的DFT旋轉(zhuǎn)因子分成10組,并存儲這10組中最大的點的八分之一構(gòu)成一個ROM。對于N點(對應(yīng)組中最大的點),只存儲[N/8]個地址數(shù)據(jù);
(2)對于計算出的旋轉(zhuǎn)因子地址K,根據(jù)它所處的DFT模式,選擇它所屬的組,10組分別用{R0,R1,R2,…,R9}表示;
(3)如果K在R5,則R0+R1+R2+R3+R4為它的偏移地址offset;
(4)12點的DFT需要用此組中最大的768點ROM表來找數(shù),則地址K有可能是[0,…,11]×768/12中的一個作為有效地址eff_dft_addr;
(5)對于算出的eff_dft_addr,根據(jù)對[N×1/8],…,[N×7/8]的比較找出它處于768點中的哪個位置(此處N為768),即哪個1/8象限;
(6)找出所處的象限后,再找出其在第一個1/8對稱的位置值dft_8_addr,計算出dft_addr=offset+dft_8_addr,然后在ROM表中找出對應(yīng)的值,再根據(jù)對稱性還原其原來的所屬象限的值。如圖5所示,展示一個點的查找方式。通過查找A″的值來得到A的值。
2.2.3 WFTA的運算單元
WFTA算法對2、3、4、5、7、8、9、16等小N點有較快速處理能力,它將小N點DFT轉(zhuǎn)換為循環(huán)卷積,利用多項式理論使卷積計算盡可能減少乘法。
2.2.4 塊浮點的數(shù)據(jù)處理
定點運算的特點是速度快但動態(tài)范圍小。浮點運算的特點則是動態(tài)范圍大但占用資源大。塊浮點具有兩種運算的優(yōu)點,是兩種運算的折中,讓一組數(shù)具有共同的階碼,這個階碼是同組數(shù)中最大的那個數(shù)的階碼,簡化系統(tǒng)資源提高運算的精度[6]。
如表1所示,因為每次WFTA運算后都有數(shù)據(jù)位寬的擴展,本結(jié)構(gòu)具有3bit的擴展。為保持輸入wfta_top的模塊數(shù)據(jù)始終為18bit,這里用塊浮點動態(tài)截取的方法對每一級的WFTA結(jié)果進行處理,動態(tài)截取的位寬決定下一級的數(shù)據(jù)寬度,同時循環(huán)累加每個階段的階碼,在數(shù)據(jù)輸出時進行還原操作。
3 仿真綜合
圖7所示為12點DFT的仿真圖形,dft模式是第一種,首先data_in_vld為高時開始數(shù)據(jù)輸入,然后用12個clk將數(shù)據(jù)讀入4個RAM,之后計算第一級RAM讀取地址將數(shù)據(jù)讀出,處理3次4點的DFT,處理后將數(shù)據(jù)寫入RAM,需要3個clk;再后讀出數(shù)據(jù)做4次3點的DFT,處理后將數(shù)據(jù)寫入RAM,需4個clk;最后將數(shù)據(jù)讀出做壓縮還原處理,data_out_vld為高后pipeline出數(shù),需要12個clk。理論上需要31個clk,但是在處理中需要處理與其他模式的共享,還要有打拍延時等操作,實際用掉98個clk。120點的DFT實際用502個clk,理論上是120×2+30+30+24+40=364個clk,說明處理的點數(shù)越多冗余clk比例越小。
使用Stratix III EP3SL340F1517I3芯片,運用Quartus II綜合后的結(jié)果為:7824個組合ALUT,0個內(nèi)存ALUT,8699個邏輯寄存器,可達到時鐘124.64MHz,滿足LTE系統(tǒng)時鐘122.88MHz的要求。
文章在介紹LTE上行SC_FDMA的基礎(chǔ)上,對35種模式的DFT預(yù)編碼進行算法分析,提出并用FPGA實現(xiàn)了一種高速可配置的方案。文中對數(shù)據(jù)存儲、WFTA運算單元和塊浮點處理進行簡單表述,根據(jù)旋轉(zhuǎn)因子特性,詳細介紹了旋轉(zhuǎn)因子的優(yōu)化,大大降低了35種模式旋轉(zhuǎn)因子的存儲大小。最后給出的仿真綜合結(jié)果表明該方案具有較好的性能。
作者:劉少雄 林平分 來源:《微型機與應(yīng)用》2011年12期