用FPGA实现浮点FFT处理器的研究
- 格式:pdf
- 大小:234.62 KB
- 文档页数:6
采用FPGA实现FFT算法随着数字技术的快速发展,数字信号处理已深入到各个学科领域。
在数字信号处理中,许多算法如相关、滤波、谱估计、卷积等都可通过转化为离散傅立叶变换(DFT)实现,从而为离散信号分析从理论上提供了变换工具。
但DFT计算量大,实现困难。
快速傅立叶(FFT)的提出,大大减少了计算量,从根本上改变了傅立叶变换的地位,成为数字信号处理中的核心技术之一,广泛应用于雷达、观测、跟踪、高速图像处理、保密无线通信和数字通信等领域。
目前,硬件实现FFT算法的方案主要有:通用数字信号处理器(DSP)、FFT专用器件和现场可编程门阵列(FPGA)。
DSP具有纯软件实现的灵活性,适用于流程复杂的算法,如通信系统中信道的编译码、QAM映射等算法。
DSP完成FFT运算需占用大量DSP的运算时间,使整个系统的数据吞吐率降低,同时也无法发挥DSP软件实现的灵活性。
采用FFT专用器件,速度虽能够达到要求。
但其外围电路复杂,可扩展性差,成本昂贵。
随着FPGA发展,其资源丰富,易于组织流水和并行结构,将FFT实时性要求与FPGA器件设计的灵活性相结合,实现并行算法与硬件结构的优化配置,不仅可以提高处理速度,并且具有灵活性高。
开发费用低、开发周期短、升级简单的特点。
针对某OFDM系统中FFT运算的实际需要,提出了基于FPGA的设计来实现FFT算法,并以16位长数据,64点FFT为例,在Quartus Ⅱ软件上通过综合和仿真。
2 FFT原理及算法结构FFT是离散傅立叶变换(DFT)的快速算法。
对于N点离散的有限长时问序列x(n),其傅里叶变换为:完成N点的DFT需要N2次复数乘法和N(N-1)次复数加法。
点数大时,计算量也大,所以难以实现信号的实时处理。
FFT的基本思想是利用旋转因子WN的周期性、对称性、特殊性以及周期N的可互换性,将长度为N点的序列DFT运算逐次分为较短序列的DFT运算,合并相同项,大大减少了计算量。
基于FPGA的FFT算法硬件实现引言:FFT是一种用于将时域信号转换为频域信号的算法,常用于信号处理和图像处理领域。
由于FFT的高计算复杂度,硬件实现可以提供更高的计算效率和并行处理能力。
本文将介绍基于FPGA的FFT算法硬件实现,并详细解释算法的原理和实现过程。
一、快速傅里叶变换(FFT)算法简介快速傅里叶变换(FFT)是一种将一个N点离散序列转换为频域离散序列的算法。
它的时间复杂度为O(NlogN),相比于传统的傅里叶变换算法的时间复杂度O(N^2),FFT算法具有更高的计算效率。
FFT算法的核心思想是将一个N点离散序列划分为其各个子序列,然后再分别计算各个子序列的傅里叶变换,并将结果通过一系列的蝶形运算合并得到最终的频域信号。
二、FFT算法的硬件实现原理基于FPGA的FFT算法实现可以充分发挥FPGA的并行计算能力和灵活性。
硬件实现的核心是设计一个包含多个计算单元的并行处理模块。
常见的FFT硬件实现架构包括基于蝶形运算的位递归FFT算法和基于矩阵运算的线性变换FFT算法。
1.基于蝶形运算的位递归FFT算法实现首先将输入序列分为奇数位和偶数位两个子序列,然后分别对这两个子序列进行FFT计算。
然后将得到的结果通过蝶形运算合并得到最终的频域信号。
在硬件实现中,可以设计一个包含多个蝶形运算单元的并行计算模块。
每个蝶形运算单元包括两个输入通道和两个输出通道,通过并行计算可以同时进行多个蝶形运算操作,提高计算效率。
2.基于矩阵运算的线性变换FFT算法实现线性变换FFT算法将FFT计算表示为矩阵运算的形式,可以充分利用FPGA的向量计算能力。
这种实现方法将输入序列表示为一个复数矢量,然后通过矩阵运算得到最终的频域信号。
在硬件实现中,可以设计一个包含多个矩阵运算单元的并行计算模块。
每个矩阵运算单元可以同时对多个输入进行矩阵运算,提高计算效率。
三、基于FPGA的FFT算法硬件实现步骤1.硬件资源规划:根据需要计算的样本点数N,确定所需的FPGA资源,包括DSP片上资源、BRAM资源和IO资源等。
FPGA FFT_IP核函数的使用说明一.基本性能特点:(1)采用基-4算法和基-4/2混合基算法;采用频域抽取方式(DIF)的FFT算法;(2)输入数据采用定点方式输入(输入数据为real、imag ,但没有exponent),在运算过程中采用块浮点方式进行运算,使用块浮点结构能够获得最大的SNR 和最少逻辑需求之间的平衡;输出采用指数形式输出(即包含real、imag、exponent),输出结果为:“数据”×(2^(-“指数”));(3)可以完成的FFT变换长度为2^m(6≤m≤14),即64~16384点;数据位宽为8~24bits;(4)如果输入的数据向量不够N点(FFT设置中的转换长度,例如:1024等),则FFT_IP核函数会在输入数据的后面自动进行补0填充,扩展成N点的数据。
(5)输入、输出数据采用有符号复数表示,都采用自然排序方式;(6)支持单倍输出(Signal-output)和四输出(Quad-output)引擎(engine);(7)多路I/O数据流模式:流(Streaming)、缓冲突发(Buffer Burst)、突发(Burst);(8)Version_2.1.0版本的FFT_IP核函数采用的是Atlantic Interface接口协议;Version_7.2版本的FFT_IP核韩式采用的是Avalon Streaming(ST) Interface接口协议。
(9)Version_2.1.0版本不支持RTL级Modelsim仿真,Version_7.2版本支持。
也就是说,2.1.0版本的FFT_IP核函数不能再自己新建的工程中通过QuartusII调用Modelsim进行RTL的仿真。
二.IP_Core的参量设置:(1)Twiddle Precision表示的是旋转因子的位宽精度;Data Precision表示的是输入、输出数据位宽精度。
注意:旋转因子的位宽精度必须小于或等于数据的位宽精度;(2)在Complex Multiplier Implementation选择栏中的Structure列表中选择期望的复数乘法器结构复数乘法器可以使用4个实数乘法器和2个加法/减法器完成,或使用3个乘法器、5个加法器和一些附加的延时单元完成。
用FPGA实现FFT的方法使用FPGA(Field-Programmable Gate Array)实现FFT(Fast Fourier Transform)可以提供高性能的信号处理能力。
FFT是一种将时域信号转换为频域信号的算法,广泛应用于数字信号处理、通信系统、图像处理等领域。
下面将介绍一种常见的方法来使用FPGA实现FFT。
首先,需要了解FFT算法的基本原理。
FFT将长度为N的离散时间信号x(n)转换为N个频谱分量X(k),其中k=0,1,...,N-1、FFT算法的核心是蝶形运算,通过将信号分解成不同的频率分量并逐步组合来实现。
下面是使用FPGA实现FFT的具体步骤:1.设计数据缓存器:在FPGA内部设计一个数据缓存器用于存储输入信号x(n)和输出信号X(k)。
缓存器的宽度和深度取决于输入信号的采样位数和FFT的长度。
2. 数据采集与预处理:使用FPGA的输入模块采集外部信号,并通过FIFO(First In First Out)缓冲区将数据传输到数据缓存器中。
为了提高计算速度,可以使用预处理方法如窗函数、数据重排等来优化输入信号的质量。
3.蝶形运算模块设计:FFT算法的核心是蝶形运算。
在FPGA中,设计一个蝶形运算模块用于计算FFT算法中的每一个蝶形运算,即通过求解两个复数的乘积,并进行加法运算得到结果。
该模块需要实现乘法器和加法器,并对数据进行并行计算。
4.快速蝶形运算网络构建:将蝶形运算模块按照FFT算法中的乘积因子进行连接,并根据FFT的长度设计合适的网络结构。
可以使用串行-并行方式或并行-串行方式来实现FFT算法。
需要注意的是,为了减少延迟,可以采用流水线技术来提高运算速度。
5.数据输出与后处理:设计一个输出模块将计算得到的频域信号X(k)输出到外部。
可以通过FPGA的输出模块将数据传输到外部存储器、显示器或其他设备进行后续处理。
6. 时钟和时序设计:在FPGA中需要设计合适的时钟频率和时序来保证FFT算法的准确性和稳定性。
1FFT算法简介2XilinxFFTIP核功能实现FFT(FastFourierTransform)算法是计算DFT(DiscreteFourierTransform)的高效算法。
算法最初由J.W.Cooley和J.W.Tukey于1965年提出,之后又有新的算法不断涌现,总的来说发展方向有两个:一是针对N等于2的整数次幂的算法,如基2算法、基4算法和分裂基算法等;另一个是N不等于2的整数次幂的算法,如素因子算法、Winograd算法等。
其中基2算法是目前所常用的FFT算法,其核心思想是将N点的序列逐次分解为(N-1)/2点,最后分解为2点DFT进行计算,从而消除DFT中大量的重复运算。
FFT算法可从时域或频域对序列进行分解:①时间抽取法(decimationintime,DIT),即直接将序列x(n)按奇、偶逐次分成奇数子序列和偶数子序列,然后通过计算子序列的DFT来实现整个序列的DFT;②频率抽取法(decimationinfrequency,DIF),即将频域X(k)的序号k按照奇、偶逐次分解成偶数点子序列和奇数点子序列,然后计算子序列的DFT,得到整个频域内的DFT。
时间抽取法和频率抽取法的计算复杂程度和所需要的计算量都是相同的,且由两种方法不同的分解形式可知:时间抽取法需要对输入数据序列x(n)进行重新排序,频率抽取法需要对输出数据序列X[k]进行进行排序。
目前FFT算法已经广泛应用于数字信号处理、图像处理、石油勘探和地震预测等众多领域。
与此同时,为了便于FFT算法在工程实践中的应用,各大FPGA生产商也都纷纷推出了具有相关功能的IP(IntellectualProperty)模块库。
其中由Xilinx公司研发的IP核FastFourierTransformV5.0提供了FFT算法多种可选的计算参数、结构、数据输入输出流的顺序方式,可以根据用户的需求方便地实现FFT算法。
XilinxIP核功能是基于复杂系统功能的硬件描述语言(HDL)设计文件,这些验证的功能对于所有的XilinxFPGA器件的结构都能够达到最优化,且提供硬件描述语言(VHDL,Verilog)的功能仿真模型,可以在标准EDA仿真工具中进行设计和调试。
基于 FPGA 的数字滤波器设计与实现引言:数字滤波器是现代信号处理的重要组成部分。
在实际应用中,为了满足不同信号处理的需求,数字滤波器的设计与实现显得尤为重要。
本文将围绕基于 FPGA的数字滤波器的设计与实现展开讨论,介绍其工作原理、设计方法以及优势。
同时,还将介绍一些实际应用场景和案例,以展示基于 FPGA 的数字滤波器在实际应用中的性能和效果。
一、数字滤波器的基本原理数字滤波器是一种将输入信号进行滤波处理,改变其频谱特性的系统。
可以对频率、幅度和相位进行处理,实现信号的滤波、去噪、增强等功能。
数字滤波器可以分为无限脉冲响应滤波器(IIR)和有限脉冲响应滤波器(FIR)两种类型。
IIR滤波器是通过递归方式实现的滤波器,其输出信号与过去的输入信号和输出信号相关。
FIR滤波器则是通过纯前馈结构实现的,其输出信号仅与过去的输入信号相关。
两种类型的滤波器在性能、复杂度和实现方式上存在一定差异,根据具体的应用需求选择适合的滤波器类型。
二、基于 FPGA 的数字滤波器的设计与实现FPGA(Field-Programmable Gate Array)是一种可编程逻辑器件,通过可编程逻辑单元(PLU)、可编程连线(Interconnect)和可编程I/O(Input/Output)实现。
其可编程性使得 FPGA 成为数字滤波器设计与实现的理想平台。
1. FPGA的优势FPGA具有以下几个优势,使得其成为数字滤波器设计与实现的首选平台:灵活性:FPGA可以根据设计需求进行自定义配置,可以通过修改硬件逻辑来满足不同应用场景的需求。
可重构性:FPGA可以重复使用,方便进行修改和优化,减少芯片设计过程中的成本和风险。
高性能:FPGA具有并行处理的能力,可以实现多通道、高速率的实时数据处理,满足对于实时性要求较高的应用场景。
低功耗:FPGA可以进行功耗优化,通过减少冗余逻辑和智能布局布线来降低功耗。
2. 数字滤波器的实现方法基于 FPGA 的数字滤波器的实现方法主要有两种:直接法和间接法。
一文了解FPGA浮点小数与定点小数的换算及应用定点小数运算有些FPGA中是不能直接对浮点数进行操作的,只能采用定点数进行数值运算。
所谓定点小数就是把小数点的位置固定,我们要用整数来表示小数。
先以10进制为例。
如果我们能够计算12+34=46的话,当然也就能够计算1.2+3.4 或者0.12+0.34了。
所以定点小数的加减法和整数的相同,并且和小数点的位置无关。
乘法就不同了。
12*34=408,而1.2*3.4=4.08。
这里1.2的小数点在第1位之前,而4.08的小数点在第2位之前,小数点发生了移动。
所以在做乘法的时候,需要对小数点的位置进行调整?!可是既然我们是做定点小数运算,那就说小数点的位置不能动!!怎么解决这个矛盾呢,那就是舍弃最低位。
也就说1.2*3.4=4.1,这样我们就得到正确的定点运算的结果了。
所以在做定点小数运算的时候不仅需要牢记小数点的位置,还需要记住表达定点小数的有效位数。
上面这个例子中,有效位数为2,小数点之后有一位。
现在进入二进制。
我们的定点小数用16位二进制表达,最高位是符号位,那么有效位就是15位。
小数点之后可以有0 - 15位。
我们把小数点之后有n位叫做Qn,例如小数点之后有12位叫做Q12格式的定点小数,而Q0就是我们所说的整数。
Q12的正数的最大值是0 111 。
111111111111,第一个0是符号位,后面的数都是1,那么这个数是十进制的多少呢,很好运算,就是0x7fff / 2= 7.999755859375。
对于Qn格式的定点小数的表达的数值就它的整数值除以2。
在计算机中还是以整数来运算,我们把它想象成实际所表达的值的时候,进行这个运算。
反过来把一个实际所要表达的值x转换Qn型的定点小数的时候,就是x*2了。
例如0.2的Q12型定点小数为:0.2*2= 819.2,由于这个数要用整数储存,所以是819 即0x0333。
因为舍弃了小数部分,所以0x0333不是精确的0.2,实际上它是819/2=0.199951171875。
基于超大规模FPGA 的FFT 设计与实现黄隽 刘勇 韩方景(国防科技大学电子科学与工程学院 ,湖南 长沙 410073)摘要:超大规模FPGA 的成熟与应用极大地提高了FFT 的实现速度,在宽带数字接收机中,需要对数字检波输出的信号流进行实时FFT 运算,本文论述了一种用于宽带数字接收机的基于XILINX 的Virtex-IV 芯片的高速FFT 的设计与实现,设计了多级串行流水线结构,采用优化的存储方式和读取方式,用单片FPGA 实现了2048点实数的FFT ,完成2048点FFT 的时间约为4.57μs ,能很好地满足系统处理的实时性要求。
关键词:FPGA ,FFT 算法, 数字接收机,多级流水线Design of FFT Operation Based on Ultra Very Large Scale FPGAHuang Jun, Liu Yong, Han Fang Jin(Electronic Science and Engineering Institute of National University of Defense technology, Hu Nan, Chang Sha,410073)Abstract : The speed of carrying out a FFT operation has been improved due to the using of ultra very large scale Field Programmable Logic Array(FPGA). It is needed to carry out a FFT operation on the digital signal stream which is outputted by a digital detector of a wide band digital receiver .The paper studied a method of high speed FFT operation based on the XILINX Virtex-IV FPGA ,the module of FFT operation is used in a wideband digital receiver. A structure of multilevel serial pipeline is brought forward , and the mode of reading and writing date is optimized too. Based on the method, a FFT operation on 2048 points real can be carried out on a single piece of FGPA. The time of the FFT operation needed is 4.7μs, which can meet the real-time processing of a wide band receiver.Key words: FPGA, FFT Operation , Digital Receiver, Multilevel Serial Pipeline引言:FFT 的高速实现一直是数字信号处理的重要研究内容,以DSP 为代表的数字信号处理芯片的应用使得FFT 的运行效率产生了质的飞跃,而超大规模FPGA 的应用更是极大地提高了FFT 的实现速度,这是由于当今最先进的FPGA 芯片内部集成了大量乘法器和存储资源,其内部规模达到千万门量级,总线速度接近550MHz ,这些可编程硬件资源为FFT 的高速实现提供了可能。
快速傅里叶变换FFT的FPGA设计与实现学生姓名郭衡班级电科1704学号17419002064指导教师谭会生成绩2020年5 月20 日快速傅里叶变换FFT 的设计与实现一、研究项目概述非周期性连续时间信号x(t)的傅里叶变换可以表示为:=)(ϖX dt tj et x ⎰∞∞--1)(ϖ,式中计算出来的是信号x(t)的连续频谱。
但是,在实际的控制系统中能够式中计算出来的是信号x(t)的连续频谱。
但是,在实际的控制系统中能够算信号x(t)的频谱。
有限长离散信号x(n),n=0,1,…,N-1的DFT 定义为:∑-=-=-==102,1.....10)()(N n Nj N knNeW N k W n x K X π、、。
可以看出,DFT 需要计算大约N2次乘法和N2次加法。
当N 较大时,这个计算量是很大的。
利用WN 的对称性和周期性,将N 点DFT 分解为两个N /2点的DFT ,这样两个N /2点DFT 总的计算量只是原来的一半,即(N /2)2+(N /2)2=N2/2,这样可以继续分解下去,将N /2再分解为N /4点DFT 等。
对于N=2m 点的DFT 都可以分解为2点的DFT ,这样其计算量可以减少为(N /2)log2N 次乘法和Nlog2N 次加法。
图1为FFT 与DFT-所需运算量与计算点数的关系曲线。
由图可以明显看出FFT 算法的优越性。
图1 FFT 与DFT 所需乘法次数比较将x(n)分解为偶数与奇数的两个序列之和,即x(n)=x1(n)+x2(n)。
x1(n)和x2(n)的长度都是N /2,x1(n)是偶数序列,x2(n)是奇数序列,则∑∑=--=-=+2)12(1202)1.....,0()(2)(1)(N n kn N N n km N N k W n x W n x K X所以)1...,0()(2)(1)(1222120-=+=∑∑-=-=N k W n x W W n x K X N n km N k N km N Nn由于kmN N jkm Njkm NW eeW2/2/2222===--ππ,则)1.....,0)((2)(1)(2)(1)(122/1202/-=+=+=∑∑-=-=N k k X W k X W n x W W n x K X kN N n km N k N Nn kn N其中X1(k)和X2(k)分别为x1(n)和x2(n)的N /2点DFT 。
__________________________________________________F PG A课程设计128点F F T变换的F P G A实现__________________________________________________郑州轻工业学院课程设计题目:128点FFT变换的FPGA实现姓名:钟广院系:电气信息工程学院专业班级:电子信息工程11-02学号: 541101030256指导教师:胡智宏成绩:时间: 2014 年 6 月 16 日至 2014 年 6 月28 日摘要快速傅立叶变换(FFT)作为时域和频域转换的基本运算,是数字谱分析的必要前提。
传统的FFT使用软件或DSP实现,高速处理时实时性较难满足。
FPGA 是直接由硬件实现的,其内部结构规则简单,通常可以容纳很多相同的运算单元,因此FPGA在作指定运算时,速度会远远高于通用的DSP芯片。
FFT运算结构相对比较简单和固定,适于用FPGA进行硬件实现,并且能兼顾速度及灵活性。
本文介绍了一种通用的可以在FPGA上实现128点FFT变换的方法。
设计复数乘法器为核心设计了FFT算法中的基-2蝶形运算单元,溢出控制单元和地址与逻辑控制模块等其它模块,并以这些模块和FPGA内部的双口RAM为基础组成了基-2FFT算法模块。
关键词:FPGA、FFT目录1 绪论 (1)1.1 研究背景 (1)1.1.1 无线通信的发展和现状 (1)1.1.2 OFDM 通信技术的发展 (1)1.1.3 可编程器件的发展 (2)2 OFDM 的基本原理 (3)2.1 OFDM 的基本原理 (3)2.1.1 OFDM 的产生和发展 (3)3 FFT算法原理 (4)3.1 FFT的主要算法 (4)3.1.1基-2FFT算法 (4)3.1.2基-2 FFT算法基本原理 (4)4 FFT 硬件实现 (9)4.1 设计准备 (9)4.1.1 VHDL 语言简介 (9)4.1.2 可编程器件简介 (9)4.2 单蝶形设计方案 (9)5 总结 (12)参考文献 (14)附录 (16)1 绪论1.1 研究背景在现代通信中,提高频谱利用率一直是人们关注的焦点之一。
基于FPGA流水线结构并行FFT的设计与实现王英喆;杜蓉【摘要】根据实时信号处理的需求,提出了一种基于FPGA的512点流水线结构快速傅里叶变换(FFT)的设计方案,采用4个蝶形单元并行处理,在Xilinx公司的Virtex7系列的FPGA上完成设计.处理器将基2算法与基4算法相结合,蝶形运算时把乘法器IP核的旋转因子输入端固定为常数,而中间结果用FIFO缓存.采用硬件描述语言verilog完成设计,并进行综合、布局布线,测试结果与MATLAB仿真结果相吻合.【期刊名称】《电子设计工程》【年(卷),期】2015(023)004【总页数】4页(P47-50)【关键词】FFT;FPGA;流水线;并行处理【作者】王英喆;杜蓉【作者单位】北京大学软件与微电子学院,北京100871;中科院国家空间中心北京100190【正文语种】中文【中图分类】TN402离散傅里叶变换DFT在通信、控制、信号处理、图像处理、生物信息学、计算物理、应用数学等领域中有着广泛的应用[1]。
FFT算法是作为DFT快速算法提出的,它将长序列的DFT分解为短序列的DFT,大大减少了运算量。
FFT的FPGA实现同时具有软件编程的灵活性和ASIC电路的快速性等优点,成为快速实时实现FFT的一种重要手段[2]。
文章意在设计一种高速率高吞吐率的FFT处理器,以满足实时处理要求。
1 数学模型FFT的基本思想是利用旋转因子的周期性、对称性和可约性将一个长度为N的序列的DFT逐次分解为较短的DFT来计算,而总的运算次数比直接DFT运算要少得多,达到提高速度的目的。
根据旋转因子的周期性、对称性和可约性,我们可以得到如式(1)的一系列有用结果[3-4]。
一般情况下,长度为N的有限长序列x(n)的DFT为:根据公式(1)(2)得到的基2与基4计算公式如下:2 结构说明2.1 流水线结构硬件结构实现FFT的常用形式有4种:递归结构,流水线结构,并行迭代结构和全并行结构[5]。
基于FPGA的FFT处理器的设计与实现作者:胡其明曹闹昌刘东斌来源:《现代电子技术》2008年第02期摘要:对FFT处理器的实现算法-频域抽取基4算法做了介绍。
介绍一种以FPGA作为设计载体,设计和实现一套集成于FPGA内部的FFT处理器的方法和设计过程。
FFT处理器的硬件试验结果表明该处理器的运算结果正确,并且具有较高运算速度。
该方法具有设计简单灵活,体积小等优点,可用于雷达处理、高速图像处理和数字通信等应用场合。
关键词:FFT;FPGA;基4算法,硬件实验结果中图分类号:TP368.1 文献标识码:B 文章编号:1004-373X(2008)02-074-03(Engineering College,Air Force Engineering University,Xi′an,710038,ChinaAbstract:The paper firstly introduces the arithmetic of FFT processor-Radix-4,and introduces the method and process of design and realizes a FFT processor,which is integrated in FPGAchip,regarding FPGA as design carrier.The result of hardware test of FFT processor shows that the processor works well and has high speed.The design has the advantages of simple ness,agility and small bulk.It can be used in many application situations,such as radar signals process,high speed image process and digitaKeywords:FFT;FPGA;radix-数字信号处理领域中FFT作为时域和频域转换的基本运算,是数字谱分析的必要前提。
FFT(快速傅里叶变换)是一种非常重要的算法,在信号处理、图像处理、生物信息学、计算物理、应用数学等方面都有着广泛的应用。
在高速数字信号处理中,FFT的处理速度往往是整个系统设计性能的关键所在。
FPGA(现场可编程门阵列)是一种具有大规模可编程门阵列的器件,不仅具有ASIC(专用集成电路)快速的特点,更具有很好的系统实现的灵活性。
基于FPGA的设计可以满足实时数字信号处理的要求,在市场竞争中具有很大的优势。
因此,FPGA为高速FFT算法的实现提供了一个很好的平台。
1 FFT算法的硬件实现1.1 系统框图本设计利用流水线技术来提高系统的性能,系统框图,如图1所示。
其中,地址产生单元生成RAM读写地址,写使能信号以及相关模块的启动、控制信号,是系统的控制核心;4点蝶形运算单元的最后一级输出不是顺序的;旋转因子产生单元生成复乘运算中的旋转因子的角度数据;旋转因子ROM中预置了每一级运算中所需的旋转因子。
在FPGA设计中,为提高系统的运行速度,而将指令分为几个子操作,每个子操作由不同的单元完成,这样,每一级的电路结构得到简化,从而减少输入到输出间的电路延时,在较小的时钟周期内就能够完成这一级的电路功能。
在下一个时钟周期到来时,将前一级的结果锁存为该级电路的输入,这样逐级锁存,由最后一级完成最终结果的输出。
也就是说,流水线技术是将待处理的任务分解为相互有关而又相互独立、可以顺序执行的子任务来逐步实现。
本设计中,4点蝶形运算单元、旋转因子复乘模块以及最后的精度截取模块采用流水线技术来处理。
1.2 基4蝶形运算算法原理式(1)为基4蝶形运算单元的一般表达式,其中,,N为FFT运算的点数,本设计中为1 024,p为旋转因子W的相位角,其规律将在1.4节讨论。
X(0)、X(1)、X(2)、X(3)为原始数据,顺序输入RAM后蝶形倒序输出,与旋转因子复乘再进行4点蝶形运算,而X1(0)、X1(1)、X1(2)、X1(3)即为第1级蝶形运算的结果。
国防科技大学学报第26卷第6期JOURNAL OF NATIONAL UNIVERSITY OF DEFENSE TECHNOLOGY Voi.26No.62004文章编号:1001-2486(2004)06-0061-04用FPGA实现浮点FFT处理器的研究*王远模,赵宏钟,张军,付强(国防科技大学电子科学与工程学院,湖南长沙410073)摘要:针对定点FFT处理器精度不高的缺点,提出了浮点格式FFT处理器的FPGA硬件实现方案。
详细阐述了FFT处理器的自定制浮点格式确定、算法选择和浮点加法实现等关键技术。
该处理器已投入使用,工作性能稳定,系统时钟80MHz,完成1024点FFT/IFFT运算只需64!s,误差小于-80dB。
关键词:FPGA;FFT;蝶形运算中图分类号:TN47 文献标识码:AThe Realization of Flolating-point FFT Processor with FPGA ChipWANG Yuan-mo,ZHAO Hong-zhong,ZHANG Jun,FU Oiang(Coiiege of Eiectronic Science and Engineering,Nationai Univ.of Defense Technoiogy,Changsha410073,China)Abstract:The FPGA reaiization of a fioating-point FFT processor is proposed to get over the poor precision of the fixed-point FFT processor.The definition of the fioating-point format,the seiection of arithmetic and the key technigues of the FPGA reaiization are discussed.Such a processor has been put into service and has stabie performance.Its operating freguency is 80MHz and it can finish1024point FFT/IFFT in64!s with an error iess than-80dB.Key words:FPGA;FFT;butterfiy computation在现代雷达、通信、图像处理等领域中,数字信号处理系统经常要进行高速、高精度的FFT运算。
实现FFT有两种方式:通用DSP实现和专用集成电路实现。
通用DSP实现的优点是硬件开发和软件编程技术成熟、开发时间短,缺点是硬件电路复杂、功耗大。
专用集成电路实现的优点是速度快、功耗低,整个FFT运算由一块芯片完成,缺点是开发时间长、成本高。
现场可编程逻辑阵列(FPGA:Fieid Programmabie Gate Array)是一种半定制集成电路,具有面向数字信号处理算法的物理结构。
用FPGA 实现FFT处理器具有硬件系统简单、功耗低的优点,同时具有开发时间较短、成本较低的优势。
国内外学者在用FPGA实现FFT处理器方面做了大量的工作[1~3],取得了许多成果。
但是在这些处理器中,由于数据格式采用定点方式,处理精度不高,不能满足高性能信号处理系统的精度要求,为此,本文提出了浮点数据格式的FFT处理器的硬件实现,并用FPGA器件(XC2V1000)实现了一个可变长度的FFT/IFFT处理器。
1 关键技术1.1 自定制浮点数据格式在标准IEEE单精度浮点格式中,其数值用32bit表示。
其中,bit31是符号位,用!表示;bit30~ bit23是指数位,用"表示;bit22~bit0是尾数位,用#表示。
则数值$有如下表示:{)(1)$=(-1)!X2"-127X(1.#)(";0)$=0 ("=0用FPGA实现标准浮点格式的FFT处理器时,占用资源严重。
为了克服这个缺点,该处理器内部采用自定制的浮点数据格式。
为了确定合适的自定制浮点格式,下面分析蝶形运算对处理器中的数据动态范围的影响[4]。
基2蝶形运算用数学式表示有*收稿日期:2004-05-20作者简介:王远模(1973—),男,博士生。
X m +1(p )=X m (p )+X m (g )·W r N X m +1(g )=X m (p )-X m (g )·W {r N (2)其中,X m (p )和X m (g )为输入数据,X m +1(p ),X m +1(g )为输出数据,W r N 是1的一个复根,称为旋转因子。
由式(2)可得[4]:I X m +1(p )I 2+I X m +1(g )I 2[]212!=2I X m (p )I 2+I X m (g )I 2[]212(3)max {I X m (p )I ,I X m (g )I }S max {I X m +1(p )I ,I X m +1(g )I }S 2max {I X m (p )I ,I X m (g )I }(4)因此,蝶形运算使输出数据的模值扩大到输入数据的2倍。
在实际工程应用中,FFT 运算的输入数据通常是中频采样、变频、滤波后的12-bit 、16-bit 、32-bit 定点数据。
浮点数据的动态范围由指数确定,该处理器中用6-bit 表示,能表示380dB 动态范围内的数据。
浮点数尾数的位数决定FFT 运算的处理精度,在高性能的信号处理系统中,要求其运算误差足够小,一般在-80dB 以下。
根据理论分析和仿真,该处理器用17-bit 表示浮点数的尾数。
根据以上分析,自定制浮点数据格式用24-bit 表示:bit23是符号位,用S 表示;bit22~bit17是指数位,用e'表示;bit16~bit0是尾数位,用f '表示。
其数值1表示为:1=(-1)S >2e'-127>(1.f') (e';0)1=0 (e'=0{)(5)用FPGA(XCV1000)实现两个标准格式的浮点实数相加需要584个slices ;实现两个自定制格式的浮点实数相加只需要277个slices ;实现两个标准格式的浮点实数相乘需要285个slices 和4个MULT18X18s ;实现两个自定制格式的浮点实数相乘只需要50个slices 和1个MULT18X18s ,所以,在处理器内部采用自定制浮点数据格式能有效减少实现处理器的硬件资源占用。
1.2 FFT 算法选择提高FFT 处理速度的四个主要技术途径是采用流水线结构、并行运算、增加蝶形处理单元数目和高基数结构[4]。
确定算法中的基数r 时,必须综合考虑算法的处理速度、算法的运算量以及硬件实现算法的资源占用等因素。
基2算法由1个复数乘法和2个复数加法组成,而一个基4算法由3个复数乘法和8个复数加法组成。
虽然基4算法的运算速度是基2算法的2倍,但是基4蝶形硬件实现的资源占用是实现2蝶形的2倍多。
另外,基4算法要求FFT 的处理长度N =4m (m 为自然数),在工程实际中有时不能满足该条件(如N =512)。
综合考虑,该处理器选用基2算法。
1.3 浮点加法器的实现实现基2蝶形运算时,由于并行、流水实现的实数加法多达14个,实现浮点加法的硬件电路复杂,因此,其设计技术直接决定着处理器的性能。
两浮点数[5]相加通过以下步骤来完成:(1)浮点加法的对阶处理;(2)对阶处理后的尾数相加;(3)对相加后的结果进行规格化处理。
FPGA 器件由大量结构规整的slice 组成,每个slice 结构如图2所示,包括两个4输入函数(LUT /RAM16/SRL )、2个进位逻辑(CY )、2个算术逻辑(Arithmetic Logic )、2个数据选择器逻辑(MUXFx )和2-bit 缓冲存储(Register )等资源。
对阶处理是实现浮点加法的最复杂、最关键的步骤。
传统的对阶处理用桶形移位器来实现,该方法占用硬件资源多,功耗大。
本处理中,结合slice 结构特点,采用基于数据选择器的方法实现。
实现对阶处理,就是将指数小的浮点数的尾数向右移I 位(I 为两浮点数的指数差),移出后的高位补上符号位。
对阶处理实现可以由一系列数据选择器(2选1,4选1,8选1,16选1等)组合完成,选择器的输入是二进制补码表示的较小指数的浮点数尾数DA 18~DA 0(DA 18为符号位)和0,选择器26 国防科技大学学报 2004年第6期输出就是对阶处理结果DB 18~DB 0,数据选择器控制码S 5S 4S 3S 2S 1S 0是指数差I 的二进制表示。
为了便于理解,以DB 1的实现为例,当I =0时,DB 1=DA 1;当I =1时,DB 1=DA 2;……;当I =17时,DB 1=DA 18;当I >17时,DB 1=0。
也就是说,DB 1是一个以DA 18~DA 1和0为输入数据,以I 为控制码的19选1的选择器输出。
一个slice 能实现4选1逻辑,两个slice 能实现8选1逻辑,4个slice 能实现16选1逻辑。
对浮点加法的结果进行规格化处理,需要知道前导(0/1)的位数(有效位数前面的符号位数),从而确定规格化时位移的位数。
结合FPGA 结构特点,利用其专门高速进位逻辑通道,实现前导(0/1)的快速判定。
需要规格化数用Sm K m K -1…m 1m 0表示,其中,S 表示符号位,输出前导(0/1)判定结果LZA i (0S i S I ),输出位为1表示对应位为符号位。
LZA 0=m KS (I =0)LZA i =(m K -iS )LZA i -1 (1S i S I {)(6)其中,符号 表示异或逻辑操作, S 表示S 的逻辑非。
采用桶形移位方法实现两个浮点数相加需要663个slices ,采用基于数据选择器的方法实现两个浮点数相加需要277个slices 。
所以,采用基于数据选择器的方法实现加法能有效节约资源、降低功耗。
2 FPGA 实现2.1 处理器总体设计基于FPGA 实现的浮点FFT /IFFT 处理器结构如图1所示。
图1 处理器结构Fig.1 Architecture of processor该处理器有以下特点:(1)处理器内部采用24-bit 自定制浮点格式,能够兼顾处理器的处理性能和资源占用;(2)采用基2蝶形运算单元结构,减少FPGA 资源占用;(3)内置三组数据存储器,保证蝶形运算全速工作,提高处理器处理能力;(4)处理器进行FFT 运算或IFFT 运算以及运算长度N =512或N =1024由外部控制信号决定;(5)自定制浮点格式的旋转因子以只读RAM 的方式存储在FPGA 片上资源Block RAMs 内。