FPGA课程设计128点FFT变换地FPGA实现.docx

上传人:b****3 文档编号:10241443 上传时间:2023-05-24 格式:DOCX 页数:26 大小:317.92KB
下载 相关 举报
FPGA课程设计128点FFT变换地FPGA实现.docx_第1页
第1页 / 共26页
FPGA课程设计128点FFT变换地FPGA实现.docx_第2页
第2页 / 共26页
FPGA课程设计128点FFT变换地FPGA实现.docx_第3页
第3页 / 共26页
FPGA课程设计128点FFT变换地FPGA实现.docx_第4页
第4页 / 共26页
FPGA课程设计128点FFT变换地FPGA实现.docx_第5页
第5页 / 共26页
FPGA课程设计128点FFT变换地FPGA实现.docx_第6页
第6页 / 共26页
FPGA课程设计128点FFT变换地FPGA实现.docx_第7页
第7页 / 共26页
FPGA课程设计128点FFT变换地FPGA实现.docx_第8页
第8页 / 共26页
FPGA课程设计128点FFT变换地FPGA实现.docx_第9页
第9页 / 共26页
FPGA课程设计128点FFT变换地FPGA实现.docx_第10页
第10页 / 共26页
FPGA课程设计128点FFT变换地FPGA实现.docx_第11页
第11页 / 共26页
FPGA课程设计128点FFT变换地FPGA实现.docx_第12页
第12页 / 共26页
FPGA课程设计128点FFT变换地FPGA实现.docx_第13页
第13页 / 共26页
FPGA课程设计128点FFT变换地FPGA实现.docx_第14页
第14页 / 共26页
FPGA课程设计128点FFT变换地FPGA实现.docx_第15页
第15页 / 共26页
FPGA课程设计128点FFT变换地FPGA实现.docx_第16页
第16页 / 共26页
FPGA课程设计128点FFT变换地FPGA实现.docx_第17页
第17页 / 共26页
FPGA课程设计128点FFT变换地FPGA实现.docx_第18页
第18页 / 共26页
FPGA课程设计128点FFT变换地FPGA实现.docx_第19页
第19页 / 共26页
FPGA课程设计128点FFT变换地FPGA实现.docx_第20页
第20页 / 共26页
亲,该文档总共26页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

FPGA课程设计128点FFT变换地FPGA实现.docx

《FPGA课程设计128点FFT变换地FPGA实现.docx》由会员分享,可在线阅读,更多相关《FPGA课程设计128点FFT变换地FPGA实现.docx(26页珍藏版)》请在冰点文库上搜索。

FPGA课程设计128点FFT变换地FPGA实现.docx

FPGA课程设计128点FFT变换地FPGA实现

某某轻工业学院

课程设计

题目:

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研究背景

在现代通信中,提高频谱利用率一直是人们关注的焦点之一。

近几年来,随着通信业务需求的迅速增长,寻找频谱利用率更高的数字调制方式已成为数字通信系统设计、研究的主要目标之一。

为了实现这个目标,通信系统正采用比以前更加复杂的调制信号。

OFDM(正交频分复用)是一种高效的多载波调制技术,其最大的特点是传输速率高,具有很强的抗码间干扰和信道选择性衰落能力,具有非常高的频谱利用率。

1.1.1无线通信的开展和现状

现代无线通信技术的开展始于本世纪20年代,经历了早期专用移动通信系统的开展,公用移动通信业务的开展,到1978年底,美国贝尔试验室研制成功先进移动系统(AMPS),建成了蜂窝状移动通信网,大大提高了系统容量。

随后投入商用,服务区域在美国逐渐扩大。

其它工业化国家也相继开发出蜂窝式公用移动通信网,这种模拟通信系统被称为第一代移动通信系统。

到80年代中期,欧洲首先推出了泛欧数字移动通信网(GSM)的体系。

随后,美国和日本也制定了各自的数字移动通信体制。

以GSM为代表的数字移动通信系统被称为第二代移动通信系统。

1.1.2OFDM通信技术的开展

正交频分复用(OFDM)是一种多载波数字调制技术,它由多载波调制〔MCM〕开展而来。

随着DSP芯片技术的开展,大规模集成电路让FFT技术的实现不再是难以逾越的障碍,傅立叶变换/反变换、高速modem采用的64/128/256QAM技术、栅格编码技术、软判决技术、信道自适应技术、插入保护时段、减少均衡计算量等成熟的技术逐步引入到移动通信领域中来,人们开始集中越来越多的精力开发OFDM技术在移动通信领域的应用。

1.1.3可编程器件的开展

