1、EDA 技术课程设计11 引言简易多功能信号发生器是信号发生器的一种,在生产实践和科研领域中有着广泛的应用。信号源主要给被测电路提供所需要的已知信号(各种波形) ,然后用其它仪表测量感兴趣的参数。可见信号源在电子实验和测试处理中,并不测量任何参数,而是根据使用者的要求,仿真各种测试信号,提供给被测电路,以达到测试的需要。信号发生器是电子测量领域中最基本、应用最广泛的一类电子仪器。它可以产生多种波形信号,如正弦波,三角波和方波等,因而广泛用于通信、雷达、导航、宇航等领域。在本设计中它能够产生多种波形,如正弦波,三角波和方波等,并能实现对各种波频率和幅度的改变。正因为其在生活中应用的重要性,人们它
2、做了大量的研究,总结出了许多实现方式。可以基于 FPGA 、VHDL、单片机、DOS 技能、数字电路等多种方法实现。本设计是采用 VHDL 来实现的简易多功能信号发生器。它能产生正弦波,三角波和方波。且对各种波形的要求如下:(1)设计任意信号发生器,使之能够生成正弦波、三角波和方波;(2)电路的外部频率为 40MHz,要求信号发生器可产生 0-1KHz、1KHz10KHz、10KHz1MHz 三档频率的信号;(3)要求具有波形选择和频率选择的功能;(4)在同一频率档内,可实现频率的加减;(5)要求显示波形的同时能够进行频率的调节;(6)要求能够显示波形:A正弦波;B三角波;C方波;(7)要求能
3、够显示频率值;(8)可用示波器进行波形的观测。EDA 技术课程设计22 设计流程2.1 设计思想及流程图本次课程设计按模块式实现,据任务书要求,设计总共分三大步骤完成:(1)产生波形(三种波形:方波、三角波、正弦波)信号;(2)频率控制;(3)显示频率值。利用 VHDL 编程,依据基本数字电路模块原理进行整合。系统各部分所需工作时钟信号由输入系统时钟信号经分频得到,系统时钟输入端应满足输入脉冲信号的要求。频率控制模块有多个可选频率,最终送至脉冲发生模块输出脉冲信号,同时将信号的频率输出至数码管显示当前信号的频率值,达到设计课题所要求的输出波形频率可调功能。如图 2-1 所示:EDA 技术课程设
4、计3开始正弦,三角波,方波中间信号始化数据定义分频进程有显示频率功能波形输出进程有计数器判断波形选择键判断频率范围选择键判断频率值选择键频率值显示波形输出结束图 2-1 程序流程图EDA 技术课程设计42.2 总体功能简述这个设计运用.vhd 文件,实现三角波、正弦波、方波的选择以及频率的选择。本次课设所做的简易多功能信号发生器,实现 3 种常见波形正弦波、三角波、方波的功能。并且输出信号的频率范围为 01MHz,输出频率可以步进调节;同时具有显示输出波形、频率的功能。2.3 三种波的简述及选择代码主要采用了 ROM 的设计思路。一共描述了 256 个点,用这 256 个数据来模拟这三种波,
5、首先,在 mem 中放入 64 个数, ,然后定义从 0 到 63 的信号,当时钟的上升沿达到的时候,则将这 64 个数一位一位的读出。然后,由选择信号选择出相应的波形。原理图如图 2-2 所示:2.4 分频器的设计在分频器模块中,运用计数的方法实现分频,通过选择信号选择出相应的频率连接到波形选择的时钟信号上,并输出频率值在数码管上显示。原理图如图 2-3 所示:图 2-2 波形选择原理图图 2-2 分频器原理图EDA 技术课程设计53 信号发生器的仿真波形3.1 软件调试在本次课设中,所使用的软件即为前面重点介绍过的 QuartusII 软件。本系统的软件功能强大,运用 VHDL 语言来编写
6、,先在 QuartusII 对所编的模块一一进行仿真,排除了语法的错误编写和设计逻辑思维的错误,当仿真完确认程序没问题时,再直接下载到 FPGA 芯片,用 FPGA实验箱进行调试。采取的就是自顶向下的调试方法,即先单独调试好每一个模块,然后再连接成一个完整的系统再调试。3.2 仿真波形运用本次选用的 QuartusII 软件对代码进行调试,即可得出相应的波形。正弦波信号的波形仿真如图 3-1 所示:clk 为输入时钟信号;data 为输出的正弦波信号波形;sel 为 00 选择正弦波信号;三角波信号的波形仿真如图 3-2 所示:clk 为输入时钟信号;data 为输出的三角波信号波形;sel
7、为 01 选择三角波信号;方波信号的波形仿真如图 3-3 所示:图 3-3 方波信号的仿真波形图 3-1 正弦波信号的仿真波形图 3-2 三角波信号的仿真波形EDA 技术课程设计6clk 为输入时钟信号;data 为输出的三角波信号波形;sel 为 10 选择方波信号;分频器的波形仿真如图 3-4 所示:图 3-4 分频器的仿真波形clk 为输入时钟信号;clk_out 为输出时钟信号;outp 为输出频率;sel_p 为频率选择信号;3.3 硬件测试本课程设计是简易多功能信号发生器,其总共有 6 个输入端。分别为频率选择键sel_px,x,每个频率段内的频率值 sel_s x,x和波形选择键
8、 sel_bx,x。输出有 DA0832示波器显示波形输出,频率值显示。根据引脚所锁定图将系统中的各个输入输出端口锁定到合适的引脚上。需要注意的是本系统用到了数码管显示,所以应该选定实验箱的模式 5。另外,本实验输入的时钟频率是40MHz。当引脚锁定完毕后,将程序下载到试验箱中,连好示波器,在输入端输入相应的值即可得到相应的输出波形。具体的硬件仿真波形如下:正弦波:频率为 600HZ 频率为 6KHZEDA 技术课程设计7三角波:方波波形:频率为 60KHZ频率为 600HZ 频率为 6KHZ频率为 60KHZ频率为 600HZ 频率为 6KHZEDA 技术课程设计8频率显示:硬件测试结果分析
9、:由于时间紧迫取了 64 个点,点数较少,正弦波频率较低时,出现一定程度的失真,三角波频率较高时出现失真,好像是正弦波波形。方波时,当频率高时,频率为 60KHZ600HZ 的 16 进制显示6KHZ 的 16 进制显示60KHZ 的 16 进制显示EDA 技术课程设计9失真程度较大,当取的点数较多时,情况会明显的改善。频率显示值是 16 进制,与 10 进制的值是相等的。4 总结EDA 技术是当前数字系统设计领域比较火热的一种工具,他可以大大缩短设计需要的时间,降低成本的同时也提高了系统的稳定性。使用 VHDL 语言描述硬件系统使得 EDA 技术有了更为广阔的空间。本设计使用了基于 Alte
10、ra 公司的开发软件工具 Quartus II,本系统即实现了可以输出三种波形的简易多功能波形发生器,仿真结果证明,该设计正确有效,可以作为制作实物的理论依据。 对于 EDA 技Quartus II 进行了系统的设计和仿真。简易波形发生器在生活中各个场合都有着大量的使用术我一直都有着浓厚的兴趣,借做课设的机会,认真的研究了一下这么科学。发现 EDA 技术比我们想象中的要有很大的难度。里面有很多的思想来源于信息电子技术辑算法的设计,需要有很强的 C 语言编程功底。学习一门知识要从最基本的体系构架开始,倘若一开始就从顶层设计入手,就会造成很多基本原理、基本概念上的偏差,甚里面的基本知识,包括电路的
11、概念以及寄存器传送的基本知识。VHDL 语言与 C 语言有很大的不同,但是 C 语言的编程思想也可以移植到VHDL 语言当中来,尤其是一些逻辑会拖延设计的时间,事倍功半。虽然可设完成了,但我意识到,我对于这门学科只是停留在入门的阶段,想要有更大的发展,要深入的研究,还要更多的努力和实践。EDA 技术课程设计10参考文献1 潘松,黄继业 EDA 技术实用教程北京:科学出版社,20022 甘历VHDL 应用与开发实际北京:科学出版社,20033 孙延鹏,张芝贤VHDL 与可编程逻辑器件应用航空工业出版社,20064 赵明富,李立军,石新锋,沈献博EDA 技术基础北京大学出版社, 20075 黄仁欣
12、EDA 技术实用教程清华大学出版社, 2006EDA 技术课程设计11附录library ieee;use ieee.std_logic_1164.all;entity zuihou is port(clk:in std_logic;sel_s:in std_logic_vector(1 downto 0);sel_p:in std_logic_vector(1 downto 0);sel_b:in std_logic_vector(1 downto 0);dout:out integer range 0 to 255; xianshi:out integer range 0 to 10000
13、00);end;architecture bhv of zuihou is signal test:integer range 0 to 1000000;signal b:std_logic;signal addr:integer range 0 to 63;type hui is array(0 to 63)of integer range 0 to 255;constant sina:hui:=(255,254,252,249,245,239,233,225,217,207,197,186,174,162,150,137,124,112,99,87,75,64,53,43,34,26,19
14、,13,8,4,1,0,0,1,4,8,13,19,26,34,43,53,64,75,87,99,112,124,137,150,162,174,186,197,207,217,255,233,239,245,249,252,254,255);EDA 技术课程设计12constant sanjiao:hui:=(0,8,16,24,32,40,48,56, 64,72,80,88,96,104,112,120, 128,136,144,152,160,168,176,184, 192,200,208,216,224,232,240,248, 255,248,240,232,224,216,2
15、08,200, 192,184,176,168,160,152,144,136, 128,120,112,104,96,88,80,72, 64,56,48,40,32,24,16,8); constant fangbo:hui:=(255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,
16、0,0,0,0,0,0); beginprocess(clk)variable count:integer range 0 to 1000000;beginif clkevent and clk=1 then count:=count + 1;if (count=test) then count:=0; bif (sel_s=“00“) then xianshiif (sel_s=“00“) then xianshiif (sel_s=“00“) then xianshinull;end case;end process;process(b)variable count:integer range 0 to 63;beginif(bevent and b=1)thencount:=count+1;if count=64 thencount:=0;end if;end if;addrdoutdoutdoutnull;end case;end process;end bhv;EDA 技术课程设计14