基于vhdl的简单信号发生器的设计_第1页
基于vhdl的简单信号发生器的设计_第2页
基于vhdl的简单信号发生器的设计_第3页
基于vhdl的简单信号发生器的设计_第4页
基于vhdl的简单信号发生器的设计_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 VHDL与数字系统设计课程设计 目录设计任务及要求11、 设计目的22、设计的主要内容和要求23、整体设计方案24、方案选择35、具体实现设计35.1正弦波的波形的产生35.2四种LPM_ROM的调用75.3四种波形的输出选择85.4 输出频率的选择95.5 数码管频率显示105.6 D/A的控制106、引脚锁定系统仿真和下载测试106.1 LPM_ROM的仿真106.2 引脚设置116.3系统总逻辑仿真(基于signaltap)117、使用说明127.1 各相关元件符号名称127.2 使用方法128、总结13参考文献14 VHDL与数字系统设计课程设计设计题目: 简单信号发生器的设计 院

2、系: 电子信息与电气工程系 专 业: 电子科学与技术 班 级: 电科 学生姓名: 学 号: 指导教师: 201年 月 日设计任务及要求本课程设计主要是利用VHDL语言设计一个信号发生器,要求实现以下功能:1. 信号发生器的控制模块可以用数据选择器实现,用4选1数据选择器实现对四种信号的输出进行选择。2. 根据输入信号的选择可以产生周期性输出正弦波、方波、三角波、锯齿波四种波形信号。3. 将波形数据送入D/A转换器,将数字信号转换为模拟信号输出,用示波器测试D/A转换器的输出,可以观测到4种信号的输出。4. 实现根据不同输入输出不同频率输出的功能,并且能把频率显示到数码管上。5. 实现多种波形的

3、叠加功能。6. 实现波形幅度的增加功能。7. 上面的1,2,3这三点要求是基本要求,而4,5,6是本次课程设计的发挥部分。第 19 页 1、设计目的 1) 掌握使用EDA工具设计信号发生器系统的设计思路和设计方法,体会使用EDA综合过程中电路设计方法和设计思路的不同,理解层次化设计理念。2) 熟悉在Quartus II环境中,用文本输入方式与原理图输入方式完成电路的设计,同时掌握使用这两种方式相结合的EDA设计思路。3) 通过这一部分的学习,对VHDL的设计方法进行进一步的学习,对其相关语言设计规范进行更深层次的掌握,能够更加熟练的做一些编程设计。2、设计的主要内容和要求通过使用VHDL语言及

4、Quartus II软件,设计多功能信号发生器的每个模块,将正弦波模块,方波模块,三角波模块,锯齿波模块创建相应的元件,同时设计好4选1数据选择器模块,再通过例化连接语句或图形输入的方式,将各个模块组合起来,设计成一个完整的多种信号发生器电路,同时将各个模块单独进行仿真,设计各个模块的仿真波形,最后进行总原理图电路仿真,设计该信号发生器的总的仿真波形,然后进行下载,然后用硬件电路调试。信号发生器:实现四种波形的转换。根据题目的分析与整体构思可知,要完成设计任务必须完成以下要求: 1、设计好用于总电路设计的各个信号输出模块;2、设计好用于波形切换的四路数据选择器;3、设计好用于频率切换的分频电路

5、;4、设计好用于数码管显示的动态扫描电路;5、设计好用于波形叠加的选择电路;6、设计好数模(D/A)转换。3、整体设计方案基本设计方案:在现有多路选择器的基础上,加上其它信号模块,通过组合与设计,用数模转换器(D/A)将选中的信号源发出的信号由数字信号转换为模拟信号,再用示波器显示出来,其信号发生器的基本结构框图如图所示。信号发生器由各个单一信号模块组合而成,其中信号产生模块将产生所需的各种信号,信号发生器的控制模块可以用数据选择器实现,用4选1数据选择器实现对四种信号的选择。最后将波形数据送入D/A转换器,将数字信号转换为模拟信号输出。用示波器测试D/A转换器的输出,可以观测到4种信号的输出