可编程逻辑器件的两种主要类型是现场可编程门阵列〔FPGA〕和复杂可编程逻辑器件〔CPLD〕。

在这两类可编程逻辑器件中,FPGA提供了最高的逻辑密度、最丰富的特性和最高的性能。

自1985年Xilinx公司推出第一片现场可编程逻辑器件〔FPGA〕至今,FPGA已经历了十几年的开展历史。

在这十几年的开展过程中,以FPGA为代表的数字系统现场集成技术取得了惊人的开展。

 

2OFDM的根本原理

2.1OFDM的根本原理

正交频分复用(OFDM)技术与已经普遍应用的频分复用技术十分相似。

与普通的频分复用根本原理一样,OFDM把高速的数据流通过串并变换分配到速率相对较低的假如干个频率子信道中进展传输,不同的是,OFDM技术更好地利用了控制方法,使频谱利用率有所提高。

2.1.1OFDM的产生和开展

OFDM的思想早在20世纪60年代就已经提出,由于使用模拟滤波器实现起来的系统复杂度较高,所以一直没有开展起来。

在20世纪70年代,S.B.Weinstein提出用离散傅里叶变换(DFT)实现多载波调制,为OFDM的实用化奠定了理论根底;在80年代,L.J.Cimini首先分析了OFDM在移动通信应用中存在的问题和解决方法,从此以后,OFDM在移动通信中的应用得到了迅猛的开展。

OFDM系统收发机的典型框图如图2.1所示。

发送端将被传输的数字信号转换成载波幅度和相位的映射,并进展离散傅里叶反变换(IDFT)将数据的频谱表达式变换到时域上,IFFT变换与IDFT变换的作用一样,只是有更高的计算效率,所以适用于所有的应用系统。

其中,上半局部对应于发射机链路,下半局部对应于接收机链路。

由于FFT操作类似于IFFT,因此发射机和接收机可以使用同一硬件设备。

 

图2-1OFDM收发件框图

 

3FFT算法原理

3.1FFT的主要算法

长度为N的有限长序列x(n)的DFT的表达式为

〔3-1〕

一个N点DFT可以看做是由几个较短的DFT组成的。

基于这一思想,可以将N点DFT分解为几个较短的DFT,这样一来乘法次数将大大减少,能够非常明显地降低DFT的运算量。

此外,旋转因子

具有明显的周期性和对称性。

其周期性表现为:

〔3-2〕

其对称性表现为

〔3-3〕

不断的把长序列的DFT分解成几个短序列的DFT,并且利用

的周期性和对称性来减少DFT的运算次数,这就是FFT算法的根本思想。

比拟常用的FFT算法有基-2FFT和基-4FFT两种。

基-2FFT中的基2指的是N=

,即有限长序列的长度N要到等于2的整数次幂)。

下面就以8点的FFT为例详细分析基-2FFT算法。

3.1.2基-2FFT算法根本原理

基-2FFT算法根本上分为时域抽取法FFT(DIT-FFT)和频域抽取法FFT(DIF-FFT)两大类。

由于这两种算法的根本原理是一样的,所以下面主要介绍DIT-FFT算法。

本课题采用的就是DIT-FFT这一算法。

设序列x(n)的长度为N,并且有以下的条件成立

M为自然数(3-4)

x1(r)和x2(r)是x(n)按n的奇偶性分解成的两个N/2点的子序列,如下式所示

(3-5)

(3-6)

那么x(n)的DFT为

(3-7)

由于

(3-8)

所以

(3-9)

=0,1,…,N-1

其中X1(k)和X2(k)分别为x1(r)和x2(r)的N/2点DFT,即

(3-10)

(3-11)

又由于X1(k)和X2(k)都是以N/2为周期,且

(3-12)

所以X(k)又可以表示为如下所示的表达式

(3-13)

(3-14)

这样一个N点的DFT就被拆分成为了两个N/2点的DFT。

式(3-7)和式(3-8)说明了原N点的DFT和这两个N/2点的DFT之间的关系。

采用蝶形运算符号的这种图示方法,可以用图3-1来表示前面所讲到的运算。

在图3.2中,N=

=8,式(3-13)给出了X(0)~X(3)的计算方法,而式(2-14)给出了X(4)~X(7)的计算方法。

图3-1N点DFT的一次时域抽取分解图(N=8)

由图3-1可以看出,经过一次分解后,计算一个N点DFT共需要计算两个N/2点DFT和N/2个蝶形运算。

由前面的说明可以知道,计算一个N/2点DFT需要

次复数乘法和N/2(N/2-1)次复数加法。

那么按图3-1计算N点DFT共需要

