Verilog多首乐曲选择演奏电路设计.doc_第1页
Verilog多首乐曲选择演奏电路设计.doc_第2页
Verilog多首乐曲选择演奏电路设计.doc_第3页
Verilog多首乐曲选择演奏电路设计.doc_第4页
Verilog多首乐曲选择演奏电路设计.doc_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

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

文档简介

基于verilog硬件乐曲演奏电路设计(quartus II)模块可以实现4x4键盘扫描按键播放音乐,ROM中存四首歌曲,可以通过选择播放。一、设计任务与要求设计目的 :利用数控分频器设计硬件演奏电路。设计内容 :学习课本定制音符数据ROM“music”。填入新的乐曲。争取可以在一个ROM装上多首歌曲,可手动或自动选择歌曲。设计要求 :用仿真波形和电路原理图,详细叙述硬件电子琴的工作原理及其verilog文件中相关语句功能,叙述硬件实现情况。二、总体框图ROM“music”音符控制输出数控分频器音符译码七段数码管分频器蜂鸣器LED灯ROM中的音乐数据文件刚可由编辑好的音符填入MIF文件中再定制LPM_ROM将音符数据加载入ROM中,并设计程序在运行时自动读取ROM中的文件并置入数控分频器中。当采用四四拍曲子时,每节拍持续时间为0.5秒。置入数控分频器的速度也应与此同步或一致,避免音乐过快或过快慢而失真。我给出的C调音阶频率表,各频率对应的预置数就与数控分频推动蜂鸣器发出声音的频率对应。在编写数控分频器时,不仅要考虑预置数的输入方式,还要考虑输入的速度,以及驱动蜂鸣器发声的频率。为了在扩展能够在ROM中同时存放多首歌曲,并可以手动选择需要的歌曲,故可将ROM中分若干段存放不同曲子。当手动选择歌曲时,可根据输入的选择信号,读出ROM中对应地址的曲子,并将ROM中的曲子完整的播放出来。为了显示高、中、低三种音调,可在音符预置数的译码过程中,同时译出高、中、低三种音阶的信号,并利用三个LED灯输出信号。同时,也可利用该译码模块,将当前演奏的音符简谱表达出来。 下面给出C调音节频率表:音阶频率Hz音阶频率Hz音阶频率Hz1661.227830.617415.311479.986739.9963701318.525659.335329.631174.664587.334293.671108.733554.373277.19987.762493.882246.9488014401220三、功能模块3.1 音符数据地址发生器模块CNT138T模块CNT138T是一个10位二进制计数器,内部计数最大值为500,作为音乐ROM地址发生器。这个计数器的计数频率即为4HZ,即每一个数值停留时间为0.25秒 。可以通过选则en的值 00 01 10 11,选择不同的歌曲。module CNT138T (clk,cnt,en);input clk;input 1:0 en;output 9:0 cnt;reg 9:0 cnt; always (posedge clk ) begincase(en)0:begin if(cnt=139&cnt=263&cnt=335&cnt=439) cnt=cnt+1; else cnt=335;endendcaseendendmodule模块图:仿真图:3.2 分频预置查表模块F_CODE模块F_CODE 乐曲简谱码对应的分频预置数查表为SPKER提供所发音符的分频预置数,分频分频预置数共14个,每一个音符的停留时间由音乐节拍和音调发生查表模块MUSIC中简码和时钟inclock的频率决定,为4hz即0.25s一个上升沿到来就传送一次数据。程序:module f_code (inx,code,h,to);input 3:0 inx; output h; output 3:0 code; output 10:0 to;reg10:0 to; reg3:0 code; reg h;always (inx) begin case (inx) 0:begin to =11H7FF; code=0;h=0;end1:begin to =11H305; code=1;h=0;end2:begin to =11H390; code=2;h=0;end3:begin to =11H40C; code=3;h=0;end4:begin to =11H45C; code=4;h=0;end5:begin to =11H4AD; code=5;h=0;end6:begin to =11H50A; code=6;h=0;end7:begin to =11H55C; code=7;h=0;end8:begin to =11H582; code=1;h=1;end9:begin to =11H5C8; code=2;h=1;end10:begin to =11H606; code=3;h=1;end11:begin to =11H640; code=4;h=1;end12:begin to =11H656; code=5;h=1;end13:begin to =11H684; code=6;h=1;end14:begin to =11H69A; code=7;h=1;end15:begin to =11H6C0; code=1;h=1;enddefault : begin to= 11H6C0;code=1; h=1;end endcase end endmodule模块:仿真图:3.3 数控分频器模块SPKER工作时其CLK输入一较高频率(1MHZ)时钟,通过分频后,经由触发器由输出。由于直接从数空分频器中出来的输出信号是脉冲极窄的信号,为了有利于驱动扬声器,加一个触发器分频以均衡其占空比,但这时的频率是原来的.对输入的例如是与的间距为,每隔就为,出现的频率就是音符对应的频率,相应的频率越高对应的数值就越高,就是离越近的分频预置数。程序:module spker (clk,tn,spks);input clk; input 10:0 tn;output spks;reg spks;reg 10:0 cnt11;always (posedge clk) begin : cnt11b_loadif(cnt11=11h7FF) begin cnt11=tn; spks=1b1; endelse begin cnt11=cnt11+1; spks=1b0; end end endmodule模块:仿真图:3.4 音符数据模块 MUSICData mif 文件:模块图:3.5 锁相环:利用锁相环将分成和模块图:3.6 分频 2khz分成4hz程序:module fdiv(clk,pm);input clk;output pm;reg 8:0 q1; reg full; wire rst;always (posedge clk or posedge rst) begin if(rst) begin q1=0; full=1;end else begin q1=q1+1; full=0; end end assign rst=(q1=499) ; assign pm=full;assign dout = q1;endmodule模块图:3.7 分频器此分频为了给键盘扫描提供的时钟输入程序:module fenpin(clk20M,clk10);input clk20M;output reg clk10;reg20:0 q;always(posedge clk20M) begin if(q=9999) begin q=21d0;clk10=clk10; end else q=q+21d1; endendmodule模块:3.8 键盘扫描模块 key通过键盘输入的数作为F_CODE的输入信号从到表示低音和高音程序:module key(clk10,lie,hang,result);input clk10;input 3:0lie;output reg3:0hang,result;reg 1:0 q;always(posedge clk10) begin q=q+1; case(q) 0:hang=4b0111; 1:hang=4b1011; 2:hang=4b1101; 3:hang=4b1110; default :hang=4b1111; endcase case(hang,lie) 8b01110111:result=0; 8b01111011:result=1; 8b01111101:result=2; 8b01111110:result=3; 8b10110111:result=4; 8b10111011:result=5; 8b10111101:result=6; 8b10111110:result=7; 8b11010111:result=8; 8b11011011:result=9; 8b11011101:result=4ha; 8b11011110:result=4hb; 8b11100111:result=4hc; 8b11101011:result=4hd; 8b11101101:result=4he; 8b11101110:result=4hf; /default:result=0; endcase endendmodule模块:二选一选择器为了通过输入信号的或来确定是播放音乐还是键盘播放模块程序:module mux21a (a,b,rst,y);input 3:0 a;input 3:0 b;input rst;output 3:0 y;assign y=(rst? a : b );endmodule模块图:四 顶层文件图纸:五 实验总结:实验过程中我们遇到了很多东西,在解决问题的同时我们也学到了很多东西。首先,我们更加熟悉 Quartus 软件的使用,平时课堂上我们也使用过它,可是毕竟时间有限,了解只是片面的,例如我们在仿真波形的时候设置的endtime过长,结果导致等待时间过长。通过这次实训更加系统的应用它,具体了解了它的功能以及具体的操作办法。其次对于理论知识运用到实践中有了更深刻的理解,对于课本上的理论的知识平时只是通过老师的讲解,没有一个更深入的认知,正是通过实训很好地让我们把平时学习的课本理论知识应用到实践中,这对于以后工作的锻炼有很好的启发作用。理论毕竟只是理论,它与实际总会有一定的差距。例如,我们这次的实训课题是音乐发生器,我们想到了运用平时的积累的知识大胆创新,鉴于此我们想到了将每首乐曲音符的高音、中音、低音分别通过三个数码管显示出来,同时让流水灯跟随着音乐的播放闪烁着,同时我们设想如果通过开关选择控制,我们可以选择播放不同的乐曲。最终形成了我们自己的方案“跳动的音乐发生器”!可是就在大家把程序调试完成之后下载到FPGA芯片中了之后,发现数码管的显示并不是我们预想的那样。大家马上展开了讨论,我们这使用的动态数码管的显示方式,结合到老师在课堂上的讲解的知识,我们意识到,如果每次只想让一个数码管点亮,就应该通过给其他的数码管的位码赋值使其不被点亮,这一点我们在设计程序的时候忽略了这个问题。对于不同的乐曲,我们小组的一个成员觉得网上找不到合适的程序,他发费了一下午的时间通过上网查找资料编写出了两只蝴蝶的大部分乐曲。等到我们的作品基本完成之后,我们大家有了一个想法用点阵显示所播放乐曲的名称,我们找到了老师说出了我们的想法,老师针对我们的想法给我了具体了方案,并且给出了具体参考内容,我们根据老师的点拨设计出了显示模块。其实实训并不完全考察的理论知识的学习,同时它也考察了我们的综合能力,包括自我学习的能力、与人交流沟通的能力、团队协作精神这些能力的锻炼与培养对我们以后走向工作岗位是非常必要的。当今社会竞争激烈,特别是电子方面的发展真是日新月异,这就更需要我们有良好的团队合作意识,有不畏艰难困苦的钻研精神,有开拓进取的创新的品质,不断

温馨提示

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

评论

0/150

提交评论