1、自由设计报告报告名称:混合函数发生器的设计 姓名:学号:【摘要】:本设计根据移位寄存器的相关知识,利用 VHDL 语言设计出混合函数发生器,主要是正弦波,方波,三角波,递增,递减斜波五种函数发生器,然后通过函数选择器进行选择,决定要输出的函数。并通过利用 QuartusII 模拟仿真得到相应的波形。关键词:QuartusII、函数发生器一、 选题背景在课程实验中,我们采用 DDS 技术,用 ISE 产生了正弦波。DDS 技术是从相位概念出发之结合成所需要波形的一种频率合成技术。以正弦波为例,首先要按照一定的采样点数将正弦波形一个周期的数据信息存于 ROM 表中,表中包含着一个周期正弦波的数字幅
2、度信息,每个地址对应正弦波中 0 到 360 度范围内的一个相位点的幅度值,查找表时即是把输入的地址相位信息映射成正弦波幅度的数字量信号,通过设置的输出端口输出。在实物设计中,可以使用 D/A接口来实现波形信号的输出。在这里,如果可以产生正弦波或者其他波形,则可以构建一个混合函数发生器,来产生不同的函数,并通过不同的输入来选择输出波形。事实上,函数发生器在生产实践和科技领域有着和广泛的应用。只要用到波形传输的技术和产业,都与函数发生器有着密不可分的关系。通过本次自由设计,可以了解并掌握 VHDL 硬件描述语言的设计方法和思想,通过对函数函数发生器的设计,也可以巩固和综合运用所学知识。 二、 函
3、数发生器概述2.1、设计思想要设计一个函数发生器,就要先确定需要生成的函数种类。一般函数发生器能够产生递增斜波、递减斜波、方波、三角波、正弦波、及阶梯波等。本设计是基于 VHDL 语言设计的混合函数发生器,本实验选择产生的的波形是正弦波,方波,三角波,递增,递减斜波。虽然用模拟电子线路的方法也很容易得到这些波形,但是这种方法会使硬件线路较为繁琐,而且模拟线路会受到干扰。如果可以采用综合设计方法使用 FPGA 来实现混合函数发生器,它可以由六个波形产生模块及波形选择输出模块组成,波形选择模块的输出 Q 接在D/A 转换的数据端,就可以在 D/A 输出端得到想要的其中之一的任一种光滑的波形。2.2
4、、QuartusII 与 ISE的选择ISE 是产生高质量函数波形的很好的软件,但是其必须要实物来进行实现。且由于自己的私人电脑无法安装 ISE 软件,故选用 QuartusII 来进行模拟与仿真。QuartusII 是另一种 FPGA 工具,它可以脱离电路板进行模拟,方便快捷,提 供 了 完 全 集 成 且 与 电 路 结 构 无 关 的 开 发 包 环 境 , 具 有 数 字 逻 辑 设 计 的 全 部特 性 ;占用空间小,一般学生使用电脑即可以承受并安装。三、 函数发生器设计3.1、系统结构混合函数发生器主要由六大模块组成,其中五大模块是用来产生常用的波形图,包括正弦波,方波,三角波,递
5、增,递减谐波五种波。在这六个模块中,每个都有两个输入端口,分别是时钟信号端口 CLK,CLK 输入时钟脉冲,时钟上升沿有效,和复位清零信号 RESET,当高电平有效时,系统恢复初始状态;每个模块还有一个输出端口,输出对应的波形函数。另一大模块就是波形选择模块,SEL【20】为输出选择信号,该信号的不同取值对应递增斜波、递减斜波、方波、三角波、正弦波、阶梯波六种不同的输出;Q 【70】为输出信号,根据输出函数选择信号 SEL【20】的取值输出相应的波形。以下是混合函数发生器的主要系统结构示意图:图 1 系统流程图3.2、顶层结构顶层结构事实上是一个多路选通器,利用它来控制输出哪一个函数波形:图
6、2将上述 6 个模块(递增锯齿波、递减锯齿波、三角波、方波、5 选 1 数据选择器)封装成为模块文件,供顶层电路调用。则可以得到以下顶层文件电路:图 3 总的顶层模块3.3、模块文件设计1、三角波图中 CLK 为时钟输入信号,CLR 为复位清零信号,Q【70】为输出波形函数。图 42、递减锯齿波图 53、递增锯齿波图 64、方波图 75、正弦波在一个 sin 周期内采集 64 个点,用 MATLAB 编出这 64 个点对应的二进制值,然后赋给程序里面的 number 信号。图 8其中 MATLAB 程序如下:quzhi=zeros(1,64);interger=zeros(1,64);unsi
7、gn=zeros(1,64);binary_chu=zeros(64,10);binary=zeros(64,10);k=1;yu=1;for i=1:1:64quzhi(i)=255*sin(i-1)*2*pi/63)+255;endinterger=round(quzhi);unsign=interger;for i=1:1:64k=1;yu=unsign(i);while(yu=0)binary_chu(i,k)=yu-floor(yu/2)*2;yu=floor(yu/2);k=k+1;endbinary_chu(i,10)=i;endfor i=1:1:64k=10;for j=1:
8、1:10binary(i,k)=binary_chu(i,j);k=k-1;endendunsignbinary 四、VHDL 程序实现4.1、多路选通器4.2、三角波4.3、递减锯齿波4.4、递增锯齿波4.5、方波4.6、正弦波五、系统仿真通过选择不同的 sel 值,可以实现不同的波形输出。仿真中 reset 复位信号一直置高电平,即没有仿真复位情况。5.1、三角波信号发生器顶层电路的仿真输出波形为三角波。输出的波形线性减小到最小值 0 后,再线性增加。图 95.2、递减锯齿波信号发生器顶层电路的仿真输出波形为递减锯齿波。输出的波形线性递减。图 105.3、递增锯齿波信号发生器顶层电路的仿真
9、输出波形为递增锯齿波。输出的波形线性递增。图 115.4、方波信号发生器顶层电路的仿真输出波形为方波。输出的波形为周期性的全 0或全 1。图 125.5、正弦波图 13六、心得及体会6.1、关于实现方法的选择想要做一个函数发生器有很多方法。比如说我们可以完全采用采点赋值的方法,像构建正弦发生器一样构建其他的函数发生器。但是这样一来比较麻烦,每个函数都需要写相应的 MATLAB 的生成代码,二来觉得如果可以采用系统自动发生的方法,效果会更好。6.2、学习心得本次设计完成了以下几点目标:(1)信号发生器的功能测试与仿真实验结果表明,时序和波形正确,达到了设计的功能要求,说明该设计是行之有效的。(2)为了可以选择不同信号的波形,系统设计了函数选择调用模块,来完成不同函数信号的输出。其实在设计过程中,也可以将一些常用的模块定义为相应的逻辑元件符号,以便共享和复用,使设计具有可重用性和可移植性,可以实现一些复杂系统的设计,提高工作效率。参考文献:【1】 、 智能函数发生器的 VHDL 设计与仿真 ,梁向红, 江苏工业学院学报第 20 卷第 1 期 ,2008 年 3 月【2】 、 基于 VHDL 语言的函数发生器的设计 ,刘冬香, 机电工程技术 ,2007年,第 36 卷第 8 期