+N/2=N(N+1)/2≈

/2(N>>1)次复数乘法和N(N/2-1)+2N/2=

/2次复数加法运算。

通过比照可以看出,只进展过这样的一次分解就使得运算量减少了近一半,充分说明了这样分解对减少DFT的运算量是十分有效的。

由于这里N=

,N/2仍然是偶数,为了使得计算量能够得到进一步的减少,可以仿效前面的做法对N/2点DFT再做进一步分解。

与第一次分解一样,x3(l)和x4(l)为x1(r)按奇偶分解成的两个长为N/4的子序列,即

〔3-15〕

那么,X1(k)又可表示为

=

=

(3-16)

其中

(3-17)

(3-17)

同理,由X3(k)和X4(k)的周期性和

的对称性

最后得到:

(3-19)

同理可得

(3-20)

其中有

(3-21)

(3-22)

(3-23)

这样,如图3-2所示,经过第二次的分解,一个N/2点的DFT就被拆分成为了两个N/4点的DFT了。

式(3-10)和式(3-11)说明了原N/2点的DFT和这两个N/4点的DFT之间的关系。

依次类推,经过M-1次分解,最后将N点DFT分解成N/2个2点DFT。

将前面两次分解的过程综合起来,就得到了一个完整的8点DIT-FFT运算流图。

图3-2N点DFT的第二次时域抽取分解图〔N=8〕

图3-3N点DIT-FFT运算流图〔N=8〕

 

4FFT硬件实现

4.1设计准备

4.1.1VHDL语言简介

VHDL的英文全名是Very-High-SpeedIntegratedCircuitHardwareDescriptionLanguage,诞生于1982年。

1987年底,VHDL被IEEE和美国国防部确认为标准硬件描述语言。

1993年,IEEE对VHDL进展了修订,从更高的抽象层次和系统描述能力上扩展VHDL的内容,公布了新版本的VHDL,即IEEE标准的1076-1993版本,〔简称93版〕。

现在,VHDL和Verilog作为IEEE的工业标准硬件描述语言,又得到众多EDA公司的支持,在电子工程领域,已成为事实上的通用硬件描述语言。

4.1.2可编程器件简介

FPGA是一类高集成度的可编程逻辑器件,起源于美国的Xilinx公司,该公司于1985年推出了世界上第一块FPGA芯片。

从最初的1200个可用门,90年代时几十万个可用门,开展到目前数百万门至上千万门的单片FPGA芯片,Xilinx、Altera等世界顶级厂商已经将FPGA器件的集成度提高到一个新的水平。

FPGA结合了微电子技术、电路技术、EDA技术,使设计者可以集中精力进展所需逻辑功能的设计,缩短设计周期,提高设计质量。

4.2单蝶形设计方案

FFT处理系统的总体结构如图4-1所示:

FFT处理器被分成以下几个主要功能模块进展设计:

蝶形运算单元、数据地址产生单元、控制单元等。

此外还需要一些存储单元,如RAM、ROM。

各模块的功能概述如下:

1)数据地址产生单元:

产生双口RAM和存放旋转因子的ROM的地址信息,包括读地址和写地址。

2)蝶形运算单元:

采用基2时域抽取算法,一次计算两个数据。

3)数据选择单元:

对蝶形运算结果的16Bit数据进展选择,取其中9Bit。

4)双口RAM1:

存储输入数据和中间处理数据。

5)双口RAM2:

存储最终结果。

6)ROM:

存储旋转因子数据。

7)时序控制单元:

实现对各模块的时序控制。

8)PLL:

提供系统所需时钟信号。

输入数据通过选择器倒序存储到双口RAM1中,倒叙的地址预先存储在ROM里,在数据输入时读出并和数据一同送到双口RAM1,输入数据完成后开始进入各级蝶形运算,由地址产生单元产生蝶形运算所需数据和旋转因子的地址分别从RAM和ROM中读出数据后,一起送到蝶形运算单元进展蝶形运算,蝶形运算的结果通过数据选择单元,将选出的数据回存到取数据的地址中,完成一次蝶形运算。

在FFT最后一级蝶形运算中,得到的是最终结果,不必再截取9位回存,直接根据前面所作的截位处理进展适当的移位保存结果就行,结果存到双口AM2中,蝶形运算完成以后,再将双口RAM2中的运算结果顺序输出。

设计总体结构框图如图4-1:

图4-1总体结构

 

图4-2系统实体图

如图4-2所示:

CLK:

工作时钟输入引脚。

RST:

复位引脚,低电平有效,恢复初始状态。

Start:

启动信号,高电平有效,至少维持2个时钟。

