简易多功能信号发生器_第1页
简易多功能信号发生器_第2页
简易多功能信号发生器_第3页
简易多功能信号发生器_第4页
简易多功能信号发生器_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

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

文档简介

1、课程设计说明书1 引言简易多功能信号发生器是信号发生器的一种,在生产实践和科研领域中有着广泛的应用。在研制、生产、测试和维修各种电子元件、部件以及整机设备时,都需要有信号源,由它产生不同频率不同波形的电压、电流信号并加到被测器件或设备上,用其他仪器观察、测量被测仪器的输出响应,以分析确定它们的性能参数。信号发生器是电子测量领域中最基本、应用最广泛的一类电子仪器。它可以产生多种波形信号,如正弦波、三角波、方波和锯齿波等,因而广泛用于通信、雷达、导航、宇航等领域。在本设计中它能够产生多种波形,如正弦波,三角波,方波和锯齿波等,并能实现对各种波频率和幅度的改变。正因为其在生活中应用的重要性,人们它做

2、了大量的研究,总结出了许多实现方式。可以基于FPGA 、VHDL、单片机、DOS技能、数字电路等多种方法实现。本设计是采用VHDL来实现的简易多功能信号发生器。它能产生正弦波,三角波,方波和锯齿波。且对各种波形的要求如下:(1)根据按键选择不同的波形(实现正弦波,三角波,方波和锯齿波);(2)各波形的频率范围为100Hz-20KHz;(3)各波形频率可调(通过按键控制频率的变化,步进值为500Hz);(4)用LED数码管实时显示输出波形的频率值;(5)用按键控制实现输出信号的幅度调节(幅度调节为2.5V和5V)。2 EDA技术介绍2.1 EDA介绍EDA是电子设计自动化(Electronic

3、Design Automation)缩写。EDA技术是以计算机为工具,根据硬件描述语言HDL( Hardware Description language)完成的设计文件,自动地完成逻辑编译、化简、分割、综合及优化、布局布线、仿真以及对于特定目标芯片的适配编译和编程下载等工作。 硬件描述语言HDL是相对于一般的计算机软件语言,如:C、PASCAL而言的。HDL语言使用与设计硬件电子系统的计算机语言,它能描述电子系统的逻辑功能、电路结构和连接方式。设计者可利用HDL程序来描述所希望的电路系统,规定器件结构特征和电路的行为方式;然后利用综合器和适配器将此程序编程能控制FPGA和CPLD内部结构,并

4、实现相应逻辑功能的的门级或更底层的结构网表文件或下载文件。目前,就FPGA/CPLD开发来说,比较常用和流行的HDL主要有ABEL-HDL、AHDL和VHDL1。几乎所有适于大学生做的数字逻辑电路实验都可以在计算机上利用EDA (Electronic Design Automatic电子设计自动化)软件进行设计、仿真,只有极少量外部配件不能在计算机上进行仿真。因此,在实验前期阶段,即实验预习阶段的主要应用工具是EDA软件,利用EDA软件可以设计、仿真实验课题,进行虚拟实验。通过虚拟实验使实验者在进入真实实验前就能对预做的实验有相当的了解,甚至可以预测到实验的结果。这样在实际做实验时,可以把许多

5、设计型实验的难度降低,同时能有更多的时间让实验者动手做实验,研究问题,提高实验效率。当前数字电路设计已由计算机辅助设计进入到以计算机为主的设计时代。2.2 VHDL基本介绍VHDL是一种主要的硬件描述语言之一,硬件描述语言(HDL)是各种描述方法中最能体现EDA优越性的描述方法。所谓硬件描述语言,实际上就是一种描述工具,其描述的对象就是待设计电路系统的逻辑功能,实现该功能的算法,选用的电路结构以及其他各种约束条件等。通常要求HDL既能描述系统的行为,又能描述系统的结构。VHDL语言是美国国防部与20世纪80年代后期,出于军事工业需要开发的。1984年VHDL被IEEE确定为标准的硬件描述语言。