6、。图 信号发生器结构框图最后,在前面模块做好的基础上再考虑如何输出波形的问题,通过对四种波形采样就可以得到。总体功能框图4、方案选择4.1 各波形数据模块实现方式. VHDL模块各自调用:这种方法看起来比较明了,很容易知道自己写了什么,但是正弦波,锯齿波这些波形的数据切换都要自己查表自己输入进vhdl文本中去,这样不仅费时费力,而且很容易出错,一旦出错,很难找出错误的所在,总的来说不是一个很好的方案。. LPM_ROM调用:LPM,即参数化模块库(Library of Parameterized Modules),是Altera 公司FPGA/CPLD设计软件Quartus II自带的一些宏功

7、能模块,功能非常强大,很容易满足我们的要求,我们只要建立一个ROM模块,并且把数据文件导入进去就可以很简单的做出一个我们需要的宏模块。很明显要选LPM_ROM作为解决方案,这样我们要分别做四种波形的ROM。4.2 各模块连接方式. 图形连接输入:这种方法简单明了,不过只适合小型工程,对于大工程不能使用图形输入。.VHDL文本的例化连接:例化连接使用COMPONENT等语句直接可以连接映射,更能直接表现出各引脚的连接方式。所以用VHDL文本例化连接。5、具体实现设计5.1正弦波的波形的产生我们用调用mif的方式来实现LPM_ROM的具体功能,这里我们不需要写任何一行代码,具体方法如下:1、打开向

8、导工具 tools MegaWizard Plug-in Manager2、选择ROM,选择VHDL,并且输入名称3、选择双时钟输入,选择采样字节数4、把输出时钟取消掉,只剩下一个inclock5、选着生成的nif文件,mif中存在需要输出波形数据6、点击finish,这样我们的一个正弦波LPM_ROM就做好了这样我们一行代码也没写,却做到了很多功能,这效率是要提前完工的节奏啊,可喜可贺啊!mif文件也是这样生成的:感谢杭州康芯电子公司提供的mifmaker!打开mifmaker设置全局参数选择正弦波保存为mif可以用来输入了!通过这种方式我们连续再做三次,就得到了能输出数据分别是正弦波、方波

9、、三角波和锯齿波的元件,只要在最顶层文件中调用就可以了!5.2四种LPM_ROM的调用在最高层文件中调用这四种LPM_ROM,因为每个ROM都生成了自己相对应的vhd文件,所以我们直接调用就ok啦,具体实现代码如下:这是这四种LPM_ROM的声明部分这是这四种LPM_ROM的调用例化管脚映射部分5.3四种波形的输出选择用K1,K2来控制选着输出具体的哪一种波形5.4 输出频率的选择用K3,K4,K5来控制选择输出频率,具体代码如下:5.5 数码管频率显示调用我们之前例化好的一个动态显示元件display,元件代码见附录二5.6 D/A的控制由于实验箱只有一个时钟,所以把时钟分频后连接入LPM_

10、ROM的时钟,不分频的直接接入D/A模块时钟,用这种方式就能达到DAC正常输出目的波形的效果。6、引脚锁定系统仿真和下载测试6.1 LPM_ROM的仿真以正弦波为例,dout是查mif得出的值6.2 引脚设置6.3系统总逻辑仿真(基于signaltap)7、使用说明7.1 各相关元件符号名称名称功能SIN正弦波信号发生SQUAR方波信号发生SANJIAO三角波信号发生JU锯齿波信号发生DISP综合波形选择以及频率选择DISPLAY数码管动态扫描7.2 使用方法K1,K2的调节方式如下 选择值对应输出波形00正弦波01方波10三角波11锯齿波K3,K4,K5的调节方式如下选择值对应输出频率000