第2个时钟开始的同时第一个有效输入数据必须出现在输入端。

In_im[15..0]:

复数的虚部,位宽16位,但有效位不得超过14位。

Start拉高的同时,必须出现第一个有效的虚部数据。

In_re[15..0]:

复数的实部,位宽16位,但有效位不得超过14位。

Start拉高的同时,必须出现第一个有效的实部数据。

Busy:

在Start生效之后,FFT运算器将其拉高。

明确开始一帧数据的输入,运算与输出。

此时不能将Start再次拉高,只有Busy恢复低电平时,才能将Start拉高进展下一帧。

Data_valid:

结果输出数据有效标志,高电平有效。

Out_im[15..0]:

在Data_valid拉高的同时,输出位宽为16位的虚部数据。

Out_re[15..0]:

在Data_valid拉高的同时,输出位宽为16位的实部数据。

Scale_tick[3..0]:

在Data_valid拉高的同时,输出数据结果被衰减的次数,Scale_tick*4为实际衰减的倍数。

图4-3仿真波形

 

5总结

FPGA是20世纪80年代中期出现的一类新型用户可编程器件。

近几年来,这项技术得到了迅速的开展。

与一般的可编程逻辑器件不同,FPGA的集成度高、逻辑实现能力强、设计灵活性更好。

现在,FPGA的容量己经跨过了百万门级,不仅可以解决电子系统小型化、低功耗、高可靠性等问题,而且其开发周期短、芯片价格不断降低,这些因素促使FPGA越来越多地取代了ASIC甚至DSP的市场,成为解决系统级设计的重要选择方案之一。

目前,FPGA正处于革命性的数字信号处理技术的前沿。

过去,前端的可编程数字信号处理算法,例如FFT、FIR和IIR滤波器都是用ASIC或者DSP处理芯片构建的,但现在大多被FPGA替代。

利用FPGA实现数字信号处理,可以达到DSP芯片无法达到的速度,而且在处理大规模数据方面,有极大的优势;当然它也有不足之处,比如不能采用浮点的计算方式,对一些比拟复杂的算法,很难用硬件语言描述,但不论怎样,利用FPGA进展数字信号处理是一种趋势。

本文正是基于FPGA实现FFT这一在数字信号处理中有着广泛应用的算法。

经过一年的努力,本次设计任务已圆满完成。

在这次毕业设计中,我所完成的工作主要有以下几项:

首先,细致地分析了FFT算法的算法结构以与其中相关计算数据的流动特点,并在此根底之上进展整个FFT处理系统的电路构思。

从系统级上完成了各个子电路功能模块的划分。

其次,深入地学习了大规模可编程集成电路FPGA的知识,弄清楚了FPGA的物理特点与其包含的硬件资源的数量和特点。

确定了在进展电路设计时将要使用到的硬件资源类型。

再次,对支持系统级行为描述的VHDL语言的设计方法和设计思想进展了深入的学习和理解。

第四,认真地学习了FPGA的开发软件的功能特点和具体的操作使用方法。

研究了如何利用软件来快速、有效地实现硬件电路设计的方法。

最后,使用quartus软件完成了整个FFT处理器的电路设计、实现、仿真、验证,电路功能正确无误。

在达到了一定的数据精度上,满足了系统的设计要求。

但也存在一些问题:

1)对后仿真中的一些约束条件不是十分熟悉,根本依靠计算机自动布局布线,这样可能会导致一些错误。

2)测试激励采用波形输入的手动方法,没有采用硬件语言编写测试文件的方法,这样不但费时费力,而且容易出错。

参考文献

[1]于效宇.基于FPGA的FFT处理器的实现[D].[某某理工大学硕士学位论文],2005:

28-30.

[2]植强.一种基于FPGA的FFT阵列处理器[J].电子对抗技术,2002,17(6):

36-39.

[3]X国栋,陈伯孝,陈多芳.FFT处理器的FPGA设计[J].航空计算技术,2004,31(3):

101-104.

[4]王诚,吾继华,X丽珍,等.AlterFPGA/CPLD设计(根底篇)[C].:

人民邮电社.2005:

96-108.

[5]陈丽安,X培铭.定点DSP块定点算法与其实现技术[N].某某大学学报(自然科学版),2004,32〔6〕:

689-693.

[6]ZhangQi,YiQingming.ANewBase-6FFTAlgorithm.SemiconductorPhotonicsand

Technology,2002,9

(1):

23-25.

[7]CurrieSM.ImplementationofaSingleChip,Pipelined,plex,One-DimensionalFastFourierTransformin0.25umBulkCMOS.Application-SpecificSystems,ArchitecturesandProcessors,2002.Proceeding.TheIEEEInternationalConferenceon,17-19July2002:

