一种谱的Matlab与VHDL代码转换方法

时间:2024-03-29 点赞:50222 浏览:101495 作者原创标记本站原创

本文是一篇模块论文范文,关于模块方面毕业论文格式,关于一种谱的Matlab与VHDL代码转换方法相关在职研究生毕业论文范文。适合模块及蝶形及参考文献方面的的大学硕士和本科毕业论文以及模块相关开题报告范文和职称论文写作参考文献资料下载。

【摘 要】本文讨论由Matlab生成VHDL代码的原理,并介绍了利用SystemGenerator及DSPBuilder将Simulink模型转换为VHDL代码的方法.这样设计者可以利用Simulink高层次的设计仿真工具进行系统级设计,有助于在设计早期发现错误和应对系统复杂性不断增加的挑战,使用集成转换工具能够方便地进行VHDL代码的生成并进行硬件测试,极大地提高了设计效率.

【关 键 词】MATLAB;傅里叶变换;频域分析;VHDL

频谱分析在生产实践和科学研究中有着广泛的应用.其中,快速傅里叶变换(FastFourierTranorm,FFT)是数字信号处理的最基本技术之一.近年来,随着现场可编程门阵列FPGA(FieldProgrammableGateArray)技术的迅猛发展,利用高并行度、高速度的FPGA芯片来实现FFT已成为必然趋势.

本文将以MATLAB为工具,对信号与系统在联系时间系统的频域进行分析.

一、Matlab编程实现FFT实践频谱分析

步骤如下:

1.用Matlab产生正弦波,矩形波,以及白噪声信号,并显示各自时域波形图.

2.进行FFT变换,显示各自频谱图,其中采样率,频率、数据长度自选.

3.做出上述三种信号的均方根图谱,功率图谱,以及对数均方根图谱.

4.用IFFT傅立叶反变换恢复信号,并显示恢复的正弦信号时域波形图.

正弦波、矩形波以及白噪声三种信号的FFT变换(傅里叶变换)及IFFT变换(傅里叶反变换恢复信号).

图1-1正弦波

图1-2矩形波

图1-3白噪声信号

二、FFT算法在基于VHDL的FPGA下实现

1.基于VHDL的FPGA设计流程

本小节以Xilinx公司的FPGA系统开发为实例,FPGA的设计流程一般包括系统功能设计定义、设计输入、功能仿真、逻辑综合、前仿真、设计实现(包括翻译、映射、布局布线)、时序仿真与验证、下载配置与器件编程、测试验证等几个步骤.

本设计运用ISE和ModelSim与Matlab联合仿真的设计方法.

ISE的简称为集成综合的环境,是Xilinx公司的配套设计软件,这种工具可完成上述FPGA/CPLD的整个开发过程

2.FPGA的基本原理和结构

FPGA即现场可编程门阵列,相对其他可编程器件具有更高的集成度、更强的逻辑实现能力和更好的设计灵活性.

FPGA的基本结构如图2-1所示.CLB阵列实现用户指定的逻辑功能,它们以阵列的形式分布在FPGA中;IOB为内部逻辑与器件封装引脚之间提供了可编程接口,它通常排列在芯片四周;可编程互连资源分布在CLB的空隙,互连资源可以编程配置在模块之间传递的信号网络,用于实现各个CLB之间、CLB与IOB之间以及全局信号与CLB和IOB之间的连接.FPGA利用可编程查找表实现逻辑块;程序控制多路复用器实现其功能选择.

图2-1FPGA的基本结构

3.FFT处理器的设计

本设计用于基于IEEE802.11a协议的OFDM系统的OFDM调制,根据IEEE802.11a协议规定,OFDM调制采用64点FFT变换,采样速率20M/s,即采样周期为50ns,即64点FFT数据输入的时间为64*50ns等于3200ns.

本系统采用的时域抽取算法中要对输入的所有数据进行倒序以后才开始蝶形运算,FFT可以分为数据输入、蝶形运算两个阶段,蝶形运算结束后,将最终结果存储到另一个单独的结果存储器另行读取,而为了能对输入数据实现连续的FFT变换,就需要蝶形运算的总时间小于3200ns,这样就可以用两个FFT模块去轮换做FFT,实现连续的FFT处理.如图2-2所示.

64点的基2的时域抽取FFT算法总共有6级蝶形运算,每级32次蝶形运算,总共需要32*6等于192个蝶形运算,如果采用单蝶形设计,需要192次蝶形运算,蝶形运算的极限时钟周期为3200ns/192等于16.67ns,在本设计的蝶形运算时钟周期采用16ns.

开发环境:QuartusII6.0

选择FPGA芯片:Altera公司Stratix系列中的EP1S10484C5

语言:VHDL

图2-2两个FFT模块

三、MATLAB到VHDL转换工具Simulink

