2010《EDA技术基础》【设计】实验总结报告模板及要求.doc_第1页
2010《EDA技术基础》【设计】实验总结报告模板及要求.doc_第2页
2010《EDA技术基础》【设计】实验总结报告模板及要求.doc_第3页
2010《EDA技术基础》【设计】实验总结报告模板及要求.doc_第4页
2010《EDA技术基础》【设计】实验总结报告模板及要求.doc_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

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

文档简介

湖北师范学院电工电子实验教学省级示范中心电子版实验报告EDA技术基础音乐播放器设计性实验2008112020346郭斌电子信息科学与技术物电学院0803班一、任务解析:以前用51单片机制作了一个可演奏的电子琴,学习了EDA技术之后,感觉FPGA与单片机有许多类似的地方。于是,启发我用FPGA做一个可随意演奏的音乐播放器。设计低、中、高21个音,几乎能够实现一般歌曲的演奏。要实现该功能,就必须考虑到一首歌曲的产生应该考虑的两个因素:音符的产生频率和音的节拍(即声音持续的时间)。只要控制输出到扬声器的激励信号频率的高低和持续的时间,就可以使扬声器发声产生优美的歌曲。2、 方案论证:1、 音调的控制:频率的高低决定了音调的高低。通过查阅资料,得到下面的音符名与频率的关系表:音符名频率/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=3000000/330=9091,则其分频预置数为:16383-9091=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分音符,若将全音符的持续时间设为1s的话,则需要提供一个4Hz的时钟频率即可产生4分音符的时间,每1/4个节拍的时间为0.25s,一个完整的节拍为1s。以上即为音乐播放器的原理框图。控制音调通过设置计数器的预置数来实现,预置不同的数可以使计数器产生不同频率的信号,从而产生不同的音调。控制音长则是通过控制计数器预置数的停留时间来实现的,预置数停留的时间越长,则该音符演奏的时间越长。每个音符的演奏时间都是0.25s的整数倍,对于节拍较长的音符,例如2分音符,占了2/4个节拍,在记谱的时候将其连续记录2次即可。3、 实验步骤:1、 分频产生6Mz的基准频率:module div_clk6mhz(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 (posedge clk24m)if(cnt2999999)cnt=cnt+1;/(24m/4hz=6000000,cnt6000000/2-1=2999999)else begin cnt=0;clk4=!clk4;endendmodule此分频电路也很简单,就不在这里给出仿真波形了。3、 乐曲产生模块:核心模块就在这里,这里:(1)首先罗列了低、中、高21个音的分频比预置数(还有休止符的预置数16383),通过6Mhz的基准频率,在其上升沿的时候,计数器累加,当计满到16383之后就取反speaker(speaker=speaker非阻塞赋值),产生对应音符的频率,这里和单片机的定时计数器溢出中断差不多。(2) 产生了21个音调之后,我们要产生流畅的歌曲,还必须根据歌曲的谱子,调用相应音符并且根据节拍控制其持续的时间,例如:若一个音持续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 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)b000000000001:origin=4933;b000000000010:origin=6179;b000000000011:origin=7292;b000000000100:origin=7787;b000000000101:origin=8730;b000000000110:origin=9565;b000000000111:origin=10310;b000000010000:origin=10647;b000000100000:origin=11272;b000000110000:origin=11831;b000001000000:origin=12085;b000001010000:origin=12556;b000001100000:origin=12974;b000001110000:origin=13347;b000100000000:origin=13515;b001000000000:origin=13830;b001100000000:origin=14107;b010000000000:origin=14236;b010100000000:origin=14470;b011000000000:origin=14678;b011100000000:origin=14858;b000000000000:origin=16383;endcaseendalways (posedge clk_4hz)beginif(counter=113)counter=0;else counter=counter+1;case(counter)0: high,med,low=b000000000101;1: high,med,low=b000000000101;/2: high,med,low=b000000000110;3: high,med,low=b000000000110;/4: high,med,low=b000000000101;5: high,med,low=b000000000101;/6: high,med,low=b000100000000;7: high,med,low=b000100000000;/8: high,med,low=b000001110000;9: high,med,low=b000001110000;10:high,med,low=b000001110000;11:high,med,low=b000001110000;/12:high,med,low=b000001010000;13:high,med,low=b000001010000;/14:high,med,low=b000001100000;15:high,med,low=b000001100000;/16:high,med,low=b000001010000;17:high,med,low=b000001010000;/18:high,med,low=b001000000000;19:high,med,low=b001000000000;/20:high,med,low=b000100000000;21:high,med,low=b000100000000;22:high,med,low=b000100000000;23:high,med,low=b000100000000;/24:high,med,low=b000001010000;25:high,med,low=b000001010000;/26:high,med,low=b010100000000;27:high,med,low=b010100000000;/28:high,med,low=b001100000000;29:high,med,low=b001100000000;/30:high,med,low=b000100000000;31:high,med,low=b000100000000;/32:high,med,low=b000001110000;33:high,med,low=b000001110000;/34:high,med,low=b011000000000;35:high,med,low=b011000000000;/36:high,med,low=b010000000000;37:high,med,low=b010000000000;/38:high,med,low=b001100000000;39:high,med,low=b001100000000;/40:high,med,low=b000100000000;41:high,med,low=b000100000000;/42:high,med,low=b001000000000;43:high,med,low=b001000000000;/44:high,med,low=b000100000000;45:high,med,low=b000100000000;46:high,med,low=b000100000000;47:high,med,low=b000100000000;48:high,med,low=b000100000000;49:high,med,low=b000100000000;/祝你生日快乐,完毕。50: high,med,low=b000000000011;/梁祝,开始51: high,med,low=b000000000011;52: high,med,low=b000000000011;53: high,med,low=b000000000011;54: high,med,low=b000000000101;55: high,med,low=b000000000101;56: high,med,low=b000000000101;57: high,med,low=b000000000110;58: high,med,low=b000000010000;59: high,med,low=b000000010000;60:high,med,low=b000000010000;61:high,med,low=b000000100000;62:high,med,low=b000000000110;63:high,med,low=b000000010000;64:high,med,low=b000000000101;65:high,med,low=b000000000101;66:high,med,low=b000001010000;67:high,med,low=b000001010000;68:high,med,low=b000001010000;69:high,med,low=b000100000000;70:high,med,low=b000001100000;71:high,med,low=b000001010000;72:high,med,low=b000000110000;73:high,med,low=b000001010000;74:high,med,low=b000000100000;75:high,med,low=b000000100000;76:high,med,low=b000000100000;77:high,med,low=b000000100000;78:high,med,low=b000000100000;79:high,med,low=b000000100000;80:high,med,low=b000000100000;81:high,med,low=b000000100000;82:high,med,low=b000000100000;83:high,med,low=b000000100000;84:high,med,low=b000000100000;85:high,med,low=b000000110000;86:high,med,low=b000000000111;87:high,med,low=b000000000111;88:high,med,low=b000000000110;89:high,med,low=b000000000110;90:high,med,low=b000000000101;91:high,med,low=b000000000101;92:high,med,low=b000000000101;93:high,med,low=b000000000110;94:high,med,low=b000000010000;95:high,med,low=b000000010000;96:high,med,low=b000000100000;97:high,med,low=b000000100000;98:high,med,low=b000000000011;99:high,med,low=b000000000011;100:high,med,low=b000000010000;101:high,med,low=b000000010000;102:high,med,low=b000000000110;103:high,med,low=b000000000101;104:high,med,low=b000000000110;105:high,med,low=

温馨提示

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

评论

0/150

提交评论