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