EDA课设设计简易音乐播放器_第1页
EDA课设设计简易音乐播放器_第2页
EDA课设设计简易音乐播放器_第3页
EDA课设设计简易音乐播放器_第4页
EDA课设设计简易音乐播放器_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

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

文档简介

1、课程设计说明书1 引言22 VHDL及QuartusII软件简介32.1 EDA简介32.2 硬件描述语言VHDL32.3软件介绍43 简易乐曲演奏器设计及仿真53.1原理描述53.1.1音名与频率的关系53.1.2可变分频器53.1.3节拍发生器原理73.2乐曲演奏电路各模块设计83.3 乐曲演奏电路的子结构83.3.1 音调发生器模块83.3.2音调编码器电路模块113.3.3分频器电路模块143.3.4 手动自动选择模块163.3.6 数控分频器模块203.4 顶层程序及仿真223.4.1 顶层程序223.4.2 顶层原理仿真图243.5 硬件下载及实现24总结27参考文献281 引言V

2、HDL语言是一种用于电路设计的高级语言。它在80年代的后期出现。最初是由美国国防部开发出来供美军用来提高设计的可靠性和缩减开发周期的一种使用范围较小的设计语言 。随着EDA技术的高速发展,电子系统的设计技术和工具发生了深刻的变化,大规模可编程逻辑器件CPLDFPGA的出现,给设计人员带来了诸多方便。利用它进行产品开发,不仅成本低、周期短、可靠性高,而且具有完全的知识产权。突出了其作为硬件描述语言的良好的可读性、可移植性和易读性等优点。本文基于FPGA开发系统,在QuartusII 7.2软件平台上,完成了简易多功能信号发生器电路的设计和与仿真,并下载到试验箱进行硬件实现。首先,本文介绍了Qua

3、rtusII 7.2软件的基本使用方法和VHDL硬件描述语言的特点,采用VHDL 硬件描述语言描述简易信号发生器,完成对电路的功能仿真。在设计过程中,重点探讨了简易信号发生器设计思路和功能模块划分。然后,初步探讨了电路逻辑综合的原理,该软件对简易多功能信号发生器电路进行了逻辑综合。最后,使用EDA实验开发系统进行电路的下载和验证。验证结果表明设计的简易简易信号发生器完成了预期的功能。简易多功能信号发生器是信号发生器的一种,在生产实践和科研领域中有着广泛的应用。在研制、生产、测试和维修各种电子元件、部件以及整机设备时,都需要有信号源,由它产生不同频率不同波形的电压、电流信号并加到被测器件或设备上

