版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、EDA技术基础音乐播放器设计性实验46郭斌电子信息科学与技术物电学院0803班一、任务解析:以前用51单片机制作了一个可演奏的电子琴,学习了EDA技术之后,感觉FPGA与单片机有许多类似的地方。于是,启发我用FPGA做一个可随意演奏的音乐播放器。设计低、中、高21个音,几乎能够实现一般歌曲的演奏。要实现该功能,就必须考虑到一首歌曲的产生应该考虑的两个因素:音符的产生频率和音的节拍(即声音持续的时间)。只要控制输出到扬声器的激励信号频率的高低和持续的时间,就可以使扬声器发声产生优美的歌曲。2、 方案论证:1、 音调的控制:频率的高低决定了音调的高低。通过查阅资料,得到下面的音符名与频率的关系表:
2、音符名频率/hz音符名频率/hz音符名频率/hz低音1262中音1523高音11046低音2294中音2587高音21175低音3330中音3659高音31318低音4349中音4698高音41397低音5392中音5784高音51568低音6440中音6880高音61760低音7494中音7988高音71976分频比预置数的计算:分频比就是从6Mhz基准频率通过二分频得到的3Mhz频率基础上计算得到的。对于乐曲中的休止符,只需将其分频系数设为0,将分频预置数设为16383即可。例如:低音3的频率为330hz,分频比为3M/330hz=/330=9091,则其分频预置数为:16383-9091
3、=7292。其他的音符对应的分频比和分频比预置数均按此法计算可得到。依次计算出低、中、高3X7=21个音的预置数。各音阶对应的预置数如下表:音符名预置数音符名预置数音符名预置数低音14933中音110647高音113515低音26179中音211272高音213830低音37292中音311831高音314107低音47787中音412085高音414236低音58730中音512556高音514470低音69565中音612974高音614678低音710310中音713347高音7148582、 音长的控制:音符的持续时间必须根据乐曲的速度及每个音符的节拍数来确定。本试验中,设定最短的音符
4、为4分音符,若将全音符的持续时间设为1s的话,则需要提供一个4Hz的时钟频率即可产生4分音符的时间,每1/4个节拍的时间为0.25s,一个完整的节拍为1s。以上即为音乐播放器的原理框图。控制音调通过设置计数器的预置数来实现,预置不同的数可以使计数器产生不同频率的信号,从而产生不同的音调。控制音长则是通过控制计数器预置数的停留时间来实现的,预置数停留的时间越长,则该音符演奏的时间越长。每个音符的演奏时间都是0.25s的整数倍,对于节拍较长的音符,例如2分音符,占了2/4个节拍,在记谱的时候将其连续记录2次即可。3、 实验步骤:1、 分频产生6Mz的基准频率:module div_clk6mhz(
5、clk24m,clk6m);input clk24m;output clk6m;reg clk6m;reg cnt;always (posedge clk24m)if(cnt1)cnt=cnt+1; /(24m/6m=4分频,cnt4/2-1=1即可)else begin cnt=0;clk6m=!clk6m;endendmodule由于此分频电路简单,就不在这里给出仿真波形了。2、 分频产生4hz的节拍控制频率:module div_clk4hz(clk24m,clk4);input clk24m;output clk4;reg clk4;reg 21:0cnt;always (posedg
6、e clk24m)if(cnt)cnt=cnt+1;/(24m/4hz=,cnt/2-1=)else begin cnt=0;clk4=!clk4;endendmodule此分频电路也很简单,就不在这里给出仿真波形了。3、 乐曲产生模块:核心模块就在这里,这里:(1)首先罗列了低、中、高21个音的分频比预置数(还有休止符的预置数16383),通过6Mhz的基准频率,在其上升沿的时候,计数器累加,当计满到16383之后就取反speaker(speaker=speaker非阻塞赋值),产生对应音符的频率,这里和单片机的定时计数器溢出中断差不多。(2) 产生了21个音调之后,我们要产生流畅的歌曲,还
7、必须根据歌曲的谱子,调用相应音符并且根据节拍控制其持续的时间,例如:若一个音持续4个1/4节拍,则在clk_4hz的上升沿,连续调用4次它的音符就可以了。用counter来计数,计满了(何时计满取决于歌曲长度)就将counter返回为0,这样就可以实现循环演奏了。代码如下:module song(clk_6mhz,clk_4hz,speaker);input clk_6mhz,clk_4hz;output speaker;reg 3:0high,med,low;reg 13:0divider,origin;reg 7:0counter;reg speaker;wire carry;assign
8、 carry=(divider=16383);always (posedge clk_6mhz)begin if(carry)divider=origin; else divider=divider+1;endalways (posedge carry)begin speaker=speaker;endalways (posedge clk_4hz)begin case(high,med,low)b1:origin=4933;b0:origin=6179;b1:origin=7292;b0:origin=7787;b1:origin=8730;b0:origin=9565;b1:origin=
9、10310;b0:origin=10647;b0:origin=11272;b0:origin=11831;b0:origin=12085;b0:origin=12556;b0:origin=12974;b0:origin=13347;b0:origin=13515;b0:origin=13830;b0:origin=14107;b0:origin=14236;b0:origin=14470;b0:origin=14678;b0:origin=14858;b0:origin=16383;endcaseendalways (posedge clk_4hz)beginif(counter=113)
10、counter=0;else counter=counter+1;case(counter)0: high,med,low=b1;1: high,med,low=b1;/2: high,med,low=b0;3: high,med,low=b0;/4: high,med,low=b1;5: high,med,low=b1;/6: high,med,low=b0;7: high,med,low=b0;/8: high,med,low=b0;9: high,med,low=b0;10:high,med,low=b0;11:high,med,low=b0;/12:high,med,low=b0;13
11、:high,med,low=b0;/14:high,med,low=b0;15:high,med,low=b0;/16:high,med,low=b0;17:high,med,low=b0;/18:high,med,low=b0;19:high,med,low=b0;/20:high,med,low=b0;21:high,med,low=b0;22:high,med,low=b0;23:high,med,low=b0;/24:high,med,low=b0;25:high,med,low=b0;/26:high,med,low=b0;27:high,med,low=b0;/28:high,me
12、d,low=b0;29:high,med,low=b0;/30:high,med,low=b0;31:high,med,low=b0;/32:high,med,low=b0;33:high,med,low=b0;/34:high,med,low=b0;35:high,med,low=b0;/36:high,med,low=b0;37:high,med,low=b0;/38:high,med,low=b0;39:high,med,low=b0;/40:high,med,low=b0;41:high,med,low=b0;/42:high,med,low=b0;43:high,med,low=b0
13、;/44:high,med,low=b0;45:high,med,low=b0;46:high,med,low=b0;47:high,med,low=b0;48:high,med,low=b0;49:high,med,low=b0;/祝你生日快乐,完毕。50: high,med,low=b1;/梁祝,开始51: high,med,low=b1;52: high,med,low=b1;53: high,med,low=b1;54: high,med,low=b1;55: high,med,low=b1;56: high,med,low=b1;57: high,med,low=b0;58: hig
14、h,med,low=b0;59: high,med,low=b0;60:high,med,low=b0;61:high,med,low=b0;62:high,med,low=b0;63:high,med,low=b0;64:high,med,low=b1;65:high,med,low=b1;66:high,med,low=b0;67:high,med,low=b0;68:high,med,low=b0;69:high,med,low=b0;70:high,med,low=b0;71:high,med,low=b0;72:high,med,low=b0;73:high,med,low=b0;7
15、4:high,med,low=b0;75:high,med,low=b0;76:high,med,low=b0;77:high,med,low=b0;78:high,med,low=b0;79:high,med,low=b0;80:high,med,low=b0;81:high,med,low=b0;82:high,med,low=b0;83:high,med,low=b0;84:high,med,low=b0;85:high,med,low=b0;86:high,med,low=b1;87:high,med,low=b1;88:high,med,low=b0;89:high,med,low=
16、b0;90:high,med,low=b1;91:high,med,low=b1;92:high,med,low=b1;93:high,med,low=b0;94:high,med,low=b0;95:high,med,low=b0;96:high,med,low=b0;97:high,med,low=b0;98:high,med,low=b1;99:high,med,low=b1;100:high,med,low=b0;101:high,med,low=b0;102:high,med,low=b0;103:high,med,low=b1;104:high,med,low=b0;105:hig
17、h,med,low=b0;106:high,med,low=b1;107:high,med,low=b1;108:high,med,low=b1;109:high,med,low=b1;110:high,med,low=b1;111:high,med,low=b1;112:high,med,low=b1;113:high,med,low16383,故只需取14bit即可,14位的二进制计数器可满足要求。分频比都是从6Mhz频率二分频得到3Mhz频率基础上计算得到。3、如何分频得到想要的频率?总结了下,如果想由已知频率得到N分频的频率,计数器count(N/2-1)为分界线,将要得到的频率在分界线处取反即可。比如:上面
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年大学仪器科学与技术(仪表研发设计)试题及答案
- 2025年高职雪茄烟草叶制作与包装(烟叶处理与包装规范)试题及答案
- 2025年中职(会展策划师)展会策划阶段测试题及答案
- 2025年中职第一学年(文秘)公文写作技能试题及答案
- 2025年大学大二(森林保护学)病虫害防治期末测试试题及答案
- 2025年中职会计事务(财务核算基础)试题及答案
- 2025年高职高星级饭店运营与管理(宴会策划)试题及答案
- 2025年大学本科(会计学)财务报表编制与分析试题及答案
- 2025年高职包装设计与制作(绿色包装设计)试题及答案
- 2025年大学语文(经典诵读)试题及答案
- 地推销售话术
- 2025交管12123学法减分整套试题带答案解析(全国适用)
- 步兵班进攻战斗掩体课件
- 2025年国企管理人员能力测评试卷及答案
- 电动车装配作业指导书1
- 施工标志杆施工方案
- 工务专业应急预案(3篇)
- 村干部国土培训
- 乡镇卫生院工作人员绩效考核表
- 市政公用工程设计文件编制深度规定(2025年版)
- 头皮知识培训课件
评论
0/150
提交评论