引言
FFT在数字信号处理中是一种非常重要的算法,在相当多的领域都有着广泛的应用。FFT处理器作为FFT算法的硬件实现,其实用性也越来越受到大家的重视。目前许多FPGA芯片厂家都推出了带有定点FFTIP核的产品,但定点数据格式,处理器输入的动态范围较小,处理结果精度不高,在一些性能要求较高的产品上无法使用。本设计在兼顾了灵活性和扩展性的同时完成1024点自定义格式的24位浮点FFT信号处理器的设计,采用改进的蝶形运算单元,减小系统硬件消耗,改善了系统性能;给出了浮点加法器/减法器和乘法器的一种流水实现方式,提高了系统的运算速度。同时该设计可以方便的扩展成可做任一2N点FFT运算的高速浮点FFT核。
1 算法的选择
提高FFT处理速度的四个主要技术途径是采用流水线结构、并行运算、增加处理器数目和高基数算法结构。在确定算法中基数时,应综合考虑FFT处理速度、算法运算量、FPGA的结构特点和实现算法的硬件资源占用等因素。
一个基2蝶形算法由1个复乘和2个复加组成。而一个基4蝶形算法包含3个复乘和8个复加,虽然基4处理器处理速度是基2处理器的2倍,但是基4蝶形算法占用资源是基2蝶形运算占用资源2倍多。综合考虑,处理器选用基2蝶算的处理器结构如图1所示。
图1基2蝶形运算单元结构
2 器件的选择
FFT处理器完成的运算操作主要是:浮点运算、数据存储和数据输入/输出格式转换。实现FFT处理器需要占用FPGA的硬件资源主要包括:Block RAMs(块静态存储器),MULT18X18s(乘法模块)和大量Slices。Xilinx公司生产的Virtex2芯片XCV1000是一种100万门级超大规模集成电路芯片,片内资源丰富,包括:5120个Slice,40个MULT18X18s,720KbitRAM存储器,8个数字时钟管理模块等。该芯片的资源配置适合进行浮点运算和数据存储操作,所以,在实际工程中,选用FPGA器件XCV1000来实现FFT处理器。
3 FFT处理器结构
本文中的FFT信号处理器的结构如图2所示。从图2中可以看到该FFT处理器包括:蝶形运算单元、旋转因子ROM、输入数据RAM、输出数据RAM、同址运算RAM、计数器、地址产生器和主控制器。
图2 FFT 处理器结构图
3.1 浮点蝶形运算单
3.1.1自定制浮点数据格式
实现标准浮点格式的脉压处理器需要占用FPGA片内太多资源,为了减少资源占用,根据所选用FPGA器件的特点,处理器内部采用自定制的浮点数据格式。自定制浮点数据用24-bit表示,bit23是符号位,用s表示;bit22~bit17是6-bit指数位,用e表示;Bit16~bit是17-bit尾数位,用f表示。浮点数数值v表示为:
V=(-1)s2(e-31)(1.f) (1)
3.1.2浮点加法器的改进算法
FFT处理器蝶形运算原理框图如图1所示,蝶形输出结果按实部和虚部展开有:
由式(2)、(3)、(4)、(5)可看出:蝶形运算输出结果(实部或虚部)都是三个实数相加得到,在硬件实现蝶形运算时,采用三个数同时相加方法可以减少加法流水时间,并且共用前置0判定和规格化模块,减少了硬件实现蝶形运算单元的资源占用。
三个浮点数相加通过以下步骤来完成:
(ⅰ)阶码相减:比较三个加数的阶码大小,选出最大的阶码Ea,并用最大的阶码与另两个较小的阶码相减,形成阶差Ea-Eb=d1 Ea-Ec=d2 (6)
(ⅱ)对齐:将两个阶码较小的浮点数尾数分别相应的向右移d1、d2位,使得移位后的三个加数具有相同的指数;
(ⅲ)有效位相加/减:根据符号完成对阶处理后的三个尾数的相加或相减;
(ⅳ)前导0的判定:根据结果判断前导0的数量,对前导0的数量进行编码以驱动规格化移位。
(ⅴ)规格化:对相加后的结果进行规格化处理:即将相加后的结果转换为内部自定制的浮点数据格式。
3.1.3浮点乘法器
浮点乘法器的结构相对比较简单,主要有以下几个步骤:
(ⅰ)阶码相加:将两个乘数的阶码部分相加,这里可能会出现溢出的情况,如出现上溢,就将结果置为浮点格式所能够表示的最大的数;如出现上溢,则将该浮点数置0。
(ⅱ)尾数相乘:将两个乘数的尾数部分添1相乘,完成2个18位数据1.f1和1.f2的整数乘法。根据乘法结果的最高位调整阶码。由于乘法结果最多只需一次左移就可以规格化,因而如果最高位为1,则不需调整阶码,如果为0,阶码只需减1即可;
(ⅲ)规格化尾数,完成浮点格式输出:将尾数规格化处理,并确定浮点的符号与阶码,将最终的乘积的符号位、指数位和尾数位表示成24位浮点数的形式输出。
3.2存储单元
根据FFT算法是原位运算的特点,系统内置三组数据存储器:输入数据RAM、同址运算RAM和输出数据RAM,输入存储器接收片外新数据,中间结果保存在同址运算RAM中,输出数据RAM始终存取最后一级的处理结果,系统在处理当前一组数据的同时片外新数据可以输入到输入数据RAM中,保证了数据及时供给运算单元,没有因为等待数据而浪费计算周期,保证处理器能全速运行,提高该处理器的处理能力。
3.3地址产生单元 地址产生器在控制器的作用下正确地产生数据读写地址和旋转因子地址。FFT变换采用正序输入正序输出的算法,原始数据按照正序存储输入数据RAM中,FFT运算过程中将中间结果按原位写回同址运算RAM,在最后一级输出时,地址单元产生的地址经过位反序模块得到反序地址,数据按反序存储于输出数据RAM中。
4 性能分析
FPGA选择Xilinx公司的XC2V1000,FPGA资源能够满足处理器硬件实现对资源占用的要求。整个处理器硬件实现占用FPGA资源情况如下:
Number of Slices 2406 outof 5,120 47%
Number of BlockRAMs 18 outof 40 45%
Number of MULT18X18s 4 outof 40 10%
目前该处理器已投入实用,运行结果正确,性能稳定。处理器系统时钟可达80MHz以上,其测试性能如表1所示。
表1 FFT处理器测试性能
该处理器基于自定制的浮点FFT处理,精度高,处理误差小于-80dB,能够满足如高性能雷达等绝大多数应用对性能的要求。整个FFT系统的功耗小于1W,远小于DSP系统实现的FFT系统。
5 结语
本文给出了一种用于完成1024点自定义24位浮点FFT处理器的设计,采用Xilinx公司XC2V1000的FPGA来实现,达到了高速高精度的要求。自定制浮点数据格式的引入,大幅度地减少了浮点运算操作占用FPGA器件的资源数目,兼顾了FPGA高精度、低资源低功耗的特点。而且该设计灵活性好,能非常方便的扩展成可配置点数的浮点FFT核,可以广泛应用于对精度要求较高的数字信号处理领域。
浮点处理器 |