毕业论文基于EPM240的音乐播放器的设计_第1页
毕业论文基于EPM240的音乐播放器的设计_第2页
毕业论文基于EPM240的音乐播放器的设计_第3页
毕业论文基于EPM240的音乐播放器的设计_第4页
毕业论文基于EPM240的音乐播放器的设计_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

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

文档简介

1、广东水利电力职业技术学院毕业论文题 目:基于EPM240的音乐播放器的设计姓 名:陈飞龙学 号:100212102专业班级:10电子信息工程所在系别:自动化工程系指导教师: 龚兰芳老师完成日期二一三 年 二 月 十五 日基于EPM240的音乐播放器的设计【摘要】 这次的音乐播放器在CPLD内部设计出扬声器发生及分频模块、音符预置数模块、音符储存模块三个模块,再配开关选择模块、彩灯闪烁控制模块等必要的外围电路,从而实现四首音乐选择播放,并配有随音乐节奏产生灯柱效果等功能的MIDI音乐播放器。通过本次设计,可以实现出可编程逻辑器件CPLD在电子设计领域的应用。【关键词】EPM240,CPLD,音乐

2、播放器,VHDL语言目录第1章绪论11.1选题的目的与任务1选题的背景11.2设计的基本内容11.2.1 CPLD的设计1外围电路的设计2第2章总体设计概述12.1 关于CPLD12.2 设计思路2总体设计框图与设计思路22.2.2 CPLD设计思路32.2.3 外围电路设计思路3第3章音乐播放器设计43.1 工作原理43.2 模块设计43.2.1 音符预置数与发生及分频模块设计43.2.2 彩灯闪烁控制模块的设计73.2.3 开关选择模块设计73.2.4 音符储存模块设计73.3 四首歌曲选择9第4章外围电路设计104.1 时钟电路104.1.1 音乐节奏时钟104.2 音频功率放大电路11

3、4.3 音乐彩灯闪烁控制电路11第5章系统调试125.1 系统调试125.1.1 音乐节奏时钟的调试125.1.2 音频功率放大的调试12结论13参考文献14附录A 总电路图15附录B PCB图16附录C VHDL源代码16致谢29第1章 绪论1.1选题的目的与任务本毕业设计其目的和任务是,让学生掌握EDA的基本方法,熟悉一种EDA软件(Quartus ),并能利用EDA软件设计实际工程项目,并在开发板上成功下载;使我们将学到的理论知识应用于实践之中,更是培养学生动手能力和训练学生严格认真的科学态度及工作作风,为即将踏入工作岗位打下坚实的基础; 通过本毕业设计应达到以下几点:1 培养我们的集体

4、主义精神、严肃认真的工作态度;热爱劳动、团结协作、爱护仪器、遵守纪律的优良品德。2 掌握IC设计的基本原理及方法,掌握硬件描述语言VHDL对数字系统的设计方法和技巧。3 掌握印制电路板的设计与制作的方法。4 掌握电子线路的安装、焊接和调试的基本技能。 5. 培养我们分析、解决实际问题的能力和勇于创新的科学精神。 6. 培养我们分析寻找和排除电子电路中常见故障的能力. 7. 培养我们独立写出严谨的、有理论依据的、实事求是的、文理通顺的毕业论文的能力。选题的背景CPLD都是可编程逻辑器件,是在PAL、GAL等逻辑器件的基础上发展起来的,与分立元件相比,具有速度快、容量大、功耗小和可靠性高等优点。由

5、于集成度高、设计方法先进、现场可编程,它可以替代几十甚至上百片通用IC芯片。这种芯片具有现场可编程和方案容易改动的特点。所以FPGA和CPLD芯片收到世界范围内电子工程设计人员的广泛关注和普遍欢迎,可以设计各种数字电路和数字系统。1.2设计的基本内容CPLD的设计1在CPLD内部设计出扬声器发生及分频模块、音符预置数模块、音符储存模块三个模块,再配开关选择模块、彩灯闪烁控制模块等必要的外围电路,从而实现四首音乐选择播放,并配有随音乐节奏产生灯柱效果等功能的MIDI音乐播放器。2. 设计音乐播放器系统的外围硬件电路原理图。3. 制作PCB,并且软、硬件调试成功。外围电路的设计这次设计中用到了4H