6、1993年IEEE对VHDL进行了修正,增加了部分新的VHDL命令与属性,增强了对系统的描述能力。VHDL涵盖面广,抽象描述强,支持硬件的设计,验证,综合和测试。VHDL能在多级别上对同一逻辑功能进行描述。VHDL的基本结构包含一个实体和一个结构体,而完整的VHDL结构还包括配置,程序包与库。各种硬件描述语言中,VHDL的描述能力最强,因此运用VHDL 进行复杂电路设计时,往往采用自顶向下结构化的设计方法。2.3 设计工具简介Quartus II 是Altera公司的综合性PLD开发软件,支持原理图、VHDL、VerilogHDL以及AHDL(Altera Hardware Descripti

7、on Language)等多种设计输入形式,内嵌自有的综合器以及仿真器,可以完成从设计输入到硬件配置的完整PLD设计流程。Quartus II支持Altera的IP核,包含了LPM/MegaFunction宏功能模块库,使用户可以充分利用成熟的模块,简化了设计的复杂性、加快了设计速度。对第三方EDA工具的良好支持也使用户可以在设计流程的各个阶段使用熟悉的第三放EDA工具。此外,Quartus II 通过和DSP Builder工具与Matlab/Simulink相结合,可以方便地实现各种DSP应用系统;支持Altera的片上可编程系统(SOPC)开发,集系统级设计、嵌入式软件开发、可编程逻辑设

8、计于一体,是一种综合性的开发平台。Maxplus II 作为Altera的上一代PLD设计软件,由于其出色的易用性而得到了广泛的应用。目前Altera已经停止了对Maxplus II 的更新支持,Quartus II 与之相比不仅仅是支持器件类型的丰富和图形界面的改变。Altera在Quartus II 中包含了许多诸如SignalTap II、Chip Editor和RTL Viewer的设计辅助工具,集成了SOPC和HardCopy设计流程,并且继承了Maxplus II 友好的图形界面及简便的使用方法。Altera Quartus II 作为一种可编程逻辑的设计环境, 由于其强大的设计能

9、力和直观易用的接口,越来越受到数字系统设计者的欢迎。 Altera的Quartus II可编程逻辑软件属于第四代PLD开发平台。该平台支持一个工作组环境下的设计要求,其中包括支持基于Internet的协作设计。Quartus平台与Cadence、ExemplarLogic、 MentorGraphics、Synopsys和Synplicity等EDA供应商的开发工具相兼容。改进了软件的LogicLock模块设计功能,增添 了FastFit编译选项,推进了网络编辑性能,而且提升了调试能力。3 设计流程3.1设计思想及原理图基于VHDL语言设计一个简易多功能信号发生器,通过选入输入信号,可以输出正

10、弦波、三角波、方波和锯齿波四种波形信号。信号发生器的控制模块可以用数据选择器实现,四种信号的信号选择可以用4选1数据选择器实现。同时本设计使用原理图的方法,对正弦波、三角波、方波和锯齿波和4选1数据选择器元件进行调用。简易多功能信号发生器的原理图如下:图1 信号发生器原理图本设计的主题思想是各个模块分别产生相应的波形,再通过一个4选1数据选择器输出相应的波形。通过其他按键控制波形的频率和幅度的变化。3.2 正弦波、三角波、方波和锯齿波的实现3.2.1正弦波设计(1) 正弦波代码设计正弦波的产生思想是将对模拟波形采样后的编码存入定义好的ROM中,再根据时钟循环的将这些编码顺序输出,在输出端将经过

11、数模转换器转换后的模拟信号接入示波器即可显示正弦波形。产生正弦波的VHDL代码如下:library ieee;use ieee.std_logic_1164.all;entity sin2 isport(clock,sel:in std_logic;dout4:out integer range 0 to 255);end sin2;architecture bhv of sin2 istype mem_type is array(0 to 63) of integer range 0 to 255;constant mem:mem_type:=(255,254,252,249,245,239

12、,233,225,217,207,197,186,174,162,150,137,124,112,99,87,75,64,53,43,34,26,19,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,225,233,239,245,249,252,254,255);signal address:integer range 0 to 63;begin process(clock) begin if clock'event and clock='1

