基于Verilog多首乐曲选择演奏电路设计.doc

上传人:夺命阿水 文档编号:14078 上传时间:2022-06-28 格式:DOC 页数:8 大小:114.61KB
返回 下载 相关 举报
基于Verilog多首乐曲选择演奏电路设计.doc_第1页
第1页 / 共8页
基于Verilog多首乐曲选择演奏电路设计.doc_第2页
第2页 / 共8页
基于Verilog多首乐曲选择演奏电路设计.doc_第3页
第3页 / 共8页
基于Verilog多首乐曲选择演奏电路设计.doc_第4页
第4页 / 共8页
基于Verilog多首乐曲选择演奏电路设计.doc_第5页
第5页 / 共8页
点击查看更多>>
资源描述

《基于Verilog多首乐曲选择演奏电路设计.doc》由会员分享,可在线阅读,更多相关《基于Verilog多首乐曲选择演奏电路设计.doc(8页珍藏版)》请在课桌文档上搜索。

1、-基于verilog硬件乐曲演奏电路设计quartus II模块可以实现4x4键盘扫描按键播放音乐,ROM中存四首歌曲,可以通过选择播放。一、设计任务与要求设计目的:利用数控分频器设计硬件演奏电路。设计容:学习课本定制音符数据ROMmusic。填入新的乐曲。争取可以在一个ROM装上多首歌曲,可手动或自动选择歌曲。设计要求:用仿真波形和电路原理图,详细表达硬件电子琴的工作原理及其verilog文件中相关语句功能,表达硬件实现情况。二、总体框图ROMmusic音符控制输出数控分频器音符译码七段数码管分频器蜂鸣器LED灯ROM中的音乐数据文件刚可由编辑好的音符填入MIF文件中再定制LPM_ROM将音

2、符数据加载入ROM中,并设计程序在运行时自动读取ROM中的文件并置入数控分频器中。当采用四四拍曲子时,每节拍持续时间为0.5秒。置入数控分频器的速度也应与此同步或一致,防止音乐过快或过快慢而失真。我给出的C调音阶频率表,各频率对应的预置数就与数控分频推动蜂鸣器发出声音的频率对应。在编写数控分频器时,不仅要考虑预置数的输入方式,还要考虑输入的速度,以及驱动蜂鸣器发声的频率。为了在扩展能够在ROM中同时存放多首歌曲,并可以手动选择需要的歌曲,故可将ROM中分假设干段存放不同曲子。当手动选择歌曲时,可根据输入的选择信号,读出ROM中对应地址的曲子,并将ROM中的曲子完整的播放出来。为了显示高、中、低

3、三种音调,可在音符预置数的译码过程中,同时译出高、中、低三种音阶的信号,并利用三个LED灯输出信号。同时,也可利用该译码模块,将当前演奏的音符简谱表达出来。下面给出C调音节频率表:音阶频率Hz音阶频率Hz音阶频率Hz1661.227830.617415.311479.986739.9963701318.525659.335329.631174.664587.334293.671108.733554.373277.19987.762493.882246.9488014401220三、功能模块3.1 音符数据地址发生器模块T138T模块T138T是一个10位二进制计数器,部计数最大值为500,作为

4、音乐ROM地址发生器。这个计数器的计数频率即为4HZ,即每一个数值停留时间为0.25秒。可以通过选那么en的值 00 01 10 11,选择不同的歌曲。module T138T (clk,t,en);input clk;input 1:0 en;output 9:0t;reg 9:0t; always (posedge clk ) begincase(en)0:begin if(t=139&t=263&t=335&t=439)t=t+1; elset=335;endendcaseendendmodule模块图:仿真图:3.2 分频预置查表模块F_CODE模块F_CODE 乐曲简谱码对应的分频预

5、置数查表为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

6、 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;end1

7、0: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工作时其

8、CLK输入一较高频率1MHZ时钟,通过分频后,经由触发器由输出。由于直接从数空分频器中出来的输出信号是脉冲极窄的信号,为了有利于驱动扬声器,加一个触发器分频以均衡其占空比,但这时的频率是原来的.对输入的例如是与的间距为,每隔就为,出现的频率就是音符对应的频率,相应的频率越高对应的数值就越高,就是离越近的分频预置数。程序:module spker (clk,tn,spks);input clk; input 10:0 tn;output spks;reg spks;reg 10:0t11;always (posedge clk) begin : t11b_loadif(t11=11h7FF) b

9、egint11=tn; spks=1b1; endelse begint11=t11+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

10、 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 键盘

11、扫描模块 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

12、=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:resu

13、lt=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 软件的使用,平时课堂上我们也使用过它

14、,可是毕竟时间有限,了解只是片面的,例如我们在仿真波形的时候设置的endtime过长,结果导致等待时间过长。通过这次实训更加系统的应用它,具体了解了它的功能以及具体的操作方法。其次对于理论知识运用到实践中有了更深刻的理解,对于课本上的理论的知识平时只是通过教师的讲解,没有一个更深入的认知,正是通过实训很好地让我们把平时学习的课本理论知识应用到实践中,这对于以后工作的锻炼有很好的启发作用。理论毕竟只是理论,它与实际总会有一定的差距。例如,我们这次的实训课题是音乐发生器,我们想到了运用平时的积累的知识大胆创新,鉴于此我们想到了将每首乐曲音符的高音、中音、低音分别通过三个数码管显示出来,同时让流水灯

15、跟随着音乐的播放闪烁着,同时我们设想如果通过开关选择控制,我们可以选择播放不同的乐曲。最终形成了我们自己的方案跳动的音乐发生器!可是就在大家把程序调试完成之后下载到FPGA芯片中了之后,发现数码管的显示并不是我们预想的那样。大家马上展开了讨论,我们这使用的动态数码管的显示方式,结合到教师在课堂上的讲解的知识,我们意识到,如果每次只想让一个数码管点亮,就应该通过给其他的数码管的位码赋值使其不被点亮,这一点我们在设计程序的时候忽略了这个问题。对于不同的乐曲,我们小组的一个成员觉得网上找不到适宜的程序,他发费了一下午的时间通过上网查找资料编写出了两只蝴蝶的大局部乐曲。等到我们的作品根本完成之后,我们

16、大家有了一个想法用点阵显示所播放乐曲的名称,我们找到了教师说出了我们的想法,教师针对我们的想法给我了具体了方案,并且给出了具体参考容,我们根据教师的点拨设计出了显示模块。其实实训并不完全考察的理论知识的学习,同时它也考察了我们的综合能力,包括自我学习的能力、与人交流沟通的能力、团队协作精神这些能力的锻炼与培养对我们以后走向工作岗位是非常必要的。当今社会竞争剧烈,特别是电子方面的开展真是日新月异,这就更需要我们有良好的团队合作意识,有不畏困难困苦的钻研精神,有开拓进取的创新的品质,不断充实自己的头脑,通过科技知识武装自己,让自己在剧烈的竞争环境中立于不败之地!这一次实训,让我学到了很多东西,首先是课本上的理论知识,还有共同协作精神,实训的过程有苦也有甜,当我们面对挫折一遍又一遍的修改调试程序的时候,我们或许有许多疲惫,但是当我们看到自己设计的成功的展现在我们面前的时候,我们大家都露出了喜悦的笑容。我想说这次实训真的很快乐,它让我学到了东西,它让我与同学的关系更亲近了,它让我与教师的交流的更多了,教师的谆谆教导与指导,同学们的团结合作与支持!. z.

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 在线阅读 > 生活休闲


备案号:宁ICP备20000045号-1

经营许可证:宁B2-20210002

宁公网安备 64010402000986号