6、Z的频率,如果直接用自带的50MHZ来分频的话会给芯片的内部资源占用太多,而且不方便每次在程序中对时钟调试,所以我们在外部单独接入一个时钟信号,提供给音乐时钟。从模电与数电课题中得知,采用555定时器构成多谐振荡器来实现这块电路最合适又有零件,所以我们觉得用它来做时钟。扬声器因为我们准备了2个从耳机与影响上拆下来的扬声器,到最后那个音质好则选用哪个。从各处质料中得知由于CPLD内部输出的信号比较弱,因此必须在扬声器前借一个音频功率放大电路才能实现我们的要求,而且在该电路接入滑动变阻器,这样可以通过调节滑动变阻器,改变放大器的放大倍数,从而调试出放大出来音量。第2章 总体设计概述2.1关于CPL

7、DMAX II器件系列是一种非易失性、即用性可编程逻辑系列,它采用了一种突破性的新型CPLD架构。这种新型架构的成本是原先MAX 器件的一半,功耗是其十分之一,密度是其四倍,性能却是其两倍。这些超级性能是在提供了所有MAX系列CPLD 先进特性的架构的基础上,根据Altera专家们的意见而重新采用基于查找表的架构而得到的。这种基于查找表的架构在最小的I/O焊盘约束的空间内提供了最多的逻辑容量。因此,MAX II CPLD是所有CPLD系列产品中成本最低、功耗最小和密度最高的器件。基于成本优化的0.18微米6层金属Flash工艺,MAX II器件系列具有CPLD所有的优点,例如非易失性、即用性、

8、易用性和快速传输延时性。以满足通用性,低密度逻辑应用为目标,MAX II器件成为接口桥接、I/O扩展、器件配置和上电顺序等应用最理想的解决方案。除这些典型的CPLD应用之外,MAX II器件还能满足大量从前在FPGA、ASSP和标准逻辑器件中实现的低密度可编程逻辑需求。MAX II器件提供的密度范围从240到2210个逻辑单元(LE),最多达272个用户I/O管脚。本次设计核心模块CPLD采用ALTERA公司MAX II系列的EPM240T100C芯片。该芯片共有100个管脚,内部240个逻辑单元,如图1所示,为该芯片的封装图及管脚功能。图1 EPM240T100C管脚封装图及管脚功能说明2.

9、2 设计思路2.1.1总体设计框图与设计思路如图2所示是这次音乐播放器的工作原理图。其中中心模块式CPLD芯片,内部由音调发生器、音乐编码器和彩灯闪烁控制器三个模块组成。我们通过开关来选择歌曲,音乐编码器里已经存储了4首歌曲,我们通过选择不同的开关来播放不同的歌曲。音乐编码器控制着音调发生器和彩灯闪烁控制器,每当音乐节奏时钟的脉冲到来是时,音乐编码器就把当前要播放的音符的编码送给音调发生器和彩灯闪烁控制器。音调发生器就会产生相应的音符频率给音频放大器,经过放大由扬声器放出,产生音乐。彩灯闪烁控制器根据编码点亮相应的彩灯,实现灯柱效果。核心部分CPLD我们利用VHDL语言来完成,其他部分通过外围

10、电路实现。图2 音乐播放器的工作原理图2.2.2CPLD设计思路在这里我们用的是老师所提供的学习开发板,板中所用的就是EPM240中的CPLD芯片。老师所提供的CPLD型芯片,其内部逻辑单元数为240个,只要对程序进行一定的优化处理,即可以满足所有的设计要求。为了使整个设计尽量简洁,4首歌曲均只有高潮部分,这样听起来容易辨认与熟悉,同时也能节省芯片内部资源。2.2.3 外围电路设计思路这次设计中用到了4HZ的频率,如果直接用自带的50MHZ来分频的话会给芯片的内部资源占用太多,而且在程序中对时钟调试不方便,所以我们在外部单独接入一个时钟信号,提供给音乐时钟。从模电与数电课题中得知,采用555定