13、9; then if address>63 then address<=0; else if sel='1' then address<=address+1; dout4<=(mem(address)/2; else address<=address+1; dout4<=mem(address); end if; end if; end if;end process;end bhv;(2) 正弦波的仿真在Quartus II软件输入上述代码,再通过编译和时序仿真,可得到如下的仿真波形。图2 正弦波时序仿真图由上图仿真图可知时钟信号clk每出现

14、一个上升沿,dout就对外送出一个正弦波采样数据,sel实现了正弦波幅值的调节,sel=0时dout输出正弦波采样数据值,sel=1时dout输出正弦波采样数据值右移一位的数据值。上图中的输出制式模拟信号各采样点的数字编码,由于没有经过数模转换,输出结果就如图中所示。当将程序下载到硬件后,在示波器上就可以显示正弦波形了。(3)正弦波模块其中:clk为正弦波时钟信号输入端,它接收调频模块发过来时钟信号;sel为输出正弦波信号幅度调节输入端,sel=1时幅度为2.5V,sel=0时幅度为5V;dout为正弦波信号输出端。图3 正弦波模块3.2.2 三角波设计(1)三角波代码设计三角波的产生思想是将

15、对模拟波形采样后的编码存入定义好的ROM中,再根据时钟循环的将这些编码顺序输出,在输出端将经过数模转换器转换后的模拟信号接入示波器即可显示三角波形。产生三角波的VHDL代码如下:library ieee;use ieee.std_logic_1164.all;entity sanjiao isport(clock,sel:in std_logic;dout3:out integer range 0 to 255);end sanjiao;architecture bhv of sanjiao istype mem_type is array(0 to 63) of integer range

16、0 to 255;constant mem:mem_type:=(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,208,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);signal address:integer range 0

17、to 63;begin process(clock) begin if clock'event and clock='1' then if address>63 then address<=0; else if sel='1' then address<=address+1; dout3<=(mem(address)/2; else address<=address+1; dout3<=mem(address); end if; end if; end if;end process;end bhv;(2)三角波仿真在Q

18、uartus II软件输入上述代码,再通过编译和时序仿真,可得到如下的仿真波形图4 三角波仿真图仿真图由上图仿真图可知时钟信号clk每出现一个上升沿,dout就对外送出一个三角波采样数据,sel实现了三角波幅值的调节,sel=0时dout输出三角波采样数据值,sel=1时dout输出三角波采样数据值右移一位的数据值。(注明:由于存在器件延时,上升沿与数据变换略有滞后)上图中的输出制式模拟信号各采样点的数字编码,由于没有经过数模转换,输出结果就如图中所示。当将程序下载到硬件后,在示波器上就可以显示三角波形了。(3)三角波模块其中:clk为三角波时钟信号输入端,它接收调频模块发过来时钟信;sel为

19、输出正弦波信号幅度调节输入端,sel=1时幅度为2.5V,sel=0时幅度为5V;dout为三角波信号输出端。图5 三角波模块仿真图3.2.3方波设计(1) 方波代码的设计方波的产生思想是将对模拟波形采样后的编码存入定义好的ROM中,再根据时钟循环的将这些编码顺序输出,在输出端将经过数模转换器转换后的模拟信号接入示波器即可显示方波波形。产生方波的VHDL代码如下:library ieee;use ieee.std_logic_1164.all;entity fangbo isport(clock,sel:in std_logic;dout1:out integer range 0 to 255

20、);end fangbo;architecture bhv of fangbo istype mem_type is array(0 to 63) of integer range 0 to 255;constant mem:mem_type:=(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,

21、0,0,0,0,0,0,0,0);signal address:integer range 0 to 63;begin process(clock) begin if clock'event and clock='1' then if address>63 then address<=0; else if sel='1' then address<=address+1; dout1<=(mem(address)/2; else address<=address+1; dout1<=mem(address); end i

22、f; end if; end if; end process;end bhv;(2)方波的仿真在Quartus II软件输入上述代码,再通过编译和时序仿真,可得到如下的仿真波形。图 6方波仿真图由上图仿真图可知时钟信号clk每出现一个上升沿,dout就对外送出一个方波采样数据,sel实现了方波幅值的调节,sel=0时dout输出方波采样数据值,sel=1时dout输出方波采样数据值右移一位的数据值。(注明:由于存在器件延时,上升沿与数据变换略有滞后)上图中的输出制式模拟信号各采样点的数字编码,由于没有经过数模转换,输出结果就如图中所示。当将程序下载到硬件后,在示波器上就可以显示三角波形了。(3

23、方波模块其中:clk为方波时钟信号输入端,它接收调频模块发过来时钟信;sel为输出方波信号幅度调节输入端,sel=1时幅度为2.5V,sel=0时幅度为5V;dout为方波信号输出端。 图7方波模块3.2.4锯齿波设计(1)锯齿波代码设计锯齿波的产生思想是将对模拟波形采样后的编码存入定义好的ROM中,再根据时钟循环的将这些编码顺序输出,在输出端将经过数模转换器转换后的模拟信号接入示波器即可显示锯齿波形。产生锯齿波的VHDL代码如下:library ieee;use ieee.std_logic_1164.all;entity juchi isport(clock,sel:in std_logi

24、c;dout2:out integer range 0 to 255);end juchi;architecture bhv of juchi istype mem_type is array(0 to 63) of integer range 0 to 255;constant mem:mem_type:=(0,4,8,12,16,20,24,28, 32,36,40,44,48,52,56,60, 64,68,72,76,80,84,88,92, 96,100,104,108,112,116,120,124, 128,132,136,140,144,148,152,156, 160,164

25、,168,172,176,180,184,188, 192,198,200,204,208,212,216,220, 224,228,234,238,242,246,250,255);signal address:integer range 0 to 63;begin process(clock) begin if clock'event and clock='1' then if address>63 then address<=0; else if sel='1' then address<=address+1; dout2<

26、=(mem(address)/2; else address<=address+1; dout2<=mem(address); end if; end if; end if;在Quartus II软件输入上述代码,再通过编译和时序仿真,可得到如下的仿真波形。图8 锯齿波未分频时仿真图仿真图由上图仿真图可知时钟信号clk每出现一个上升沿,dout就对外送出一个锯齿波采样数据,sel实现了锯齿波幅值的调节,sel=0时dout输出锯齿波采样数据值,sel=1时dout输出锯齿波采样数据值右移一位的数据值。(注明:由于存在器件延时,上升沿与数据变换略有滞后)上图中的输出制式模拟信号各采样

27、点的数字编码,由于没有经过数模转换,输出结果就如图中所示。当将程序下载到硬件后,在示波器上就可以显示锯齿波波形了。(3)锯齿波模块其中:clk为锯齿波时钟信号输入端,它接收调频模块发过来时钟信;sel为输出锯齿波信号幅度调节输入端,sel=1时幅度为2.5V,sel=0时幅度为5V;dout为锯齿波信号输出端。图9 锯齿波模块仿真图3.3各个控制单元的实现3.3.1频率控制单元频率控制单元包括按键识别模块、分频数产生模块和分频模块。其器件图分别如图10、图11和图12所示。在按键识别模块中共有4个输入端。其中:一个时钟输入端CLK位12MHz,一个频率调节输入端btn1.0,一个使系统输出波形

28、的频率为最大的控制输入端highh一个使系统输出波形的频率为最小的控制输入端loww。本课程设计要求输出波形的频率在每按一次相应的按键时,就增加或减少500Hz。而实验室的硬件设备上的按键都是拨码是按键,即按键按下后一直有效,这显然不能满足要求。于是按键输入识别模块中用如下的代码实现按键没按一次都能有效的功能。if button0='0' and button1='1' then if cnt=40 then cnt<=0; else cnt<=cnt+1; end if; elsif button0='1' and button1=

29、'0' then if cnt=40 then cnt<=0; else cnt<=cnt+1; end if;以上代码实现的只是频率增长的功能,同理就可以实现频率减小的功能。图11分频数产生模块图12分频模块图10按键识别模块当按下按键识别模块中分别使整个系统输出最大和最小频率的波形的控制输入端时 ,在按相应的使频率增减的按键则实现频率从最大或最小开始增加或减少的功能。在分频数产生模块中有一个输入端接收从按键识别模块中输出地对频率的控制信号的输入端,一个分频数输出端,五个相应的接数码管以显示系统输出信号的频率的输出端。当分频数产生模块的输入端接收从按键识别模块中输

30、出地对频率的控制信号后,便产生相应的分频数送到输出端,同时将与分频数相应频率送到与数码管相接的输出端。其VHDL代码见本课程设计的附录。在分频模块中有一个系统时钟输入端,一个分频数输入端和一个频率输出端。分频器的功能主要是根据分频数产生相应的输出频率。3.3.2波形输出控制单元波形输出控制单元中只包括一个数据选择器模块。其器件图如图13所示图13 数据选择器模块在该模块为4选1的数据选择器,包括4个数据输入端,一个数据选择输入端和一个数据输出端。其中:boxing1.0为数据选择端(00为方波,01为锯齿波,10为三角波,11为正弦波);dout17.0为正弦波输入端;dout27.0为方波输

31、入端;dout37.0为三角波输入端;dout47.0为锯齿波输入端;wave7.0为所选波形输出端,接至D/A转换器。3.4硬件测试本课程设计是简易多功能信号发生器,其总共有6个输入端和6个输出端。具体的输入输出端可见图1中所示。根据引脚所锁定图将系统中的各个输入输出端口锁定到合适的引脚上。需要注意的是本系统用到了数码管显示,所以应该选定实验箱的模式5。另外,本实验输入的时钟频率是12MHz。当引脚锁定完毕后,将程序下载到试验箱中,连好示波器,在输入端输入相应的值即可得到相应的输出波形。具体的硬件仿真波形如下:图14顶层文件的仿真在clk端输入12MHz的时钟信号,当图1的原理图中的bx1.

32、0输入“00”时得到的是方波波形,如图15所示。改变sel的值可以该变输出波形的幅值。按频率控制单元中介绍的方法可以实现波形频率的改变。图15 方波波形在clk端输入12MHz的时钟信号,当图1的原理图中的bx1.0输入“01”时得到的是锯齿波波形,如图16所示。改变sel的值可以该变输出波形的幅值。按频率控制单元中介绍的方法可以实现波形频率的改变。图16 锯齿波波形在clk端输入12MHz的时钟信号,当图1的原理图中的bx1.0输入“10”时得到的是三角波波形,如图17所示。改变sel的值可以该变输出波形的幅值。按频率控制单元中介绍的方法可以实现波形频率的改变。图17 三角波波形在clk端输

33、入12MHz的时钟信号,当图1的原理图中的bx1.0输入“11”时得到的是正弦波波形,如图18所示。改变sel的值可以该变输出波形的幅值。按频率控制单元中介绍的方法可以实现波形频率的改变。图18 正弦波波形4 结论四 总结在课程设计的过程中遇到许多的问题,才发现自己在平时的学习中是多么的不足。在这些程序性质课程的学习中,不能仅仅的停留在课本,要多看看相关方面的书籍,在网上搜搜当前最前沿的东西。遇到的问题多谢有同学和老师的相关指导,和同学之间要多相互讨论,有不会的要多想老师请教!要学以致用!EDA技术是当前数字系统设计领域比较火热的一种工具,他可以大大缩短设计需要的时间,降低成本的同时也提高了系

34、统的稳定性。使用VHDL语言描述硬件系统使得EDA技术有了更为广阔的空间。本设计使用了基于Altera公司的开发软件工具Quartus II,本系统即实现了可以输出三种波形的简易多功能波形发生器,仿真结果证明,该设计正确有效,可以作为制作实物的理论依据。 对于EDA技Quartus II进行了系统的设计和仿真。简易波形发生器在生活中各个场合都有着大量的使用术我一直都有着浓厚的兴趣,借做课设的机会,认真的研究了一下这么科学。发现EDA技术比我们想象中的要有很大的难度。里面有很多的思想来源于信息电子技术辑算法的设计,需要有很强的C语言编程功底。学习一门知识要从最基本的体系构架开始,倘若一开始就从顶

35、层设计入手,就会造成很多基本原理、基本概念上的偏差,甚里面的基本知识,包括电路的概念以及寄存器传送的基本知识。VHDL语言与C语言有很大的不同,但是C语言的编程思想也可以移植到VHDL语言当中来,尤其是一些逻至会拖延设计的时间,事倍功半。虽然可设完成了,但我意识到,我对于这门学科只是停留在入门的阶段,想要有更大的发展,要深入的研究,还要更多的努力和实践。参考文献1.Voknei A.Pedroni.VHDL数字电路设计教程.电子工业出版社,2008.52.潘松,黄继业.EDA技术实用教程(第二版).科学出版社,2005.23.焦素敏.EDA应用技术.清华大学出版社,2002.4附录方波libr

36、ary ieee;use ieee.std_logic_1164.all;entity fangbo isport(clock,sel:in std_logic;dout1:out integer range 0 to 255);end fangbo;architecture bhv of fangbo istype mem_type is array(0 to 63) of integer range 0 to 255;constant mem:mem_type:=(255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255

37、,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,0,0,0,0,0,0);signal address:integer range 0 to 63;beginprocess(clock)beginif clock'event and clock='1' thenif address>63 thenaddress<=0;elseif sel='1' thenad

38、dress<=address+1;dout1<=(mem(address)/2;elseaddress<=address+1;dout1<=mem(address);end if;end if;end if;end process;end bhv;正弦波library ieee;use ieee.std_logic_1164.all;entity sin2 isport(clock,sel:in std_logic;dout4:out integer range 0 to 255);end sin2;architecture bhv of sin2 istype mem

39、_type is array(0 to 63) of integer range 0 to 255;constant mem:mem_type:=(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,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,225,233,239,245,249,252,254,255);signa

40、l address:integer range 0 to 63;beginprocess(clock)beginif clock'event and clock='1' thenif address>63 thenaddress<=0;elseif sel='1' thenaddress<=address+1;dout4<=(mem(address)/2;elseaddress<=address+1;dout4<=mem(address);end if;end if;end if;end process;end bhv

41、;锯齿波library ieee;use ieee.std_logic_1164.all;entity juchi isport(clock,sel:in std_logic;dout2:out integer range 0 to 255);end juchi;architecture bhv of juchi istype mem_type is array(0 to 63) of integer range 0 to 255;constant mem:mem_type:=(0,4,8,12,16,20,24,28,32,36,40,44,48,52,56,60,64,68,72,76,8

42、0,84,88,92,96,100,104,108,112,116,120,124,128,132,136,140,144,148,152,156,160,164,168,172,176,180,184,188,192,198,200,204,208,212,216,220,224,228,234,238,242,246,250,255);signal address:integer range 0 to 63;beginprocess(clock)beginif clock'event and clock='1' thenif address>63 thenad

43、dress<=0;elseif sel='1' thenaddress<=address+1;dout2<=(mem(address)/2;elseaddress<=address+1;dout2<=mem(address);end if;end if;end if;end process;end bhv;三角波library ieee;use ieee.std_logic_1164.all;entity sanjiao isport(clock,sel:in std_logic;dout3:out integer range 0 to 255);

44、end sanjiao;architecture bhv of sanjiao istype mem_type is array(0 to 63) of integer range 0 to 255;constant mem:mem_type:=(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,208,200,192,184,176,168,160,152,144,136

45、,128,120,112,104,96,88,80,72,64,56,48,40,32,24,16,8);signal address:integer range 0 to 63;beginprocess(clock)beginif clock'event and clock='1' thenif address>63 thenaddress<=0;elseif sel='1' thenaddress<=address+1;dout3<=(mem(address)/2;elseaddress<=address+1;dout3

46、<=mem(address);end if;end if;end if;end process;end bhv;按键输入识别模块library ieee;use ieee.std_logic_1164.all;entity aa isport(clk:in std_logic;btn:in std_logic_vector(1 downto 0);highh:in std_logic;loww:in std_logic;addr:out integer range 0 to 40);end aa;architecture bhv of aa issignal cnt:integer ra

47、nge 0 to 40 :=0;signal button0,button1,button2,button3:std_logic;beginprocess(highh,loww,clk,button0,button1)beginif clk'event and clk='1' thenbutton0<=btn(0);button1<=button0;button2<=btn(1);button3<=button2;if highh='1' thencnt<=40;elsif loww='1' thencnt&

48、lt;=0;elseif button0='0' and button1='1' thenif cnt=40 thencnt<=0;elsecnt<=cnt+1;end if;elsif button0='1' and button1='0' thenif cnt=40 thencnt<=0;elsecnt<=cnt+1;end if;elsif button2='0' and button3='1' thenif cnt=0 thencnt<=40;elsecnt&l

49、t;=cnt-1;end if;elsif button2='1' and button3='0' thenif cnt=0 thencnt<=40;elsecnt<=cnt-1;end if;end if;end if;end if;end process;addr<=cnt;end bhv;分频模块library ieee;use ieee.std_logic_1164.all;entity fenpin isport(shu:in integer range 0 to 937;clk:in std_logic;clock:out std_

50、logic);end fenpin;architecture bhv of fenpin issignal num:integer range 0 to 937;signal i:integer range 0 to 937:=0;signal temp:std_logic:='0'beginprocess(clk,i,temp)beginif clk'event and clk='1' thenif i=shu theni<=0;temp<=not temp;elsei<=i+1;end if;end if;clock<=tem

51、p;end process;end bhv;分频数产生模块library ieee;use ieee.std_logic_1164.all;entity pinlv isport(address:in integer range 0 to 40;shu:out integer range 0 to 937;wan,qian,bai,shi,ge:out std_logic_vector(3 downto 0);end pinlv;architecture bhv of pinlv isbeginprocess(address)begincase address iswhen 0=>shu

52、<=937;wan<="ZZZZ"qian<="ZZZZ"bai<="0001"shi<="0000"ge<="0000"when 1=>shu<=172;wan<="ZZZZ"qian<="ZZZZ"bai<="0101"shi<="0000"ge<="0000"when 2=>shu<=93;wan<

53、;="ZZZZ"qian<="0001"bai<="0000"shi<="0000"ge<="0000"when 3=>shu<=62;wan<="ZZZZ"qian<="0001"bai<="0101"shi<="0000"ge<="0000"when 4=>shu<=46;wan<="ZZZZ&quo

54、t;qian<="0010"bai<="0000"shi<="0000"ge<="0000"when 5=>shu<=37;wan<="ZZZZ"qian<="0010"bai<="0101"shi<="0000"ge<="0000"when 6=>shu<=31;wan<="ZZZZ"qian<="

55、;0011"bai<="0000"shi<="0000"ge<="0000"when 7=>shu<=26;wan<="ZZZZ"qian<="0011"bai<="0101"shi<="0000"ge<="0000"when 8=>shu<=24;wan<="ZZZZ"qian<="0100"bai&l

56、t;="0000"shi<="0000"ge<="0000"when 9=>shu<=20;wan<="ZZZZ"qian<="0100"bai<="0101"shi<="0000"ge<="0000"when 10=>shu<=18;wan<="ZZZZ"qian<="0101"bai<="0000&q

57、uot;shi<="0000"ge<="0000"when 11=>shu<=16;wan<="ZZZZ"qian<="0101"bai<="0101"shi<="0000"ge<="0000"when 12=>shu<=15;wan<="ZZZZ"qian<="0110"bai<="0000"shi<=&q

58、uot;0000"ge<="0000"when 13=>shu<=28;wan<="ZZZZ"qian<="0110"bai<="0101"shi<="0000"ge<="0000"when 14=>shu<=13;wan<="ZZZZ"qian<="0111"bai<="0000"shi<="0000"

59、ge<="0000"when 15=>shu<=12;wan<="ZZZZ"qian<="0111"bai<="0101"shi<="0000"ge<="0000"when 16=>shu<=11;wan<="ZZZZ"qian<="1000"bai<="0000"shi<="0000"ge<="0000"when 17=>shu<=11;wan<="ZZZZ"qian<=&

温馨提示

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

评论

0/150

提交评论