FPGA课程设计128点FFT变换地FPGA实现文档格式.docx
- 文档编号:21515870
- 上传时间:2023-01-30
- 格式:DOCX
- 页数:21
- 大小:204.84KB
FPGA课程设计128点FFT变换地FPGA实现文档格式.docx
《FPGA课程设计128点FFT变换地FPGA实现文档格式.docx》由会员分享,可在线阅读,更多相关《FPGA课程设计128点FFT变换地FPGA实现文档格式.docx(21页珍藏版)》请在冰豆网上搜索。
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的主要算法
3.1.1基-2FFT算法
长度为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]刘国栋,陈伯孝,陈多芳.FFT处理器的FPGA设计[J].航空计算技术,2004,31(3):
101-104.
[4]王诚,吾继华,范丽珍,等.AlterFPGA/CPLD设计(基础篇)[C].北京:
人民邮电社.2005:
96-108.
[5]陈丽安,张培铭.定点DSP块定点算法及其实现技术[N].福州大学学报(自然科学版),2004,32(6):
689-693.
[6]ZhangQi,YiQingming.ANewBase-6FFTAlgorithm.SemiconductorPhotonicsand
Technology,2002,9
(1):
23-25.
[7]CurrieSM.ImplementationofaSingleChip,Pipelined,Complex,One-DimensionalFastFourierTransformin0.25umBulkCMOS.Application-SpecificSystems,ArchitecturesandProcessors,2002.Proceeding.TheIEEEInternationalConferenceon,17-19July2002:
335-343.
[8]BidetE.AFastSingleChipImplementationof8192ComplexPointFFT.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.A2048ComplexPointFFTProcessorUsingANovelDataScalingApproach.CircuitsandSystems,2003.ISCAS’03.Proceedingofthe2003InternationalSymposiumon,Volume:
4,25-28May2003:
IV45-IV48.
[12]唐江,刘桥.基于FPGA的基-4FFT算法的硬件实现[N].重庆工学院报,2007,21(3):
82-84.
[13]潘明海,刘英哲,于维双.一种基于FPGA实现的FFT结构.微计算机信息2005,21(9-2):
156-158
[14]JessaniRM,PulrinoM.Comparisonofsignal-anddual-passmultiply-addfused
floating-pointunits[J].IEEETransCompute,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:
regOUT;
regOUT1,STRT1;
//级联FFT4的输出标志和启动信号
reg[2:
0]k,j,m,n,l,p;
//循环指针
reg[4:
0]i;
0]IN_r[15:
0],IN_i[15:
0];
//存储输入的实部与虚部
0]OUT_r[15:
0],OUT_i[15:
//存储输出的实部与虚部
0]TRANIN_r,TRANIN_i;
//输入序列与FFT4输入之间的转接
0]TRANOUT_r,TRANOUT_i;
//输出序列与FFT4输出之间的转接
0]state;
parameterIdle=3'
b000,//空闲
Input=3'
b001,//输入
Compute0=3'
b010,//计算引擎
Compute1=3'
b100,//第二级计算的控制
Butfly=3'
b101,//蝶形计算
Output=3'
b110;
//输出
//定义三个移位函数
function[15:
0]Shift03;
//乘以0.3827
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
0]Shift07;
//乘以0.7071
Shift07={xn[15],xn[15:
1]}+{xn[15],xn[15],xn[15],xn[15:
+{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]};
0]Shift09;
//乘以0.9239
Shift09=xn-{xn[1
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- FPGA 课程设计 128 FFT 变换 实现