您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > verilog电子琴报告
1电子琴与记谱器设计一、系统设计实现目标要求功能要求:要求设计并实现能够通过按键及拨码开关设置实现电子琴弹奏、乐曲自动演奏及简单乐曲的记谱功能。基本要求1)使用DigilentBasys开发板按键及拨码开关设置实现中音“1,2,3,4,5,6,7”的弹奏产生。2)实现长达1分钟非重复乐曲的自动演奏。3)实现对用户弹奏乐曲(1分钟)的记录及回放功能4)实现输出信号的DA转换并通过喇叭或蜂鸣器输出(附加必要外围电路);5)实现输出乐音的即时显示(数码管方式)二、设计原理顶层模块图如图1所示,子模块图如图2所示。图12图2主要功能模块有auto_play,play,music_store三部分,auto_play实现自动播放功能,play实现用户弹奏时的发声功能,music_store实现对用户弹奏数据的存储与回放功能,三个模块都输出音符数据,buzzer_driver模块对所有输入的音符做处理,驱动蜂鸣器发声,note_display模块对所有输入的音符做处理,驱动数码管显示。另外模块controller实现各个模式之间的转换与控制,slt模块对输出音符进行选择,在三个功能模块中选择信号输入蜂鸣器与显示模块。三、源程序主模块:modulee_piano(inputclk,inputrst,inputen,inputauto_play_mode,inputjust_play_mode,inputplay_record_mode,inputreplay_mode,input[3:0]button,3outputbuzzer,output[3:0]mode_led,output[3:0]seg_slt,output[7:0]seg);wire[3:0]mode;wirea_rst;wirea_en;wirew_mode;wirer_mode;wirep_en;wirewrst;wirewen;wirerrst;wireren;wire[3:0]high0,med0,low0;wire[3:0]high1,med1,low1;wire[3:0]high2,med2,low2;wire[3:0]high,med,low;controlleru0(.en(en),.rst(rst),.auto_play_mode(auto_play_mode),.just_play_mode(just_play_mode),.play_record_mode(play_record_mode),.replay_mode(replay_mode),.mode(mode),.a_rst(a_rst),.a_en(a_en),.w_mode(w_mode),.r_mode(r_mode),.p_en(p_en),.wrst(wrst),.wen(wen),.rrst(rrst),.ren(ren),.mode_led(mode_led));auto_playu1(4.clk(clk),.rst(a_rst),.en(a_en),.high(high0[3:0]),.med(med0[3:0]),.low(low0[3:0]));playu2(.clk(clk),.en(p_en),.button(button[3:0]),.high(high1[3:0]),.med(med1[3:0]),.low(low1[3:0]));music_storeu3(.clk(clk),.music_in({high1[3:0],med1[3:0],low1[3:0]}),.r_mode(r_mode),.w_mode(w_mode),.wrst(wrst),.wen(wen),.rrst(rrst),.ren(ren),.high(high2[3:0]),.med(med2[3:0]),.low(low2[3:0]));sltu5(.din0({high0[3:0],med0[3:0],low0[3:0]}),.din1({high1[3:0],med1[3:0],low1[3:0]}),.din2({high2[3:0],med2[3:0],low2[3:0]}),.mode(mode[3:0]),.high(high[3:0]),.med(med[3:0]),.low(low[3:0]));5buzzer_driveru6(.clk(clk),.high(high[3:0]),.med(med[3:0]),.low(low[3:0]),.buzzer(buzzer));note_displayu7(.high(high[3:0]),.med(med[3:0]),.low(low[3:0]),.seg_slt(seg_slt[3:0]),.seg(seg[7:0]));endmodule子模块0:modulecontroller(//inoutclk,inputen,inputrst,inputauto_play_mode,inputjust_play_mode,inputplay_record_mode,inputreplay_mode,output[3:0]mode,outputrega_rst,outputrega_en,outputregw_mode,outputregr_mode,outputregp_en,outputregwrst,outputregwen,outputregrrst,outputregren,outputreg[3:0]mode_led=4'b0000);assign6mode={replay_mode,play_record_mode,just_play_mode,auto_play_mode};always@(mode)if(mode==4'b0001||mode==4'b0010||mode==4'b0100||mode==4'b1000)mode_led=mode;elsemode_led=4'b0000;always@(modeorenorrst)case(mode)4'b0001:begina_rst=rst;a_en=en;p_en=1'b0;w_mode=1'b0;r_mode=1'b0;wrst=1'b1;wen=1'b0;rrst=1'b1;ren=1'b0;end4'b0010:begina_rst=1'b1;a_en=1'b0;p_en=en;w_mode=1'b0;r_mode=1'b0;wrst=1'b1;wen=1'b0;rrst=1'b1;ren=1'b0;end4'b0100:begina_rst=1'b1;a_en=1'b0;p_en=1'b1;w_mode=1'b1;r_mode=1'b0;wrst=rst;wen=en;rrst=1'b1;ren=1'b0;end4'b1000:begina_rst=1'b1;a_en=1'b0;p_en=1'b0;w_mode=1'b0;r_mode=1'b1;wrst=1'b1;wen=1'b0;rrst=rst;ren=en;enddefault:begina_rst=1'b1;a_en=1'b0;p_en=1'b0;w_mode=1'b0;r_mode=1'b0;wrst=1'b1;wen=1'b0;rrst=1'b1;ren=1'b0;endendcaseendmodule子模块1:moduleauto_play(inputclk,inputrst,inputen,outputreg[3:0]high=4'b0000,outputreg[3:0]med=4'b0000,outputreg[3:0]low=4'b0000);reg[23:0]cnt=24'b0;regbeat_clk=1'b0;reg[7:0]beat_cnt=8'd0;7always@(posedgeclk)//产生节拍时钟,并用rst和en控制if(~rst)cnt=0;elseif(en)beginif(cnt=24'b100010111000111111100101-1'b1)//bmp=82beginbeat_clk=~beat_clk;cnt=0;endelsecnt=cnt+1'b1;endalways@(posedgebeat_clkornegedgerst)if(~rst)beat_cnt=8'd0;elseif(en)beginif(beat_cnt=8'd214)beat_cnt=beat_cnt+1'd1;elsebeat_cnt=8'd0;endalways@(posedgebeat_clkornegedgerstornegedgeen)if(~rst){high,med,low}=12'b000000000000;elseif(~en){high,med,low}=12'b000000000000;elsebegincase(beat_cnt)//记谱(梁祝)0:{high,med,low}='b000000000000;//休止符1:{high,med,low}='b000000000000;2:{high,med,low}='b000001110000;//中音73:{high,med,low}='b000001110000;4:{high,med,low}='b000001100000;//中音65:{high,med,low}='b000001100000;6:{high,med,low}='b000001110000;//中音77:{high,med,low}='b000001110000;88:{high,med,low}='b000001010000;//中音5,持续3个时钟节拍9:{high,med,low}='b000001010000;10:{high,med,low}='b000001010000;11:{high,med,low}='b000001100000;//中音612:{high,med,low}='b000001000000;//中音413:{high,med,low}='b000001000000;14:{high,med,low}='b000000110000;//中音315:{high,med,low}='b000000110000;16:{high,med,low}='b000000100000;//中音217:{high,med,low}='b000000110000;//中音318:{high,med,low}='b000001000000;//中音419:{high,med,low}='b000000110000;//中音320:{high,med,low}='b000001010000;//中音521:{high,med,low}='b000001010000;22:{high,med,low}='b000001010000;23:{high,med,low}='b000000110000;//中音324:{high,med,low}='b000000100000;25:{high,med,low}='b000000110000;26:{high,med,low}='b000001010000;27:{high,med,low}='b000000100000;28:{high,med,low}='b000000110000;29:{high,med,low}='b000001000000;30:{high,med,low}='b000000110000;31:{high,med,low}='b000000100000;32:{high,med,low}='b000000010000;//中音1,持续6个时钟节拍33:{high,med
本文标题:verilog电子琴报告
链接地址:https://www.777doc.com/doc-7232723 .html