FFT(快速傅里叶变换)广泛应用于现代数字信号处理的各个领域,如雷达信号处理、卫星通信、无线通信等,而专用FFT处理芯片已成为其中的关键部件之一,对系统性能影响较大。本文针对64点FFT处理器,探讨和研究了采用标准CMOS数字工艺库研制FFT处理ASIC(专用集成电路)芯片的若干问题,成果可引伸到更大点数的FFT处理芯片的设计中。
本文介绍了按照固定几何结构FFT算法,采用并行及流水线结构的FFT处理器的原理与电路实现。FFT处理器主要包括I/O缓存、数据缓存、旋转因子存储器、蝶形运算单元、地址产生器、I/O控制器和系统控制器等模块。内部数据采用IEEE754标准的单精度浮点格式,实现高精度数据处理。为进一步提高系统数据吞吐率,FFT处理器采用双I/O缓存,可同步进行数据变换和I/O操作。
1 FFT原理及运算流图的改进
DFT(离散傅里叶变换)满足以下关系式:
![]() |
式中:
![]() |
序列x(n)及X(k)均是复数表示。Cooly和Tukey提出的的FFT算法利用系数WknN的对称性和周期性,大大减小了DFT的运算量。
G(k)仪包含x(n)中偶数点序列,而H(k)仅包含x(n)中奇数点序列,考虑G(k)、H(k)的周期性,得到:
![]() |
经典FFT运算流图的缺点是每级蝶形运算数据寻址方式都不同,FFT处理器寻址电路设计复杂。本文采用了一种固定几何结构的FFT运算方法,每级运算采用相同寻址电路,简化了电路设计。
下面以16点FFT运算为例,分析固定几何结构FFT运算流图。如图1所示,固定几何结构的FFT运算流图中,每级蝶形运算寻址结构相同,序列中每相隔N/2的两个数据送入一个蝶形运算单元进行处理,输出结果顺序排列。由于该流图数据处理具有倒序的特点,所以旋转因子也采用倒序输入,并且,得到的变换结果也为倒序排列。
![]() |
本文采用C语言对该流图算法进行模拟,证明该结构正确可行。
2 FFT处理器的结构与模块划分
FFT处理器主要包括蝶形运算单元、数据缓存、I/O缓存、地址生成器、运算控制器,I/O控制器。
为实现高速处理,本文采用并行结构处理数据,并用流水线结构实现蝶形运算单元。为进一步提高系统工作效率,采用双缓存分别用作数据缓存及I/O缓存,进行FFT操作的同时,读入新的待处理数据,输出之前的处理结果,实现数据处理和I/O操作的并行。由于FFT运算按特定方式寻址,且变换结果倒序排列,因此,需要一组地址生成器用于数据处理及I/O操作的寻址。运算控制器和I/O控制器共同控制系统各模块协同工作。
3 流水线结构蝶形运算单元的实现
蝶形运算单元的性能直接影响到处理器的工作速度。由于数据采用IEEE754标准单精度浮点格式,因此蝶形运算单元的浮点加法器及浮点乘法器是电路设计的难点之一。
如图2蝶形结所示,蝶形运算的一次复数乘法包含4次乘法和2次加/减法,若将旋转因子W对应的C,C+S,C-S预先存入ROM,采用
![]() |
则如式(4)、(5)所示,一次复数乘法只需要3次乘法和3次加/减法。用1次减法取代乘法,降低了电路的面积和功耗。
![]() |
因此,可以根据各数据的运算顺序,采用并行处理和流水线结构实现蝶形运算单元,其结构见图3。
![]() |
3.1 浮点加法器的设计实现
由于FFT为复数运算,因此数据的实部、虚部均采用IEEE754标准32bit单精度浮点格式,字长为64 bit。
如图4所示,浮点加法器可分为3部分。首先通过data_man模块,将数据的符号位、指数、尾数分离,并进行预处理;然后根据指数的差值,将尾数部分移位对齐,并在26 bit位宽的CSA(进位选择加法器)_26中进行相加;最后将数据处理成为IEEE 754标准格式。
![]() |
26/24 bit移位电路shiftA/B以及26 bit加法器是影响浮点加法器性能的关键电路。
图5为26 bit尾数移位对齐电路,其利用移位位数diffA[7:0]的各比特作为控制信号,通过6个26 bit的2:1选择器实现移位,具有较高的速度和稳定性。
![]() |
图6为进位选择全加器AFCS示意图。
![]() |
进位选择加法器AFCS的逻辑表达式为:
![]() |
此全加器同时进行进位为0和1的全加运算,通过进位选择全加器运算结果,节省了等待前级运算进位的时间。
图7为由6个AFCS构成的6 bit进位选择加法器AF_6,图8为由AF_6/AF_8构成的26 bit两级进位选择加法器CSA_26。
在浮点加法器的基础上,实现浮点减法器只要将减数的符号位取反后,再与被减数相加即可。
![]() |
3.2 浮点乘法器的设计实现
浮点乘法器也可分为3部分。首先,将数据的符号位、指数、尾数分离,并进行预处理。然后,将尾数在24 bit位宽进位保留阵列乘法器CSM_24中相乘,并将指数相加。最后,将尾数乘积、指数和以及符号位处理成IEEE 754标准格式。浮点乘法器结构见图9。
![]() |
浮点乘法器中24 bit位宽乘法器CSM_24是影响整个浮点乘法器速度的关键电路。
本文采用进位保留阵列乘法器来实现24 bit位宽乘法,图10以12 bit乘法为例说明CSM_24的结构。Ai表示被乘数与乘数每比特相乘的部分积,Si表示一次求和的结果,Ci表示每次求和时保留的进位值。乘法器阵列采用华莱土树结构,由HA(半加器)实现2点加法,FA(全加器)实现3点加法,12个加法器(HA/FA)并行求和,进位值保留到下一次求和时再进行相加,省去了每次求和时等待串行进位的时间,大大提高了乘法器速度。
4 数据缓存设计方案
为提高处理器速度,本文采用ping-pang结构的数据存储器。由于采用2个蝶形运算单元并行处理,所以将ping-pang结构的存储器每组再分为2块。每组存储器的2块RAM并行输出或写入2个蝶形运算单元处理前后的数据。
由于流水线结构实现的蝶形运算单元存在等待周期,所以会出现对一组RAM同时读写的情况,因此本文中RAM采用双端口输入输出结构。
![]() |
在对一组RAM同时读写时,要确保RAM中还未处理的数据不被写入的数据覆盖,根据数据寻址特点,在本文设计中,蝶形运算单元的流水线级数不应超过FFT序列长度的1/4。随着处理序列点数的增加,可增加蝶形运算单元流水线级数,实现更高处理速度。
根据固定几何结构FFT算法特点,由于每块RAM读写寻址具有相同的规律,数据缓存的4块RAM可共用一组生成地址器。
旋转因子数值预先存入1块ROM,由旋转因子地址发生器进行寻址。
5 I/O设计方案
5.1 I/O端口设计
外部输入信号包括:时钟同步复位信号RESET、64 bit待处理数据信号dataIn以及外部I/O设备准备就绪信号IOBR。
处理器输出信号包括:64 bit处理结果数据dataOut以及I/O缓存准备就绪信号IO_ready。
当IOBR和IO_ready同时为高电平,表示外部输入输出设备及I/O缓存均准备就绪,可以进行I/O操作。当I/O操作开始后,IOBR和IO_ready又重新置为低电平。
5.2 I/O缓冲存储器
FFT处理器采用双缓存结构同时进行数据处理和I/O操作。I/O缓存中,存有上一次变换结果的一组RAM向外设输出数据,另一组RAM从外设读入新的待处理数据。当数据处理与I/O操作均完成后,两组缓存进行功能交换,准备进行新一轮操作。
6 FFT运算控制器与I/O控制器
FFT运算控制器用于控制进行FFT运算的各模块工作,I/O控制器用于控制数据输入输出以及与外部设备的通信,2个控制器相互通信,共同控制处理器各模块协同工作。
I/O控制器和FFT运算控制器分别对2组缓存中的每块RAM产生I/O及读写使能控制信号,控制2组缓存交替用于I/O和运算操作,并控制具体操作中每块RAM的读写工作模式。
当处理器中数据运算或I/O操作完成时,对应控制器产生一个完成信号FFT_done或I/O_done,输入到另一个控制器,当2个控制器均检测到对方输出的操作完成信号,则表示一次数据运算及I/O操作完成。此时,2个控制器重置2组缓存的使能信号,交换2组缓存功能,开始新一轮FFT运算及I/O操作。
7 各关键模块Verilog HDL电路描述的逻辑仿真与验证
本文采用Verilog HDL语言对FFT处理器的各个模块进行RTL(寄存器传输级)设计,采用ModelSim仿真软件,对整个系统及各关键模块进行逻辑仿真与验证。由于系统中定义的信号数目庞大,因此,按各关键模块的功能要求,分别给出其逻辑仿真波形图。
图11、图12和图13分别为浮点加法器、浮点乘法器和蝶形运算单元模块在ModelSim中的仿真波形,信号波形与Matlab中计算得到的参考数据相符,表明模块功能正确。
![]() |
图14为I/O控制器模块输出的I/O缓存使能控制信号波形,在连续的FFT处理中,两组缓存交替用做数据处理缓存和I/O缓存,信号波形表明模块设计功能正确。
由于处理器采用ping-pang结构的数据缓存,缓存的2组RAM交替进行处理数据的读写,因此,64点FFT包含6级蝶形运算,每组数据存储器分别交替进行3次渎写。图15为数据缓存读写使能控制信号仿真波形,仿真波形表明FFT运算控制器模块功能正确。
![]() |
同时,根据整个系统工作的仿真波形及时间轴参考,预计系统完成一次FFT以及I/O操作需要约100个时钟周期,与根据FFT运算流图估计所需的时钟周期数目相符。
8 结束语
本设计采用并行结构及流水线方式实现FFT处理器电路,并通过双缓存实现数据处理与I/O操作并行工作,提高了系统的工作效率及灵活性。同时,对蝶形运算单元中高速浮点加法器/乘法器的实现进行了设计分析。本文从系统的整体结构、工作模式以及具体模块的硬件电路实现等方面对高速FFT处理器的设计进行了探索研究。