陳洋 石晶林 劉攀 王磊
(*中國科學(xué)院計(jì)算技術(shù)研究所移動(dòng)計(jì)算與新型終端北京市重點(diǎn)實(shí)驗(yàn)室 北京100190)
(**中國科學(xué)院大學(xué) 北京 100049)
(***北京中科晶上科技股份有限公司 北京 100190)
近年來,隨著移動(dòng)互聯(lián)網(wǎng)、物聯(lián)網(wǎng)等應(yīng)用的蓬勃發(fā)展,對(duì)于高吞吐率、低時(shí)延、高穩(wěn)定性的移動(dòng)通信系統(tǒng)的需求不斷增加[1-2],第5 代移動(dòng)通信系統(tǒng)(5G)因此受到了廣泛的關(guān)注。國際電信聯(lián)盟(International Telecommunication Union,ITU)在2015 年9 月定義了5G 的3 大應(yīng)用場景:增強(qiáng)型移動(dòng)寬帶(enhanced mobile broadband,eMBB)、超可靠的低延遲通信(ultra-reliable and low-latency communication,URLLC)和大規(guī)模機(jī)器通信(massive machine type of communication,mMTC)[3]。這對(duì)數(shù)量最多、使用場景最復(fù)雜、靠電池供電的終端設(shè)備提出了較高的要求。5G 終端基帶處理芯片的研究,成為學(xué)術(shù)界和工業(yè)界的熱門方向之一。與LTE(long-term evaluation)和4G 一樣,5G 通信系統(tǒng)采用了正交頻分復(fù)用(orthogonal frequency-division multiplexing,OFDM)技術(shù)來實(shí)現(xiàn)高效的多載波通信[4]??焖俑道锶~變換(fast Fourier transfer,FFT)是數(shù)字信號(hào)處理領(lǐng)域重要工具,也是OFDM 系統(tǒng)物理層中的關(guān)鍵算法,被用于5G 信號(hào)由時(shí)域到頻域的轉(zhuǎn)換以及信道均衡。設(shè)計(jì)一個(gè)高性能、低功耗、低面積的FFT 加速器是5G 終端基帶芯片設(shè)計(jì)的關(guān)鍵工作之一。
過去幾十年相關(guān)研究提出了許多FFT 算法。常見的FFT 實(shí)現(xiàn)算法有:基-2n算法[5-6],如基-2、基-4、基-8;非2 的冪次混合基算法[7-8],如基-3、基-5等。基-2n算法因?yàn)榫哂袑?duì)稱性的特點(diǎn),在實(shí)現(xiàn)上具有較低的復(fù)雜度,且在芯片的布局布線、時(shí)序收斂上有優(yōu)勢。非2 的冪次混合基算法具有較高的靈活性,主要用于特殊點(diǎn)數(shù)FFT 處理,如LTE 上行預(yù)編碼要求支持12 的倍數(shù)點(diǎn)的離散傅里葉(discrete fast Fourier transfer,DFT)處理。根據(jù)4G 和5G 標(biāo)準(zhǔn)協(xié)議,OFDM 調(diào)制解調(diào)僅需支持128 點(diǎn)至4096 點(diǎn)FFT/IFFT 即可[4]。因此,采用基-2n來實(shí)現(xiàn)5G 基帶FFT 加速器成為首選。
FFT 的實(shí)現(xiàn)結(jié)構(gòu)可以分為2 大類:基于流水線結(jié)構(gòu)[9]和基于存儲(chǔ)結(jié)構(gòu)[6-8]?;诹魉€結(jié)構(gòu)的FFT 加速器具有較高的吞吐率,但其結(jié)構(gòu)復(fù)雜、面積和功耗較高,不適合在終端處理芯片中使用?;诖鎯?chǔ)結(jié)構(gòu)的FFT 加速器的內(nèi)部結(jié)構(gòu)相對(duì)簡單,其吞吐率與其內(nèi)部的蝶形處理單元數(shù)量以及內(nèi)存訪問帶寬直接相關(guān),具有較高的靈活性。基于存儲(chǔ)結(jié)構(gòu)的FFT 加速器,需要解決訪存地址沖突問題,以滿足5G 終端基帶處理高吞吐率連續(xù)處理的要求。為此,多種訪存沖突解決方案被提出[10-11]。但在具體的FFT 加速器設(shè)計(jì)實(shí)現(xiàn)時(shí),因?yàn)檎w架構(gòu)的不同,這些方案并不一定能夠直接使用。
在通信系統(tǒng)中,信號(hào)的量化通常采用定點(diǎn)表示法和浮點(diǎn)表示法。定點(diǎn)表示法在硬件實(shí)現(xiàn)上較簡單,但由于表示的有效位有限,存在量化誤差。浮點(diǎn)表示法量化誤差較小,但其硬件實(shí)現(xiàn)較復(fù)雜,面積和功耗相對(duì)較高。為了均衡量化誤差與硬件復(fù)雜度,塊浮點(diǎn)(block floating point,BFP)技術(shù)被提出。多個(gè)FFT 設(shè)計(jì)中采用了塊浮點(diǎn)表示法[12-13],它們以近似定點(diǎn)表示的硬件復(fù)雜度,獲得了較高的信噪比(signal-to-noise ratio,SNR)或量化信噪比(quantized signal-to-noise ratio,SQNR)。
雖然采用塊浮點(diǎn)技術(shù)可以減少量化誤差,但在整個(gè)FFT 處理過程中,還存在計(jì)算舍入誤差,影響FFT 加速器整體性能。文獻(xiàn)[14]建立了誤差傳播模型,并分別推導(dǎo)了定點(diǎn)和塊浮點(diǎn)表示法中FFT 計(jì)算的精確誤差表達(dá)式和誤差方差。該文獻(xiàn)還發(fā)現(xiàn)一些舍入誤差在不同階段是相互關(guān)聯(lián)的,因此合理地處理舍入誤差有助于提高FFT 的整體性能。
為了滿足5G 終端基帶處理要求,本文設(shè)計(jì)了一種高精度、低復(fù)雜度的FFT 加速器。其特點(diǎn)如下:
(1) 算法上采用基-2 的蝶形運(yùn)算單元(Radix-2)作為基礎(chǔ)處理單元,8 個(gè)Radix-2 并行處理,結(jié)構(gòu)簡單易于實(shí)現(xiàn)。實(shí)驗(yàn)結(jié)果表明,其最高工作頻率、硅面積和功耗與參考方案相比,都處于較好的水平。
(2) 設(shè)計(jì)了一種逐級(jí)迭代、動(dòng)態(tài)調(diào)整共享指數(shù)的塊浮點(diǎn)技術(shù),有效減少了定點(diǎn)系統(tǒng)FFT 計(jì)算過程的量化誤差,并創(chuàng)新地引入“銀行家舍入規(guī)則”處理BFP 尾數(shù)計(jì)算過程中的舍入誤差,整體SQNR 超過75 dB,為5G 物理層鏈路設(shè)計(jì)提供了足夠的冗余空間。
(3) 采用基于存儲(chǔ)的結(jié)構(gòu),并提出了一種FFT各階段之間無地址沖突的順序訪存方案。滿足5G基帶高吞吐、持續(xù)流處理要求。
本文的組織結(jié)構(gòu)如下。第1 節(jié)介紹本文使用的相關(guān)算法原理;第2 節(jié)介紹本文提出的FFT 加速器架構(gòu)設(shè)計(jì)及主要模塊設(shè)計(jì);第3 節(jié)介紹實(shí)驗(yàn)設(shè)計(jì)及實(shí)驗(yàn)結(jié)果,并與參考方案做了對(duì)比和分析;第4 節(jié)給出了本文的結(jié)論。
傅里葉變換實(shí)現(xiàn)了數(shù)字信號(hào)從時(shí)域到頻域的轉(zhuǎn)換。有限N點(diǎn)離散信號(hào)的傅里葉變換可表示為[15]
其中,x[n] 和X[k] 分別為信號(hào)的時(shí)域函數(shù)和頻域函數(shù),=e-j2πn/N。
采用均值標(biāo)準(zhǔn)差將傅里葉變換前后能量進(jìn)行歸一化后,DFT 可以表示為
本文FFT 加速器采用按時(shí)間抽取算法(decimation-in-time,DIT)的基-2 蝶形運(yùn)算。該運(yùn)算可用式(3)[15]表示。
其中,X1(k)、X2(k) 分別是N點(diǎn)離散信號(hào)x(k) 的奇采樣點(diǎn)DFT 和偶采樣點(diǎn)的DFT;X(k)、Y(k)=X(k+n/2) 為前N/2 點(diǎn)DFT 和后N/2 點(diǎn)DFT,兩者之和為完整的N點(diǎn)FFT 輸出,即式(1)中的X[k]=X(k)+Y(k);=e-j2πk/N為FFT 旋轉(zhuǎn)因子。
由于本文FFT 加速器的輸入輸出都為復(fù)數(shù),單次(第k次)基-2 計(jì)算時(shí),式(3)中的每個(gè)變量用復(fù)數(shù)可表示為式(4)。
將式(4)代入式(3)計(jì)算可得單次基-2 計(jì)算的輸出值(X、Y)的4 個(gè)分量(Xr、Xi、Yr、Yi) 與輸入值(X1、X2、WN) 的幾個(gè)分量(ar、ar、br、bi、WNr、WNi) 之間的關(guān)系,如式(5)所示。
本文FFT 基-2 蝶形運(yùn)算單元,正是根據(jù)式(5)實(shí)現(xiàn),將在第2.2.1 節(jié)中做具體介紹。
為了平衡動(dòng)態(tài)范圍與硬件實(shí)現(xiàn)復(fù)雜度,塊浮點(diǎn)(BFP)表示法被提出。BFP 表示法將一組(塊)數(shù)據(jù)通過提取公共指數(shù)、再規(guī)格化后,保留各自的尾數(shù)。如圖1 所示,5 個(gè)數(shù)據(jù)組成的數(shù)據(jù)塊中,所有數(shù)據(jù)擁有一個(gè)共享指數(shù)以及各自的尾數(shù),這讓它們具有了浮點(diǎn)表示的動(dòng)態(tài)范圍。此外,BFP 表示的信號(hào)在計(jì)算過程中,共享指數(shù)無需計(jì)算,僅需將尾數(shù)進(jìn)行加法和乘法運(yùn)算,從而其硬件復(fù)雜度接近定點(diǎn)的水平。因此,塊浮點(diǎn)表示法很好地結(jié)合了定點(diǎn)與浮點(diǎn)表示法的優(yōu)點(diǎn)。
圖1 塊浮點(diǎn)表示
使用BFP 表示時(shí),共享指數(shù)如何確定是關(guān)鍵。最簡單的方法是使用當(dāng)前數(shù)據(jù)塊中絕對(duì)值最大的數(shù)的指數(shù)。這種方法的缺點(diǎn)為:當(dāng)一個(gè)塊中某個(gè)數(shù)據(jù)異常大時(shí),其他數(shù)據(jù)出現(xiàn)向下溢出的情況,導(dǎo)致量化誤差較大。為了避免該問題,本文設(shè)計(jì)的FFT 加速器采取了2 個(gè)措施。
首先,數(shù)據(jù)從外部讀入FFT 加速器,在進(jìn)行第1次Radix-2 計(jì)算前,根據(jù)FFT 的長度N對(duì)數(shù)據(jù)做了預(yù)縮小處理,降低整體信號(hào)幅度,減少溢出概率。在所有FFT 計(jì)算完成后再進(jìn)行放大,還原到原始數(shù)量級(jí)。
其次,共享指數(shù)采用逐級(jí)迭代、動(dòng)態(tài)調(diào)整方法,即在每次FFT 計(jì)算過程中,當(dāng)前階段輸入數(shù)據(jù)塊的共享指數(shù)由上一個(gè)階段計(jì)算結(jié)構(gòu)的最大絕對(duì)值數(shù)的前導(dǎo)0 個(gè)數(shù)來確定。該方法原理與文獻(xiàn)[5,6]的方法類似,但實(shí)現(xiàn)細(xì)節(jié)上有差異。本文具體實(shí)現(xiàn)與分析將在第2.2.2 節(jié)中描述。
銀行家舍入規(guī)則被納入IEEE 754 標(biāo)準(zhǔn),用于浮點(diǎn)數(shù)轉(zhuǎn)定點(diǎn)數(shù)時(shí)的舍入處理[16],也被許多常見編程語言(如Python)所采用。具體計(jì)算規(guī)則如下所述。
(1)當(dāng)舍入數(shù)小于5 則舍去;當(dāng)舍入數(shù)大于5則進(jìn)位。
(2)當(dāng)舍入數(shù)等于5 時(shí),該數(shù)位前面的數(shù)字若是奇數(shù)則進(jìn)位,若是偶數(shù)則舍掉。若該數(shù)位后面還有不為“0”的任何數(shù),則進(jìn)位。
為了進(jìn)一步提高FFT 的SQNR,本文采用了銀行家舍入規(guī)則來處理BFP 縮放過程中的數(shù)據(jù)舍入問題(將在2.2.2 中詳細(xì)說明)。
本文提出的FFT 加速器整體架構(gòu)如圖2 所示。該加速器由FFT 核心fft_core 及外圍模塊構(gòu)成。圖中主要模塊及其功能描述如表1 所示。下面,將介紹本文主要?jiǎng)?chuàng)新工作以及相關(guān)基礎(chǔ)工作。
表1 FFT 加速器模塊功能說明
圖2 FFT 加速器整體架構(gòu)
圖2 中的基-2 蝶形運(yùn)算矩陣Radix-2 Matrix是由8 個(gè)基-2 運(yùn)算單元R2_bf_0~7、縮放單元scaling、查找最大絕對(duì)值單元Fmax、前導(dǎo)零探測單元(leading zero detector,LZD)、數(shù)據(jù)壓縮compression和解壓縮decompression 組成。其中scaling、Fmax、LZD 用于實(shí)現(xiàn)塊浮點(diǎn)技術(shù);為了減少中間緩存大小,使用compression 和decompression 將2 個(gè)32 位的數(shù)據(jù)壓縮到44 位,提升存儲(chǔ)效率。
2.2.1 基-2 運(yùn)算單元
本文核心單元——基-2 運(yùn)算單元R2_bf_x,根據(jù)式(5)實(shí)現(xiàn)。其內(nèi)部邏輯如圖3 所示(虛線框Fmax模塊和LZD 模塊不屬于R2_bf_x),其中各數(shù)據(jù)通路標(biāo)明了數(shù)據(jù)位寬,主要模塊說明及具體計(jì)算過程如下。
圖3 基-2 運(yùn)算單元R2_bf_x
(1)讀取輸入數(shù)據(jù)ar、ar、br、bi和旋轉(zhuǎn)因子WNr、WNi。
(2)中間結(jié)果Xr′和Xi′計(jì)算。根據(jù)式(5)中的Xr=ar+br×WNr-bi×WNi和Xi=ai+br×WNi+bi×WNr計(jì)算而來。其中MTP 為乘法器,CSA 為加法器。為了確保計(jì)算過程不損失精度,兩者計(jì)算結(jié)果保留34 bits。
(3)中間值Yr′和Yi′計(jì)算。根據(jù)式(5)中的Yr=2ar-Xr和Yi==2ai-Xi計(jì)算而來。先通過移位得到2ar和2ai(兩者位寬17 bits),再與Xr′和Xi′相加后,得到34 bits 的中間值Yr′和Yi′ (為了確保X、Y輸出時(shí)序一致,未增加Yr′ 和Yi′ 實(shí)體寄存器,因此圖3 中未標(biāo)出)。
(4)由于Xr′、Xi′、Yr′ 和Yi′ 計(jì)算過程都是全精度保留,具有較高的精度。為了保持基-2 輸入輸出都是32 bits 位寬,最后通過Scale-Down 模塊直接舍棄尾數(shù)最后2 bits,得到32 bits 的Xr、Xi、Yr和Yi。
本文在實(shí)現(xiàn)基-2 蝶形計(jì)算單元時(shí),將乘累加運(yùn)算中的乘法器MTP 采用了Booth 乘法器實(shí)現(xiàn),并在具體電路實(shí)現(xiàn)中,將MTP 與加法器CSA 中的部分加法電路做了合并。該模塊在硬件電路復(fù)雜度較低、延時(shí)較短、面積較小,由于結(jié)構(gòu)對(duì)稱,電路綜合時(shí)時(shí)序容易收斂。
2.2.2 塊浮點(diǎn)技術(shù)實(shí)現(xiàn)
本文FFT 加速器包含8 路并行基-2 運(yùn)算單元共16 個(gè)32 bits 輸入數(shù)據(jù),因采用復(fù)數(shù)表示,每次基-2計(jì)算共有32 個(gè)16 bits 輸入。因此,FFT 內(nèi)部采用BFP 表示時(shí),每個(gè)塊為32 個(gè)16 bits 數(shù)據(jù)。在1.3 節(jié)中提到,本文采用了共享指數(shù)動(dòng)態(tài)調(diào)整方法,實(shí)現(xiàn)了SQNR 大幅提升,該方法計(jì)算過程主要體現(xiàn)在圖4中的模塊處理過程(Fmax、LZD、scaling)。在本階段基-2 計(jì)算前,利用Fmax 邏輯(圖4 中虛框)獲得上一個(gè)階段計(jì)算結(jié)果(Xr、Xi、Yr、Yi) 的絕對(duì)值最大值Max_abs。并通過前導(dǎo)零檢測單元LZD 獲得Max_abs 的小數(shù)點(diǎn)至最高有效位之間0 的個(gè)數(shù)LZ_num。然后,scaling 模塊根據(jù)LZ_num 對(duì)解壓縮后的輸入值(ar、ar、br、bi) 進(jìn)行縮放(調(diào)整共享指數(shù)基并對(duì)尾數(shù)進(jìn)行規(guī)格化),動(dòng)態(tài)調(diào)整了BFP 表示范圍。然后將BFP 表示的值輸入到當(dāng)前階段基-2 計(jì)算單元進(jìn)行計(jì)算。下一個(gè)階段以此類推。
圖4 塊浮點(diǎn)共享指數(shù)動(dòng)態(tài)調(diào)整流程
從圖4 可知,本文所提出的BFP 共享指數(shù)動(dòng)態(tài)調(diào)整過程,實(shí)際上是一種類似信號(hào)自動(dòng)增益控制過程。該過程實(shí)現(xiàn)了逐次跟蹤輸入信號(hào)強(qiáng)度,動(dòng)態(tài)選擇了BFP 表示范圍,從而減少了計(jì)算過程中的精度損失,提高了整個(gè)FFT 處理過程的SQNR。在scaling 模塊處理中,確定共享指數(shù)后,對(duì)每個(gè)數(shù)據(jù)進(jìn)行尾數(shù)計(jì)算時(shí),存在超出尾數(shù)表示范圍的問題,因此需要對(duì)最低有效位進(jìn)行舍入處理。典型的處理方式是直接丟棄末尾多余數(shù)位[5,8],雖然這在精度上損失較小,但舍入誤差的傳播與積累會(huì)影響FFT 的整體性能[14]。為了解決舍入問題,本文FFT 考慮采用合適的舍入規(guī)則,如“四舍五入”規(guī)則、“銀行家舍入”規(guī)則。通過大量實(shí)驗(yàn)仿真數(shù)據(jù),本文選擇了“銀行家舍入”規(guī)則(見3.2.1),進(jìn)一步提高了FFT 處理過程的量化信噪比。
本文另外一個(gè)創(chuàng)新點(diǎn)是在FFT 模塊內(nèi)部實(shí)現(xiàn)了一種無地址沖突訪存機(jī)制,并且計(jì)算結(jié)果的存放順序與輸入一致,滿足了5G 終端基帶處理高吞吐、連續(xù)數(shù)據(jù)處理的要求,該機(jī)制通過fft_data_ctrl、fsm_ctrl、io_buffer_ctrl 配合實(shí)現(xiàn)。狀態(tài)機(jī)控制fsm_ctrl 在2.4.1 中介紹,本節(jié)主要介紹fft_data_ctrl 和io_buffer_ctrl 的工作原理。
如圖5(左)所示,每個(gè)IO_SRAM 包含2 個(gè)組,每個(gè)組8 個(gè)bank,一共32 個(gè)bank;每個(gè)bank 大小為256 ×32 bits,每個(gè)緩存內(nèi)部bank 標(biāo)注為00~07、10~17。
圖5 輸IO_SRAM_0/1 結(jié)構(gòu)(左)SRAM_0/1 結(jié)構(gòu)(右)
如圖5(右)所示,每個(gè)SRAM 包含2 個(gè)組,每個(gè)組8 個(gè)bank,一共32 個(gè)bank;每個(gè)bank 大小為128×44 bits,每個(gè)緩存內(nèi)部bank 標(biāo)注為00~07、10~17。
為了描述本文提出的FFT 各階段無地址沖突訪存機(jī)制,下面結(jié)合圖6 介紹128 點(diǎn)FFT 各階段輸入輸出數(shù)據(jù)在2 種乒乓緩存中的讀寫(存取)規(guī)則。
圖6 FFT 計(jì)算的9 個(gè)階段
2.3.1 讀規(guī)則
(1)START:將128 點(diǎn)原始數(shù)據(jù)分成16 等份讀入IO_SRAM_0 或IO_SRAM_1 的16 個(gè)bank 里(圖6(a)中START 階段)。
(2)STAGE 1:從IO_SRAM_0 中讀取每個(gè)bank 的第1 個(gè)數(shù)(即第1 行地址a0 的16 個(gè)數(shù))作為8 個(gè)基-2 計(jì)算單元的第1 次輸入。后續(xù)依次往下取16個(gè)數(shù)做第2、3…8次Radix-2計(jì)算的輸入,結(jié)果依次存入SARM_0 每個(gè)bank 的a1~a7。
圖6 展示了128 點(diǎn)FFT 計(jì)算9 個(gè)階段(起始START、結(jié)束STOP 及7 個(gè)計(jì)算階段)的輸入輸出數(shù)據(jù)在乒乓緩存中的讀取和寫入的位置;圖中表格里的數(shù)字表示原始輸入數(shù)據(jù)塊的編號(hào),頂部標(biāo)明了階段號(hào),底部標(biāo)明了上一個(gè)階段到當(dāng)前階段2 組乒乓緩存的讀寫狀態(tài)。經(jīng)過9 個(gè)階段的計(jì)算,輸入數(shù)據(jù)塊的順序與輸出數(shù)據(jù)塊順序一致,且所有過程不因存放地址沖突而出現(xiàn)中斷的情形,實(shí)現(xiàn)了FFT 連續(xù)無沖突計(jì)算。
(3)STAGE 2:因SRAM_0的每個(gè)bank 為44 bits,解壓縮后每個(gè)單元為64 bits,即2 個(gè)32 bits數(shù)據(jù)。因此,讀1 次SRAM_0 的一行,可以得到32個(gè)數(shù)據(jù),可以做2 次Radix-2 的輸入。作完2 次Radix-2 計(jì)算后,結(jié)果數(shù)據(jù)寫入SRAM_1 中,再繼續(xù)讀SRAM_0 下一行的數(shù)據(jù)做運(yùn)算。
(4)STAGE 3 從SRAM_1 里以步驟(3)同樣的方式讀數(shù),將計(jì)算的結(jié)果存入SRAM_0 中。
(5)STAGE 4~6 讀數(shù)方式同STAGE 2~3。
(6)最后一級(jí)STAGE 12 使用“亂序”讀數(shù),將“逆序”的FFT 結(jié)果以“正序”輸出,這是FFT 的基本操作。對(duì)于N=2n的FFT,m的“亂序”規(guī)則如式(6)[8]所示。
本例子中N=128,n=7,采用奇數(shù)方式。
2.3.2 寫規(guī)則
(1)STAGE 1 的前2 次計(jì)算的結(jié)果放在SRAM_0的第1 行。為了表示方便,采用00-03 ?[00-03]表示第00-03 序列結(jié)果,放在SRAM_0 的bank[00-03]。存放規(guī)則:第1 次計(jì)算,00-03 ?[00-03];04-07 ?[10-13];第2 次計(jì)算10-13?[04-07];14-17?[14-17]。按照以上規(guī)則,每計(jì)算完2 次Radix-2,存儲(chǔ)1次。
(2)STAGE 2 的前2 次計(jì)算的結(jié)果放在SRAM_1的第1 行。存放規(guī)則:第1 次計(jì)算,00-01?[00-01],02-03?[10-11],04-05?[02-03],06-07?[12-13];第2 次計(jì)算,10-11?[04-05],12-13?[14-15],14-15=[06-07],16-17?[16-17]。按照以上規(guī)則,每計(jì)算完2 次Radix-2,存儲(chǔ)1 次。
(3)STAGE 3 的前2 次計(jì)算的結(jié)果放在SRAM_0的第1 行。存放規(guī)則:第1 次計(jì)算,00?[00],01?[10],02?[01],03?[11],04?[02],05?[12],06?[03],07?[12];第2 次計(jì)算,10?[04],11?[14],12?[05],13?[15],14?[06],15=[16],16?[07],17?[17]。按照以上規(guī)則,每計(jì)算完2次Radix-2,存儲(chǔ)1 次。
(4)STAGE 4 的前2 次計(jì)算的結(jié)果放在SRAM_1的第1 行。
第1 次計(jì)算,第00 序列結(jié)果的低32 bits 壓縮后存入SRAM[00]的低22 bits(簡化表示為00[31:0]?00[21:0]),01[31:0]?00[43:22],02[31:0]?01[21:0],03[31:0]?01[43:22],04[31:0]?02[21:0],05[31:0]?02[43:22],06[31:0]?03[21:0],07[31:0]?03[43:22];00[63:32]?04[21:0],01[63:32]?04[43:22],02[63:32]?05[21:0],03[63:32]?05[43:22],04[63:32]?06[21:0],05[63:32]?06[43:22],06[63:32]?07[21:0],07[63:32]?07[43:22]。
第2 次計(jì)算,10[31:0] ?10[21:0],11[31:0]?10[43:22],12[31:0]?11[21:0],13[31:0]?11[43:22],14[31:0]?12[21:0],15[31:0]?12[43:22],16[31:0]?13[21:0],17[31:0]?13[43:22];10[63:32]?14[21:0],11[63:32]?14[43:22],12[63:32]?15[21:0],13[63:32]?15[43:22],14[63:32]?16[21:0],15[63:32]?16[43:22],16[63:32]?17[21:0],17[63:32]?17[43:22]。
(5) 而STAGE 5~6 結(jié)果數(shù)據(jù)存放規(guī)則同STAGE 4,唯一不同的是存放的SRAM_x交替。
(6)STAGE 12 計(jì)算后的結(jié)果數(shù)據(jù)放進(jìn)IO_SRAM_x里。如STAGE12 第1 次Radix-2 計(jì)算的前8 個(gè)數(shù)據(jù)data0 依次放進(jìn)IO_SRAM_0[00-07]的第1 行;后8 個(gè)數(shù)據(jù)data1 依次放進(jìn)IO_SRAM_1[10-17]第1 行。第2 次Radix-2計(jì)算的數(shù)據(jù)放進(jìn)IO_SRAM_0[00-07]和IO_SRAM_0[10-17]第2行,以此類推。
采用上述讀寫規(guī)則,128 點(diǎn)FFT 輸入數(shù)據(jù)塊的順序與輸出數(shù)據(jù)塊順序一致(見圖6(a)與(c)中IO_SRAM_0、IO_SRAM_1 數(shù)據(jù)塊的順序),且整個(gè)FFT 處理過程不因存放地址沖突而中斷。由此可知,該FFT 加速器能夠進(jìn)行無中斷的持續(xù)數(shù)據(jù)流處理,能夠滿足5G 基帶處理高吞吐、連續(xù)數(shù)據(jù)處理的要求。
2.4.1 狀態(tài)機(jī)控制單元
由5G 物理層協(xié)議可知,FFT 計(jì)算長度N支持6中點(diǎn)數(shù)(128、256、512、1024、2048、4096),最小支持N=128 點(diǎn),需要7 次Radix-2 計(jì)算;最大支持N=4096 點(diǎn),需要12 次Radix-2 蝶形運(yùn)算。因此FFT 加速器狀態(tài)機(jī)除了IDEL 狀態(tài)外,需要有12 個(gè)計(jì)算狀態(tài)。本文FFT 的前6 個(gè)計(jì)算狀態(tài)(STAGE 1~6)以及最后1 個(gè)(STAGE 12)是必經(jīng)狀態(tài),其他計(jì)算狀態(tài)(STAGE 7~11)根據(jù)不同的點(diǎn)數(shù)而定。FFT 的狀態(tài)機(jī)如圖7 所示。
圖7 FFT 狀態(tài)轉(zhuǎn)換圖
2.4.2 旋轉(zhuǎn)因子控制單元
FFT旋轉(zhuǎn)因子WN可以通過Cordic算法動(dòng)態(tài)計(jì)算獲得[7]。該方法整體設(shè)計(jì)存儲(chǔ)單元較少,但硬件實(shí)現(xiàn)較為復(fù)雜,且很難做到一個(gè)時(shí)鐘周期計(jì)算出旋轉(zhuǎn)因子。
通過查表方式來獲得旋轉(zhuǎn)因子是一種高效的方式,缺點(diǎn)是需要用額外的ROM 或RAM 存儲(chǔ)事先計(jì)算好的旋轉(zhuǎn)因子。為了減少ROM 大小,多種查表方案[17-18]被提出,最小的方案可以做到N/8(其中N為支持最大的FFT 點(diǎn)數(shù)),缺點(diǎn)是需要至少2 個(gè)周期才能獲得需要的旋轉(zhuǎn)因子。
本文從硬件復(fù)雜度及旋轉(zhuǎn)因子產(chǎn)生的速度2 個(gè)角度綜合考慮,并未采用Cordic 動(dòng)態(tài)生成方式和多ROM 多周期查表方式。而是利用旋轉(zhuǎn)因子的對(duì)稱性和共軛性,采用ROM Size 為N/4 的查表方式實(shí)現(xiàn)。TW_ROM 大小為1024 ×32 bits,旋轉(zhuǎn)因子控制單元fft_tw_ctrl 單個(gè)時(shí)鐘周期即可完成所需旋轉(zhuǎn)因子的獲取。
2.4.3 歸一化輸出單元
歸一化輸出單元包含out_scaling 和out_sqrt 2部分。在Radix-2 計(jì)算過程中,為了防止數(shù)據(jù)溢出,對(duì)數(shù)據(jù)做了預(yù)縮小處理。在最后完成計(jì)算時(shí),out_scaling 根據(jù)FFT 的點(diǎn)數(shù)計(jì)算出需要縮放的倍數(shù),還原到原始數(shù)量級(jí)。
為了進(jìn)一步評(píng)估本文提出的FFT 加速器的實(shí)際效果,本文在EDA 平臺(tái)上,搭建了仿真測試環(huán)境。從SQNR 性能、功耗、面積、最高工作頻率等方面綜合評(píng)估該加速器。
對(duì)照組:為了評(píng)估本文FFT 加速器的性能,特別是SQNR 指標(biāo),設(shè)計(jì)了2 組對(duì)照組。第1 組由采用不同舍入方法處理BFP scaling 的舍入誤差組成;第2 組由本文設(shè)計(jì)與本課題組舊版本4G 芯片中的FFT 設(shè)計(jì)組成。
實(shí)現(xiàn):采用C 語言實(shí)現(xiàn)了CModel;采用Verilog HDL 語言完成RTL 級(jí)實(shí)現(xiàn)。
實(shí)驗(yàn)數(shù)據(jù): Matlab 產(chǎn)生的隨機(jī)數(shù)據(jù)6000 組(6種點(diǎn)數(shù)各1000 組);實(shí)驗(yàn)室軟件無線電SDR 原型平臺(tái)采集數(shù)據(jù)600 組(6 種點(diǎn)數(shù)各100 組)。
C 語言環(huán)境:Windows 10+Visual Studio 2010,用于CModel 編譯和運(yùn)行。
EDA 平臺(tái)環(huán)境:采用Synopsys DC 綜合工具在TSMC 28 nm 工藝庫下完成綜合;使用Synopsys VCS工具進(jìn)行仿真驗(yàn)證;使用Synopsys PrimeTime PX 進(jìn)行功耗評(píng)估。
3.2.1 整體SQNR 性能結(jié)果及分析
通過CModel 及RTL 仿真獲得的結(jié)果數(shù)據(jù)算出SQNR 數(shù)據(jù)。第1 組實(shí)驗(yàn)結(jié)果對(duì)比如圖8 所示。采用銀行家舍入方案的SQNR 比四舍五入方案和直接舍棄方案都要好,且點(diǎn)數(shù)越大,差異越大。
圖8 采用不同舍入方案的SQNR 比較
第2 組實(shí)驗(yàn)中,“舊4G 版本”為本課題組4G 終端基帶芯片的FFT 方案。該方案特點(diǎn)有:蝶形計(jì)算單元采用基-4 與基-2 混合架構(gòu);使用16 bits 定點(diǎn);在計(jì)算過程中通過位擴(kuò)展來提高動(dòng)態(tài)范圍,減少量化誤差,并未采用BFP 技術(shù)。文獻(xiàn)[8]的FFT 設(shè)計(jì)是所找到的參考文獻(xiàn)中各方面性能指標(biāo)都非常優(yōu)秀的方案。該方案特點(diǎn)有:蝶形計(jì)算單元采用基-4 和基-2 混合方案;采用了BFP 技術(shù)方案,具有較高的SQNR。此外,文獻(xiàn)[6]設(shè)計(jì)了復(fù)雜的BFP 方案,SQNR 較好,但未給出N=128~4096 點(diǎn)的數(shù)據(jù),且該設(shè)計(jì)主要針對(duì)高點(diǎn)數(shù)FFT,實(shí)現(xiàn)非常復(fù)雜,不適用于5G 終端基帶處理。
第2 組實(shí)驗(yàn)結(jié)果如圖9 所示。本文提出的加速器所有點(diǎn)數(shù)平均SQNR 超過75 dB,且整體效果比較平穩(wěn)。比未采用BFP 的舊4G 版本高8~15 dB。相比于性能較好且同樣采用BFP 實(shí)現(xiàn)的文獻(xiàn)[8],本文在2048 點(diǎn)、4096 點(diǎn)處理上有超過3 dB 的優(yōu)勢。文獻(xiàn)[8]在BFP 處理公共指數(shù)和尾數(shù)時(shí),采用了直接移位舍棄的方式處理有效數(shù)位,其結(jié)果與第1 組實(shí)驗(yàn)中“直接舍棄方案”結(jié)果基本一致。這也驗(yàn)證了采用合理的方式處理舍入問題的有效性。
圖9 不同F(xiàn)FT 加速器的SQNR 比較
3.2.2 面積功耗分析
本文提出的FFT 加速器在TSMC 28 nm 工藝下綜合面積為0.193 mm2,最高工作頻率≥600 MHz,4096 點(diǎn)FFT 計(jì)算平均功耗16.3 mW。表2 列舉了本文設(shè)計(jì)與幾個(gè)不同的FFT 加速器的相關(guān)參數(shù)比較。
表2 不同F(xiàn)FT 加速器綜合比較
硅面積方面,相比于舊4G 版本設(shè)計(jì),本文有21.2%的提升。這歸功于本文設(shè)計(jì)在核心計(jì)算單元、Memory 大小上都有大幅的優(yōu)化。與其他文獻(xiàn)設(shè)計(jì)相比,經(jīng)過歸一化換算后,本文雖然比僅有核心面積的文獻(xiàn)[8]差一點(diǎn),但與文獻(xiàn)[6,7]相比,仍然具有優(yōu)勢。
最高工作頻率方面,因主要計(jì)算單元由“基-4/2混合基”改成了8 路“基-2”,且在內(nèi)部乘法和加法電路上的優(yōu)化,本文方案相比于“舊4G 版本”有20%的提升。在不考慮工藝制程的情況下,最高工作頻率僅僅次于文獻(xiàn)[8],由于本文設(shè)計(jì)已經(jīng)滿足了5G 終端基帶處理要求,因此并未在工作頻率上做進(jìn)一步優(yōu)化。功耗方面,本文所提方案比舊4G版本提升13.3%。在不考慮工藝制程的情況下,本文加速器功耗比文獻(xiàn)[6-8]都要低,這為5G 終端基帶處理芯片低功耗設(shè)計(jì)預(yù)留了空間。
本文FFT 加速器方案已集成到中科院計(jì)算所工業(yè)5G 終端基帶芯片DX-T 501 中,并在TSMC 28 nm工藝下完成流片。后續(xù)的硅后測試及終端應(yīng)用結(jié)果表明,該設(shè)計(jì)滿足5G(3GPP R15)協(xié)議及應(yīng)用要求。
本文提出一種基于內(nèi)存架構(gòu)的8 路并行基-2FFT 加速器的方案。該方案采用了改進(jìn)的塊浮點(diǎn)技術(shù)提高了量化信噪比。同時(shí)利用“銀行家舍入規(guī)則”處理BFP 共享指數(shù)動(dòng)態(tài)調(diào)整過程中的舍入誤差,進(jìn)一步減少了整體量化誤差。另外,本文還實(shí)現(xiàn)了FFT 各級(jí)間無地址沖突內(nèi)存訪問機(jī)制,提供持續(xù)的FFT 數(shù)據(jù)流處理能力。
實(shí)驗(yàn)結(jié)果表明,該FFT 加速器128 點(diǎn)至4096 點(diǎn)FFT 處理SQNR 都超過75 dB。在TSMC 28 nm 工藝庫下綜合結(jié)果顯示,總面積為0.193 mm2,最高支持600 MHz 時(shí)鐘頻率,計(jì)算4096 點(diǎn)平均功耗為16.3 mW。相比于現(xiàn)有的設(shè)計(jì),該方案具有高精度、低復(fù)雜度、低面積和低功耗的特點(diǎn),為5G 終端物理層鏈路設(shè)計(jì)提供了充足的信噪比余量。