读后感.doc

基于FPGA上的FFT实现

收藏

压缩包内文档预览:
预览图 预览图 预览图 预览图
编号:6350466    类型:共享资源    大小:580.40KB    格式:RAR    上传时间:2017-12-11 上传人:毕****做 IP属地:江苏
12
积分
关 键 词:
获取更多毕业论文/毕业设计 请登录360毕业设计网 www.bysj360.com 或加qq:604664738量身定做!
资源描述:
基于FPGA上的FFT实现,获取更多毕业论文/毕业设计,请登录360毕业设计网,,或加qq:604664738量身定做!
内容简介:
江苏大学本科毕业论文1摘 要摘要:大规模可编程逻辑器件是近年来为适应专用集成电路设计需求而迅速发展起来的一类新型可编程 ASIC 器件。随着它的不断应用和发展,也使电子设计的规模和集成度不断提高。同时,带来了电子系统设计方法和设计思想的不断推陈出新。本设计使用能够满足较高速度要求的 FPGA(现场可编程门阵列)来实现一个在数字信号分析和处理领域重要的变换工具FFT。FFT 的算法是基 2 时域 8 点的 FFT。通过 C 语言的的浮点以及定点的程序模拟,最终通过 verilog HDL 在 Xilinx ISE 5.1i 环境下进行编程和仿真。关键词: FFT verilog HDL FPGA 定点 浮点江苏大学本科毕业论文2AbstractAbstract:With the development of Application Specific Integrated Circuit, great process has been made in programmable large scale logic devices. The scale and integration of electronic system are being enlarged continuously. Hence the method and idea of electronic system designing are improved from time to time.This design use FPGA(Field Programmable Gate Array)which can satisfy the higher speed request to realize a transformation for at arithmetic figure signal analysis with handling realm importance tool FFT. It is based on the Radix-2 DIT eight points algorithm. The arithmetic of FFT is described in language C using floating-point and fixing-point, and is described in Verilog, simulated under the Xilinx ISE at last.keyword: FFT, verilog HDL, FPGA, floating-point, fixing-point 江苏大学本科毕业论文3江苏大学本科毕业论文4目 录绪 论 .50.1 电子设计自动化与现场可编程门阵列 .50.2 可编程逻辑器件的发展 .50.3 关于数字信号处理 .60.4 本课题的目的和意义 .60.5 本课题的设计步骤 .6第一章 FFT 的引入 .81.1 DFT 的简介 .81.2 传统快速傅里叶变换算法的发展 .81.3 设计涉及的 FFT基-2 时分的 8 点 FFT.9第二章 FFT 的浮点 C 语言实现 .122.1 蝶形运算单元设计 .122.2 输入序列的比特逆序重排 .142.3 程序执行结果和分析 .162.4 使用基-2 时分算法的理由 .17第三章 FFT 的 c 语言定点程序设计 .183.1 C 语言程序浮点转定点的基本思想 .183.2 转换中的关键步骤 .193.3 误差分析 .20第四章 FFT 的 Verilog HDL 程序设计 .224.1 Verilog 的发展趋势和特点 .22江苏大学本科毕业论文54.2 Verilog HDL 语言的介绍 .224.2.1 模块(Module)概念 .224.2.2 基本数据类型 .234.2.3 基本操作数与表达式 .244.2.4 数据流描述方式 .254.2.5 行为描述方式 .254.3 8 点 FFT 的 Verilog HDL 实现 .264.3.1 分析 .264.3.2 设计 .264.3.3 设计心得及总结 .26第五章 设计的硬件平台 FPGA.285.1 关于可编程 ASIC .285.2 FPGA.285.3 设计选择 FPGA 的理由 .305.4 电路仿真和综合 .30第六章 结束语 .326.1 设计回顾 .326.2 设计展望 .32参考文献 .33致 谢 .34附 录 .35附录一:十六点基-2 时分 FFT 算法的浮点 C 语言实现源程序 .35附录二:十六点基-2 时分 FFT 算法的定点 C 语言实现源程序 .38附录三:十六点基-2 时分 FFT 算法的浮点 Verilog HDL 源程序 .41江苏大学本科毕业论文6绪 论FPGA 是是在 PAL、GAL、EPLD 等可编程器件的基础上进一步发展的产物。它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。在现代数字通信系统中,FPGA 的应用相当广泛。尤其是在对基带信号的处理和整个系统的控制中,FPGA 不但能大大缩减电路的体积,提高电路的稳定性,而且先进的开发工具使整个系统的设计调试周期大大缩短。0.1 电子设计自动化与现场可编程门阵列电子技术的发展与电子器件的发展密切,电子器件的不断更新促进电子技术的飞速发展。随着集成电路技术的不断进步,现在人们可以把数以亿记的晶体管,几万门,几十万门的电路集成在一个芯片上,集成电路由早期的单元集成,部件电路集成发展到整机电路集成和系统电路集成。近几年来,电子系统的设计方法发生了很大的变化,系统的关键电路可以用一片或几片专用集成电路(ASIC)或可 编程 ASIC(例如 FPGA)实现。ASIC 是专用的集成电路的简称,是指应特定电子系统的需要而谁,制造的集成电路,可分为模拟和数字两大类别。从目前制造的方法看,数字专用集成电路可分为全定制 ASIC,半定制 ASIC和可编程 ASIC 三大类别。专用集成电路在发达国家已经完成了由传统模式向现代化设计模式的转变,即完成了向电子线路与系统功能设计的转变。通过软件开发工具完成硬件电路的设计,在各种新型的电子设备和采用电子线路的设备中广泛使用。其中,由于“现场可编程门阵列”(FPGA)设计灵活,速度快,在数字专用集成电路的设计中得到更广泛的应用。0.2 可编程逻辑器件的发展电子器件的发展经历了电子管,晶体管,小规模集成电路 SSIC,中规模集成电路MSIC,大规模集成电路 LSIC 和超大规模集成电路 VLSIC 几个阶段,其发展趋势是体积越来越小,集成度越来越高。随着电子技术的发展,设计与制造集成电路的任务已经不完全由半导体厂商来独立承担,系统设计师更愿意自行设计专用集成电路,并立即投入使用,因而出现了可编程逻辑器件 PLD,应用最广泛的当属现场可编程门阵列 FPGA,最早期的可编程逻辑器件只有可编程只读存储(PROM),紫外可擦除只读存储器(EPROM)和电可擦除只读存储器(EEPROM)三种。由于结构的限制,它们只能完成简单的数字逻辑功能。后来,出现了一类结构 上稍微复杂的可编程芯片,即可编程逻辑器件(PLD),它能够完成各种数字逻辑功能。早期的 PLD 器件的一个共同的特点是可以实现速度特性较好的逻辑功能,但其过于简单的结构也使它们只能实现较小规模的电路。80 年代中期,Altera 和 Xilinx公司分别推出了 EPLD 和 FPGA,这两种器件可实现较大规模的电路,编程,也很灵活。进入90 年代后,随着集成电路线宽的不断缩减,FPGA 的密度成指数增长。目前 FPGA 芯片的规江苏大学本科毕业论文7模可达到几十万门,它可以代替几十甚至上百块通用集成电路芯片。大规模的 FPGA 芯片使得可以在单独一个芯片上现实一个系统的功能,与门阵列等其它 ASIC 相比,它们具有设计开发周期短,设计制造成本低,开发工具先进,标准产品无须测试,质量稳定以及可实时在线检测等优点。0.3 关于数字信号处理数字信号处理是指数字信号处理的理论、实现和应用等几个方面。数字信号处理在理论上的发展推动了数字信号处理应用的发展。反过来,数字信号处理的应用又促进了数字信号理论的提高。而数字信号处理的实现将两者联系起来。数字信号处理的实现的几种方法:1) 在计算机(如 PC)上用软件 matlab 等工具加上一些高级语言(如 C 语言)实现;2) 在计算机系统上加上专用的处理机实现;3) 用单片机实现一些不太复杂的数字信号处理,如自动控制等;4) 用可编程 DSP 芯片实现。DSP 芯片很适合数字信号处理的软件和硬件资源,可实现复杂的数字信号处理算法;5) 用专用的 DSP 芯片实现。信号处理速度极高,这种芯片将相应的信号处理算法在芯片内部用硬件实现,无需编程。0.4 本课题的目的和意义数字信号处理是通信技术的重要组成部分,而在数字信号处理领域,离散傅立叶变换又是一个极其重要的变换工具,是对离散信号进行频域分析的基础。而对于大规模的频率变换而言,其计算量是庞大的,所以不满足实时高速处理的要求,所以衍生出 FFT,就是使用快速算法来计算离散傅立叶变换。作为 FFT 算发的承载,器件必须适合 FFT 的要求,例如速度,FPGA 以其多方面的指标是比较适合作为 FFT 算法载体的。这是本课题的物理基础。通过这个课题的设计,我们力求了解使用 FPGA 来处理通信范围的技术算法,通过这次课题设计掌握通过 verilog 这种硬件描述语言来进行具体数字应用开发的基础。通过这次课题设计去了解关于 FFT 的一些经典算法,例如基 2 时分。0.5 本课题的设计步骤在进行设计前,通过查阅各方面资料了解 FFT 的一些算法,了解其原理,决定选择一个算法,决定设计的点数。然后使用 c 语言进行算法浮点模拟,通过编译,得出结果,利用 Matlab 中所给的函数 fft()对程序中输入的数据进行计算,用所得的结果和浮点 C 语言的江苏大学本科毕业论文8结果进行比较,验证 C 语言 fft 源程序的正确性。一旦验证正确。然后再根据定点和浮点的关系,将该浮点 C 语言源程序改写成定点形式的,因为在 FPGA 涉及到的具体数据都是定点数,考虑到溢出和精度的问题所以使用这个中间步骤,这样用 Verilog HDL 实现时可以有个比较和验证,从而检查 Verilog HDL 的正确性。在证明浮点 c 程序的正确基础上,设置一些模拟的输入,得到正确的输出。而在编写 c 定点程序的时候可以以此组数据的定点结果作为检验标准,如果输出与标准数据相同就可以证明定点程序的正确性,一旦定点没问题,就可以按照定点 C 语言程序来写 Verilog HDL 程序。最后再利用软件如 ModelSim和 ISE 等进行仿真和综合。本毕业设计的重点是根据所选择的 FFT 算法分别写出浮点 C 语言源程序,定点 C 语言源程序和 Verilog HDL 源程序,并借助 matlab,并一步步的验证。前步作为后一步的设计基础,直到正确的硬件输出结果。江苏大学本科毕业论文9第一章 FFT 的引入1.1 DFT 的简介DFT 是连续傅立叶变换的离散形式。模拟信号 x(t)的连续时间傅立叶变换(或称频谱)可表示成X(n)= (1.1.1)()jwtxedx(t)经抽样后变为 x(nT),T 为抽样周期。离散信号 x(nT)的傅立叶变换可表示为 X(k)=(1.1.2)1()0Nnkxn其中 ,称之为蝶形因子,式 1.1.2 其实就是 N 点的 DFT。2/jNWe在整个计算过程中,若不考虑正弦和余弦函数的计算,也不考虑最后计算模数时的计算量,则直接计算 N 点 DFT 所需的复数乘法次数 和复数加法次数 ,()Xk cMcA由 1.1.2 式可知 =N*N, =N*(N-1)cMcA由于 x(n)是实序列,而仅仅 是复数,因此上述复数乘法实际上是实数和复数的相nkNW乘,因此所需的实数乘法次数为 2*N*N,由于一次复加运算相当于两次实数加,因此实数加次数为 2*N*(N-1) 。由此可见,无论是复数运算次数还是实数运算次数,直接计算DFT 时的运算量与 成正比。当 N 较大时,运算量将很大。然而,对 DFT 做直接运算,2概念非常清楚,其程序实现也很简单。因此,在不少场合,人们依然在应用 DFT 的直接算法解决问题。但是,如果 N 很大,或需要计算大量的 X(k)的值时,往往会使计算速度成为一个非常重要的问题,而速度会在信息处理的一些场合显得格外的重要,所以寻找快速的计算傅立叶变换的方法是非常必要的,而且在这方面人们也取得了不少成绩,积累了丰富的经验,其中包括一些经典的 FFT 算法,在很大程度上是比较成熟和成功的。1.2 传统快速傅里叶变换算法的发展传统快速傅里叶变换算法是递归分解算法,包含基 2、基 4、基 8 和分裂基江苏大学本科毕业论文10FFT。Linzer-Feig 提出的融合乘/加运算的 FFT 分度算法(scaled algorithm)是传统 FFT 算法的新发展。由于近年许多先进的工作站和信号处理芯片设计成有效的融合乘法和加法的运算其基本运算为士 a 士 bc,其中 a、b、c 均为实数.不管是乘后再加( 减)或单乘、单加都只需一个机器周期,因而称这些算术运算中的任一种为乘/加运算(m/a-op) 。有些文章已经用乘/加运算来处理 FFT。传统的时域 FFT 的基本运算包括乘以旋转因子和蝶形运算,可见m/a-op 主要集中在非平凡旋转因子的运算,而非平凡旋转因子和复数相乘需要一次实数单乘、一次实数单加和两次实数乘/加运算,相乘后结果还需要进行蝶形运算所需的 4 次实数单加,共 8 次 m/a-op 运算,而 8 次 m/a-op 运算中单乘和单加却占了 6 次。为了降低 m/a-op 次数,就需要充分利用 m/a-op 的特点。Linzer-Feig 提出分度算法把复数的旋转因子变为平凡乘法运算, ,此时对应于每一个非平凡旋转因子只需要 6 次 m/a-op,从而减少了m/a-op 次数,文中列出四种传统 F 打和 FFT 分度算法的 m/a-op 次数的比较。Stasiniski 提出的基 K 一 FFT(又称卷积 FFT 算法 C-FFT)是其它基数 FFT 算法的新发展,基 KC 一 FFT是由 K 点卷积和 K 点 DFT 组成(K 为整数) ,基于卷积定理,将长度降低的 DFT 和乘旋转因子的运算代之以卷积和 DFT 运算,并证明新算法具有和传统算法相同的乘法复杂性 。1.3 设计涉及的 FFT基-2 时分的 8 点 FFT上面介绍 FFT 的发展历史,涉及到了比较新的 FFT 算法,但其数学要求很高,难度很大,作为初探 FFT 的毕业设计,以及考虑到后面硬件实现为重点要求,所以选择的作为比较基础,也比较成熟的基-2 时分的 FFT。这种算法是 Cooley-Tukey 算法。该算法是在 1965 年由 J.W.Cooley 和 J.W.Tukey 提出来的,称为基-2 快速傅立叶变换,又称为库利 -图基算法。该 FFT 算法的基本思想是利用权函数 的周期性、对称性、特殊性及周期 N 的可互换性,将长度为 N 点的序列 DFT 运rNW算依次分解为较短序列的 DFT 运算。而 DFT 的运算量与序列的平方成正比所以这种分解显然有利于减少运算量。具体为:即若将任何一个偶数点序列按 n 的奇偶性分成两个子序列,则原序列的 DFT可由两个子序列 DFT 的线性组合得到。计算 FFT 的关键是采用蝶形运算方式,如下图 1.2.2.图 1.2.2.1:FFT 的蝶形运算图江苏大学本科毕业论文11蝶形运算包括以下步骤:1) 时从存储器中取两个复数。2) 执行一次复数乘法和两次复数加法。3) 把计算结果写回存储器。复数因子Wn为: =cos(2n/N)+jsin(2n/N) 2/jNWeWn与一个输入y相乘得到p。FFT算法基本上可分为两大类,即:时间抽取法和频率抽取法。下面将以N=8为例来说明基-2时间抽取(DIT)的FFT算法。时间抽取法是将N点的输入序列x(n)按照偶数和奇数分解为偶序列和奇序列两个序列:偶序列 x(0),x(2),x(4),x(6),x(N-2);奇序列 x(1),x(3),x(5),x(7),x(N-1).故x(n)的N点FFT可表示为: (1.2.2.1)/21/21(21)00()()NnknkNnXkxWx而 2(/)2(/2)/2jNjnNee所以 + (1.2.2.2)/1/20()()nknkx/1/20()NnkNnxW令 ,/21/20()()NnkNnYW /21/20()()NknkNnZ则 ( 1.2.2.3)()()Xk由于 Y(k)与 Z(k)的周期为 N/2,故在计算上式 k 的范围为 0(N/2-1) 。计算k=N/2(N-1)的 X(k)可利用 的特性得/2/2/()*()kNjnjNkNeW(1.2.2.4)(/2)()kXkNYWZ在基数为 2 的 FFT 中,设 N= ,则总共有 M 级运算。每级中有 N/2 个 2 点的 FFT2M蝶形运算。故 N 点 FFT 总共有(N/2) 个蝶形运算。基-2 时间抽取 FFT 蝶形图2logN江苏大学本科毕业论文121.2.2.2 如下: P P+Q kNWQ -1 P-QkNWkN图 1.2.2.2:基-2 时间抽取 FFT 蝶形图设输入分别为P、Q,输出分别为 、 ,则有PQ kNQW根据上面的分析,可以得出FFT算法的信号流程图,下图 1.2.4就是8点FFT 时间抽取的信号流图:x(0) a(0) b(0) c(0) x(4) a(1) b(1) c(1) x(2) a(2) b(2) c(2) x(6) a(3) b(3) c(3) x(1) a(4) b(4) c(4) x(5) a(5) b(5) c(5) x(3) a(6) b(6) c(6) x(7) a(7) b(7) c(7) 图 1.2.2.3:8 点 FFT 时间抽取的信号流图 由上图可知,计算分三级,经过左侧一列的运算后,原来的 N=8 的 FFT 运算变成了两个独立的 N=4 的 DFT,经过中间一列的运算之后,又变成了 4 个相对独立的 N=2 的DFT。该运算式 DFT 的点数逐渐减少直到 N=2。江苏大学本科毕业论文13第二章FFT 的浮点 C 语言实现2.1 蝶形运算单元设计(N=8,l 为正整数),则基-2 时分的 FFT 算法在计算 DFT 时共分 l 级。它的第2lNi(1=s)i=i-s;s=s/2;江苏大学本科毕业论文17i=i+s;if(j(Qx+Qy-Qz);3.3 误差分析将定点程序在 turboc 环境下运行,得到的结果如下:7369 0 -821 1978 -819 820 -821 340 -819 0 -819 -340 -819 -820 -819 -1978再跟上面浮点一样,在 matlab 中调用 fft 函数,函数中的输入即为上述输入的浮点数的定点形式,具体 matlab 程序如下:%MATLAB PROGRAMN=8;n=0:N-1;xn=204 409 614 819 1024 1228 1433 1638;Xk=fft(xn)运行得到的结果如下:Xk =1.0e+003 *7.3690 -0.8200 + 1.9772i-0.8190 + 0.8200i-0.8200 + 0.3392i-0.8190 江苏大学本科毕业论文22-0.8200 - 0.3392i-0.8190 - 0.8200i-0.8200 - 1.9772i这是用科学记数方式表示的。对比两组结果,我们不难发现这种将浮点形式转换为定点形式的方法是可行的。具体误差分析如下:我们在两组结果中任取 4 个相对应的数进行分析,如取了如下 4 组:7369 和7369.0,-819 和-819.0,-340 和-339.2 ,-1978 和-1977.2。对这 4 组进行误差分析,第 1、2组的误差是 0.0%,第 3 组为(340-339.2)/340=0.235%, 第 4 组为( 1978-1977.2)/1978=0.044%。由分析可知,这种变换的误差是非常小的。但误差的大小具体由表示定点数的位数决定。在这里我们是 用 16 位来表示的。当需要的误差还要小,你可以用更多的位数来表示,这样精度就越高,误差也越小。江苏大学本科毕业论文23第四章 FFT 的 Verilog HDL 程序设计4.1 Verilog 的发展趋势和特点二十世纪 80 年代,GDA(Gateway Design Automation)公司的 PhilMoorby 设计了逻辑模拟器 verilog 一以及它的硬件描述语言。这是 verilog HDL 的最初来源。1989 年 cadence 公司收购了 GDA,当然也包括 verilogHDL。1990 年,由于 VHDL 成为 IEEE 标准,从而推动 Cadence 公司公开了 verilog HDL 语言,成立了 ovl(Open verilog Intertional)来负责 verilog HDL 语言的开发。最终,verilog HDL 也成为 IEEE 标准。目前, 2000 年的新的 verilog 标准(IEEE1364 一 2000)也已经制定出来。) 。而且,模拟的 verilog HDL 已经开始商用。 和VHDL 一样, verilog HDL 也可以进行各种级别的逻辑设计,包括数字电子系统的功能仿真、时序分析和逻辑综合等。但与 VHDL 也由一些不同: 从 verilog HDL 推出过程来看,VHDL 是由美军方组织开发的,因而更偏重于标准化的考虑 ;而 verilog HDL 是 cadence 公司支持下针对 EDA 工具开发的 HDL 语言,所以与工具的结合更为紧密 些 ,从代码风格来看,verilog HDL 更加简洁明了,灵活高效。依笔者从事 EDA 设计的经验,VHDL 很类似 Pascal 语言,格式相对更规整一些。verilog HDL 则更像 C 语言,给编程者很大的自由空间。因此,只要有 c 语言的基础,掌握 verilog HDL 是非常容易的。另外,verilog HDL 在底层描述,即开关级描述方面比 VHDL 功能更强,VHDL 的设计环境里的底层实质上也是 verilog HDL 描述的器件库在支持) 。verilog HDL 产生的历史比 VHDL 更长,因此设计资源也更丰富,在业界使用也更为广泛。并且,由于新的 verilog HDL 还支持混合信号系统的设计,相信它的应用前景是相当不错的。4.2 Verilog HDL 语言的介绍4.2.1 模块(Module) 概念模块是 verilog 的基本单元,它代表某些逻辑实体,这些逻辑实体也就是通常在设计中常用的硬件部件。例如,一个模块可以代表一个简单的门,一个 32 位计数器,一个存储器子系统,一个计算机系统,或者一个网络计算机等。在我们进入具体的语言结构之前,让我们看一个模块定义的例子( 例 41)。例 21 模块定义module add2bit (inl,in2,sum); 江苏大学本科毕业论文24intput in1,in2; output 1:0 sum;wire inl, in2 ;reg1:0 sum;always (inl or in2) beginsum inl + in2 ;$display (“The sum of %b and %b is %0d(time=%0d)”,in1,in2,sum,$time);endendmodule每个模块都有一个模块头。模块头包含模块名和输入输出的列表。这些是用来与环境交互信息的。所有的(外部)输入输出和内部变量一样都要被声明。一般来说,它们被声明为线或者寄存器。前者只提供了模块于单元之间的相互连接,而后者可以保持状态信息。状态信息的值可以通过状态行为来改变。模块主体的核可用“ ”代替。这些条目可以有两三种不同的类型,最通常的是持续赋值、结构实体和行为实体。持续赋值是模块中组合部分的简单描述。4.2.2 基本数据类型与大多数编程语言一样,verilog 支持保持不变的常量和在仿真中可以修改的变量。verilog 中的常量可以是十进制、十六进制、八进制或者二进制,且有如下格式 widthradix value“width”是一个描述常量宽度的可选十进制整数。 “radix”是可选的,且是b、B , d,D,o、O,h 和 H 中之一。其中 B 和 b 指明是二进制常量;0 和 o 指明是八进制常量;D 和 d 指明是十进制常量; H 和 h 指明是十六进制常量。 如果没有说明宽度,那么可以由常量的值推断得到。如果宽度的基没有说明,一般都假设为十进制的。例如如下例子:15 (十进制 15)hl5 (十进制 21,十六进制 15)5blO011 (十进制 19,二进制 10011)12h01F (十进制 31,十六进制 01F)江苏大学本科毕业论文25字符串常量写在双引号中间,并转换成相应的 ASCII 二进制格式。例如,字符串ab等于 16h5758。verilog 中的变量可以分类为寄存器、线、整数、实数、事件和时间。整数、浮点数、时间和事件类变量代表抽象概念,而寄存器和线可以直接映射到硬件。线代表单元之间的互连,寄存器代表存储单元。寄存器和线都有宽度,宽度在声明时定义或者默认为 1。寄存器和线变量中的每一位可以是 1、0、x 和 z 四种值之一。x 代表一个没有初始化或者有冲突的变量,例如当两个输出连在一起且分别试图驱动为不同值的信号时。z 代表高阻或者悬空,一般用在三态总线中。寄存器和线可以用在算法表达式中且由仿真器解释为无符号整数。4.2.3 基本操作数与表达式 verilog 语言从 c 语言中借鉴了许多操作语法和语义。但有一个显著的例外,即在verilog 中没有自动加(十十)和自动减(一一) 操作符。表 41 给出了 Verilog 操作符肋摘要。表 42 给出了操作符的优先级。表 4-1表 4-2江苏大学本科毕业论文264.2.4 数据流描述方式用数据流描述方式对一个设计建模的最基本的机制就是使用连续赋值语句。在连续赋值语句中,某个值被指派给线网变量。连续赋值语句的语法为:assign delay LHS_net =RHS_sepression;右边表达式使用的操作数无论何时变化,右边表达式都重新计算,并且在指定的时延后变化值被赋予左边表达式的线网变量。时延定义了右边表达式操作数变化与赋值给左边表达式之间的持续时间。如果没有定义时延值,缺省值为 0。4.2.5 行为描述方式设计的行为功能使用下述的过程语句结构描述:1)initial 语句:此语句只执行一次。2)always 语句:此语句总是循环执行,或者说此语句重复执行。只有寄存器类型数据能够在这两种语句中被赋值。寄存器类型数据在被赋新值前保持原有值不变。所有的初始化语句和 always 语句在 0 时刻并发执行。在顺序过程中出现的语句是过程赋值模块化的实例。模块化过程赋值在下一条语句执行前完成。过程赋值可以有一个可选的时延。时延可以细分为两种类型:1)语句间时延:这是时延语句执行的时延;2)语句内时延:这是右边表达式数值计算与左边表达式赋值间的时延。江苏大学本科毕业论文274.3 8 点 FFT 的 Verilog HDL 实现这部分我们要使用 Verilog HDL 来实现基-2 时分的 8 点 FFT 算法,考虑到硬件描述语言与 c 语言的差异性,我们重新回到 8 点 FFT 的流程图,这次从电路的角度分析这张图的电路实现的大概形式,考虑清楚后使用 verilog 进行电路描述以解决软件算法最终在硬件器件上的落实。4.3.1 分析在 C 语言中我们是以测试算法为目的,所以数据直接定义在数组中,直接是程序的一部分。而真正的 FFT 硬件系统是个绝对的实时处理系统,所以在硬件中设计的整体概念中,首先建立的如何将数据打入硬件系统,如何将数据结果输出硬件系统。再者计算模块也不是像C 语言的那样的情况,不适合像 C 语言那样进行级的叠代,看成三层级连的组合电路。硬件系统存在数据溢出的危险,但经过 C 定点的仿真,我们已经把这个问题排除在外,可以专注电路的语言描述。整个流程包括,数据打入,填满 8 个缓冲区,开始进行蝶形运算,运算结束,结果数据打出。所以流程明确,电路结构也很明显,输入单元,输出单元,三级计算组合单元,计数单元(缓冲区满控制计算单元开始计算) 。4.3.2 设计输入单元:使用时钟将数据打入充满八个缓冲区单元。输出单元:使用时钟将数据打出。计算单元:使用三级顺序组合模块,每级输出作为下级输入。计数器模块:设计的是 8 位计数器。输出进位信号作为计算单元的开始信号。(请参见附带源程序) 。4.3.3 设计心得及总结因为第一次使用 verilog 这种硬件描述语言进行应用设计,所以在过程中出现的很多的问题,不过正是因为问题的不断出现,才让我们慢慢去了解这样的编程语言,去熟悉它独特的设计方式,在学习过数字逻辑的基础上,我们比较容易接受硬件描述语言,可以因为 verilog 继承许多 c 语言的风格,所以在设计过程中,我们总是沿袭 c 语言的程序设计思想,其实对于 verilog 的语法,语句的风格类似 c 的风格是便于人们去掌握这种语言的设计基本要素,但是我们却把 c 这样高级语言的设计思维带入 verilog 的设计中,在加上前面的浮点 c 作为算法验证,和为了控制后面硬件的数据溢出问题而进行的定点 c 模拟,使此次江苏大学本科毕业论文28设计的 c 语言的程序设计思想一直沿袭到了 verilog 里面,形成了这次设计的一个极大的误区。对于 verilog 这样的硬件描述语言,我们初期比较错误的使用 c 语言的定点程序来写verilog 的程序,严重忽视作为一种硬件描述语言的它很大程度上的电路特性,比如时序等等,忘记电路特性,这点是这次使用 verilog 做毕业设计的过程中得到的最大经验总结。也使我们转变的这种态度,使毕业设计的第三步可以比较正常的执行完。江苏大学本科毕业论文29第五章 设计的硬件平台 FPGA5.1 关于可编程 ASIC可编程 ASIC 的芯片各层均己由工厂预先制造好、不需要定制任何掩膜,用户可以用开发工具按照自己的设计对可编程器件进行编程,以实现特定的逻辑功能,因此,它具有设计灵活、成本低、性能高和生产周期短等特点,可以很好地满足设计者的要求。可编程ASIC 器件由于在制造工艺、内部结构等方面的不同,产生了许多种分类。简单可编程逻辑器件主要指早期开发的 PLD,他们经典地由“与阵列”及“或阵列”组成,能有效地实现以“积之和”为形式的布尔逻辑函数。当“与”及“或”两个阵列都是可编程的时,这个器件称为 PLA,其变型是 PROM、PAL 和 GAL,前者具有固定的与阵列与可编程的或阵列,后两者具有可编程的与阵列和固定的或阵列。早期 PLD 蓦本结构的优点是没有布局布线问题,性能完全可以预测,所以十分容易写出软件把设计放进器件或者在它们之间进行分割设计,具有成本低、速度高、设计简便等优点,但其规模较小,通常只有数百门,难于实现复杂的逻辑。进入 90 年代后,复杂可编程逻辑器件(complexPro 乎知吐 mable Logio Device-CPLD)蓬勃发展起来.他们一般都具有可重复编程特性,实现工艺有 EPROM 技术、闪速 EPROM 技术和 E, PRoM 技术.在互连特性上,CPLD 采取连续互连方式,即用固定长度的金属线实现逻辑单元之间的互连。这种连续式互连结构避免了分段式互连结构中的复杂的布局布线和多级实现问题,能够方便地预测设计的时序,同时保证了 CPLD 的高速性能。CPLD 的集成度一般可达数千至上万门,能够实现较大规模的电路集成。从目前发展趋势可以看出 CPLD 又延伸出两大分支,即可擦除可编程的逻辑器件(Erasable)和现场可编程门阵列器件(FieldProgramrnable Gate Array 一 FPGA)。EPLD 可擦除可编程逻辑器件又可分为两类,一类是 UV(紫外线)可擦 PLD,称为 EPLD,另一类是电可擦 PLD,简称 EEPLD。Altera 公司自八十年代中期推出 EPLD以来,已经有多种产品推向市场,其中典型代表产品是 MAX700o 系列,它属于电可擦除可编程的逻辑器件。5.2 FPGAFPGA 现场可编程门阵列是由掩膜可编程门阵列和可编程逻辑器件二者演变而来的,将它们的特性结合在一起,使得 FPGA 既有门阵列的高逻辑密度和通用性,又有可编程逻辑器件的用户可编程特性。FPGA(如:图 5.1 所示)现场可编程门阵列器件的结构
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
提示  人人文库网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
关于本文
本文标题:基于FPGA上的FFT实现
链接地址:https://www.renrendoc.com/p-6350466.html

官方联系方式

2:不支持迅雷下载,请使用浏览器下载   
3:不支持QQ浏览器下载,请用其他浏览器   
4:下载后的文档和图纸-无水印   
5:文档经过压缩,下载后原文更清晰   
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

网站客服QQ:2881952447     

copyright@ 2020-2024  renrendoc.com 人人文库版权所有   联系电话:400-852-1180

备案号:蜀ICP备2022000484号-2       经营许可证: 川B2-20220663       公网安备川公网安备: 51019002004831号

本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知人人文库网,我们立即给予删除!