4、,用其他仪器观察、测量被测仪器的输出响应,以分析确定它们的性能参数。信号发生器是电子测量领域中最基本、应用最广泛的一类电子仪器。它可以产生多种波形信号,如正弦波,三角波,方波和锯齿波等,因而广泛用于通信、雷达、导航、宇航等领域。本设计是采用VHDL来实现的简易乐曲演奏器。它能实现自动演奏已存歌曲和手动演奏简易乐曲。且要求实现如下功能:(1)通过按键输入来控制音响声音 ;(2)演奏时可以通过按键选择是手动演奏还是自动演奏,手动演奏是通过按键进行简易乐曲的演奏,自动演奏则是演奏已存入的固定乐曲;(3保存四首自动演奏的乐曲,自动演奏的乐曲能重复播放并且能选择播放;(4)进行手动演奏和自动演奏时,数码

5、管上要同时能显示演奏乐曲的乐谱;(5)自动播放时,设置低速,中速,快速控制键,能实现乐曲不同速度的播放。2 VHDL及QuartusII软件简介2.1 EDA简介EDA是电子设计自动化(Electronic Design Automation)的缩写,在20世纪60年代中期从计算机辅助设计(CAD)、计算机辅助制造(CAM)、计算机辅助测试(CAT)和计算机辅助工程(CAE)的概念发展而来的。EDA技术就是以计算机为工具,设计者在EDA软件平台上,用硬件描述语言HDL完成设计文件,然后由计算机自动地完成逻辑编译、化简、分割、综合、优化、布局、布线和仿真,直至对于特定目标芯片的适配编译、逻辑映射

6、和编程下载等工作。EDA技术的出现,极大地提高了电路设计的效率和可操作性,减轻了设计者的劳动强度。 利用EDA工具,电子设计师可以从概念、算法、协议等开始设计电子系统,大量工作可以通过计算机完成,并可以将电子产品从电路设计、性能分析到设计出IC版图或PCB版图的整个过程的计算机上自动处理完成。现在对EDA的概念或范畴用得很宽。包括在机械、电子、通信、航空航天、化工、矿产、生物等各个领域,都有EDA的应用。2.2 硬件描述语言VHDL硬件描述语言(HDL)是一种用于设计硬件电子系统的计算机语言,它用软件编程的方式来描述电子系统的逻辑功能、电路结构和连接形式,与传统的门级描述方式相比,它更适合大规

7、模系统的设计。例如一个32位的加法器,利用图形输入软件需要输人500至1000个门,而利用VHDL语言只需要书写一行“A=B+C” 即可。而且 VHDL语言可读性强,易于修改和发现错误。早期的硬件描述语言,如ABEL、HDL、AHDL,由不同的EDA厂商开发,互不兼容,而且不支持多层次设计,层次间翻译工作要由人工完成。为了克服以上不足,1985年美国国防部正式推出了高速集成电路硬件描述语言VHDL,1987年IEEE采纳VHDL为硬件描述语言标准(IEEE-STD-1076)。VHDL是一种全方位的硬件描述语言,包括系统行为级。寄存器传输级和逻辑门多个设计层次,支持结构、数据流和行为三种描述形

8、式的混合描述,因此VHDL几乎覆盖了以往各种硬件俄语言的功能,整个自顶向下或由下向上的电路设计过程都可以用VHDL来完成。VHDL还具有以下优点:(1)VHDL的宽范围描述能力使它成为高层进设计的核心,将设计人员的工作重心提高到了系统功能的实现与调试,而花较少的精力于物理实现。(2)VHDL可以用简洁明确的代码描述来进行复杂控制逻辑设计,灵活且方便,而且也便于设计结果的交流、保存和重用。(3)VHDL的设计不依赖于特定的器件,方便了工艺的转换。(4)VHDL是一个标准语言,为众多的EDA厂商支持,因此移植性好。美国于1981年提出了一种新的、标准化的HDL,称之为VHSIC(Very High

9、 Speed Integrated Circuit) Hardware Description Language,简称VHDL。这是一种用形式化方法来描述数字电路和设计数字逻辑系统的语言。设计者可以利用这种语言来描述自己的设计思想,然后利用电子设计自动化工具进行仿真,再自动综合到门电路,最后用PLD实现其功能。2.3软件介绍Quartus II 是Altera公司的综合性PLD开发软件,支持原理图、VHDL、VerilogHDL以及AHDL(Altera Hardware Description Language)等多种设计输入形式,内嵌自有的综合器以及仿真器,可以完成从设计输入到硬件配置的完

10、整PLD设计流程。 Quartus II可以在XP、Linux以及Unix上使用,除了可以使用Tcl脚本完成设计流程外,提供了完善的用户图形界面设计方式。具有运行速度快,界面统一,功能集中,易学易用等特点。 Quartus II支持Altera的IP核,包含了LPM/MegaFunction宏功能模块库,使用户可以充分利用成熟的模块,简化了设计的复杂性、加快了设计速度。对第三方EDA工具的良好支持也使用户可以在设计流程的各个阶段使用熟悉的第三方EDA工具。 此外,Quartus II 通过和DSP Builder工具与Matlab/Simulink相结合,可以方便地实现各种DSP应用系统;支持

11、Altera的片上可编程系统(SOPC)开发,集系统级设计、嵌入式软件开发、可编程逻辑设计于一体,是一种综合性的开发平台。 Maxplus II 作为Altera的上一代PLD设计软件,由于其出色的易用性而得到了广泛的应用。Altera在Quartus II 中包含了许多诸如SignalTap II、Chip Editor和RTL Viewer的设计辅助工具,集成了SOPC和HardCopy设计流程,并且继承了Maxplus II 友好的图形界面及简便的使用方法。 Altera Quartus II 作为一种可编程逻辑的设计环境, 由于其强大的设计能力和直观易用的接口,越来越受到数字系统设计者

12、的欢迎。3 简易乐曲演奏器设计及仿真3.1原理描述3.1.1音名与频率的关系乐谱中从低音1到高音1之间每个音名的频率如表3-1所示:表3-1 简谱中的音名与频率的关系音名频率(Hz)音名频率(Hz)音名频率(Hz)低音1261中音1523高音11046低音2294中音2578高音21175低音3330中音3659高音31318低音4349中音4698高音41397低音5392中音5784高音51568低音6440中音6880高音61760低音7440中音7988高音719763.1.2可变分频器1. 基准频率的选取各音名所对应的频率可由一频率较高的基准频率进行整数分频得到,所以实际产生各音名频

13、率为近似的整数值。这是由于音阶频率多为非整数,而分频系数又不能为小数,故必须将得到的分频系数四舍五入取整,若基准频率过低,则由于分频系数过小,四舍五入取整后的误差较大,若基准频率过高,虽然误码差较小,但分频结构将变大,实际的设计应综合考虑两方面的因素,在尽量减小频率差的前提下取舍合适的基准频率。本次设计选择10MHz作为基准频率。2. 分频系数A、公用二进制的计数容量N及初始值的选取D(1) 分频系数的选取 首先将10MHz的基准频率进行10分频,得到1MHz的基准频率,分频系数A1MHz音名频率,此分频系数可由计数器实现。为得到对称方波,可将分频系数A分解为:分频系数A=分频系数n×

14、;2。即先进行分频系数n的分频,得到不对称方波,然后再2分频得到对称方波。(2) 公用二进制的计数容量N的选取n分频可由n进制计数器实现。n进制计数器可用复位法或置位法实现,由于加载初始值d的置位法可有效地减少设计所占用的可编程逻辑器件资源,因此,此次设计采用置位法。低音1的分频数n为最大,其值为1275,应取公用二进制计数器的计数容量N大与“最大分频系数n”,故本次设计的公用二进制计数器应该设计为十一位二进制加法计数器,其计数最大容量为2048,计数的最大值N为2047,可满足本次设计中所有音名对音频系数的要求。(3) 初始值的选取D初始值D = 计数最大值N - 分频系数n此次设计中应用的

15、各音名对应的分频系数值及初始值如表所示:表3-2各音名对应的分频系数值及初始值音符初始值对应音谱区别高中低音020470011091112119621312893141331415140951614796171541718156912916212210166832111689421217285213176362141794123. 丢手绢的音符谱为:5,5,5,5,5,5,3,3,5,5,5,5,5,5,3,3,5,5,3,3,2,2,3,3,5,5,5,5,0,0,0,0,5,5,5,5,5,5,3,3,6,6,6,6,5,5,5,5,3,3,5,5,3,3,2,2,1,1,1,1,2,2,

16、2,2,3,3,3,3,5,5,5,5,3,3,2,2,1,1,2,2,3,3,3,3,0,0,0,0,6,6,5,5,6,6,5,5,2,2,3,3,5,5,5,5,6,6,5,5,6,6,5,5,2,2,2,2,3,3,3,3,1,1,1,1,0,0,0,0卖报歌的音符谱为:5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,3,3,5,5,6,6,5,3,2,2,3,3,5,5,5,5,5,5,3,3,5,5,3,2,1,1,3,3,2,2,2,2,3,3,3,3,2,2,2,2,6,6,1,1,2,2,2,2,6,6,6,6,6,6,5,5,3,3,6,6,5,5,5,5,5,

17、5,3,3,2,2,3,3,5,5,5,5,0,0,0,0,5,5,3,3,2,2,3,3,5,5,3,3,2, 3,3,6,6,1,1,2,2,3,3,1,1,1,1,0,0,0,水调歌头的音符谱为:8,8,8,13,5,6,8,8,8,8,8,8,8,8,8,8,8,8,6,9,9,9,9,9,10,10,8,6,10,10,8,6,9,9,9,8,6,6,6,6,11,11,11,11,6,8,6,9,9,9,9,9,9,9,9,9,8,8,8,6,5,5,6,8,8,8,8,8,8,8,8,8,8,8,8,6,5,5,6,9,9,9,9,9,9,9,9,9,10,10,8,6,10,1

18、0,8,6,9,9,9,8,6,6,6,6,11,11,11,11,6,8,8,8,8,9,9,9,9,9,9,9,9,9,9,9,5,5,7,7,6,6,8,8,8,8,8,8,8,8,0,0,0,0,0,0,0,0,10,10,10,9,10,10,8,8,11,11,12,11,10,10,9,8,9,9,9,9,9,12,13,12,9,9,9,9,9,9,9,9,10,10,10,9,10,10,8,8,11,11,12,11,10,10,9,8,9,9,9,9,9,12,13,12,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,8,8,8,6,5,5,6,8,8,8,

19、8,8,8,8,8,8,8,8,8,6,5,5,6,9,9,9,9,9,9,9,9,9,10,10,8,6,10,10,8,6,9,9,9,8,6,6,6,6,11,11,11,11,6,8,8,9,9,9,9,9,9,9,9,9,5,5,7,7,6,7,8,8,8,8,8,8,8,8,8娃娃脸的音符谱为:5,6,5,6,5,6,5,6,4,5,4,5,4,5,4,5,3,4,3,4,3,4,3,4,5,5,5,5,3,3,2,2,2,2,2,1,14,14,1,1,2,2,12,12,3,3,3,3,5,5,4,4,3,3,1,1,12,12,5,6,5,6,5,6,5,6,4,5,4,5,

20、4,5,4,5,3,4,3,4,3,4,3,4,5,5,5,5,3,3,2,2,2,2,2,2,2,2,3,3,3,3,2,2,1,1,1,1,1,1,0,03.1.3节拍发生器原理该演奏电路的最小节拍为1拍,将一拍的时长定为0.25s,则只需要再提供一个4Hz的时钟频率即可产生一拍的时长。为了能达到演奏时能循环进行,则需设置一个时长计数器,当乐曲演奏完时,保证能自动从头开始演奏。3.2乐曲演奏电路各模块设计本次设计乐曲演奏电路结构方框图如图3-1所示:基准时钟10MHz功能拓展手动输入FPGA时钟电路数控分频器电路音乐节拍产生电路音调编码电路4Hz10MHz扬声器数码管图3-1乐曲演奏电路结

21、构方框图3.3 乐曲演奏电路的子结构顶层结构所包含的模块分别有音调发生器模块、音调编码器模块、分频器模块、手动自动选择模块及数控分频器模块。3.3.1 音调发生器模块1. 音调发生器模块在此模块中设置了一个整形计数器,这个计数器的计数频率选为4Hz,即每一计数值的停留时间为0.25s,恰好为当全音符设为1s时,四四拍的4分音符的持续时间。在此音乐发生模块中添加了手动选择播放歌曲的功能,当选则端口x=“00”时播放丢手绢,x=“01”时播放卖报歌,x=“10”时播放水调歌头,当x=“11”时播放娃娃脸。音调发生器模块VHDL源程序如下:library ieee;use ieee.std_logi

22、c_1164.all; entity notetaba isport(clk:in std_logic;x: in std_logic_vector(1 downto 0);note:out integer range 0 to 15);end;architecture bhv of notetaba istype va is array(0 to 127 ) of integer range 0 to 15;type vb is array(0 to 125 ) of integer range 0 to 15;type vc is array(0 to 295 ) of integer r

23、ange 0 to 15;type vd is array(0 to 109 ) of integer range 0 to 15;constant memory1:va:=(5,5,5,5,5,5,3,3,5,5,5,5,5,5,3,3,5,5,3,3,2,2,3,3,5,5,5,5,0,0,0,0,5,5,5,5,5,5,3,3,6,6,6,6,5,5,5,5,3,3,5,5,3,3,2,2,1,1,1,1,2,2,2,2,3,3,3,3,5,5,5,5,3,3,2,2,1,1,2,2,3,3,3,3,0,0,0,0,6,6,5,5,6,6,5,5,2,2,3,3,5,5,5,5,6,6,

24、5,5,6,6,5,5,2,2,2,2,3,3,3,3,1,1,1,1,0,0,0,0);constant memory2:vb:=(5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,3,3,5,5,6,6,5,3,2,2,3,3,5,5,5,5,5,5,3,3,5,5,3,2,1,1,3,3,2,2,2,2,3,3,3,3,2,2,2,2,6,6,1,1,2,2,2,2,6,6,6,6,6,6,5,5,3,3,6,6,5,5,5,5,5,5,3,3,2,2,3,3,5,5,5,5,0,0,0,0,5,5,3,3,2,2,3,3,5,5,3,3,2, 3,3,6,6,1,1,2,2,

25、3,3,1,1,1,1,0,0,0,0);constant memory3:vc:=(8,8,8,13,5,6,8,8,8,8,8,8,8,8,8,8,8,8,6,9,9,9,9,9,10,10,8,6,10,10,8,6,9,9,9,8,6,6,6,6,11,11,11,11,6,8,6,9,9,9,9,9,9,9,9,9,8,8,8,6,5,5,6,8,8,8,8,8,8,8,8,8,8,8,8,6,5,5,6,9,9,9,9,9,9,9,9,9,10,10,8,6,10,10,8,6,9,9,9,8,6,6,6,6,11,11,11,11,6,8,8,8,8,9,9,9,9,9,9,9,

26、9,9,9,9,5,5,7,7,6,6,8,8,8,8,8,8,8,8,0,0,0,0,0,0,0,0,10,10,10,9,10,10,8,8,11,11,12,11,10,10,9,8,9,9,9,9,9,12,13,12,9,9,9,9,9,9,9,9,10,10,10,9,10,10,8,8,11,11,12,11,10,10,9,8,9,9,9,9,9,12,13,12,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,8,8,8,6,5,5,6,8,8,8,8,8,8,8,8,8,8,8,8,6,5,5,6,9,9,9,9,9,9,9,9,9,10,10,8,6,10,1

27、0,8,6,9,9,9,8,6,6,6,6,11,11,11,11,6,8,8,9,9,9,9,9,9,9,9,9,5,5,7,7,6,7,8,8,8,8,8,8,8,8,8);constant memory4:vd:=(5,6,5,6,5,6,5,6,4,5,4,5,4,5,4,5,3,4,3,4,3,4,3,4,5,5,5,5,3,3,2,2,2,2,2,1,14,14,1,1,2,2,12,12,3,3,3,3,5,5,4,4,3,3,1,1,12,12,5,6,5,6,5,6,5,6,4,5,4,5,4,5,4,5,3,4,3,4,3,4,3,4,5,5,5,5,3,3,2,2,2,2

28、,2,2,2,2,3,3,3,3,2,2,1,1,1,1,1,1,0,0);signal counter1:integer range 0 to 354;signal counter2:integer range 0 to 120;signal counter3:integer range 0 to 295;signal counter4:integer range 0 to 109; beginprocess(clk,counter1,counter2,counter3,counter4,x)beginif(x="00") then if counter1=354 the

29、ncounter1<=0; elsif clk'event and clk='1' then counter1<=counter1+1; end if; note<=memory1(counter1); elsif(x="01") then if counter2=120 thencounter2<=0; elsif clk'event and clk='1' then counter2<=counter2+1; end if; note<=memory2(counter2); elsif(

30、x="10") then if counter3=295 thencounter3<=0; elsif clk'event and clk='1' then counter3<=counter3+1; end if; note<=memory3(counter3); elsif(x="11") then if counter4=109 thencounter4<=0; elsif clk'event and clk='1' then counter4<=counter4+1;

31、end if; note <=memory4 (counter4); end if; end process;end;2. 音调发生器模块的仿真图图3-2 音调发生器模块的仿真波形图通过仿真图可以清楚的看到,时钟clk由0开始计数,每计一次数输出toneindex的值随之发生一定的变化,只不过根据乐谱的不同,输出的变化也不尽相同。例如在本次设计中,自第1个时钟上升沿来临到第4个时钟上升沿,输出toneindex “1”。于是根据乐谱的不同就输出不同的音符,作为音调编码器的输入。然后把输出toneindex输入到音调编码器模块,进行下一步编码工作。于是,由仿真图可以知道本模块输出的即为演奏

32、音乐的音符谱,说明该程序正确,可以生成逻辑器件。3. 音调发生器模块生成的逻辑器件图3-3 音调发生器电路模块生成器件3.3.2音调编码器电路模块1. 音调编码器模块该编码模块的作用为将输入的音符数据翻译为音乐产生模块的所需要的分频系数,并且显示音符的数字码型和高音阶,通过对照表3-2各音名对应的分频系数值及初始值,根据输入得到初始值,从而得到分频系数以便进行分频,得到所需的频率。音调编码器模块的VHDL源程序:library ieee;use ieee.std_logic_1164.all;entity tonetaba isport(index:in integer range 0 to

33、15;code:buffer integer range 0 to 15;code1:out integer range 0 to 15;digit : out std_logic_vector(6 downto 0);tone:out integer range 0 to 2047);end;architecture bhv of tonetaba isbeginprocess(index)begin case index iswhen 0=>tone<=2047;code<=0;code1<=0;when 1=>tone<=1091;code<=1

34、;code1<=0;when 2=>tone<=1196;code<=2;code1<=0;when 3=>tone<=1289;code<=3;code1<=0;when 4=>tone<=1331;code<=4;code1<=0;when 5=>tone<=1409;code<=5;code1<=0; when 6=>tone<=1479;code<=6;code1<=0;when 7=>tone<=1541;code<=7;code1<=

35、0;when 8=>tone<=1569;code<=1;code1<=1;when 9=>tone<=1621;code<=2;code1<=1;when 10=>tone<=1668;code<=3;code1<=1;when 11=>tone<=1689;code<=4;code1<=1; when 12=>tone<=1728;code<=5;code1<=1;when 13=>tone<=1763;code<=6;code1<=1; when

36、 14=>tone<=1794;code<=7;code1<=1;when others=>NULL;end case;case code iswhen 0=>digit <= "1111110"when 1=>digit <= "0110000"when 2=>digit <= "1101101"when 3=>digit <= "1111001"when 4=>digit <= "0110011"whe

37、n 5=>digit <= "1011011"when 6=>digit <= "1011111"when 7=>digit <= "1110000"when others=> null;end case;end process;end ;2. 音调编码器模块的仿真图图3-4 音调发生器模块的仿真波形图在此程序中index为音乐节拍产生模块输出的音符数据,经过翻译后将tone输出到数控分频模块为其提供分频系数的初始值,code为数码管显示的字符数,应用模式5,所以直接输出音符的二进制值,cod

38、e1为高音阶指示信号,当code1为是说明输出为高音阶的音符。通过仿真图可以清楚地看到结果。3. 音调编码器模块生成的逻辑器件图3-5 音调发生器电路模块生成器件3.3.3分频器电路模块1. 分频器模块以及拓展功能(控制播放速度快慢)该编码模块的作用为将10MHZ的时钟信号分频出4HZ的时钟信号,从而实现只用一个时钟信号控制电路。分频器模块的VHDL源程序:library ieee;use ieee.std_logic_1164.all;entity fenpin isport(clk:in std_logic ; s:in std_logic_vector(1 downto 0); clko

39、ut:buffer std_logic);end ;architecture bhv of fenpin issignal clkout1 : std_logic; signal clkout2 : std_logic;signal clkout3 : std_logic;beginprocess(clk)variable temp1 :integer range 0 to 1500000;variable temp2 :integer range 0 to 1500000;variable temp3 :integer range 0 to 1500000;beginif (clk'

40、event and clk='1') thentemp1:=temp1+1;if temp1=1250000 thenclkout1<=not clkout1;temp1:=0;end if;end if;if (clk'event and clk='1') thentemp2:=temp2+1;if temp2=1500000 thenclkout2<=not clkout2;temp2:=0;end if;end if;if (clk'event and clk='1' )thentemp3:=temp3+1;if

41、 temp3=1000000 thenclkout3<=not clkout3;temp3:=0;end if;end if;end process;process(s,clkout,clkout1,clkout2,clkout3)begincase s iswhen "00" =>clkout<=clkout1;when "01" =>clkout<= clkout2;when "11"=> clkout <= clkout3;when others => null;end case;

42、end process;end bhv;2. 分频器模块的仿真图图3-6 分频器模块的仿真波形图在此程序中clk为输入的10MHZ时钟信号,经过2.5M分频得到4HZ的时钟信号。3. 分频器模块生成的逻辑器件图3-7 分频器电路模块生成器件3.3.4 手动自动选择模块1. 手动自动选择模块根据设计的要求,该简易乐曲演奏器能实现手动或自动演奏乐曲的功能。于是,可通过一个按键cs来进行自动与手动的选择,当cs按下时,乐曲自动演奏,其他情况下均为手动演奏乐曲,即可以通过按下其他的按键(与cs相连的按键除外)来控制不同的音符。与此同时,还需要一个复位信号rst来控制该演奏器是否工作,当rst为1时,停

43、止演奏,为0时,可以演奏。以上提到的手动与自动的选择只能在rst为0时有效。手动自动选择模块的VHDL源程序:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;entity bmux isport(d1,d2:in integer range 0 to 15;cs,rst:in std_logic;q:out integer range 0 to 15); end;architecture bhv of bmux isbegin process(cs,rst)variable key :std_logic

44、_vector( 6 downto 0);beginkey := conv_std_logic_vector(d2,7);if rst='1' then q<=0;elsecase cs iswhen '0'=>q<=d1; when '1'=>q<=d2; when others=>q<=d1;end case;end if;end process;end;2. 手动自动选择模块的仿真图图3-8 分频器模块的仿真波形图此仿真图中输入cs代表手动自动演奏的选择端,输入rst代表整体复位端,输入d1、d2分

45、别代表手动和自动演奏的音符,q为输出端,由此仿真图可清楚的看到当rst=1时,不论选择的是手动还是自动,输出都为零,达到了整体复位的功能;当rst=0且cs=1时,自动演奏乐曲,因为q与d2的值相同;当rst=0且cs=0时,手动演奏乐曲,因为这时的q与d1的值相同,从而也达到了演奏方式选择的功能。3. 手动自动选择模块生成的逻辑器件图3-9 分频器电路模块生成器件3.3.5 手动输入音符1.手动输入音符该模块通过7个手动控制端(0 to 6)来控制输出7的音符(1 2 3 4 5 6 7)。手动输入音符的VHDL源程序:library ieee;use ieee.std_logic_1164

46、.all;entity hand is port(k:in std_logic_vector(6 downto 0); q1:out integer range 0 to 15); end;architecture bhv of hand is beginsearch:process(k) begin case k is when"0000001"=>q1<=1; when"0000010"=>q1<=2; when"0000100"=>q1<=3; when"0001000"=

47、>q1<=4; when"0010000"=>q1<=5; when"0100000"=>q1<=6; when"1000000"=>q1<=7; when others=>q1<=0; end case; end process;end;2.手动输入音符的仿真波形图图3-10手动输入音符仿真图在此仿真图中,当cs=1时,开始手动输入音符,由d2段输入,控制输出1,2,3,4,5,6,7。3.手动输入音符生成的逻辑器件如图图3-11手动输入音符生成的模块3.3.6 数控分频器

48、模块1. 数控分频器模块的功能该模块的clk端输入一个具有较高频率(本实验为10MHz)的信号,通过分频后由spks输出。由于直接从数控分频器中出来的输出信号是脉宽极窄的脉冲信号,为了便于驱动喇叭,需另加一个D触发器均衡其占空比,也即作二分频处理。分频器对clk输入信号的分频比由11位预置数tone10.0决定。spks的输出频率将决定每一音符的音调,这样分频计数器的预置数tone10.0与spks的输出频率就有了对应关系。数控分频器模块的VHDL源程序:library ieee;use ieee.std_logic_1164.all;entity speak isport(clk:in st

49、d_logic;tone:in integer range 0 to 2047;spks:out std_logic);end;architecture bhv of speak issignal preclk:std_logic;signal fullspks:std_logic;beginprocess(clk)variable count4:integer range 0 to 15;beginpreclk<='0'if count4>10 thenpreclk<='1'count4:=0;elsif clk'event and

50、clk='1' thencount4:=count4+1;end if;end process;process(preclk,tone)variable count11:integer range 0 to 2047;beginif preclk'event and preclk='1' thenif count11=2047 thencount11:=tone;fullspks<='1'elsecount11:=count11+1;fullspks<='0'end if;end if;end process;

51、process(fullspks)variable count2:std_logic;beginif fullspks'event and fullspks='1' thencount2:=not count2;if count2='1' thenspks<='1'elsespks<='0'end if;end if;end process;end;2. 数控分频器模块的仿真图图3-12 数控分频器模块的仿真波形图在此仿真图中,输入clk是一个频率较大的时钟信号,输入tone代表着某个音符的分频初始值,输出sp

52、ks则代表将输入clk先经过10次分频,再经过(预置数终值2048-tone)次分频,最终再进行二分频处理,而这个信号的频率就是我们需要演奏的音谱的频率,根据频率的不同,从而能通过喇叭听到不同的声音,实现音乐的播放。3. 数控分频器模块生成的逻辑器件图3-13 数控分频器电路模块生成器件3.4 顶层程序及仿真3.4.1 顶层程序将各个模块组合起来,进行编译、下载,从而实现整体功能。它将音调发生器模块、音调编码器模块、分频器模块、手动输入音符、手动自动选择模块及数控分频器模块连接起来。顶层的VHDL源程序:library ieee; use ieee.std_logic_1164.all; en

53、tity top1 is port ( clk : in std_logic ; cs,rst : in std_logic; x : in std_logic_vector(1 downto 0); s : in std_logic_vector(1 downto 0); k : in std_logic_vector( 6 downto 0); code:buffer integer range 0 to 15; code1:out integer range 0 to 15; digit : out std_logic_vector(6 downto 0); spkout: out st

54、d_logic ); end top1;architecture one of top1 is component notetaba is port(clk:in std_logic; x : in std_logic_vector(1 downto 0); note:out integer range 0 to 15 ); end component; component bmux is port(d1,d2:in integer range 0 to 15; cs,rst:in std_logic; q:out integer range 0 to 15); end component; component tonetaba port(index:in integer range 0 to 15; code:buffer integer range 0 to 15; code1:out integer range 0 to 15; digit : out std_logic_vector(6 do

温馨提示

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

评论

0/150

提交评论