11、93.75KHz00146.88KHz01023.44KHz01111.72KHz1005.86KHz1012.93KHz1101.46KHz111732Hz8、总结参考文献1 潘松,黄继业.EDA技术实用教程(第四版)M.科学出版社,2010 2 江国强.EDA技术与应用(第3版)M.电子工业出版社,20103 J.Bhasker著,徐振林等译.Verilog HDL硬件描述语言.北京:机械工业出版社,20004 卢杰,赖毅.VHDL与数字电路设计.北京:科学出版社,20015张昌凡,龙永红,彭涛.可编程逻辑器件及VHDL设计技术.广州:华南工学院出版社,2001library ieee;u

12、se ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;-*-entity DISP isport(clk:in std_logic;-这是时钟输入 dout:out std_logic_vector(7 downto 0);-输出给ADPout:out std_logic_vector(7 downto 0);-段码WS:out std_logic_vector(2 downto 0);-位选CLKOUT:OUT std_logic;-clk直接输出给DAK1:in std_logic;-拨动开关12,用来选信号种类K2:in s

13、td_logic;K3:in std_logic;-拨动开关345,用来选信号频率K4:in std_logic;K5:in std_logic);end DISP;architecture behav of DISP is-*-component SIN-这是正弦波port(address:in std_logic_vector(6 downto 0);inclock:in std_logic;q:out std_logic_vector(7 downto 0);end component;-*-component SQUAR-这是方波port(address:in std_logic_ve

14、ctor(6 downto 0);inclock:in std_logic;q:out std_logic_vector(7 downto 0);end component;-*-component SANJIAO-这是三角波port(address:in std_logic_vector(6 downto 0);inclock:in std_logic;q:out std_logic_vector(7 downto 0);end component;-*-component JU -这是锯齿波port(address:in std_logic_vector(6 downto 0);inclo

15、ck:in std_logic;q:out std_logic_vector(7 downto 0);end component;-*-component display -这是数码管显示功能的例化声明port(dclk : in std_logic; disout: out std_logic_vector (7 downto 0);-显示输出 seld : out std_logic_vector (2 downto 0);-位选 selq : in std_logic_vector (2 downto 0);-频率选择end component;-*-signal q1:std_logi

16、c_vector(6 downto 0);-地址寻址signal DOUT1:std_logic_vector(7 downto 0);-用来输出各种波形signal DOUT2:std_logic_vector(7 downto 0);signal DOUT3:std_logic_vector(7 downto 0);signal DOUT4:std_logic_vector(7 downto 0);signal SLE:std_logic_vector(1 downto 0);-信号选择signal FRE:std_logic_vector(2 downto 0);-频率选择signal

17、Qout:std_logic_vector(7 downto 0);-clk分频signal Qin:std_logic;-clk分频后输出begin-*-p0:process(clk) -24Mhzbeginif clk'event and clk='1' then if(Qout="11111111")then Qout<="00000000" else Qout<=Qout+1;end if;end if;end process;-*-CLKOUT<=clk;-DADADADADAD-*-FRE <=

18、 K3&K4&K5;p1:process(FRE)BEGINCASE FRE ISWHEN "000" => qin <= qout(7); -732hzWHEN "001" => qin <= qout(6);WHEN "010" => qin <= qout(5);WHEN "011" => qin <= qout(4);WHEN "100" => qin <= qout(3);WHEN "101"

19、; => qin <= qout(2);WHEN "110" => qin <= qout(1);WHEN "111" => qin <= qout(0); -93.7kWHEN OTHERS =>NULL;END CASE; END PROCESS;-*-P2:process(qin)beginif qin'event and qin='1' then q1<=q1+1;end if;END PROCESS;-*-u1:SIN port map(address=>q1,q=&

20、gt;dout1,inclock=>qin);u2:SQUAR port map(address=>q1,q=>dout2,inclock=>qin);u3:SANJIAO port map(address=>q1,q=>dout3,inclock=>qin);u4:JU port map(address=>q1,q=>dout4,inclock=>qin);U5:DISPLAY port map(dclk=>CLK,disout=>pout,seld=>ws,selq=>FRE);-*-SLE <=K1

21、&K2;P3:process(SLE)BEGINCASE SLE ISWHEN "00" => DOUT <= dout1;WHEN "01" => DOUT <= dout2;WHEN "10" => DOUT <= dout3;WHEN "11" => DOUT <= dout4;WHEN OTHERS =>NULL;END CASE; END PROCESS;end behav;-*动态显示*动态显示*动态显示*动态显示*-*动态显示*动态显示*动

22、态显示*动态显示*-*动态显示*动态显示*动态显示*动态显示*library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity display isport(dclk : in std_logic;disout: out std_logic_vector(7 downto 0);-显示输出seld : out std_logic_vector(2 downto 0);-位选selq : in std_logic_vector(2 downto 0);-频率选择end entity;architectu

23、re behave of display issignal dclk1 : std_logic;signal c : std_logic_vector(7 downto 0);signal dis : std_logic_vector(2 downto 0);beginprocess(dclk)beginif dclk'event and dclk='1' thenc<=c+1;end if;end process;process(c(2)-dclk 8 分频beginif c(2)'event and c(2)='1' thendis&l

24、t;=dis+1;end if;seld<=dis;end process;process(selq)begincase selq iswhen "111" =>case dis is-93.75KHzwhen "000" =>disout <= "00000000"when "001" =>disout <= "01101111"when "010" =>disout <= "11001111"when &

25、quot;011" =>disout <= "00000111"when "100" =>disout <= "01101101"when "101" =>disout <= "01110111"when "110" =>disout <= "01110110"when "111" =>disout <= "01011011"end case;wh

26、en "110" =>-46.88KHzcase dis iswhen "000" =>disout <= "00000000"when "001" =>disout <= "01100110"when "010" =>disout <= "11111101"when "011" =>disout <= "01111111"when "100"

27、 =>disout <= "01111111"when "101" =>disout <= "01110111"when "110" =>disout <= "01110110"when "111" =>disout <= "01011011"end case;when "101" =>-23.44KHzcase dis iswhen "000" =>dis

28、out <= "00000000"when "001" =>disout <= "01011011"when "010" =>disout <= "11001111"when "011" =>disout <= "01100110"when "100" =>disout <= "01100110"when "101" =>disout &

29、lt;= "01110111"when "110" =>disout <= "01110110"when "111" =>disout <= "01011011"end case;when "100" =>-11.72KHzcase dis iswhen "000" =>disout <= "00000000"when "001" =>disout <= &quo

30、t;00000110"when "010" =>disout <= "10000110"when "011" =>disout <= "00000111"when "100" =>disout <= "01011011"when "101" =>disout <= "01110111"when "110" =>disout <= "011

31、10110"when "111" =>disout <= "01011011"end case;when "011" =>-5.86KHzcase dis iswhen "000" =>disout <= "00000000"when "001" =>disout <= "00000000"when "010" =>disout <= "11101101"

32、;when "011" =>disout <= "01111111"when "100" =>disout <= "01111101"when "101" =>disout <= "01110111"when "110" =>disout <= "01110110"when "111" =>disout <= "01011011"end

33、case;when "010" =>-2.93KHzcase dis iswhen "000" =>disout <= "00000000"when "001" =>disout <= "00000000"when "010" =>disout <= "11011011"when "011" =>disout <= "01101111"when "100

34、" =>disout <= "01001111"when "101" =>disout <= "01110111"when "110" =>disout <= "01110110"when "111" =>disout <= "01011011"end case;when "001" =>-1.46KHzcase dis iswhen "000" =>disout <= "00000000"when "001" =>disout <= "00000000"when "010" =>disout <= "10000110&qu

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论