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