11、时器构成多谐振荡器来实现这块电路最合适又有零件,所以我们觉得用它来做时钟。扬声器因为我们准备了2个从耳机与影响上拆下来的扬声器,到最后那个音质好则选用哪个。从个处质料中得知由于CPLD内部输出的信号比较弱,因此必须在扬声器前借一个音频功率放大电路才能实现我们的要求,而且在该电路接入滑动变阻器,这样可以通过调节滑动变阻器,改变放大器的放大倍数,从而调试出放大出来音量。第3章音乐播放器设计3.1 工作原理MIDI音乐的基本原理为:组成乐曲的每一个音符的频率值及其持续的时间是乐曲能连续演奏的两个基本数据,因此只要控制输出到扬声器的激励信号频率的高低和每一个频率信号的持续时间,就可以使扬声器发生连续的

12、乐曲。如图3所示,为CPLD内部芯片设计原理图。50MHZ基准时钟开关选择模块音符储存模块发生及分频模块 扬声器4HZ时钟音符预置数模块彩灯彩灯闪烁模块图3 芯片原理3.2 模块设计音符预置数与发生及分频模块设计在设计中音符产生是通过音符预置数模块以查找表的形式把预先设定好的数置给发生及分频模块的可变模值计数器实现分频,得到相应的频率后输出给音频放大器,在通过扬声器发出。根据可变模值计数器的设计原理及音符的分频系数,可计算出乐曲中各音符的预置数,如表3.1所示。而在音符的选择上,我们选择了最广泛应用的16个音。表3.1 音符的分频数和预置数音名分频系数初始值低音551023089低音64545

13、3646低音740504141中音138224369中音234054786中音330345157中音428635328中音525515640中音622735918中音720256166高音119116280高音217036488高音315176674高音414326759高音512756816休止符008191发生及分频模块由可变模值计数器实现。由于系统要求产生出的信号频率较高,因此选用4MHz高频脉冲作为可变模值计数器的技计数脉冲。而为了减少输出的偶次谐波分量,最后输出到扬声器的波形应为对称方波,因此在到达扬声器之前,有一个2分频的分频器。所以,上图所给出的分频系数是用分频后的2MHz基础上

14、计算得出的。各音阶频率及相应的分频如表3.2所示。程序如:process(PreCLK, Tone)-置数分频variable Count11: integer range 0 to 16#1FFF#;begin if PreCLK'event and PreCLK='1' thenif Count11=16#1FFF# thencount11:=Tone;FullSpkS<='1'else Count11:=Count11+1;FullSpkS<='0'end if;end if;end process;表3.2 音符与频率

15、对照表音名频率/Hz分频系数低音5391.995102低音64404545低音7493.884050中音1523.253822中音2587.333405中音3659.253034中音4698.462863中音5783992551中音68802273中音7987.762025高音11046.501911高音21174.661703高音31318.511517高音41396.921432高音51567.981275休止符081910由于音阶频率多为非整数,而分频系数又不能为小数,故必须将得到的分频数四舍五入取整。在表中可以看到不同音阶对应的不同初始值。对于不同的分频系数,只要加载不同的初始值即可。

16、采用加载初始值而不将分频输出译码反馈,可以有效地减少设计占用可编程逻辑器件的资源。“0”表示休止符,在很多音乐中,休止符也是一个重要的音符。对于休止符,只要将分频系数设为0,扬声器就不会发声了。3.2.2 彩灯闪烁控制模块的设计向二极管发送高电平就会发光,而彩灯闪烁控制电路就是根据音符储存模块中发送过来的音符进行判断,决定点亮不同的灯数,这样当音乐演奏时就会好、出现灯柱效果。如表3.3所示,为不同的音符对应的灯点亮情况。表3.3 不同音符对应彩灯闪烁表音名彩灯闪烁(1为亮/ 0为灭)低音5110000000中音6111110000低音6100000000中音7111110000低音710000

17、0000高音1111111000中音1110000000高音2111111000中音2111000000高音3111111100中音3111000000高音4111111100中音4111100000高音5111111111中音5111100000休止符0000000003.2.3 开关选择模块设计开关选择模块的设计,我们通过case语句,对开发板上的拨码快关的4个输入进行判断,从而控制应该播放的是那一首歌曲。直接case语句直接对一个四位二进制数组进行选择,如1000为第一首歌曲,0100为第二首歌曲,0010为第三首歌曲,0001为第四首歌曲,其他则不进行播放。如:case switch

