Matlab与FPGA的联合开发方式_第1页
Matlab与FPGA的联合开发方式_第2页
Matlab与FPGA的联合开发方式_第3页
Matlab与FPGA的联合开发方式_第4页
Matlab与FPGA的联合开发方式_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

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

文档简介

Matlab与FPGA的联合开发方式 全并行结构FFT的FPGA实现目前Matlab与FPGA的联合开发主要可分为三种形式:一种是利用Matlab来进行FPGA设计时的前期系统算法仿真,另一种是利用Matlab软件来完成FPGA设计中的辅助仿真功能,最后一种是利用Matlab软件将系统级的FPGA设计模型转换成硬件描述语言。本报告利用一个具体例子介绍第一种应用方法。1.1全并行FFT算法介绍FFT算法是DFT(离散傅里叶变换)算法的简称,它是由Cooley和Tukey在1965年提出的,FFT在数字信号处理中得到了广泛的应用,各大FPGA生产厂家也都提供了相应的运算点数可以改变的FFT核,其运算速度相对于其他由DSP器件实现的FFT要快得多,但是其运算速度仍然满足不了某些特殊应用领域的需求,而且这些FFT商业核的价格不菲,即使购买,源代码也不公开。DFT算法公式为X(k)=矣x(n)Wkn (1-1)Nn=0其中:x(n)为输入序列(时域);(X(k)为输出序列(频域);W;n为旋转因子。其快速算法FFT结构,如图1所示。为了作图方便,这里以基2时间抽取8点FFT为例加以说明。图中箭头上的数字代表旋转因子W;"中的蛙输入是码位倒序的,输出是自然顺序。这种全并行结构的特点使每个蝶形的输出数据不需存储,直接流向下一级,整个算法不会产生数据堆积,如果采用同步时序电路,则可以实现每个时钟节拍输出一组FFT计算结果,从而充分发挥了并行加流水结构的快速处理特点,使得FFT运算速度得到极大提高。图1基2时间抽取全并行FFT算法结构图1.2算法MATLAB验证从图1所示的算法流程图中可以看出,经过蝶形运算后的数据位宽要比原来的输入数据扩展一倍,在所有运算都是定点运算的情况下,必须对数据进行截取,否则随着运算级数的增加,位宽扩展成指数增加,最终导致FPGA器件资源枯竭,无法实现设计。但是,数据的截取必然带来运算的误差,随着级数的增加,这种误差也将越来越大,那么,究竟能不能采用这种全并行的设计结构来实现FFT运算呢?下面通过MATLAB的仿真来验证算法的可行性。在本例中MATLAB编程的主题思想是,迷你FOGA器件中的实际硬件操作来分析误差对性能

的影响,并输出FFT编程的主题思想是,模拟FPGA器件中的实际硬件操作来分析误差对性能的影响,并输出FFT运算的中间结果以便为后续的FPGA调试提供参考。基于这种思想,在MATLAB中编制的32点全并行结构FFT算法的主程序ffttheroytest.m如下:% %%-- 时间抽取32点基-2固定缩小比例(2/级)fft的matlab验证程序--%% %%--本代码主要用来分析,此种FFT算法中相位误差的来源clear;clc;PI=3WIDTH=8;POINTS=32;%--下面的程序用于产生仿真所需的输入信号(正弦信号),其时域离散值如下图所示%%%%%%%%%%%%%%%MULT_F=3;OMIGA=2*PI/(POINTS-1)*MULT_F;%OMIGA=2*PI/(POINTS)*MULT_F;%区别在于能否将输入信号恰好完整充满32点(/(POINT)不能),如上图所示N=[0:1:31];indata_signal=cos(OMIGA*N);%indata_signal=sin(OMIGA*N);CONSTANT=0;indata=round((indata_signal+CONSTANT)/max(indata_signal+CONSTANT)*2^(DWID・・TH-1));fori=1:POINTS%--产生仿真波形中的输入数组(要用补码来表示)ifindata(i)<0indata_comp(i)=2ADWIDTH+indata(i);%--取负数的补码elseifindata(i)==2A(DWIDTH-1)%--避免对“+1”归一化时的错误indata_comp(i)=indata(i)-1;elseindata_comp(i)=indata(i);end;end;fftout_xil=floor(fftout_mat/(2Alog2(POINTS)));%--因为在设计中为了防止每级蝶形运算的数据溢出,所以每级输出数据缩小了2倍absout_xil=abs(fftout_xil);%--FFT结果的理论模值thetaout=angle(fftout_xil);%--FFT结果的理论相位值(弧度表示)。Thetaout_xil=thetaout*2A(DWIDTH-3);%--按Xilinx的CORDIC核中定义的数据格式缩放后的数值(波形中的理论数值,便于比较用)%theaout_du=theaout/PI*180;%--度数表示的FFT相位理论输出结果[g1out,g2out,g3out,g4out,g5out]=simfft(indata);%--输出FFT运算每一级的运算结果主函数主要用来产生仿真所需的输入数据,以及将理论输出数据(无截断)变换成FPGA软件显示的数据格式,以便于进行比较。主函数调用了simmfft函数。Simmfft函数采用定点数的运算形式,主要是为了模拟FPGA器件内部的操作,该函数还将FFT每一级的运算结果给了出来,这样可方便与FPGA仿真结果进行比较验证。该函数调用了一个蝶形运算函数butfly.m。该函数采用的也是定点运算,目的是模仿FPGA内部操作。有了这些函数,将它们放在同一目录下,在将MATLAB软件的当前目录(CurrentDirectory)定位到此目录,然后再命令窗口中运行主程序ffttherottest,可得如下所示运行结果。glout=2,124,-19,37,9,-107,18,50,19,25,-2,126,-13,-99,13,-91,13,91,-12,100,-2,-126,18,-24,17,-49,10,108,-19,-37,2,-124g2out=-9,62-19i,11,62+19i,12,-54-25i,-4,-54+25i,8,12-63i,10,12+63i,-1,-50+45i,-13,-50-45i,0,45-50i,0,45-50i,12,45+50i,7,-63+12i,-9,-63-12i,12,-25-54i,4,-25+54i,-10,-19+62i,-10,-19-62ig3out=0,2,5+2i,59+19i,-10,60-20i,5-2i,3-1i,3,4+1i,5+6i,7+64i,5,8-65i,5-6i,5-2i,3,3+1i,6+4i,40+51i,-3,41-51i,6-4i,4-1i,1,2+1i,2+5i,-29+55i,11,-28-55i,2-5i,3-1ig4out=1,3-1i,5+1i,59+18i,-5-3i,-2-2i,-2-1i,-2-2i,-1,-1+1i,-1+1i,-1,-5+3i,62-18i,6-1i,4,1,2,5+3i,39+48i,-2-6i,0-3i,0-1i,0-2i,1,0,1+1i,1+2i,-2+6i,40-49i,6-3i,4g5out=0,1-2i,4,58+18i,-6-4i,-3-2i,-2-2i,-2-2i,-1-1i,-1,-1-1i,-1-1i,0,-1-1i,0-1i,0,1,0,0,0,1,0,0,-1+1i,-1,-1+1i,-1+1i,-5+3i,62-16i,7-1i,4+1i上述运行结果分别代表FFT运算每一级的输出,最后一级的输出也就是整个FFT的运算结果。这些输出结果都是定点运算的结果,所以都是以整数的形式显示的。可以用这些数据与FPGA设计的仿真输出结果进行比较来辅助FPGA设计。1.3全并行结构FFT的FPGA实现高速FFT在雷达、通信和电子对抗等领域都有广泛应用,在某些场合要求对采样速率1GHz以上的数据进行实时处理。利用FPGA器件的丰富资源采用全并行加流水先FFT算法,可对速率为2.9GHz的采样数据实现实时(数据不堆积傅里叶变换)。这里采用Xilinx公司最新VirtexIIPro.系列中的xc2vp125-6ff1704器件对设计进行编译、综合、布局布线、也可以采用Altera公司的Stratix器件来完成本设计。VirtexIIPro是一款具有高性能结构体系的FPGA器件,它集成强大的内核性能、大存储带宽、数字信号处理(DSP)功能、高速I/O性能和模块化设计于一体,采用LVDS数据传输模式其最高I/O速率可达840MHz,内嵌的DSP模块具有很高的乘法运算速度,内部最高时钟可达420MHz。在用VHDL编程时可以用IPCoreGen(IP核生成器向导)的方法指定用DSP模块生成乘法器,用这种乘法器来做蝶形,然后用多个蝶形构成FFT运算级,再将多级串联,即可实现FFT核心运算的全并行流水结构。设计的输入采用硬件描述语言和图形输入相结合的方法,在Xlinx公司的软件ISE中完成设计的输入,并对设计进行综合、编译、布局布线等操作,最后用ModelSim软件和MATLAB软件对设计做了联合仿真。通过利用FPGA器件中大量的乘法器、逻辑单元、存储器等硬件资源,采用全并行加流水结构,实现了在一个时钟节拍内完成32点FFT的功能,设计最高运算速度可达11ns,可对采样速率为2.9GHz的输入数据进行实时处理。为了在FPGA设计中充分应用模块化的设计思想,采用自顶向下的设计方法。设计的顶层模块采用图形输入,其结构如图2所示。图2全平行FFT的FPGA实现顶层模块图顶层模块是整个设计的最高层次,它的左边管脚是设计的输入管脚,这里采用的数据位宽为8位;右边是输出管脚,数据位宽也是8位;中间是结构完全相同的蝶形模块,其输入输出管脚如图3所示。输入是两个8位的复数输入信号和一个复数的旋转因子输入信号,以及时钟输入信号,输出则是两个复数的运算结果。蝶形模块是这种全并行FFT设计的核心模块,其内部结构如图4所示。它由4个乘法器、3个加法器、3个减法器和4个移位器等模块组成。其中乘法器模块可应用VirtexIIPro.器件中的DSP模块来实现,可以通过在生成此模块时应用IPCoreGen中相应的选项来实现。这些DSP模块是由Xilinx公司专门设计并嵌入到其高端FPGA产品中的,用来提高器件的数据处理功能。因此,用这些FPGA中的运算都是采用定点处理的,所以,每次乘法之后数据位宽都要扩大一倍,同时,相乘后的数据又要做加、减运算,为了保证数据不溢出,必须将数据位宽扩展一位,如此下去FFT运算最后一级输出的数据位宽将达到m°N+2(N-1),其中m°是输入数据的位宽,N是FFT运算的点数。按此公式计算输入数据位宽为8位的数据,即使只做8点FFT要想保留全部有效数字其输出位宽也将达到78位,随着FFT运算点数的增加,输出数据的位宽将成2的指数次幕增长,其占用的器件资源将是惊人的,以致无法实现。因此,对中间运算数据需进行截断,当然这会带来误差。这里采用的方法是取乘法器输出结果的高8位,同时每级蝶形运算的输出都固定缩小2倍(可以通过移位运算来实现)。对于FFT运算,所关心的主要是输出数据的相对幅度,因此这种固定的缩小倍数对FFT运算结果影响不大。通过下面介绍的ModelSim与MATLAB联合仿真结果,将分析这种截断误差对全并行FFT运算结果的影响。

肝】〔7期xi1(7:0)xMrlg)肝】〔7期xi1(7:0)xMrlg)xkilg}Ki2(7:0}邮7:®心m0)dock图4蝶形模块内部结构图图3蝶形模块输入输出管脚图用Xilinx公司的ISE软件经过编译、综合、布局布线后,从软件给出的报告文件中可以看出设计的资源利用情况,见表1。可见全并行结构FFT的资源消耗比较大,特别是乘法器模块使用比较多,管脚也利用的比较多,这可以通过在本设计的前端加串并转换模块,在后端加并串转换模块来减少对管脚资源的利用。通过ISE6.1软件给出的时序分析报告能够看出,本设计的运算速度非常快,最高可达11ms,运算时间主要消耗在蝶形模块中的截取(移位)运算和乘法运算上。下面将用联合仿真方法进行验证。表1全并行FFT资源利用情况翌件型号■2叩篇掘口醐书使用量总量济占百分比引脚策源映用情徂32050%戒法器嫌源便闭情由320556谜粗单元(SLTCT.)使用情猊1091219%全局时钟^冲置(BUfGMUX)使用情况161.4ModelSim与MATLAB联合仿真1联合仿真方法介绍在FPGA设计中软件仿真非常重要,一方面可以加快设计,另一方面也可以及时地发现设计中存在的问题。在将设计下载到FPGA器件之前,对设计做充分的仿真是必不可少的,随着FPGA设计系统越来越复杂,充分的时序仿真将是一个系统良好运行的前提。常用的FPGA设计仿真软件,无论是Altera公司的QuartusII软件还是Mentor公司的ModelSim软件,都只能够用于工的波形输入方式或用行为级的硬件描述语言(VHDL,旋rilog)方式进行仿真数据的输入,仿真结果也只能够以波形的方式输出,这对设计结果的验证极其不方便。当需要仿真带有噪声的输入信号时(这往往是仿真现实信号环境所必需的),甚至是不可能的。针对上述FPGA设计中遇到的问题,这里给出一种利用ModelSim和MATLAB软件来实现联合仿真的方法。首先,在MATLAB中产生仿真所需要的输入信号(信号加噪声),以十六进制的形式存放在数据文件中;其次,在ModelSim中用VHDL编写仿真测试软件(TestBench),用IEEE的TEXTIO库中的READ和READLINE函数将上述仿真数据文件中的测试向量读入,在ModelSim中做时序仿真(布局布线后的仿真),并调用WRITE和HWRITE函数将仿真结果写入另外一个数据文件中;最后,在MATLAB中将ModelSim仿真输出数据文件中的数据读入一个数组中,可以做图分析,或做进一步误差分析。还可以将ModelSim中的仿真结果与MATLAB中做出的理论结果相比较来验证设计的正确性。这样可以比直接用人工方法将输入数据通过波形输入,再用人工方法通过对比

