




已阅读5页,还剩14页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
音乐播放器说明书音乐播放器设计说明1、设计目的充分利用EITS2003 多用途EDA 开发实验平台的设计资源,完成一个比较复杂的FPGA 设计方案,增强对FPGA 设计的更深理解,提高设计水平,为今后的更复杂的FPGA 设计实践打下坚实的基础。2、设计概述EITS2003 多用途EDA 开发实验平台给我们提供了丰富的设计资源。它的核心器件为Xilinx 公司的Spartan-IIE 系列的FPGA 芯片,且在FPGA 周围提供了丰富的资源:有串口、PS/2 接口、VGA 接口、LED 和七段数码管显示、拨码开关和按钮、AT89S52 单片机、SRAM、I2C、A/D D/A 转换、扬声器、电源、电源晶振等。这就为我们的设计提供了丰富的选择。考虑到以后实践的需要,且又要达到一定的难度,我们选择了把几种常用接口PS/2、LED 显示结合的一个电路。虽然设计并不是很复杂,但其实践意义是很大的。3、设计方案说明3.1 总体方案我们设计的总体思想是:利用EITS2003上的拨码开关选择不同的歌曲进行播放,并在相应的七段数码管及LED显示正在播放的音阶。3.2 关键部分说明3.2.1 音乐电路 音乐电路原理:组成乐曲的每个音符的频率值(音调)及持续时间(音长)是实际乐曲演奏的两个基本数据。因此只要控制输出到扬声器的激励信号的频率和信号的持续时间就可以发出持续的乐曲声。 频率的高低决定了音调的高低。音乐的十二平均率规定:每连个八度音(如简谱中的中音1与高音1)之间的频率相差一倍。在两个八度音之间,又可以分为十二个半音,每两个半音的频率比为12sqr(2)。另外,音名A(简谱中的低音6)的频率为440Hz,音名B到C之间,E到F之间为半音,其余为全音。由此简谱中从低音1到高音1之间的每个音名对应的频率如下表3所示:音名 频率(Hz) 音名 频率(Hz)音名 频率(Hz)低音1 261.6 中音1 523.3 高音1 1046.5 低音2 293.7 中音2 587.3 高音2 1174.7 低音3 329.6 中音3 659.3 高音3 1318.5 低音4 349.2 中音4 689.5 高音4 1396.9 低音5 392 中音5 784 高音5 1568 低音6 440 中音6 880 高音6 1760 低音7 493.9 中音7 987.8 高音7 1975.5 根据相应的频率设置分频比,就可以实现音阶的高低。3.3 具体实现3.3.1 顶层模块顶层模块的输入输出如上图所示。输入:clock 是电路板时钟的输入,50 兆赫兹;reset 用于系统的初始化;switch1、switch2、switch3是EITS2003的拨码开关输入,产生音乐选择信号。输出:speaker 用于输出不同频率的时钟,使得蜂鸣器发出不同声音;LED为七段数码管,用于显示高中低音音阶;dig1、dig2、dig3为三段数码管的控制信号,选择数码管的输出;l1、l2、l3、l4、l5、l6、l7为LED显示,指示现输出音阶高低。这些输入输出的对应管脚如下图所示:3.3.2 该工程模块结构工程模块层次结构图3.3.3 程序说明3.3.3.1 Freq_Div 模块/*/Freq_Div.v模块名称: Freq_Div()模块功能: 按输入参数对输入时钟进行分频,输出Clk_User =2)?Clk_Usertemp:Clk_Sys;/若Div比2小,输出系统时钟always (posedge Clk_Sys or negedge Reset)/等待系统时钟上升沿if(!Reset)begin cout=26b0;Clk_Usertemp=26h000_0002)beginif(cout=Div-1)/输出达到一个周期,重新开始beginClk_Usertemp=1b0;cout=(Div1)-1)begincout=cout+1;Clk_Usertemp=1b1;endelsebeginClk_Usertemp=1b0; cout=cout+1;endendendendmodule3.3.3.2HEX2LED 模块/*/HEX2LED.v/*/*/HEX-to-seven-segment decoder/ input 3:0 HEX;/ output 6:0 LED;/ reg 6:0 LED;/ segment encoding/ 0/ /- / 5 | | 1/ /- - 6/ 4 | | 2/ /-/ 3/*module HEX2LED(HEX,LED);/*/HEX:输入十六进制信号/LED:输出显示信号/* input 3:0 HEX; output 6:0 LED; reg 6:0 LED;always (HEX)begincase (HEX) 4b0001 : LED = 7b0000110; /1 4b0010 : LED = 7b1011011; /2 4b0011 : LED = 7b1001111; /3 4b0100 : LED = 7b1100110; /4 4b0101 : LED = 7b1101101; /5 4b0110 : LED = 7b1111101; /6 4b0111 : LED = 7b0000111; /7 4b1000 : LED = 7b1111111; /8 4b1001 : LED = 7b1101111; /9 4b1010 : LED = 7b1110111; /A 4b1011 : LED = 7b1111100; /b 4b1100 : LED = 7b0111001; /C 4b1101 : LED = 7b1011110; /d 4b1110 : LED = 7b1111001; /E 4b1111 : LED = 7b1110001; /F default : LED = 7b0111111; /0 endcaseend endmodule3.3.3.3 ShowKey模块/*/ShowKey.v根据音阶高低,相应的LED发亮。/*/module ShowKey(selectLED,l1,l2,l3,l4,l5,l6,l7); input 3:0 selectLED; output l1; output l2; output l3; output l4; output l5; output l6; output l7; reg l1,l2,l3,l4,l5,l6,l7; always (selectLED) begin case (selectLED) 4b0001: l1,l2,l3,l4,l5,l6,l7=7b0111111; 4b0010: l1,l2,l3,l4,l5,l6,l7=7b1011111; 4b0011: l1,l2,l3,l4,l5,l6,l7=7b1101111; 4b0100: l1,l2,l3,l4,l5,l6,l7=7b1110111; 4b0101: l1,l2,l3,l4,l5,l6,l7=7b1111011; 4b0110: l1,l2,l3,l4,l5,l6,l7=7b1111101; 4b0111: l1,l2,l3,l4,l5,l6,l7=7b1111110; default: l1,l2,l3,l4,l5,l6,l7=7b1111111; endcase endendmodule3.3.3.4 switch模块/*/switch.v根据三个拨码开关的情况,选择相应的歌曲输出/*/module switch(clk_4,clk_6M,switchnum,selectLED,dig1,dig2,dig3,speaker); input 2:0 switchnum; input clk_4,clk_6M; output selectLED; output dig1,dig2,dig3; output speaker; wire clk_4,clk_6M; wire 3:0 high,med,low; reg 3:0 selectLED; reg dig1,dig2,dig3; song1 mysong ( .clk_4Hz(clk_4), .clk_6MHz(clk_6M), .switchnum(switchnum), .speaker(speaker), .high(high), .med(med), .low(low) );always (high or med or low)begin if(high!=4b0000)begindig1=0;dig2=1;dig3=1;selectLED=high;endif(med!=4b0000)begindig1=1;dig2=0;dig3=1;selectLED=med;endif(low!=4b0000)begindig1=1;dig2=1;dig3=0;selectLED=low;endendendmodule 3.3.3.5 song1模块/*/song1.v记录歌谱内容。当拨码开关为高电平时,输出相应的歌曲,若拨码开关状态不变,实现循环播放。/*/module song1(clk_4Hz,clk_6MHz,switchnum,speaker,high,med,low); input clk_4Hz; input clk_6MHz; input switchnum; output speaker; output high,med,low;wire 2:0 switchnum;reg3:0 high,med,low;reg13:0 divider;wire13:0 origin;reg7:0 counter;reg speaker;wire carry;assign carry=(divider=16383); always (posedge clk_6MHz)beginif(carry) divider=origin;else divider=divider+1;endalways (posedge carry)beginspeaker=speaker;endFreqorigin myorigin ( .clk_4Hz(clk_4Hz), .high(high), .med(med), .low(low), .origin(origin) );always (posedge clk_4Hz)beginif(switchnum=3b100)beginif(counter=63) counter=0;else counter=counter+1;case(counter)0:high,med,low=b000000000011;1:high,med,low=b000000000011;2:high,med,low=b000000000011;3:high,med,low=b000000000011;4:high,med,low=b000000000101;5:high,med,low=b000000000101;6:high,med,low=b000000000101;7:high,med,low=b000000000110;8:high,med,low=b000000010000;9:high,med,low=b000000010000;10:high,med,low=b000000010000;11:high,med,low=b000000100000;12:high,med,low=b000000000110;13:high,med,low=b000000010000;14:high,med,low=b000000000101;15:high,med,low=b000000000101;16:high,med,low=b000001010000;17:high,med,low=b000001010000;18:high,med,low=b000001010000;19:high,med,low=b000100000000;20:high,med,low=b000001100000;21:high,med,low=b000001010000;22:high,med,low=b000000110000;23:high,med,low=b000001010000;24:high,med,low=b000000100000;25:high,med,low=b000000100000;26:high,med,low=b000000100000;27:high,med,low=b000000100000;28:high,med,low=b000000100000;29:high,med,low=b000000100000;30:high,med,low=b000000100000;31:high,med,low=b000000100000;32:high,med,low=b000000100000;33:high,med,low=b000000100000;34:high,med,low=b000000100000;35:high,med,low=b000000110000;36:high,med,low=b000000000111;37:high,med,low=b000000000111;38:high,med,low=b000000000110;39:high,med,low=b000000000110;40:high,med,low=b000000000101;41:high,med,low=b000000000101;42:high,med,low=b000000000101;43:high,med,low=b000000000110;44:high,med,low=b000000010000;45:high,med,low=b000000010000;46:high,med,low=b000000100000;47:high,med,low=b000000100000;48:high,med,low=b000000000011;49:high,med,low=b000000000011;50:high,med,low=b000000010000;51:high,med,low=b000000010000;52:high,med,low=b000000000110;53:high,med,low=b000000000101;54:high,med,low=b000000000110;55:high,med,low=b000000010000;56:high,med,low=b000000000101;57:high,med,low=b000000000101;58:high,med,low=b000000000101;59:high,med,low=b000000000101;60:high,med,low=b000000000101;61:high,med,low=b000000000101;62:high,med,low=b000000000101;63:high,med,low=b000000000101;endcaseendif(switchnum=3b010)beginif(counter=100) counter=0;else counter=counter+1;case(counter)0:high,med,low=b000000000101; /中音51:high,med,low=b000000000101; 2:high,med,low=b000000000101; 3:high,med,low=b000000000101; 4:high,med,low=b000000000110; /中音65:high,med,low=b000000000110; 6:high,med,low=b000000000110; 7:high,med,low=b000000000110; 8:high,med,low=b000000000101; /中音59:high,med,low=b000000000101;10:high,med,low=b000000000101;11:high,med,low=b000000000101;12:high,med,low=b000000010000; /高音113:high,med,low=b000000010000; 14:high,med,low=b000000010000; 15:high,med,low=b000000010000; 16:high,med,low=b000000000111; /中音717:high,med,low=b000000000111; 18:high,med,low=b000000000111; 19:high,med,low=b000000000111; 20:high,med,low=b000000000111; 21:high,med,low=b000000000111; 22:high,med,low=b000000000111; 23:high,med,low=b000000000111; 24:high,med,low=b000000000111; 25:high,med,low=b000000000101; /中音526:high,med,low=b000000000101; 27:high,med,low=b000000000101; 28:high,med,low=b000000000101; 29:high,med,low=b000000000110; /中音630:high,med,low=b000000000110; 31:high,med,low=b000000000110; 32:high,med,low=b000000000110; 33:high,med,low=b000000000101; /中音534:high,med,low=b000000000101;35:high,med,low=b000000000101;36:high,med,low=b000000000101;37:high,med,low=b000000100000; /高音238:high,med,low=b000000100000;39:high,med,low=b000000100000;40:high,med,low=b000000100000;41:high,med,low=b000000010000; /高音142:high,med,low=b000000010000;43:high,med,low=b000000010000;44:high,med,low=b000000010000;45:high,med,low=b000000010000;46:high,med,low=b000000010000;47:high,med,low=b000000010000;48:high,med,low=b000000010000;49:high,med,low=b000000000101; /中音550:high,med,low=b000000000101; 51:high,med,low=b000000000101; 52:high,med,low=b000000000101; 53:high,med,low=b000001010000; /高音554:high,med,low=b000001010000; 55:high,med,low=b000001010000;56:high,med,low=b000001010000; 57:high,med,low=b000000110000; /高音358:high,med,low=b000000110000;59:high,med,low=b000000110000;60:high,med,low=b000000110000;61:high,med,low=b000000010000; /高音162:high,med,low=b000000010000; 63:high,med,low=b000000010000; 64:high,med,low=b000000010000; 65:high,med,low=b000000000111; /中音766:high,med,low=b000000000111; 67:high,med,low=b000000000111; 68:high,med,low=b000000000111; 69:high,med,low=b000000000110; /中音670:high,med,low=b000000000110;71:high,med,low=b000000000110;72:high,med,low=b000000000110;73:high,med,low=b000000000110;74:high,med,low=b000000000110;75:high,med,low=b000000000110;76:high,med,low=b000000000110;77:high,med,low=b000000100000; /高音478:high,med,low=b000000100000; 79:high,med,low=b000000100000; 80:high,med,low=b000000100000; 81:high,med,low=b000000110000; /高音382:high,med,low=b000000110000; 83:high,med,low=b000000110000; 84:high,med,low=b000000110000; 85:high,med,low=b000000010000; /高音186:high,med,low=b000000010000; 87:high,med,low=b000000010000; 88:high,med,low=b000000010000; 89:high,med,low=b000000100000; /高音290:high,med,low=b000000100000;91:high,med,low=b000000100000;92:high,med,low=b000000100000;93:high,med,low=b000000010000; /高音194:high,med,low=b000000010000; 95:high,med,low=b000000010000; 96:high,med,low=b000000010000; 97:high,med,low=b000000010000; 98:high,med,low=b000000010000; 99:high,med,low=b000000010000; 100:high,med,low=b000000010000; endcaseendif(switchnum=3b001)beginif(counter=63) counter=0;else counter=counter+1;case(counter)0:high,med,low=b000000000011; /中音31:high,med,low=b000000000010; /中音22:high,med,low=b000000000011; /中音33:high,med,low=b000000000101; /中音54:high,med,low=b000000000110; /中音65:high,med,low=b000000000101; /中音56:high,med,low=b000000010000; /高音17:high,med,low=b000000000110; /中音68:high,med,low=b000000000101; /中音59:high,med,low=b000000000011; /中音310:high,med,low=b000000000101; /中音511:high,med,low=b000000000101; 12:high,med,low=b000000000101;13:high,med,low=b000000000101; 14:high,med,low=b000000000110; /中音615:high,med,low=b000000000110; 16:high,med,low=b000000010000; /高音117:high,med,low=b000000010000; 18:high,med,low=b000000100000; /高音219:high,med,low=b000000110000; /高音320:high,med,low=b000000100000; /高音221:high,med,low=b000000010000; /高音122:high,med,low=b000000000110; /中音623:high,med,low=b000000010000; /高音124:high,med,low=b000000000101; /中音525:high,med,low=b000000000101;26:high,med,low=b000000000101; 27:high,med,low=b000000000101; 28:high,med,low=b000000000101; 29:high,med,low=b000000000101;30:high,med,low=b000000000101; 31:high,med,low=b000000000101; 32:high,med,low=b000000000101; /中音533:high,med,low=b000000000011; /中音334:high,med,low=b000000000101; /中音535:high,med,low=b000000000101; 36:high,med,low=b000000000101;37:high,med,low=b000000000101; 38:high,med,low=b000000000110; /中音639:high,med,low=b000000000110; 40:high,med,low=b000000010000; /高音141:high,med,low=b000000010000; 42:high,med,low=b000000100000; /高音243:high,med,low=b000000110000; /高音344:high,med,low=b000000010000; /高音145:high,med,low=b000000000110; /中音646:high,med,low=b000000000101; /中音547:high,med,low=b000000000101; 48:high,med,low=b000000000101; 49:high,med,low=b000000000101; 50:high,med,low=b000000000010; /中音251:high,med,low=b000000000010; 52:high,med,low=b000000000011; /中音353:high,med,low=b000000000101; /中音554:high,med,low=b000000000011; /中音355:high,med,low=b000000000010; /中音256:high,med,low=b000000000001; /中音157:high,med,low=b000000000001; 58:high,med,low=b000000000001; 59:high,med,low=b000000000001;60:high,med,low=b000000000001;61:high,med,low=b000000000001;62:high,med,low=b000000000001;63:high,med,low=b000000000001;endcaseendif(switchnum=3b000)beginhigh,med,low=b000000000000;counter=0;endendendmodule3.3.3.6 Freqorigin模块/*/Freqorigin.v设置分频比,实现不同音阶不同频率的/*/module Freqorigin(clk_4Hz,high,med,low,origin); input clk_4Hz; input 3:0 high,med,low; output origin; reg13:0 origin;always (posedge clk_4Hz) begincase(high,med,low)b000000000001:origin=5864;b000000000010:origin=6168;b000000000011:origin=7086;b000000000100:origin=7663;b000000000101:origin=8730;b000000000110:origin=9565;b000000000111:origin=10310;b000000010000:origin=10647;b000000100000:origin=11272;b000000110000:origin=11831;b000001000000:origin=12066;b000001010000:origin=12556;b000001100000:origin=12974;b000001110000:origin=13335;b000100000000:origin=13516;b000000000000:origin=16383;endcas
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 铁路建设施工期间环境保护及生态修复合同
- 2025公务员铁警面试题目及答案
- 危险废物运输与环保风险评估与管理合同
- 期门穴穴位注射睡眠效果-洞察及研究
- 保定银行笔试题库及答案
- 专业分流面试题目及答案
- 暖通专业面试题及答案
- 河北计算机专业试题及答案
- 2025年小额贷款考试题及答案
- 消防安全活动培训反思课件
- 2025年度哈尔滨市平房区纪委监委公开招聘雇员2人考试参考题库及答案解析
- 2025年ARVR行业研究报告及未来行业发展趋势预测
- 情绪管理课2025年职场压力释放与心灵成长分析报告
- 2025年征地拆迁考试题及答案
- 巡游出租车考试题及答案
- 2025至2030中国方竹笋市场经营方向与竞争格局分析报告
- 2025年人教版三年级数学上册《混合运算》教案
- 2025医用眼科器械消毒处理标准流程
- 胸部穿刺教学课件
- 2025-2026学年苏教版(2024)小学科学三年级上册(全册)课时练习及答案(附目录P102)
- 食材配送培训计划
评论
0/150
提交评论