18、iswhen "0001"=>dig<=1;when "0010"=>dig<=2;when "0100"=>dig<=3;when "1000"=>dig<=4;when others=>dig<=0;end case;3.2.4 音符储存模块设计在记谱法中,用以表示音的高、低、长、短变化的音乐符号称这音符。通过一定的节奏、节拍组织起一些相同或不同高低、长短的音符,即构成了一首具有一定音乐形象的曲调的基本部分。因此,要掌握简谱的规律,首先必须认识各种音符

19、,理解其意义。显然,单用以上七个音是无法表现众多的音乐形象的。在实际作品中,还有一些更高或更低的音,如在基本音符上方加记一个"·",表示该音升高一个八度,称为高音;加记两个" :",则表示该音升高两个八度,称为倍高音。在基本音符下方加记一个"·",表示该音降低一个八度,称为低音;加记两个" :",则表示该音降低两个八度,称为倍低音。在简谱中,加记在单纯音符的右侧的、使音符时值增长的小圆点"·",称为附点。加记附点的音符称为附点音符。附点本身并无一定的长短,其长短由前

20、面的单纯音符来决定。附点的意义在于增长原音符时值的一半,常用于四分音符和小于四分音符的各种音符之后。例如在简谱中,加记在单纯音符的右侧的使音符时值增长的小圆点·,称为附点加记附点的音符称为附点音符。附点本身并无一定的长短,其长短由前面的单纯音符来决定。附点的意义在于增长原音符时值的一半,常用于四分音符和小于四分音符的各种音符之后。例如:附点四分音符:附点八分音符:附点十六分音符:在简谱中,大于四分音符的单纯音符通常不加记附点,而用增时线来表示。例如;附点二分音符:不用表示。带有两个附点的单纯音符称为复附点音符,第二个附点表示增长第一个附点时值的一半,即音符时值的四分之-。例如:复附点

21、常用于器乐曲中,在歌曲中很少使用。在大部分音乐中,多以1/4为一拍,一拍则为一秒,同时在乐谱中,而最短的音符多为1/16音符,因此为了达到四首歌曲的统一,我们将1/16音符设置为计数器的一个计数,对应的1/4音符则是四个计数。为了节省内部资源,我们只演奏高潮部分。这样的话,比如说涛声依旧为4/4拍的音乐,即一个小节有4拍,而高潮部分共有8个小节,所以在计数器的范围上我们设定为0127,即128位的计数器即可。另外,在设计中为了让歌曲循环播放,计数器设定计满自动清零计数的功能,这样,只要不断电,不关开关,歌曲就可以自动循环播放了。而我们通过对音符频率的编码进行乐谱的弹奏与:表3.4不同音符对应编

22、码表音名休止符中音1中音2中音3中音4中音5中音6高音7编码01234567音名高音1高音2高音3高音4高音5低音5低音6低音7编码89101112131415如歌曲中的龙的传人第一节:when 00=>ToneIndex<=6;when 01=>ToneIndex<=6;when 02=>ToneIndex<=6;when 03=>ToneIndex<=6;when 04=>ToneIndex<=7;when 05=>ToneIndex<=7;when 06=>ToneIndex<=8;when 07=>

23、;ToneIndex<=8;when 08=>ToneIndex<=9;when 09=>ToneIndex<=9;when 10=>ToneIndex<=9;when 11=>ToneIndex<=9;when 12=>ToneIndex<=10;when 13=>ToneIndex<=10;when 14=>ToneIndex<=9;when 15=>ToneIndex<=9;3.3 四首歌曲选择这次设计的MIDI音乐播放器所选择的歌曲,是需要一些比较简单且歌曲为1/4拍的歌曲,音符符合芯

24、片中所储存的16个音符的歌曲。以为对于其他格式的音乐而言,MIDI音乐相对会比较单调,而且会微略失真。所以经过老师的建议与多次的选择,最后确定了龙的传人、涛声依旧、隐形的翅膀、我愿意四首歌,这四首歌旋律明朗,都是耳熟能详的流行歌曲,便于辨识。第4章 外围电路设计4.1 时钟电路这次的设计中我们除了由内部产生4MHZ的频率外,还要通过外围电路接入音乐节奏时钟。时钟信号都是利用555定时器构成的多谐振荡电路所提供的。4.1.1 音乐节奏时钟我们以1/16音符为最小计数单元,而这个音符所占用的时间理论值为0.25s,所以我们在外部接入4Hz的时钟信号给计数器,已满足正常的音乐播放要求。之所以采用外部