335-343.

[8]BidetE.AFastSingleChipImplementationof8192plexPointFFT.Solid-StateCircuits,IEEEJournalof,Volume:

30,Issue:

3,March1995:

300-305.

[9]BiB,JoneyE.V.APipelinedFFTProcessorforWordSequentialData.Acoustics,Speech,andSignalProcessing,IEEETransactions,Volume:

37,Issue:

12,Dec.1989:

1982-1985.

[10]GoldB,BiallyT.ParallelisminFastFourierTransformHardware.AudioandElectoacoustics,IEEETransactionson,Volume:

21,Issue:

1,Feb1973:

5-16.

[11]LenartT,OwallV.A2048plexPointFFTProcessorUsingANovelDataScalingApproach.CircuitsandSystems,2003.ISCAS’03.Proceedingofthe2003InternationalSymposiumon,Volume:

4,25-28May2003:

IV45-IV48.

[12]唐江,X桥.基于FPGA的基-4FFT算法的硬件实现[N].某某工学院报,2007,21(3):

82-84.

[13]潘明海,X英哲,于维双.一种基于FPGA实现的FFT结构.微计算机信息2005,21〔9-2〕:

156-158

[14]JessaniRM,PulrinoM.parisonofsignal-anddual-passmultiply-addfused

floating-pointunits[J].IEEETranspute,1998,47(9):

927-937

[15]任淑艳,关丛荣,杨永刚,等.应用VHDL语言的FFT算法实现[N].某某理工大学学报2005,8(6):

24-26

附录

程序:

modulefft_16(xn_r,xn_i,RST,CLK,START,OUT,Xk_r,Xk_i);

input[15:

0]xn_r,xn_i;//输入的实部与虚部

inputRST,CLK,START;

//FFT启动信号与时钟信号和复位信号

output[15:

0]Xk_r,Xk_i;//FFT输出实部与虚部

outputOUT;//输出标志信号

reg[15:

0]Xk_r,Xk_i;

regOUT;

regOUT1,STRT1;//级联FFT4的输出标志和启动信号

reg[2:

0]k,j,m,n,l,p;//循环指针

reg[4:

0]i;

reg[15:

0]IN_r[15:

0],IN_i[15:

0];//存储输入的实部与虚部

reg[15:

0]OUT_r[15:

0],OUT_i[15:

0];//存储输出的实部与虚部

reg[15:

0]TRANIN_r,TRANIN_i;//输入序列与FFT4输入之间的转接

reg[15:

0]TRANOUT_r,TRANOUT_i;//输出序列与FFT4输出之间的转接

reg[2:

0]state;

parameterIdle=3'b000,//空闲

Input=3'b001,//输入

pute0=3'b010,//计算引擎

pute1=3'b100,//第二级计算的控制

Butfly=3'b101,//蝶形计算

Output=3'b110;//输出

//定义三个移位函数

input[15:

0]xn;

begin

Shift03={xn[15],xn[15:

1]}-{xn[15],xn[15],xn[15],xn[15:

3]}

+{xn[15],xn[15],xn[15],xn[15],xn[15],xn[15],xn[15],xn[15:

7]}

-{xn[15],xn[15],xn[15],xn[15],xn[15],xn[15],xn[15],xn[15],xn[15],xn[15],xn[15],xn[15],xn[15],xn[15:

13]};

end

endfunction

 

input[15:

0]xn;

begin

Shift07={xn[15],xn[15:

1]}+{xn[15],xn[15],xn[15],xn[15:

3]}

+{xn[15],xn[15],xn[15],xn[15],xn[15:

4]}

+{xn[15],xn[15],xn[15],xn[15],xn[15],xn[15],xn[15:

6]}

+{xn[15],xn[15],xn[15],xn[15],xn[15],xn[15],

xn[15],xn[15],xn[15:

8]}+{xn[15],xn[15],xn[15],xn[15],

xn[15],xn[15],xn[15],xn[15],xn[15],xn[15],

xn[15],xn[15],xn[15],xn[15],xn[15:

14]};

end

endfunction

 

input[15:

0]xn;

begin

Shift09=xn-{xn[15],xn[15],xn[15],xn[15],xn[15:

4]}

-{xn[15],xn[15],xn[15],xn[15],xn[15],xn[15],xn[15:

6]}+{xn[15],xn[15],xn[15],xn[15],xn[15],xn[15],xn[15],xn[15],xn[15],xn[15:

9]};

end

endf

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 总结汇报 > 学习总结

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2