Simulink程序包是MathWorks公司提供的一个非常有吸引力的高水平设计、仿真工具.

1.高效地从Simulink到VHDL的转换工具

目前为止,设计者经常遇到的最大问题是怎样完成从算法设计到物理实现的转换.在这个问题的研究发展过程中,设计者首先使用的是一种高层次的设计仿真工具,最通常的就是Matlab的Simulink.首先利用Mathworks的Matlab/Simulink完成顶层系统设计,然后通过转换工具配置Simulink中的IP核,即将静态参数传递给基于VHDL的IP,将Simulink模型文件(.md1)转换成VHDL的RTL表述和工具命令语言(Tcl)脚本,同时还可进行RTL级的功能仿真;然后通过SOPC设计工具进行综合、适配与时序仿真;最后形成对指定FPGA进行编程配置的POF和SOF文件,实现硬件系统的仿真测试.转换的工作可以描述成以下几步:

(1)分析并确定Simulink模型.

(2)产生VHDL环境.

(3)生成对应网表文件或示意图进行布局、布线和硬件的下载测试.2.从Simulink到VHDL的自动转换

为了简单化转换程序,在最初的Simulink模块中设定一些约束条件(如图3-1所示):

(1)运行高字节的信号或变量;

(2)整个设计只有一种取样率;

(3)系统只由入口、常数、端口及总线组成.

这些能够使相关的VHDL结构描述比较容易地产生.工具箱的下一部分就可以允许不同的变量类型和生成可应用的结构和行为的VHDL.

图3-1从Simulink到VHDL转换流程

从MDL(主要数据程序)模型到VHDL的转换的初步翻译由的Matlab程序完成.由于对Simulink描述的分析比较困难,生成的VHDL代码需要额外的编辑.例如,一些基本模块如标准逻辑门和双相位时钟等的行为描述被手动设计成标准模块库中的一部分.

四、Matlab/Simulink到VHDL代码的转换研究

1.XilinxSystemGenerator

Matlab中的Simulink是一种对动态系统进行建模、仿真及分析的交互式工具.Xilinx公司新推出的SystemGenerator是一种高性能的设计工具,他可以嵌入作为Simulink的一部分运行.在Simulink中SystemGenerator打包为XilinxBlockset,从Simulink的库中可以浏览.SystemGenerator设计流程图如图4-1所示.


转换的操作也很简单,在SystemGenerator的模型参数设置对话框,选择一个输出路径并选择“CreateTestbench”,单击“Generate”就可以生成VHDL代码和设计的testbench变量.当选择生成testbench变量后,Simulink将重新运行刚才的仿真.这次由于将经历代码生成过程,他将在testbench变量中保存所有输入和输出信息供VHDL和post-PAR仿真调用.

图4-1Systemgenerator设计流程图

2.基于SystemGenerator的FFT算法的实现

SystemGeneratorforDSP是Xilinx公司开发的基于Simulink图形环境的DSP开发工具.利用SystemGenerator工具,即使是没有多少FPGA设计经验的设计人员也能够快速开发出高性能的FPGA来实现DSP算法.

FFT算法实现流程:

根据FFT算法的原理以及SystemGenerator工具的特点,可以在SystemGenerator中完成FFT算法的设计,然后自动生成HDL代码,通过ISE软件生成位流文件下载到FPGA中,从而完成整个设计.

实验环境:matlab2010b、ISE12.3、SystemGeneratorforDSP12.3

(1)系统模型设计

在Simulink环境中建立一个mdl模型文件,用图形方式调用SystemGenerator和其它的Simulink原图形模块,构成系统级或算法级设计框图如图4-2所示.

图4-2设计框图

Gatewayin和Gatewayout模块:用于双浮点精度数据和定点数据之间的转换.

SystemGenerator模块:提供Matlab和硬件设计环境ISE的接口,可在指定目录中产生可在ISE软件下实现的硬件描述语言.

Delay模块:构成一个时延环节,可以配置其延迟时钟周期的整数倍.

FIFO模块:用于实现一组FIFO列.

FFTv3_2模块:为离散傅立叶变换(DFT)提供了一种有效算法.该模块根据不同的结构和实现方式有三种模式可供选择:1)流水线,StreamingI/O结构;2)基4,BurstI/O结构;3)基2,BurstI/O结构.

(2)验证与仿真

为了证明模型设计的正确性,需要对模型进行测试试验,将FFT模型的仿真结果与MATLAB的理论计算结果进行比较,完成对所建立模型的测试工作.

1)信号在MATLAB中的处理

系统的输入函数为,点数N等于512,采样周期为1s,在MATLAB中实现FFT处理的程序描述如下:

n等于512;

n等于0:511;

t等于1*n;

k等于n;

x等于sin(2*pi/25*t);

y等于fft(x,N);

