毕业设计报告-基于FPGA的FFT设计与实现_第1页
毕业设计报告-基于FPGA的FFT设计与实现_第2页
毕业设计报告-基于FPGA的FFT设计与实现_第3页
毕业设计报告-基于FPGA的FFT设计与实现_第4页
毕业设计报告-基于FPGA的FFT设计与实现_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

信息与通信工程学院 综合实验( 1)设计报告 基于 FPGA 的 FFT 设计与实现 学 号: S309080034 专 业 : 光学工程 学生姓名: 彭欢 任课 教师: 钟志 副教授 2010 年 7 月 基于 FPGA 的 FFT 的设计与实现 彭欢 信息与通信工程学院 摘 要: 本文主要研究如何利用 FPGA 实现 FFT 处理器,包括算法选取、算法验证、系统结构设计、各个模块设计、FPGA 实现和测试整个流程。设计采用基 -2 按时间抽取算法,以 XILINX 公司提供的 ISE6.1 为软件平台,利用 Verilog HDL 描述的方式实现了 512 点 16bist 复数块浮点结构的 FFT 系统,并以 FPGA 芯片场 Virtex II XC2V1000 为硬件平台,进行了仿真、综合等工作。仿真结果表明其计算结果达到了一定的精度,运算速度可以满足一般实时信号处理的要求。 关键词: 快速傅立叶变换,现场可编程门阵列,块浮点, Verilog HDL 1 引言 目前, FFT 己广泛应用在频谱分析、匹配滤波、数字通信、图像处理、语音识别、雷达处理、遥感遥测、地质勘探和无线保密通讯等众多领域。在不同应用场合,需要不同性能要求的 FFT 处理器。在很多应 用领域都要求 FFT 处理器具有高速度、高精度、大容量和实时处理的性能。因此,如何更快速、更灵活地实现 FFT 变得越来越重要。 在过去很长一段时间, DSP 处理器是 DSP 应用系统核心器件的唯一选择。尽管 DSP 处理器具有通过软件设计能适用于实现不同功能的灵活性,但面对当今速度变化的 DSP 应用市场,特别是面对现代通信技术的发展, DSP 处理器在处理速度上早已力不从心。 与 DSP 相比, FPGA 实现 FFT 的主要优越性有 : (1)、 FPGA 实现数字信号处理最显著的特点就是高速性能好。 FPGA 有内置的高速乘法器和加法器,尤其适合于 乘法和累加等重复性的 DSP 任务。 (2)、 FPGA 的存储量大。 DSP 内部一般没有大容量的存储器,但是 FTF 实时处理运算需要存储大量的数据,只能外接存储器,这样往往会使运算速度下降,同时电路也会更复杂和不稳定。目前,高档的 FPGA 中有巨量的高速存储器,不用外接存储器便可实现 FFT 实时处理运算,其速度更快,电路更简单,集成度和可靠性也大幅度提高。 (3)、 FPGA 是硬件可编程的,比 DSP 更加灵活。 DSP 往往需要外部的接口和控制芯片配合工作, FPGA 则不需要,这样使得硬件更简单和小型化。 (4)、 在比较 FPGA 和 DSP 时,一个极为重要的系统参数是输入 /输出 (1/0)带宽。除了一些专用引脚外, FPGA 上几乎所有的引脚均可供用户使用,这使得 FPGA 信号处理方案具有非常高性能的 FO 带宽。大量的 FO 引脚和多块存储器可让系统在设计中获得优越的并行处理性能。 2 现场可编程门阵列 (FPGA)技术 2.1 FPGA 器件简介 FPGA 即现场可编程门阵列,它是作为 ASIC 领域中的一种半定制电路而出现的,既 解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点 。 FPGA 结合了微电子技术、电路技术、 EDA 技术,使设计者可以集中精力进行所需逻 辑功能的设计,缩短设计周期,提高设计质量。 FPGA 己经在计算机硬件、工业控制、遥感遥测、雷达声纳、数据处理、智能仪器仪 表、广播电视、医疗电子和现代通信等多种领域中得到广泛应用 , FPAG 开发技术,己经成为数字系统的教学实践、科研试验、样机调试和中小批量生产的首选方案。 2.1.1 FPGA 的基本结构 FPGA 采用了逻辑单元阵列 LCA 这样一个新概念,内部一般是 由可配置逻辑模CLB、可编程输入 /输出模块 IOB 和互连资源 ICR 及一个用于存放编程数据的静态存储器 SRAM 组成,以 XILNIX 公司的 XC4000, 基本结构如图 2.1 所 示。 图 2.1 XC4000 系列 FPGA 基本结构 2.1.2 FPGA 器件的性能特点 FPGA 器件的性能特点主要有 : (1)、 采用 FPGA 设计 ASIC 电路,用户不需要投片生产,就能得到合用的芯片。 (2)、 FPGA 提供丰富的 I/O 引脚和触发器,集成度远远高于可编程阵列逻辑 (PAL)器件。 (3)、 FPGA 器件结构灵活,内部的 CLB、 IOB 和 ICR 均可以编程,可以实现多个变量的任意逻辑。 (4)、 某些器件提供片内高速 RAM,可用于 FIFO 等设计。 (5)、 基于 SRAM 编程技术,具有高密度、高速度、高可靠性和低功耗的特 性。 (6)、 FPGA 是 ASIC 电路中设计周期最短、开发费用最低、风险最小的器件之一。 2.2 基于 FPGA 的系统开发 以 XILNIX 为例, FPGA 设计的一般流程包括设计输入、功能仿真、设计实现、时序仿真、器件编程与测试几个步骤。设计流程图如图 2.2 所示。 规 划 和 预 算编 写 代 码绘 制 原 理 图H D L R T L 仿 真综 合 建 立 网 络 表功 能 仿 真转 换实 现映 射布 局 布 线实 现 时 序 逼 近 时 序 仿 真 建 立 位 流 文 件图 2.2 FPGA 设计流程 (l)、设计输入 :主要输入方法有硬件描述语言和原理图,结构向导 (Architrcture Wizard)和核生成器 (Core Geneartor)可以辅助设计输入。 (2)、 功能仿真 :功能仿真没有器件内部逻辑单元和连线的实际延时信息,只是初步验证系统的逻辑功能。 (3)、设计实现 :实现包括转换、映射、布局布线、时间参数提取,同时产生各种报告和文件。 (4)、时序仿真 :时序仿真中使用了电路延时的最坏情况,分析时序关系,检查和消除竞争冒险、并对器件的实际工作性能进行估计。 (5)、器件编程与测试 :设计实现以后,建立 FPGA 可识别文件,将编程数据下载到相应的 FPGA 器件中去。 在 FPGA 设计的各个环节都有不同公司提供的不同的 EDA 工具。一般由 FPGA 厂商提供集成开发环境,如 ALTERA 公司的 Quartus II 和 XILINX 公司的 ISE。为提高设计效率,优化设计结果,很多厂家提供了各种专业软件,用以配合 FPGA/CPLD 芯片厂家提供的工具进行更高效的设计。比较常见的使用方式是 : 集成开发环境,专业逻辑仿真软件和专业逻辑综合软件一起使用,进行多种 EDA 工具的协同设计。本设计采用ISE6.1+Modelsim5.7g+SynpliyfPor。 2.3 硬件描述语言 Verilog HDL HDL 是硬件描述语言 (Hardware Description Language)的缩写,是一种用形式方法来描述数 字电路和系统的语言。利用这种语言,数字电路系统的设计可以从抽到具体逐层描述自己的设计思想,用一系列分层次的模块来表示极其复杂的数字统。随着 EDA 技术的发展,使用 HDL 设计 FPGA 已成为一种趋势。目前最主要 HDL 是 VHDL 和 Verilog HDL,本设计采用 Verilog HDL。 作为硬件描述语言, Verilog HDL 具有如下特点 : (1)、 能够在不同的抽象层次上,如系统级、行为级、寄存器传输级 RTL、门级和开关级,对设计系统进行精确而简练的描述 ; (2)、 能够在每个抽象层次的描述上对设计进行仿真验证,及 时发现可能存在的设计错误,缩短设计周期,并保证整个设计过程的正确性 ; (3)、 由于代码描述与具体工艺实现无关,因此易于设计标准化,提高了设计的重用性。如果有 C 语言的编程经验,只需很短的时间就能掌握 Verilog HDL。 使用 HDL 进行设计时,需要设计者完成的任务有编写电路描述和编写包含激励波形描述的测试平台文件,其激励用于进行电路功能测试,代测电路的行为特性由仿真器显示波形。 3 FFT 算法原理及其硬件结构设计 3.1 FFT 算法基本原理 有限长序列 ()xn 及其频域表示 ()Xk 可由以下离散傅立叶变换得出 : 10( ) D F T ( ) ( ) , ( 0 1 )N nkNnX k x n x n W k N ( 3.1) 101( ) I D F T ( ) ( ) , ( 0 1 )N nkNkx n X k X k W n NN ( 3.2) 其中, 2e j nknk NNW 。式 (3.1)称为离散傅立叶 (正 )变换,式 (3.2)称为离散傅立叶反变换,x(n)与 X(k)构成了离散傅立叶变换对。 根据上述公式,计算一个 X(k),需要 N 次复数乘法和 N-1 次复数加法, 而计算全部 X(k) (0kN-1),共需要 N2 次复数乘法和 N(N-1)次复数加法。实现一次复数乘法需要四次实数乘法和两次实数加法,一次复数加法需要两次实数加法,因此直接计算全部 X(k)共需要 4N2 次实数乘法和 2N(2N-1)次实数加法。当 N 较大时,对实时信号处理来说,对 处理器计算速度有十分苛刻的要求,于是如何减少计算离散傅里叶变换运算量的问题变得至关重要。 为减少运算量,提高运算速度,就必须改进算法。计算 DFT 过程中需要完成的运算的系数里,存在相当多的对称性。通过研究这种对称性,可以简化计算过程中的运 算,从而减少计算 DFT 所需的时间。 nkNW 具有周期性、对称性和可约性。 利用 其 特性,将 x(n)或 X(k)序列按一定规律分解成短序列进行运算,这样可以避免大量的重复运算,提高计算 DFT 的运算速度。算法形式有很多种,但基本上可以分为两大类,即按时间抽取 FFT 算法和按频率抽取 FFT算法。 3.1.1 基 -2 时间抽取 FFT 算法 如果序列 x(n)的长度 N=2M,其中 M 是整数 (如果不满足此条件,可以人为地增补零值点来达到 ),在时域上按奇偶抽取分解成短序列的 DFT,使最小 DFT 运算单元为 2 点。通常将 FFT 运算中最小 DFT 运算单元称为基 (radix),因而把这种算法称为基 -2 时间抽取 FFT(DIT-FFT)算法。 若 Xm(p)和 Xm(q)为输入数据, Xm+1(p)和 Xm+1(q)为输出数据, rNW为旋转因子,则对于基 -2DIF-FFT 算法,蝶形运算的基本公式为 : 11( ) ( ) ( )( ) ( ) ( )km m m Nkm m m NX p X p X q WX q X p X q W ( 3.3) 其图形表示如图 3.1 所示,称 Xm(p)为上结点, Xm(q)为下结点。 X m ( p )Xm( q )WNk+-Xm + 1( p )Xm + 1( q )图 3.1 时间抽取蝶形运算单元 3.1.2 基 -2 频率 抽取 FFT 算法 上述的基 -2DIT-FFT 算法是按奇偶原则对输入序列 x(n)进行抽取分解,结果在频域使 X(k)前后分组。如果在时域把 x(n)分解成前后两组,那么在频域就会使 X(k)形成奇偶抽取分组,称为频率抽取 FFT(DIF-FFT)算法。 若 Xm(p)和 Xm(q)为输入数据, Xm+1(p)和 Xm+1(q)为输出数据, rNW为旋转因子, 则对于基 -2DIF-FFT 算法,蝶形运算的基本公式为 : 11( ) ( ) ( )( ) ( ) ( ) m m m km m m NX p X p X qX q X p X q W( 3.4) 其图形表示如图 3.2 所示,称 Xm(p)为上结点, Xm(q)为下结点。 Xm( p )Xm( q )WNk+-Xm + 1( p )Xm + 1( q )图 3.2 频率抽取蝶形运算单元 DIT-FFT 算法与 DIF-FFT 算法均为原位运算,而且运算量相同,不同之处在于 : 数据存放的方式不同, DIT 为倒序输入、正序输出,而 DIF 为正序输入、倒序输出,运算完毕需进行整 序操作 ; 蝶形运算不同, DIT的复数乘法出现在 (加 )减法之前,而 DIF的复数乘法出现在 (加 )减法之后。 所以 DIT-FFT 算法和 DIF-FFT 算法是两种等价的 FFT 运算。参照 DIT-FFT 的数据地址产生规律,可总结出 DIF-FFT 的数据地址产生规律。 3.2 FFT 的硬件实现结构 选择合适的系统结构,是提高 FFT 处理器性能的关键。以基 -2DIT-FFT 算法为例,本章将首先讨论几种常用 FFT 处理器的实现形式。 (1)顺序处理 顺序处理是 FFT 专用处理器的基本形式,蝶形运算单元在控制器的控制下,根据标准的 FFT 信号流 图,按时间顺序依次进行运算。即从第 1 级开始,从上至下依次进行,第 1 级算完后,然后进行第 2 级,第 3 级, ,直至算完为止。 顺序处理具有以下特点 : 只用一个蝶形运算单元 ; 输入数据、中间数据和输出结果均使用同一组存储器 ; 顺序执行2log2N N次蝶形运算; 如果一次蝶形运算时间为 T,则总的运算时间为2lo g2NTN(2)流水线处理 流水线处理是把一个重复的过程分解为若干个子过程,每个子过程可以与其他子过程并行进行。 对一个 N 点的 FFT 变换,每一级的 N/2 次蝶形运算安排一个独立的蝶形处理器按顺序完成,总共采用2log N个蝶形运算单元同时进行工作,这种形式称为流水线处理或者级联处理。 流水线处理具有以下特点 : 使用2logMN个蝶形运算单元 ; M 个蝶形运算单元在各级间并行运算,即级与级之间是并行工作的 ; 每个蝶形运算单元在每一级中顺序执行 N/2 个蝶形运算,即每一级运算的内部是串行工作的 ; 如果一次蝶形运算时间为 T,则理论上总的运算 时间和每一级数据运算时间一样(没考虑级与级之间的数据缓冲 ),为 /2TN 。 (3)并行迭代处理 对于每一级中的 N/2 个蝶形运算,采用 N/2 个蝶形运算单元并行工作,级与级之间顺序进行计算,这种实现形式称为并行迭代处理。 并行迭代处理具有以下特点 : 使用 N/2 个蝶形运算单元,在每一级中并行工作 ; 各级间顺序处理工作 ; 如果一次蝶形运算时间为 T,则总的运算时间为2logTN。 (4)阵列处理 把流水线处理和并行迭代处理结合 起来, 采用2log2N N个蝶形 运算单元实现全 并行工作,称为阵列处理。 阵列处理具有以下特点 : 使用2log2N N个蝶形运算单元 并行完成全部蝶形运算; 由于采用流水线工作方式,使单位时间内处理的数据增大了2log N倍,也就是说数据的吞吐量增大了2log N倍 ; 总的运算时间理论上等于一次蝶形运算时间 T。 从空间复杂度和设备使用量上看,顺序 处理最小,流水线处理次之,并行迭代和阵列处理则设备量最大,成本最昂贵。从处理速度上看,顺序处理最慢,流水线次之,并行迭代和阵列处理速度最快,可应用于实时性要求很高的场合 (如雷达信号处理系统 )。综上所述,处理速度的提高是以设备量和成本的增加为代价的。因此,在具体设计中,必须综合考虑和适当采用上述的各种形式的处理器,根据实际需求确定具体的实现方案,以取得 “ 速度 /成本 ” 的最佳值。本设计采用最基本的顺序处理方案来实现 512 点16 位复数的 FFT 运算系统。 4 FFT 处理器的 FPGA 的设计及实现 4.1 FFT 处理器总体设计 基 -2FFT 模块设计主要由 6 部分组成 : 蝶形运算单元,存储单元,地址产生单元,功能切换单元,浮点单元和时序控制元,如图 4.1 所示。 地址产生单元双 口R A M1功 能切 换双 口R A M2块浮点单元蝶 形运 算单 元R O M时 序 控 制 单 元图 4.1 FFT 处理器结构框图 各模块的功能概述如下 : (l)、 蝶形运算单元 : 采用 DIT 方式完成基 -2 蝶形运算,若数据从双口 RAM1 中读出,则计算结果存入双口 RAMZ 中,反之亦然 ; (2)、 存储单元 : 主要用来存储输入数据、中间结果 (RAM),预置旋转因子 (ROM),以及最后的计算结果 (RAM); (3)、 地址产生单元 : 产生 RAM 的读、写地址和 ROM 的读地址 ; (4)、 功能切换单元 : 完成 RAMI 与 RAMZ 间数据读写功能的切换 ; (5)、 块浮点单元 : 记录蝶算单元输出数据的位信息,并完成蝶算单元输入数据的 截位 ; (6)、 时序控制单元 : 产生各模块的使能、控制信号,使整个流程正常工作。 4.2 蝶形运算单元的 设计 FFT 的核心操作是蝶形运算,蝶形运算直接影响着 FFT 处理器的速度,所以如何加快蝶形运算的处理速度是提高 FFT 处理器速度的关键问题。 基 -2 时间抽取 FFT 运算可分解成 : 1 R R R R I1 I I I I I1 R R R R I1 I I I I I( ) ( ) ( ( ) ( ) )( ) ( ) ( ( ) ( ) )( ) ( ) ( ( ) ( ) )( ) ( ) ( ( ) ( ) )rrm m m N m N Im m m N m N Irrm m m N m N Im m m N m N IX p X p X q W X q WX p X p X q W X q WX q X p X q W X q WX q X p X q W X q W ( 4.1) 其中 p, q 表示序列下标 , R, I 表示实部和虚部 。 并行结构如图 4.2 所示蝶形运算分 3个阶段实现。 4.2 蝶形运算并行结构 在蝶形单元设计中,考虑到 Virtex 系列 FPGA 丰富的乘法器资源,采用了四个乘法器并行运算,使乘法运算在一个时钟周期内完成,提高了运算速度。在设计中为增大数据的动态范围,采用块浮点结构,蝶形运算单元输入数据为 16 位,输出数据为 18 位。同时, 6 次加 (减 )法运算分别用 6 个加 (减 )法器来实现。 根据上述的设计原理对蝶形运算单元进行硬件实现。蝶形运算模块示意图如图 4.3所示 ,其中, xl, y1, x2, y2 分别表示上、下结点数据的实部和虚部输入,其位宽为 16bist;wx, wy 分别表示旋转因子的实部和虚部,其位宽为 16bits; mx1, myl, mx2, my2 分别表示蝶形运算上、下结点实部和虚部输出,其位宽为 18bits; clk 是时钟信号 reset 是复位信号。为了保证数据的同步性,在蝶形运算单元加入了使能信号 start,使下结点数据和旋转因子同步进入乘法器。同时,上结点数据延迟 2 个时钟周期后与复乘结果进行加减运算。 图 4.3 蝶形运算模块示意图 图 4.4 为该蝶形运算单元在 Modelsim中的仿真波形图。 图 4.4 蝶形运算单元的 Modelsim 功能仿真波形图 由图 4.4 所示仿真波形图可以看出,蝶形运算单元在使能信号 start=1 后的 3 个时钟周期内完成一次蝶形运算,且如果每个时钟来临输入新的操作数据,结果则连续输出,与理论值比较,计算结果正确。 4.3 块浮点单元设计 在 FFT 处理器设计中,若采用定点运算,插入定衰减系数的方法防止溢出,结构简单,但运算精度不高 ;若采用浮点运算,精度高,但运算复杂度增加,且速度降低。因此本设计采用介于定点和浮点之间的块浮点算法。这种算法相比定点运算,提 高了精度,相比浮点运算,提高了速度,保证了 FFT 处理器处理器具有高精度、高速度的特点。 蝶形运算单元和存储器 RAM 两者之间的数据流动必须经过块浮点单元。块浮点单元由溢出检测单元 status_judge(有限状态机 )、指数累加器 accumulator 和数据选择 器 mux组成,结构如图 4.5 所示,其中 L 表示数据位长,即在本系统中 L=16, L+1:0表示数据位宽为 L+2 位。 蝶 形 运 算 单 元数 据 选 择 器 溢 出 检 测 单 元 指 数 累 加 器数 据 输 入 L + 1 : 0 指 数 输 出 L - 1 : 0 L + 1 : 0 图 4.5 块浮点单元结构图 参加蝶形运算的 4 路 18 bits 数据从双口 RAM 中 读出后,送入数据选择器,由数据选择器选择其中的 16bits 送入蝶形运算单元 ;经过蝶形运算后,将 4 路 18bits 的输出数据送入溢出检测单元,首先检测出绝对值最大的那个数据的高三位值,然后判断出本次蝶形运算的状态机,并将其寄存 ;这样依次进行处理一级中每个蝶形运算的结果,直至本级 蝶形运算结束,此时溢出检测单元产生下一级的溢出控制,由此决定数据选择器在下一级运算中该如何进行工作,并将溢出结果送入指数累加器,累加溢出位数。这样循环进行,直至 FFT 运算结束。 4.4 误差分析 根据本设计所采用的 FFT 算法以及蝶形运算单元的实现 结构,其最化误差分析模型如图 4.6 所示,其中, Q 表示量化, 表示移位。 Q溢出检测指数累加+- QQXm( p )Xm( q )WNkXm + 1( p )Xm + 1( q )图 4.6 DIT 基 -2 蝶形运算误差分析模型 现假设每级 FFT 蝶形运算发生一次溢出,且溢出由复加运算引入,数据格式为(b+1)bits 的二进制补码,量化方法中引入的误差为舍入误差。对于舍入量化,当舍弃位数等于 1bits 时,其均值为 Q/4,方差为 Q2/16; 当舍弃位数大于 1bits 时,其均值为 Q,方差为 Q2/12, Q=2-b 为量化步长。根据图 4.6 所示的误差分析模型,可得出误差上 限时最后一级输出中平均每个输出点的均方误差 MSE。对于块浮点法有 : 22222M S E ( ) ( 2 l o g ) ( ) 0 , 1 , . . . , 162QQk N N N N N k N ( 4.2) 对于定点算法: 22 8M S E ( ) ( 6 ) ( 1 ) 0 , 1 , . . . , 11 8 4QQk N N k NN ( 4.3) 假设 FFT 输入数据 x(n)为白色随机序列, x(n)对不同的 n 值无关, x(n)的实部、虚部均匀分布在 -1,1)上且无关。根据式 (4.2)和 (4.3)可以得到平均每个 FFT 输出频点的噪信比 NSR。对于块浮点算法有 : 2 213N S R ( ) ( l o g ) 0 , 1 , . . . , 124k Q N N k N ( 4.4) 对于定点算法: 221 1 2 1 1 6N S R ( ) ( ) 0 , 1 , . . . , 12 4 1 1 1 1k Q N N k N ( 4.5) (a) N=512, NSR 随数据位宽 b 的变化曲线 (b) b=16, NSR 随 FFT 点数 N 的变化曲线 图 4.7 平均每个 FFT 输出频点的 NSR 根据式 (4.4)和 (4.5)可以画出误差上限时,每个 FFT 输出频点的信噪 比 NSR 随数据位宽 b 的变化曲线,如图 4.7 所示。其中,图 (a)为 N=512, NSR 随数据位宽 b 的变化曲线,图 (b)为 b=16, NSR 随 FFT 点数 N 的 变化曲线,其中,“ -o-”表示块浮点的变化曲线,“ -+-”表示定点的变化曲线。 4.5 其它单元模块的设计 包括地址产生单元,倒序输出地址单元设计, ROM 设计, RAM 设计 ,数据切换模块,时序控制单元模块 , DCM 模块 等。在此不再一一赘述。 5 FFT 系统仿真与测试 为了证明系统设计的正确性,需要对系统进行测试试验。将系统仿真结果在 Modelsim中以数字和模拟形式显示,再把经过导出的数据与 MATLAB 中的价函数计算的理论值进行比较,完成对系统的测试工作。 5.1 FPGA 的仿真验证 从硬件设计到芯片流片,整个过程都离不开仿真验证。仿真验证与设计流程 相关,一般是通过仿真、时序分析、下载调试等来检验设计的正确性。在 FPGA 开发流程中,仿真验证主要包括功能仿真和时序仿真两个部分。功能仿真是为了检验设计功能是否正确。通过功能仿真,及时发现设计中的错误,加快设计的进度,提高设计的可靠性。时序仿真是为了保证设计满足时序要求,使数据能被正确地采样。准确高效的仿真验证可以最大限度地避免设计失误所造成的风险。 为提高数字电路设计的仿真验证效率,可采取的主要措施一是提高仿真验证工具 的速度和精度,二是改进仿真验证的设计方法。 Modelsim 是业界公认的专用 EDA 仿真工 具,它可以对 XLINIX 公司的全部FPGA/CPLD 产品进行高精度的仿真验证。 Testbench 是最基本的仿真验证手段,其主要作用是 : 例化待测试的设计 ; 通过测试向量进行仿真 ; 输出仿真结果。 Testbench 是一个具有独立结构的 Verilog 模块,其结构如图 5.1 所示,它包括激励生成和监视、待测系统和响应显示器三个部分。 待 测 生 成 和 监 视 待 测 系 统 响 应 显 示 器图 5.1 Testbench 结构 ISE 软件具有辅助设计测试激励的功能。根据设计源文件的模块名称与输入输出端口生成测试 激励文件模板,使用板写测试激励,省去了许多格式化部分,如文件头、测试激励模块名、测试激励端口信号、待测模块的调用和部分信号的初始化等部分。 在本文所设计的 FFT 系统的功能验证中, FFT 处理器的输入端口高达 34 个,且测试激励多次变化,同时还需要提供时钟信号。在这种情况下,考虑首先在测试代码中申明一个 ROM,将所有测试激励作为一个二进制文件单独保存,在功能验证运行时,将此文件读入到此 ROM 中,然后由测试模块提供正确的时序信息,将此 ROM 的内容提供给待测模块的接口。这样将测试激励与时序明显分开,便于编写,也便于修 改。 5.2 正弦信号的仿真测试 5.2.1 信号在 matlab 中的处理 系统的输入函数为 ( ) 2 0 0 0 0 s i n ( 2 0 )x t t , 点数 N=512,采样频率为 500Hz,即采样间隔为 0.0025,采样的时间长度为 0.002 512s。在 MATLAB 中实现 FFT 处理的程序描 述如下 : N=512; n=0:511; t=0.002*n; p=n*500/N; x=20000*sin(2*pi*10*t); y=fft(x,N); r=real(y); i=imag(y); subplot(3,1,1); plot(t,x);title(orignal signal); subplot(3,1,2); plot(p,r);title(real); subPlot(3,1,3); plot(p,i);title(imag); 图 5.2 正弦信号 512点 F盯在 MATLAB中实部与虚部结果 5.2.2 信号在 modelsim 中的处理结果 在 ISE 平台下编写 Testbench 波形测试文件,先将输入的原始数据存储在 .bin 文 件 (数据以补码二进制形式存储 )中,作为测试激励文件,在波形仿真时调用该文件可完成输入。 512 点 FFT 的计 算结果分别以文本文件和模拟波形文件形式输 出。 Testbench 部分VerilogHDL 描述如下 : reg31:0rom255:0; initial $readmemb(test.bin,rom); initial fida=$fopen(dout_a,txt); initial fidba=$fopen(dout_b,txt); initial begin #1200 for(m=0;m256;m=m+1) #50 ina=romm31:16; inb=romm15:0; end always begin #251050 for(i=0;i512;i=i+l) #50 $fwrite(fida,%bn,outa); $fwrite(fida,%bn,outb); end 经过仿真运行, FFT 计算结果的实部和虚部分别存储到 dout_a.txt, dout_b.txt 文本文件中。图 5.3 所示图为该正弦信号在 Modelsim 中生成的实部和虚部的模拟形式仿真图。 图 5.3 正弦信号在 modelsim 中的实部和虚部结果 图 5.4 所示图为该正弦信号输出结果的总体仿真图,可以看出 512 点 FFT 系统分 9级完成,在级数计数器 cnt=0 时,输出使能信号 rd_en=1,输出最后结果 ; 溢出指示 count有 7 次为 1,说明共有 7 次 1bit 溢出,故指数累加器 accumulator 最后显示 7, 输出数据乘以 128 便为实际的计算结果。 图 5.4 512 点 FFT 在 modelsim 中的仿真图 5.2.3 上述两种结果的比较 图 5.5 所示图为该正弦信号通过 FFT 处理器处理后的结果在 MATLAB 中的仿真图形,其中,上图表示 FFT 处理后的模值,中图表示 FFT 处理后的实部值 ,下图 FFT 处理后的 虚部值。 图 5.5 512 点 FFT 处理器结果在 MATLAB 中的仿真结果 比较图 5.2 和图 5.5 的,可以看出 FFT 处理器处理后的结果和 MATLAB 处理的结果基本一致 。 图 5.6 为 FFT 处理器结果和 MATLAB 理论值之间的相对误差曲线,其中上图表示实部误差,下图表示虚部误差。 图 5.6 FFT 处理器结果和 MATLAB 理论值之间相对误差 从图 5.6 可以看出,实部和虚部数据相对误差大部分控制在 0.5%左右,有几个数据的相对误差在 1.5%左右,稍微大一些,但总体上符合精度要求。这表明采用块 浮点结构可以达到一定的处理精度。 5.3 三角信号的仿真测试 5.3.1 信号在 MATLAB 中的处理 利用 MATLAB 产生一个三角信号,将此信号扩大 100 倍后输入到 FFT 处理器中。 n=1:128; x(n)=n-1; x(n+128)=128-n; x(n+256)=n-1; x(n+384)=128-n; y=fft(x); r=real(y); i=imag(y); subplot(3,1,1);plot(x); subplot(3,1,2);plot(r); subplot(3,1,3);plot(i); 图 5.7 三角信号 512 点 FFT 在 MATLAB 中的结果 该三角信号通过 512 点 FFT 的处理后结果如图 5.7 所示,其中,上图表示原信号,中图表示序列通过 FFT 处理后的实部值,下图表示序列通过 FFT 处理后的虚部值。 5.3.2 信号在 modelsim 中处理 图 5.8 三角信号 512 点 FFT 在 modelsim 中的实部和虚部结果 编写 Testbench 波形测试文件,将该三角信号的 512 点 FFT 处理器处理结果分别以文本文件和模拟波形文件输出,输出结果图如图 5.8 所示。 图 5.9 为该三角信号输出结果总体仿真图,可以看出指数累加器 ac

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论