- 1、本文档共14页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
基于VHDL的混合函数发生器
自由设计报告
报告名称:混合函数发生器的设计
姓名:
学号:
【摘要】:
本设计根据移位寄存器的相关知识,利用VHDL语言设计出混合函数发生器,主要是正弦波,方波,三角波,递增,递减斜波五种函数发生器,然后通过函数选择器进行选择,决定要输出的函数。并通过利用QuartusII模拟仿真得到相应的波形。
关键词:QuartusII、函数发生器
选题背景
在课程实验中,我们采用DDS技术,用ISE产生了正弦波。DDS技术是从相位概念出发之结合成所需要波形的一种频率合成技术。以正弦波为例,首先要按照一定的采样点数将正弦波形一个周期的数据信息存于ROM表中,表中包含着一个周期正弦波的数字幅度信息,每个地址对应正弦波中0到360度范围内的一个相位点的幅度值,查找表时即是把输入的地址相位信息映射成正弦波幅度的数字量信号,通过设置的输出端口输出。在实物设计中,可以使用D/A接口来实现波形信号的输出。
在这里,如果可以产生正弦波或者其他波形,则可以构建一个混合函数发生器,来产生不同的函数,并通过不同的输入来选择输出波形。事实上,函数发生器在生产实践和科技领域有着和广泛的应用。只要用到波形传输的技术和产业,都与函数发生器有着密不可分的关系。
通过本次自由设计,可以了解并掌握VHDL硬件描述语言的设计方法和思想,通过对函数函数发生器的设计,也可以巩固和综合运用所学知识。
函数发生器概述
2.1、设计思想
要设计一个函数发生器,就要先确定需要生成的函数种类。一般函数发生器能够产生递增斜波、递减斜波、方波、三角波、正弦波、及阶梯波等。
本设计是基于VHDL语言设计的混合函数发生器,本实验选择产生的的波形是正弦波,方波,三角波,递增,递减斜波。虽然用模拟电子线路的方法也很容易得到这些波形,但是这种方法会使硬件线路较为繁琐,而且模拟线路会受到干扰。如果可以采用综合设计方法使用FPGA来实现混合函数发生器,它可以由六个波形产生模块及波形选择输出模块组成,波形选择模块的输出Q接在D/A转换的数据端,就可以在D/A输出端得到想要的其中之一的任一种光滑的波形。
2.2、QuartusII与ISE的选择
ISE是产生高质量函数波形的很好的软件,但是其必须要实物来进行实现。且由于自己的私人电脑无法安装ISE软件,故选用QuartusII来进行模拟与仿真。
QuartusII是另一种FPGA工具,它可以脱离电路板进行模拟,方便快捷,提供了完全集成且与电路结构无关的开发包环境,具有数字逻辑设计的全部特性;占用空间小,一般学生使用电脑即可以承受并安装。
函数发生器设计
3.1、系统结构
混合函数发生器主要由六大模块组成,其中五大模块是用来产生常用的波形图,包括正弦波,方波,三角波,递增,递减谐波五种波。在这六个模块中,每个都有两个输入端口,分别是时钟信号端口CLK,CLK输入时钟脉冲,时钟上升沿有效,和复位清零信号RESET,当高电平有效时,系统恢复初始状态;每个模块还有一个输出端口,输出对应的波形函数。另一大模块就是波形选择模块,SEL【2..0】为输出选择信号,该信号的不同取值对应递增斜波、递减斜波、方波、三角波、正弦波、阶梯波六种不同的输出;Q【7..0】为输出信号,根据输出函数选择信号SEL【2..0】的取值输出相应的波形。
以下是混合函数发生器的主要系统结构示意图:
图1系统流程图
3.2、顶层结构
顶层结构事实上是一个多路选通器,利用它来控制输出哪一个函数波形:
图2
将上述6个模块(递增锯齿波、递减锯齿波、三角波、方波、5选1数据选择器)封装成为模块文件,供顶层电路调用。则可以得到以下顶层文件电路:
图3 总的顶层模块
3.3、模块文件设计
1、三角波
图中CLK为时钟输入信号,CLR为复位清零信号,Q【7..0】为输出波形函数。
图4
2、递减锯齿波
图5
3、递增锯齿波
图6
4、方波
图7
5、正弦波
在一个sin周期内采集64个点,用MATLAB编出这64个点对应的二进制值,然后赋给程序里面的number信号。
图8
其中MATLAB程序如下:
quzhi=zeros(1,64);
interger=zeros(1,64);
unsign=zeros(1,64);
binary_chu=zeros(64,10);
binary=zeros(64,10);
k=1;
yu=1;
for i=1:1:64
quzhi(i)=255*sin((i-1)*2*pi/63)+255;
end
interger=round(quzhi);
unsign=interger;
for i=1:1:64
k=1;
yu=unsign(i);
while(yu~=0)
binary_chu(i,k)=yu
文档评论(0)