25、接入的时钟,而不用晶振直接分频有两个原因:一、晶振为50MHz,而我们只需要4Hz的信号,这样分频会占用太大内部资源;二、而由分频出来的4HZ要对音乐的速度进行调整过于困难,而通过外部接入则很简单。如图4所示为555定时器构成的多谐振荡器电路。由3脚输出的脉冲频率的计算公式如公式(1)所示。 (1)改变可变电阻的阻值就可以改变输出频率。我们要求输出的频率为4Hz,C3=47uf,所以R4+R5应为7.66K。为了使输出的脉冲比较稳定、减少外界干扰,将输出的脉冲再经过D触发器(7474)后送给CPLD芯片,因此555定时器件脚输出的脉冲频率应提高一倍(即8Hz),这样R3+R4的阻值应为3.83

26、K。图4 音乐节奏时钟产生电路图4.2 音频功率放大电路由于CPLD内部输出的信号比较弱,因此必须在扬声器前接一个音频功率放大电路才能实现我们的要求,而且在该电路接入滑动变阻器,这样可以通过调节滑动变阻器,改变放大器的放大倍数,从而调试出放大出来音量。我们采用由集成功率放大器LM386组成的音频功率放大器,如图5所示。其中C7是交流耦合电容,将功率放大器的交流输出送到负载上,输出信号通过Rw接到LM386的同相端。C6是退耦电容,R1(10K)-C6网络起到消除高频自激振荡作用。图5 音频功率放大电路图4.3 音乐彩灯闪烁控制电路如图6所示。彩灯由9个发光二极管构成。高低电平控制着九个发光二极

27、管的亮灭。图6 开关电路及彩灯电路第5章系统调试5.1 系统调试把程序下载到芯片内部后,将第四章所介绍的所有外围电路与CPLD连接后,形成整个系统。而调试则主要针对音乐节奏时钟、音频功率放大电路进行调试。5.1.1 音乐节奏时钟的调试音乐节奏时钟理论要求是4Hz,在实际的演奏过程中,频率稍微高于4Hz效果较好,通过改变R3的电阻来改变音乐节奏适中,从而改变音乐节奏。经过比较,最终将R1的组织定在2.95 K,音乐节奏时钟的频率约为5Hz。5.1.2 音频功率放大的调试通过调节Rw的阻值来改变输入到音频放大器LM386的音频信号的电压值,经过比较,最终将Rw阻值定在1.31 K。结论在这次的设计

28、中我主要负责的部分是编程设计部分,通过对芯片编程设计,加上对必要的外围电路的一定了解,完成了这个MIDI音乐播放器的系统,整体工作量适中。在老师的多次辅导以及与同学的交流中基本的完成了所需要的要求。由添加一首歌曲到四首歌曲选择播放,彩灯闪烁,不同音乐的调试,设计更人性化,合理化。在此次设计中,需然所有设计要求基本全部实现,然而在音乐的播放质量上仍有一些不好,可能是由于音频功率放大电路的连接问题或者芯片内部产生信号不稳定等关系。通过此次设计,对可编程逻辑器件CPLD有了更深一步的了解,对我们前面已经学习过的知识(数字电路设计、硬件描述语言VHDL及CPLD、单片机、电子技术、接口技术、Prote

29、l DXP软件等)回顾与更加精通了。并学会怎样应用到实际中去,并增强对电子行业发展的了解。这一次的设计对于我的毕业是必不可少的,有了这个设计与没有这个设计的毕业时完全不一样的,这个设计样我了解到了,有时候我们认为很难甚至是不可能的事情,只要你动手去做,可能就是一件好简单或是一件可能完成的事情。信心是我们在工作的路上不可缺少的感情,这一次的设计让我对自己又了信心,我相信我可以在以后的路上走的更好更耀眼。参考文献1 张丽萍,楼勇,朱尧富.利用VHDL语言设计数字电路J. 机械与电气.2008.5.2 李洋. 现代电子设计与创新M.北京:中国电力出版社,2007.3 famouskyEDA技术的概念