r等于real(y);

i等于imag(y);

subplot(1,1,1);

plot(k,r);

subplot(1,1,1);

plot(k,i);

通过以上程序得到正弦信号通过512点FFT处理后的MATLAB理论计算结果如图4-3所示.

a)实部结果b)虚部结果

图4-3MATLAB理论计算结果

2)信号在FFT模型中的处理

在仿真前先对Gatewayin模块和FFTv3_2模块进行一下参数配置:

Gatewayin模块

Outpe:Signed

Numberofbits:16

Binarypoint:15

Quantization:Round

Overflow:Saturate

Sampleperiod:1FFTv3_2模块:

Impliment:PipelinedStreamingI/O

Numberofsamplepoints:512

Outputordering:Naturalorder

Scaling:Unscaled

Roundingmode:Truncation

Phasefactorbitwidth:8

将参数配置好后在Simulink的FFT模型的输入端输入正弦信号,然后选择simulink/start,待仿真结束后查看scope模块所显示的仿真结果如图4-4所示.

a)实部结果b)虚部结果

图4-4FFT模型仿真结果

比较图5-3和图5-4的波形,可以看出FFT模型处理后的结果和Matlab的理论计算结果的波形基本一致,得到的都是频率单一的实部和虚部.

需要说明的是:在图5-5中实部和虚部的输出都是从横坐标的1118点开始的,这是因为FFT模型中的FFTv3_2模块参数选择的是PipelinedStreamingI/O模式,在该模式下输出需要延迟一段处理时间然后才能连续输出,这里横坐标的1118点实际上就是输出的起始点,也就是输出的的k等于0的位置.

3.自动代码生成

通过上面的测试实验,证明所建立的FFT模型是满足要求的,下面就需要将FFT模型转换成HDL代码.双击打开SystemGenerator模块的系统设定对话框,在该对话框中设定好目标器件的型号(Virtex6xc6vsx315t-3ff1156)、综合工具(XST)、产生语

本文是一篇模块论文范文,关于模块方面毕业论文格式,关于一种谱的Matlab与VHDL代码转换方法相关在职研究生毕业论文范文。适合模块及蝶形及参考文献方面的的大学硕士和本科毕业论文以及模块相关开题报告范文和职称论文写作参考文献资料下载。

言种类(VHDL)等参数(如图4-5所示),并且选中“Createtestbench”选项,之后启动SystemGenerator模块,将在指定目录中产生可在ISE软件下实现的硬件描述语言,并且自动生成设计的测试代码.

图4-5Systemgenerator的参数设置

Gatewayin模块的参数设置如图4-6所示:

图4-6Gatewayin模块的参数设置

五、总结

本文的研究工作主要是以下几个部分:

1.介绍了傅里叶变换及其在频谱分析中的应用;

2.研究了利用MATLAB实现谱分析的傅里叶变换,其中包括基于MATLAB的连续信号与离散信号的频域分析;另外,本文实现了基于MATLAB的快速傅里叶变换(FFT)以及信号的采样——重构操作;

3.探讨FPGA的结构,其中主要涉及基于VHDL的FPGA设计流程;

4.讨论了由Matlab生成VHDL代码的原理,并介绍了利用SystemGenerator及DSPBuilder将Simulink模型转换为VHDL代码的方法.

下一步的研究工作在于对转换研究进行细化和拓展,其中细化部分集中于调试优化,而拓展部分在于各种功能器件的转换实现.

相关论文

MATLAB在DSP代码开发中的应用

本文是一篇电力电子论文范文,电力电子方面有关毕业论文开题报告,关于MATLAB在DSP代码开发中的应用相关毕业论文参考文献格式范文。适合电力。

一种提高随动系统快速性能的方法

本论文是一篇关于自动控制系统论文摘要英文,关于一种提高随动系统快速性能的方法相关学士学位论文范文。免费优秀的关于自动控制系统及系统。

一种基于经分数据的网络评估方法

本文是一篇互联网论文范文,关于互联网方面本科毕业论文,关于一种基于经分数据的网络评估方法相关大学毕业论文范文。适合互联网及工程师及业。

一种卷钢涂料涂布率的测试方法

本文是一篇涂料论文范文,关于涂料类本科毕业论文范文,关于一种卷钢涂料涂布率的测试方法相关学士学位论文范文。适合涂料及重量及参考文献方。

机械制图作业错误代码批改方法

本文是一篇机械制图论文范文,机械制图类有关在职毕业论文开题报告,关于机械制图作业错误代码批改方法相关专科毕业论文范文。适合机械制图及。

基于K最近邻的C克隆代码重构方法

本文是一篇代码论文范文,代码有关专升本毕业论文开题报告,关于基于K-最近邻的C克隆代码重构方法相关在职毕业论文范文。适合代码及过程及语。