输出波形中的数据来验证设计的正确性要直观,方便得多。下面将这种联合仿真的方法应用到本设计中,来分析设计的正确性和误差来源。考虑有噪声和无噪声两种情况下这种全并行FFT的性能。2输入数据无噪声情况首先用MATLAB产生一个单音余弦信号,采样频率为32Hz,信号频率为3Hz,幅度为1,初始相位为00,输入信号为32点实信号,数据位宽为8位,其时域和频域如图5所示。输入数据时域值FFT输出理论值8040201 1 I 1 11:T0FFT输出理论值8040201 1 I 1 11:T015 20 25 30部图5输入信号时域及频域图形(无噪声)将产生的数据输入文件作为ModelSim的仿真输入向量,在ModelSim中做布局布线后的仿真,并将仿真的输出结果用前面介绍的联合仿真方法导入数据文件中,再用MATLAB做出其图形来,结果如图6所示。图6中下部图形的幅度与上部ModelSim仿真波形中的数据相对应。通过联合仿真已经将输出波形中的数据导入数据文件中,通过与MATLAB中做出的理论结果(图5)相比较可以得到如图7所示的比较图形。图6联合仿真输出结果(无噪声)图6联合仿真输出结果(无噪声)输出数据幅值误差分析输出数据相位误差分析图7设计输出与理论结果的比较(无噪声)在信号频率点处的幅度误差为12%,这是由于FPGA处理过程中数据截断产生的,一般讲幅度增益不影响信号所含有的信息;相位误差在有信号的频率点处(第4点和第29点)误差小于5o,误差也是来源于FPGA运算中的截断处理。3输入数据有噪声情况下面用MATLAB产生被噪声污染的单音余弦信号,

温馨提示

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

最新文档

评论

0/150

提交评论