30、及范畴EB/OL 2005-12-26.4 吴冰, 李森森. EDA技术的发展与应用J,今日电子.2006.7. 5 赵红梅, 王召东.可编程逻辑器件FPGA与CPLD的发展与应用一例J.平顶山工学院学报.2005.7.6 童世华,付蔚.谈ASIC、FPGA/CPLD 的区别与发展J.重庆职业技术学院学报.2007.11.7 赵鑫,蒋亮,齐兆群,李晓凯VHDL与数字电路设计M. 北京:机械工业出版社,2005.4.8 王晓丽.可编程逻辑器件CPLD/FPGA的发展J. 科技信息.2007.28.9 杨宝强,何伟,赵东晔. CPLD仿真存在的问题及解决方法J. 空进工程大学学报(自然科学版).2

31、002.8.10 EDA技术课程设计及实训指导书,龚兰芳编11EDA技术实验指导书,龚兰芳编附录A总电路图附录B PCB图附录C VHDL源代码-顶层设计模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY yybfq ISPORT(CLK:IN STD_LOGIC;-50MHZ CLK4HZ: IN STD_LOGIC;-4HZ switch:in std_logic_vector(3 downto 0);-拨码开关 SPKOUT: OUT STD_LOGIC;-音乐输出 lights:out std_logic_vector(8 downto

32、0);-灯END;ARCHITECTURE one OF yybfq ISCOMPONENT NoteTabs-列化语句-音符储存模块PORT(clk: IN STD_LOGIC; dig: in integer range 0 to 4; ToneIndex: OUTINTEGERRANGE 0 TO 15);END COMPONENT;COMPONENT ToneTaba-音符预置数模块PORT(index: IN INTEGERRANGE 0 TO 15; Tone: OUTINTEGERRANGE0 TO 16#1FFF#);END COMPONENT;component kg-开关选

33、择模块port(switch:in std_logic_vector(3 downto 0); dig:out integer range 0 to 4);end component;COMPONENT Speakera-扬声器发生及分频模块PORT(clk: IN STD_LOGIC; Tone: IN INTEGER RANGE 0 TO 16#1FFF#; SpkS: OUT STD_LOGIC);END COMPONENT; component cd-彩灯闪烁控制模块port(Tone :in INTEGERRANGE 0 TO 15;lights:out std_logic_vect

34、or(8 downto 0);end component;SIGNAL Tone: INTEGERRANGE0 TO 16#1FFF#;-8191SIGNAL ToneIndex: INTEGERRANGE 0 TO 15;SIGNAL dig1: integer range 0 to 4;BEGINu1: NoteTabs PORT MAP(clk=>CLK4HZ,dig=>dig1,ToneIndex=>ToneIndex);u2: ToneTaba PORT MAP(Index=>ToneIndex, Tone=>Tone);u3: Speakera POR

35、T MAP(clk=>CLK, Tone=>Tone, SpkS=>SPKOUT);u4: cd port map(Tone=>ToneIndex, lights=>lights);u5: kg port map(switch=>switch,dig=>dig1);END;-开关选择模块library ieee;use ieee.std_logic_1164.all;entity kg isport(switch:in std_logic_vector(3 downto 0); dig:out integer range 0 to 4);end;arc

36、hitecture one of kg isbeginprocess(switch)begincase switch iswhen "0001"=>dig<=1;when "0010"=>dig<=2;when "0100"=>dig<=3;when "1000"=>dig<=4;when others=>dig<=0;end case;end process;end;-彩灯闪烁控制模块library ieee;use ieee.std_logic_116

37、4.all;entity cd isport(Tone :in INTEGERRANGE 0 TO 15;lights:out std_logic_vector(8 downto 0);end;architecture one of cd isbegin process(Tone)begin case Tone iswhen 0 => lights<="000000000"when 1 => lights<="110000000"when 2 => lights<="111000000"when 3

38、 => lights<="111000000"when 4 => lights<="111100000"when 5 => lights<="111100000"when 6 => lights<="111110000"when 7 => lights<="111110000"when 8 => lights<="111111000"when 9 => lights<="111111

39、000"when 10 => lights<="111111100"when 11 => lights<="111111100"when 12 => lights<="111111111"when 13 => lights<="110000000"when 14 => lights<="100000000"when 15 => lights<="100000000"when others=>

40、;NULL;end case;end process;end;-扬声器发生及分频模块library ieee;use ieee.std_logic_1164.all;entity Speakera isPORT(clk: IN STD_LOGIC; Tone: IN INTEGER RANGE 0 TO 16#1FFF#; SpkS: OUT STD_LOGIC);END ;architecture one of Speakera issignal PreCLK:std_logic;signal FullSpkS:std_logic;beginprocess(clk)variable coun

41、t4:integer range 0 to 11;-12分频=4.16MHZbeginPreCLK<='0'if Count4=11 THEN PreCLK<='1' Count4:=0;elsif clk'EVENT and clk='1' then Count4:=Count4+1;end if;end process;process(PreCLK, Tone)-置数分频variable Count11: integer range 0 to 16#1FFF#;begin if PreCLK'event and P

42、reCLK='1' thenif Count11=16#1FFF# thencount11:=Tone;FullSpkS<='1'else Count11:=Count11+1;FullSpkS<='0'end if;end if;end process;process(FullSpkS)-二分频variable Count2:std_logic;beginif FullSpkS'EVENT and FullSpkS='1' thenCount2:=NOT Count2;if Count2='1'

43、; then SpkS<='1'else SpkS<='0'end if;end if;end process;end;-音符预置数模块library ieee;use ieee.std_logic_1164.all;entity ToneTaba isPORT(index: IN INTEGERRANGE 0 TO 15; Tone: OUTINTEGERRANGE0 TO 16#1FFF#);END;architecture one of ToneTaba isbegin process(index)begin case Index iswhen

44、 0 => Tone<=8191;-休止符when 1 => Tone<=4369;-中音1when 2 => Tone<=4786;-中音2when 3 => Tone<=5157;-中音3when 4 => Tone<=5328;-中音4when 5 => Tone<=5640;-中音5when 6 => Tone<=5918;-中音6when 7 => Tone<=6166;-中音7when 8 => Tone<=6280;-高音1when 9 => Tone<=648

45、8;-高音2when 10 => Tone<=6674;-高音3when 11 => Tone<=6759;-高音4when 12 => Tone<=6816;-高音5when 13 => Tone<=3089;-低音5when 14 => Tone<=3646;-低音6when 15 => Tone<=4141;-低音7when others=>NULL;end case;end process;end;-音符储存模块library ieee;use ieee.std_logic_1164.all;entity N

46、oteTabs isPORT(clk: IN STD_LOGIC; dig: in integer range 0 to 4; ToneIndex: OUTINTEGERRANGE 0 TO 15);END;architecture one of NoteTabs issignal Counter :integer range 0 to 127;beginprocess(dig,clk)begin if (dig=1 or dig=2 or dig=3 or dig=4) thenif Counter=128 then Counter<=0;elsif(clk'event and

47、 clk='1') thenCounter<=Counter+1;end if;elsecounter<=0;end if;end process;process(dig,counter)beginif dig=1 then-龙的传人case Counter iswhen 00=>ToneIndex<=6;-1when 01=>ToneIndex<=6;when 02=>ToneIndex<=6;when 03=>ToneIndex<=6;when 04=>ToneIndex<=7;when 05=>

48、ToneIndex<=7;when 06=>ToneIndex<=8;when 07=>ToneIndex<=8;when 08=>ToneIndex<=9;when 09=>ToneIndex<=9;when 10=>ToneIndex<=9;when 11=>ToneIndex<=9;when 12=>ToneIndex<=10;when 13=>ToneIndex<=10;when 14=>ToneIndex<=9;when 15=>ToneIndex<=9;wh

49、en 16=>ToneIndex<=8;-2when 17=>ToneIndex<=8;when 18=>ToneIndex<=8;when 19=>ToneIndex<=8;when 20=>ToneIndex<=8;when 21=>ToneIndex<=8;when 22=>ToneIndex<=7;when 23=>ToneIndex<=7;when 24=>ToneIndex<=6;when 25=>ToneIndex<=6;when 26=>ToneInde

50、x<=6;when 27=>ToneIndex<=6;when 28=>ToneIndex<=6;when 29=>ToneIndex<=6;when 30=>ToneIndex<=6;when 31=>ToneIndex<=6;when 32=>ToneIndex<=6;-3when 33=>ToneIndex<=6;when 34=>ToneIndex<=6;when 35=>ToneIndex<=6;when 36=>ToneIndex<=7;when 37=&g

51、t;ToneIndex<=7;when 38=>ToneIndex<=8;when 39=>ToneIndex<=8;when 40=>ToneIndex<=9;when 41=>ToneIndex<=9;when 42=>ToneIndex<=9;when 43=>ToneIndex<=9;when 44=>ToneIndex<=10;when 45=>ToneIndex<=10;when 46=>ToneIndex<=9;when 47=>ToneIndex<=9;

52、when 48=>ToneIndex<=8;-4when 49=>ToneIndex<=8;when 50=>ToneIndex<=7;when 51=>ToneIndex<=7;when 52=>ToneIndex<=8;when 53=>ToneIndex<=8;when 54=>ToneIndex<=9;when 55=>ToneIndex<=9;when 56=>ToneIndex<=10;when 57=>ToneIndex<=10;when 58=>Tone

53、Index<=10;when 59=>ToneIndex<=10;when 60=>ToneIndex<=10;when 61=>ToneIndex<=10;when 62=>ToneIndex<=10;when 63=>ToneIndex<=10;when 64=>ToneIndex<=6;-5when 65=>ToneIndex<=6;when 66=>ToneIndex<=6;when 67=>ToneIndex<=6;when 68=>ToneIndex<=7;

54、when 69=>ToneIndex<=7;when 70=>ToneIndex<=8;when 71=>ToneIndex<=8;when 72=>ToneIndex<=9;when 73=>ToneIndex<=9;when 74=>ToneIndex<=9;when 75=>ToneIndex<=9;when 76=>ToneIndex<=10;when 77=>ToneIndex<=10;when 78=>ToneIndex<=9;when 79=>ToneIn

55、dex<=9;when 80=>ToneIndex<=8;-6when 81=>ToneIndex<=8;when 82=>ToneIndex<=7;when 83=>ToneIndex<=7;when 84=>ToneIndex<=8;when 85=>ToneIndex<=8;when 86=>ToneIndex<=7;when 87=>ToneIndex<=7;when 88=>ToneIndex<=6;when 89=>ToneIndex<=6;when 90=

56、>ToneIndex<=6;when 91=>ToneIndex<=6;when 92=>ToneIndex<=6;when 93=>ToneIndex<=6;when 94=>ToneIndex<=6;when 95=>ToneIndex<=6;when 96=>ToneIndex<=7;-7when 97=>ToneIndex<=7;when 98=>ToneIndex<=7;when 99=>ToneIndex<=7;when 100=>ToneIndex<

57、=7;when 101=>ToneIndex<=7;when 102=>ToneIndex<=7;when 103=>ToneIndex<=7;when 104=>ToneIndex<=7;when 105=>ToneIndex<=7;when 106=>ToneIndex<=8;when 107=>ToneIndex<=8;when 108=>ToneIndex<=8;when 109=>ToneIndex<=8;when 110=>ToneIndex<=7;when 11

58、1=>ToneIndex<=7;when 112=>ToneIndex<=6;-8when 113=>ToneIndex<=6;when 114=>ToneIndex<=6;when 115=>ToneIndex<=6;when 116=>ToneIndex<=6;when 117=>ToneIndex<=6;when 118=>ToneIndex<=5;when 119=>ToneIndex<=5;when 120=>ToneIndex<=6;when 121=>To

59、neIndex<=6;when 122=>ToneIndex<=6;when 123=>ToneIndex<=6;when 124=>ToneIndex<=6;when 125=>ToneIndex<=6;when 126=>ToneIndex<=6;when 127=>ToneIndex<=6;when others=>NULL;end case;elsif dig=2 then-涛声依旧case Counter iswhen 00=>ToneIndex<=0;-1when 01=>Tone

60、Index<=0;when 02=>ToneIndex<=5;when 03=>ToneIndex<=6;when 04=>ToneIndex<=6;when 05=>ToneIndex<=6;when 06=>ToneIndex<=6;when 07=>ToneIndex<=3;when 08=>ToneIndex<=5;when 09=>ToneIndex<=6;when 10=>ToneIndex<=6;when 11=>ToneIndex<=5;when 12=>ToneIndex<=5;when 13=>Ton

温馨提示

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

评论

0/150

提交评论