EDA课程设计——函数信号发生器

更新时间:2023-05-29 05:32:02 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

EDA课程设计——函数信号发生器

实验报告

学院(系)

专业、班级 学生姓名 学 号 小组其他队员: 指导教师

(1)实验要求

(2)总体设计思路

(3)程序仿真

(4)实验结果

(5)心得体会

一. 实验要求

(1) 利用VHDL语言设计一个多功能信号发生器,可以产生正弦波,三

角波,锯齿波和方波的数字信号。

(2) 焊接一个D/A转换器,对输出的数字信号转换成模拟信号并在示

波器上产生波形。

(3) 在电路板上可以对波形进行选择输出。 (4) 在电路板上可以对波形的频率与幅度进行调节。

二.总体设计思路

信号发生器主要由分频,波形数据的产生,四选一多路选择,调幅和D/A转换五个部分组成。 总体框架图如下:

(1) 分频

分频器是数字电路中最常用的电路之一,在FPGA的设计中也是使用效率非常高的基本设计。实现的分频电路一般有两种方法:一是使用FPGA芯片内部提供的锁相环电路,如ALTERA提供的PLL(Phase Locked Loop),Xilinx提供的DLL(Delay Locked Loop);二是使用硬件描述语言,如

VHDL、Verilog HDL等。本次我们使用VHDL进行分频器设计,将奇数分频,和偶数分频结合起来,可以实现50%占空比任意正整数的分频。

分频器原理图:

在我们本次试验中的实现即为当按下按键时,频率自动减半。如当输入为100MHZ,输出为50MHZ。

(2) 信号的产生。

根据查找资料,我们最终确定了在QUARTUS中波形数据产生的方法,即利用地址信号发生器和LPM_ROM模块。ROM的地址信号发生器,有七位计数器担任。LPM_ROM底层是FPGA中的M4K等模块。然后在VHDL顶层程序设计中将两部分调用从而实现信号的发生。ROM中存放不同的初始化MIF文件(存放不同波形的数据)从而产生不同的波形。

信号产生模块:

信号产生RTL图:

此环节最重要的还有MIF文件的建立,经过查找资料,下载了MIFMAKER 2010软件,从而较为简单的产生了MIF文件。

MIF文件制作图:

(3) 四选一多路选择。

多路选择器模块是实验模块之中最简单的模块,因为在上一

学期的EDA学习中曾经做过四路选择器模块。此模块的基本四路是通过一个两位的输入信号s来决定输出的信号数据,例:s=00时,输出a;s=01输出b ;s=10时,输出c; s=11时,输出d。

多路选择器原理图:

(4) 调幅。

调幅的思路基本上是运用乘法器来完成数据的翻倍从而达到幅度的变化。因此此模块的完成最主要的任务是乘法器的实现。本实验我们开始采用的乘法器是两个矢量类型的数据作为输入,一个是波形数据,另一个则为幅度的变化倍数(变化范围为1,2,3倍)。

如下图:

但后来在硬件上实现时倍数高时容易波形顶部容易产生失真,因此我们对此进行了改进,即将输入的两个八位矢量类型数据通过conv_integer函数产生整数数据,对整数数据进行小幅度乘除(如c=a*b/16),然后将整数数据通过conv_std_logic(c,8)函数转换成八位整数数据输出。从而完成调幅的完美实现。 改进后如下图:

(5) D/A转换。

D/A转换是把数字信号转换为信息基本相同的模拟信号而设计的处理过程,大多数DA转换器由电阻阵列和放大器构成。

根据公式

u0=Rf(ui1/R1+ui2/R2+ui3/R3+…)

计算出

R43=2*R44=4*R45=8*R46=16*R47=32*R48=64*R49=128*R50 R50=2*R42 因此可以选取

R40= R41= R42= 1kΩ R43= 256kΩ R44= 128kΩ R45=64Ω R46= 32kΩ R47= 16kΩ R48= 8kΩ R49= 4kΩ R50=2kΩ

三.程序仿真

正弦波仿真:

三角波仿真:

锯齿波仿真:

方波仿真:

分频器仿真:

多路选择仿真:

乘法器仿真:

总电路仿真:

四.实验结果

正弦波输出:

调频后:

调幅后:

三角波输出:

锯齿波输出:

方波输出:

实物图:

五.心得体会

本设计基于VHDL语言进行设计,利用FPGA芯片为主要芯片,在编程过程中分体现了进程的并行性,利用了五个基本的模块实现了上述的功能。其实本实验的关键还是EDA软件QUARTUS II 的使用,在一开始的接触中,完全不知道本软件的使用方法,在经过一天的视频学习后,对此软件的使用有了较为初步的认识。然后就是vhdl语

言的编写,由于本人的编程语言以前学的不是很好,因此只能一边参照课本一边进行语言的编写。让我印象最深刻的就是分频器和乘法器的编写,分频器是我第一次编写的比较复杂的模块,实现的不理想,因此借用了网上查阅的资料。乘法器的编写最初的思路有些偏差,在和组员的讨论中编写了更为理想的程序,这件事情让我感触很深,深刻的认识到了合作的重要性以及程序语言的乐趣,最终当波形通过配置在示波器上显示出来的时候,心里的感觉是无法言语的。虽然自己完成的结果不是最好的,但我尽了自己的最大努力,我收获很大。

本文来源:https://www.bwwdw.com/article/p4p4.html

Top