面向5G 终端基带处理的高量化信噪比FFT 加速器设计①
2023-10-28陈洋石晶林刘攀王磊
陈洋 石晶林 刘攀 王磊
(*中国科学院计算技术研究所移动计算与新型终端北京市重点实验室 北京100190)
(**中国科学院大学 北京 100049)
(***北京中科晶上科技股份有限公司 北京 100190)
0 引言
近年来,随着移动互联网、物联网等应用的蓬勃发展,对于高吞吐率、低时延、高稳定性的移动通信系统的需求不断增加[1-2],第5 代移动通信系统(5G)因此受到了广泛的关注。国际电信联盟(International Telecommunication Union,ITU)在2015 年9 月定义了5G 的3 大应用场景:增强型移动宽带(enhanced mobile broadband,eMBB)、超可靠的低延迟通信(ultra-reliable and low-latency communication,URLLC)和大规模机器通信(massive machine type of communication,mMTC)[3]。这对数量最多、使用场景最复杂、靠电池供电的终端设备提出了较高的要求。5G 终端基带处理芯片的研究,成为学术界和工业界的热门方向之一。与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算法因为具有对称性的特点,在实现上具有较低的复杂度,且在芯片的布局布线、时序收敛上有优势。非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 加速器具有较高的吞吐率,但其结构复杂、面积和功耗较高,不适合在终端处理芯片中使用。基于存储结构的FFT 加速器的内部结构相对简单,其吞吐率与其内部的蝶形处理单元数量以及内存访问带宽直接相关,具有较高的灵活性。基于存储结构的FFT 加速器,需要解决访存地址冲突问题,以满足5G 终端基带处理高吞吐率连续处理的要求。为此,多种访存冲突解决方案被提出[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 计算的精确误差表达式和误差方差。该文献还发现一些舍入误差在不同阶段是相互关联的,因此合理地处理舍入误差有助于提高FFT 的整体性能。
为了满足5G 终端基带处理要求,本文设计了一种高精度、低复杂度的FFT 加速器。其特点如下:
(1) 算法上采用基-2 的蝶形运算单元(Radix-2)作为基础处理单元,8 个Radix-2 并行处理,结构简单易于实现。实验结果表明,其最高工作频率、硅面积和功耗与参考方案相比,都处于较好的水平。
(2) 设计了一种逐级迭代、动态调整共享指数的块浮点技术,有效减少了定点系统FFT 计算过程的量化误差,并创新地引入“银行家舍入规则”处理BFP 尾数计算过程中的舍入误差,整体SQNR 超过75 dB,为5G 物理层链路设计提供了足够的冗余空间。
(3) 采用基于存储的结构,并提出了一种FFT各阶段之间无地址冲突的顺序访存方案。满足5G基带高吞吐、持续流处理要求。
本文的组织结构如下。第1 节介绍本文使用的相关算法原理;第2 节介绍本文提出的FFT 加速器架构设计及主要模块设计;第3 节介绍实验设计及实验结果,并与参考方案做了对比和分析;第4 节给出了本文的结论。
1 算法原理
1.1 离散傅里叶变换
傅里叶变换实现了数字信号从时域到频域的转换。有限N点离散信号的傅里叶变换可表示为[15]
其中,x[n] 和X[k] 分别为信号的时域函数和频域函数,=e-j2πn/N。
采用均值标准差将傅里叶变换前后能量进行归一化后,DFT 可以表示为
1.2 基-2 的FFT 蝶形运算
本文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 节中做具体介绍。
1.3 块浮点BFP
为了平衡动态范围与硬件实现复杂度,块浮点(BFP)表示法被提出。BFP 表示法将一组(块)数据通过提取公共指数、再规格化后,保留各自的尾数。如图1 所示,5 个数据组成的数据块中,所有数据拥有一个共享指数以及各自的尾数,这让它们具有了浮点表示的动态范围。此外,BFP 表示的信号在计算过程中,共享指数无需计算,仅需将尾数进行加法和乘法运算,从而其硬件复杂度接近定点的水平。因此,块浮点表示法很好地结合了定点与浮点表示法的优点。
图1 块浮点表示
使用BFP 表示时,共享指数如何确定是关键。最简单的方法是使用当前数据块中绝对值最大的数的指数。这种方法的缺点为:当一个块中某个数据异常大时,其他数据出现向下溢出的情况,导致量化误差较大。为了避免该问题,本文设计的FFT 加速器采取了2 个措施。
首先,数据从外部读入FFT 加速器,在进行第1次Radix-2 计算前,根据FFT 的长度N对数据做了预缩小处理,降低整体信号幅度,减少溢出概率。在所有FFT 计算完成后再进行放大,还原到原始数量级。
其次,共享指数采用逐级迭代、动态调整方法,即在每次FFT 计算过程中,当前阶段输入数据块的共享指数由上一个阶段计算结构的最大绝对值数的前导0 个数来确定。该方法原理与文献[5,6]的方法类似,但实现细节上有差异。本文具体实现与分析将在第2.2.2 节中描述。
1.4 银行家舍入规则
银行家舍入规则被纳入IEEE 754 标准,用于浮点数转定点数时的舍入处理[16],也被许多常见编程语言(如Python)所采用。具体计算规则如下所述。
(1)当舍入数小于5 则舍去;当舍入数大于5则进位。
(2)当舍入数等于5 时,该数位前面的数字若是奇数则进位,若是偶数则舍掉。若该数位后面还有不为“0”的任何数,则进位。
为了进一步提高FFT 的SQNR,本文采用了银行家舍入规则来处理BFP 缩放过程中的数据舍入问题(将在2.2.2 中详细说明)。
2 架构设计
2.1 整体架构
本文提出的FFT 加速器整体架构如图2 所示。该加速器由FFT 核心fft_core 及外围模块构成。图中主要模块及其功能描述如表1 所示。下面,将介绍本文主要创新工作以及相关基础工作。
表1 FFT 加速器模块功能说明
图2 FFT 加速器整体架构
2.2 基-2 蝶形运算矩阵
图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 节中提到,本文采用了共享指数动态调整方法,实现了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) 进行缩放(调整共享指数基并对尾数进行规格化),动态调整了BFP 表示范围。然后将BFP 表示的值输入到当前阶段基-2 计算单元进行计算。下一个阶段以此类推。
图4 块浮点共享指数动态调整流程
从图4 可知,本文所提出的BFP 共享指数动态调整过程,实际上是一种类似信号自动增益控制过程。该过程实现了逐次跟踪输入信号强度,动态选择了BFP 表示范围,从而减少了计算过程中的精度损失,提高了整个FFT 处理过程的SQNR。在scaling 模块处理中,确定共享指数后,对每个数据进行尾数计算时,存在超出尾数表示范围的问题,因此需要对最低有效位进行舍入处理。典型的处理方式是直接丢弃末尾多余数位[5,8],虽然这在精度上损失较小,但舍入误差的传播与积累会影响FFT 的整体性能[14]。为了解决舍入问题,本文FFT 考虑采用合适的舍入规则,如“四舍五入”规则、“银行家舍入”规则。通过大量实验仿真数据,本文选择了“银行家舍入”规则(见3.2.1),进一步提高了FFT 处理过程的量化信噪比。
2.3 无地址冲突的连续访存机制
本文另外一个创新点是在FFT 模块内部实现了一种无地址冲突访存机制,并且计算结果的存放顺序与输入一致,满足了5G 终端基带处理高吞吐、连续数据处理的要求,该机制通过fft_data_ctrl、fsm_ctrl、io_buffer_ctrl 配合实现。状态机控制fsm_ctrl 在2.4.1 中介绍,本节主要介绍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 种乒乓缓存中的读写(存取)规则。
图6 FFT 计算的9 个阶段
2.3.1 读规则
(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 次输入。后续依次往下取16个数做第2、3…8次Radix-2计算的输入,结果依次存入SARM_0 每个bank 的a1~a7。
图6 展示了128 点FFT 计算9 个阶段(起始START、结束STOP 及7 个计算阶段)的输入输出数据在乒乓缓存中的读取和写入的位置;图中表格里的数字表示原始输入数据块的编号,顶部标明了阶段号,底部标明了上一个阶段到当前阶段2 组乒乓缓存的读写状态。经过9 个阶段的计算,输入数据块的顺序与输出数据块顺序一致,且所有过程不因存放地址冲突而出现中断的情形,实现了FFT 连续无冲突计算。
(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 中,再继续读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的“乱序”规则如式(6)[8]所示。
本例子中N=128,n=7,采用奇数方式。
2.3.2 写规则
(1)STAGE 1 的前2 次计算的结果放在SRAM_0的第1 行。为了表示方便,采用00-03 ⇒[00-03]表示第00-03 序列结果,放在SRAM_0 的bank[00-03]。存放规则:第1 次计算,00-03 ⇒[00-03];04-07 ⇒[10-13];第2 次计算10-13⇒[04-07];14-17⇒[14-17]。按照以上规则,每计算完2 次Radix-2,存储1次。
(2)STAGE 2 的前2 次计算的结果放在SRAM_1的第1 行。存放规则:第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]。按照以上规则,每计算完2 次Radix-2,存储1 次。
(3)STAGE 3 的前2 次计算的结果放在SRAM_0的第1 行。存放规则:第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]。按照以上规则,每计算完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 结果数据存放规则同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行,以此类推。
采用上述读写规则,128 点FFT 输入数据块的顺序与输出数据块顺序一致(见图6(a)与(c)中IO_SRAM_0、IO_SRAM_1 数据块的顺序),且整个FFT 处理过程不因存放地址冲突而中断。由此可知,该FFT 加速器能够进行无中断的持续数据流处理,能够满足5G 基带处理高吞吐、连续数据处理的要求。
2.4 其他基础工作
2.4.1 状态机控制单元
由5G 物理层协议可知,FFT 计算长度N支持6中点数(128、256、512、1024、2048、4096),最小支持N=128 点,需要7 次Radix-2 计算;最大支持N=4096 点,需要12 次Radix-2 蝶形运算。因此FFT 加速器状态机除了IDEL 状态外,需要有12 个计算状态。本文FFT 的前6 个计算状态(STAGE 1~6)以及最后1 个(STAGE 12)是必经状态,其他计算状态(STAGE 7~11)根据不同的点数而定。FFT 的状态机如图7 所示。
图7 FFT 状态转换图
2.4.2 旋转因子控制单元
FFT旋转因子WN可以通过Cordic算法动态计算获得[7]。该方法整体设计存储单元较少,但硬件实现较为复杂,且很难做到一个时钟周期计算出旋转因子。
通过查表方式来获得旋转因子是一种高效的方式,缺点是需要用额外的ROM 或RAM 存储事先计算好的旋转因子。为了减少ROM 大小,多种查表方案[17-18]被提出,最小的方案可以做到N/8(其中N为支持最大的FFT 点数),缺点是需要至少2 个周期才能获得需要的旋转因子。
本文从硬件复杂度及旋转因子产生的速度2 个角度综合考虑,并未采用Cordic 动态生成方式和多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 的点数计算出需要缩放的倍数,还原到原始数量级。
3 实验和结果
为了进一步评估本文提出的FFT 加速器的实际效果,本文在EDA 平台上,搭建了仿真测试环境。从SQNR 性能、功耗、面积、最高工作频率等方面综合评估该加速器。
3.1 实验设计
对照组:为了评估本文FFT 加速器的性能,特别是SQNR 指标,设计了2 组对照组。第1 组由采用不同舍入方法处理BFP scaling 的舍入误差组成;第2 组由本文设计与本课题组旧版本4G 芯片中的FFT 设计组成。
实现:采用C 语言实现了CModel;采用Verilog HDL 语言完成RTL 级实现。
实验数据: Matlab 产生的随机数据6000 组(6种点数各1000 组);实验室软件无线电SDR 原型平台采集数据600 组(6 种点数各100 组)。
C 语言环境:Windows 10+Visual Studio 2010,用于CModel 编译和运行。
EDA 平台环境:采用Synopsys DC 综合工具在TSMC 28 nm 工艺库下完成综合;使用Synopsys VCS工具进行仿真验证;使用Synopsys PrimeTime PX 进行功耗评估。
3.2 结果及分析
3.2.1 整体SQNR 性能结果及分析
通过CModel 及RTL 仿真获得的结果数据算出SQNR 数据。第1 组实验结果对比如图8 所示。采用银行家舍入方案的SQNR 比四舍五入方案和直接舍弃方案都要好,且点数越大,差异越大。
图8 采用不同舍入方案的SQNR 比较
第2 组实验中,“旧4G 版本”为本课题组4G 终端基带芯片的FFT 方案。该方案特点有:蝶形计算单元采用基-4 与基-2 混合架构;使用16 bits 定点;在计算过程中通过位扩展来提高动态范围,减少量化误差,并未采用BFP 技术。文献[8]的FFT 设计是所找到的参考文献中各方面性能指标都非常优秀的方案。该方案特点有:蝶形计算单元采用基-4 和基-2 混合方案;采用了BFP 技术方案,具有较高的SQNR。此外,文献[6]设计了复杂的BFP 方案,SQNR 较好,但未给出N=128~4096 点的数据,且该设计主要针对高点数FFT,实现非常复杂,不适用于5G 终端基带处理。
第2 组实验结果如图9 所示。本文提出的加速器所有点数平均SQNR 超过75 dB,且整体效果比较平稳。比未采用BFP 的旧4G 版本高8~15 dB。相比于性能较好且同样采用BFP 实现的文献[8],本文在2048 点、4096 点处理上有超过3 dB 的优势。文献[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 大小上都有大幅的优化。与其他文献设计相比,经过归一化换算后,本文虽然比仅有核心面积的文献[8]差一点,但与文献[6,7]相比,仍然具有优势。
最高工作频率方面,因主要计算单元由“基-4/2混合基”改成了8 路“基-2”,且在内部乘法和加法电路上的优化,本文方案相比于“旧4G 版本”有20%的提升。在不考虑工艺制程的情况下,最高工作频率仅仅次于文献[8],由于本文设计已经满足了5G 终端基带处理要求,因此并未在工作频率上做进一步优化。功耗方面,本文所提方案比旧4G版本提升13.3%。在不考虑工艺制程的情况下,本文加速器功耗比文献[6-8]都要低,这为5G 终端基带处理芯片低功耗设计预留了空间。
本文FFT 加速器方案已集成到中科院计算所工业5G 终端基带芯片DX-T 501 中,并在TSMC 28 nm工艺下完成流片。后续的硅后测试及终端应用结果表明,该设计满足5G(3GPP R15)协议及应用要求。
4 结论
本文提出一种基于内存架构的8 路并行基-2FFT 加速器的方案。该方案采用了改进的块浮点技术提高了量化信噪比。同时利用“银行家舍入规则”处理BFP 共享指数动态调整过程中的舍入误差,进一步减少了整体量化误差。另外,本文还实现了FFT 各级间无地址冲突内存访问机制,提供持续的FFT 数据流处理能力。
实验结果表明,该FFT 加速器128 点至4096 点FFT 处理SQNR 都超过75 dB。在TSMC 28 nm 工艺库下综合结果显示,总面积为0.193 mm2,最高支持600 MHz 时钟频率,计算4096 点平均功耗为16.3 mW。相比于现有的设计,该方案具有高精度、低复杂度、低面积和低功耗的特点,为5G 终端物理层链路设计提供了充足的信噪比余量。