基于Matlab_DSP Builder的正弦信号发生器设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于Matlab/DSP Builder的正弦信号发生器设计
引言
近年来随着通信技术的不断发展,信号的正确传输显得日益重要,也就是说要有一个可靠的能产生稳定确信号的发生器,基于Matlab/DSP Builder的正弦信号发生器是利用Matlab/DSP Builder的模块进行的模快化设计,软件的设计采用模块化结构,使程序设计的逻辑关系更加简洁明了、易懂、易学。使硬件在软件的控制下协调运作。
DSP Builder可以帮助设计者完成基于FPGA的DSP系统设计设计,除了图形化的系统建模外,还可以完成及大部分的设计过程和仿真,直至将设计文件下载到DSP开发板上。此次实验的目的就是将两者的优势有机的结合在一起,利用DSP的优势开发正弦信号发生器。
在设计中主要采用DSP Builder库中的模块进行系统的模型设计,然后再进行Simulink仿真。
1.设计思想
1.1 DSP Builder特点
DSP Builder系统级(或算法级)设计工具,它架构在多个软件工具之上,并把系统级(算法仿真建模)和RTL(硬件实现)两个领域的设计工具连接起来,最大程度的发挥了两种工具的优势。DSP Builder依赖于MathWorks公司的数学分析工具Matlab/Simulink,可以在Simulink中进行图形化设计和仿真,同时又通过Signal Compilder把Matlab/Simulink的设计文件(.mdl)转换成相应的硬件描述语言VHDL设计文件(.vhd),以及用于控制和编译的tcl脚本。而对后者的处理可以用Quartus II来实现。
1.2 QuartusII特点
QuartusII提供了完整的多平台设计环境,能满足各种特定设计的需要,是单芯片可编程系统(SOPC)设计的综合性环境和SOPC开发的基本设计工具,并且为Altera DSP开发包进行系统模型设计提供了集成综合环境。QuartusII完全支持VHDL的设计流程,其内部嵌有VHDL逻辑综合器。QuartusII也可以利用第三方的综合工具,如:Leonardo Spectrum、Synplify Pro、FPGA Compiler,并能直接调用这些工具。同样QuartusII具备仿真功能,同时也支持第三方的仿真工具,如:ModelSim 。此外,QuartusII与Matlab和DSP Builder结合,可以进行基于FPGA的DSP系统开发,是DSP硬件系统实现的关键EDA工具。
1.3 DSP的一般设计流程
图1—1所示的是DSP Builder的一般设计流程的框图,它针对不同情况提供了两套设计流程,即自动流程和手动流程。它们的在设计输入、图形化仿真、分析功能等步骤是几乎一样的,只是设计模型采用DSP Builder的Simulink库。再往后若采用自动流程,则几乎可以忽略硬件的具体实现过程,直至在Matlab 中完成FPGA的配置下载过程;但若想采用第三方综合器和仿真器,就需要采用手动流程,有设计者制定综合、适配条件,最后用QuartusII产生相应的编程文件用于FPGA的配置。
图1—1DSP Builder设计流程框图
1.4 系统的工作原理
正弦信号发生器的结构由4个部分组成:数据计数器或地址发生器(6位);正弦信号数据ROM(6位地址线,8位数据线),含有一个周期共64个8位数据;VHDL语言顶层设计;8位D/A转换。
如图1-2所示,顶层文件Singt.vhd在FPGA中实现,包含两个部分:ROM的地址信号发生器,由6位计数器担任;一个正弦数据ROM,由LPM__ROM模块构成。LPM__ROM底层是FPGA中的EAB、ESB或M4K等模块。地址发生器的时钟CLK的输入频率f
与每周期的波形数据点数(在此选择64点),以及D/A 输出的频率
f的关系是:
f= f
/64
图1—2 正弦信号发生器结构图
本系统是一正弦波发生器。它通过IncCount产生一个按时钟线性递增的地址信号,送往SinLUT。SinLUT由递增的地址获得正弦波的量化值输出。由SinLUT 输出的8位正弦波数据经过一个延时模块后送往乘法模由SinLUT输出的8位正弦波数据经过一个延时模块后送往乘法模块Product与SinCtrl相乘。由于SinCtr是一位(bit)输入,SinCtr通过Product就完成了对正弦波输出有无的控制。SinOut是整个正弦波发生器模块的输出,送往D/A即可获得正弦波的输出(模拟信号)。设计完成以后,将其转化成VHDL语言,再通过QuartusII对将模块进行编译。这个过程包括分析/综合、适配、装配、时序分析等等.最后在实验箱上模拟。
图1—3 正弦波发生器模块原理图:
2.技术实现
2.1总体设计
本正弦信号发生器由6位的地址信号发生器IncCount产生一个按时钟线性递增的地址信号,送到含有64个8位数据的正弦信号数据ROMSinLUT,由SinLUT 输出的8位正弦波数据经过一个延时模块后送往乘法模由SinLUT输出的8位正弦波数据经过一个延时模块Delay后送往乘法模块与一位控制信号相乘,再输出即可。然后用QuartusII直接完成适配和时序仿真,最后下载至实验箱模拟。2.2设计及实现部分
2.2.1 建模准备
在Matlab界面里建立一个新的文件夹(mkdir /zhangkui/yezi),作为工作目录,并把Matlab当前的Work目录切换到新建文件夹下。Simulink是基本模型库。在以下的DSP Builder应用中,主要是使用该库中的组件、子模块来完成各种设计,再使用“simulink”库来完成模型的仿真验证。新建一个simulink的模型文
件(后缀为.mdl)就会出现是新模型窗口。
2.2.2 建立模型文件
⑴把AltLab库管理器中的Signal Compilder组件拖到Signal Compilder到新模型窗口中。当在simulink库管理器中选中模块(Block)后,在库管理器的提示栏中会显示对应模块的说明,有简单的功能介绍。
⑵Increment Decrement模块是DSP Builder库中Arithmetic(算术)模块。把Arithmetic条中的Increment Decrement模块拖到新建模型窗口中。
将Increment Decrement的名字修改为“IncCount”。然后把IncCount模块做成一个线性递增的地址发生器,然后对IncCount的参数进行相应的设置。在IncCount模块的参数设置对话框“Block Parametres:IncCount”中,在“参数设置”对话框的上半部分是该模块的功能描述和使用说明:对话框的下半部分的参数设置部分,对于Increment Decrement模块共有下面几种参数可以设置:
①总线类型(Bus Type);
②输出位宽(Number of bits);
③增减方向(Direction);
④开始值(Starting Value);
⑤是否使用控制输入(Use control Inputs);
⑥时钟相位选择(Clock Phase Selection);
对于总线类型(Bus Type),在下列列表框中共有3种选择:
A、有符号整数(Signed Integer);
B、有符号小数(Signed Fractional);
C、无符号整数(Unsiged Integer);
在这里选择“Signed Integer”,即有符号整数。对于输出位宽,由于正弦查找表(SinLUT)地址为6位,所以设置位宽设置为6。IncCount是一个按时钟增1是计数器,Direction设置为Increment(增量方式)。Use Control Input项不选。因为如果选中此项,此模块会出现两个输入端分别是复位端和时钟端。通常在simulink图中的元件的复位和时钟端(如果存在的话)是分别默认接于低电平和与全局时钟相连的。Clock Phase Selection可设置为1(二进制)其它的设置采用Increment Decrement模块的默认设置。
图2—1 递增递减模块改为IncCount
⑶把Gate库中LUT拖到新建模型窗口名字修改为“Sin LUT”。设置参数,把输出(Output[number of bits])改为8,查找表地址线宽(LUT Address Width)设为6。总线数据类型选择为有符号整数(Signed Integer);在MATLAB Array 编辑框中输入计算查找表内容的计算式。在此直接使用sin(正弦)函数,在这里sin函数的格式调用为:
Sin[起始值:步进值:结束值]
SinLUT是一个输入地址为6位,输入值位宽为8的正弦查找表模块,且输入