您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > Verilog-电子琴程序
如题,,,再附加上程序的控制说明.......是用GW48教学实验箱仿真的如果对你有帮助,请大家顶上...程序直接贴上了控制说明:1、电子琴:程序设计采用八个输入端口,分别与实验箱上的按键8~1引脚相连接,采用一个输出端口,与扬声器的引脚连接,时钟频率采用6MHz和4Hz。按键7~1分别用于中音的七个音符的发音(DO,RE,MI,FA,SO,LA,SI),按键8用于控制乐曲的播放。程序的编写采用状态机的编写方法,对按键的状态进行判断,对应相应的音符或乐曲。2、电子钟:程序的设计模块有:时钟初始化模块、时钟工作模块、时钟设置模块、闹钟设置模块、闰年的月份天数判断模块、数码管显示模块、闹钟铃声模块及其它的设置模块。程序使用8个输入分别与8个按键连接,用按键8对应时钟工作状态(work_state),当work_state为0时,时钟正常工作,当work_state为1时,进入时钟设置状态。按键7对应输入端口display_set控制时钟显示状态(display_state),每按2次(用于产生上升沿触发)则数码管的输出不同。Display_state与work_state相结合使用,以区分设置的参数。按键6~4对应输入个脚in_set,该参数共有三位,用以表示三个状态:state_yorh(设置年或小时)、state_morm(设置月份或分钟)、state_dors(设置日期或秒钟)。按键3~2对应数值设置端口up各down。Up用于产生上升沿触发,当down为0时,则每一个上升沿产生时,相应的参数加1,当down为1时,则每一个上升沿产生时,相应的参数减1。按键1与输入端口clock_on相连,用于闹钟的开与关,当clock_on为1时开闹钟,否则关闹钟。扬声器与输出端口speaker相连,用于输出闹钟铃声。附录:源程序一、电子琴:modulepiano(in,clk_6MHz,clk_4Hz,song,speaker);inputin,clk_6MHz,clk_4Hz,song;outputspeaker;regspeaker;reg[7:0]state;regsong_on;wire[6:0]in;reg[3:0]high,med,low;reg[13:0]divider,origin;reg[7:0]counter;regout;wirecarry;reg[20:0]i;parameterzero=8'b0000_0000,one=8'b0000_0001,two=8'b0000_0010,three=8'b0000_0100,four=8'b0000_1000,five=8'b0001_0000,six=8'b0010_0000,seven=8'b0100_0000;initialbeginsong_on=0;endalways@(posedgesong)beginsong_on=~song_on;endalways@(posedgeclk_6MHz)beginif(song_on)speaker=out;elsebegincase(in)zero:beginspeaker=0;i=0;endone:begin//doif(i=11451)beginspeaker=!speaker;i=0;endelsei=i+1;endtwo:begin//reif(i=10204)beginspeaker=!speaker;i=0;endelsei=i+1;endthree:begin//miif(i=9091)beginspeaker=!speaker;i=0;endelsei=i+1;endfour:begin//faif(i=8596)beginspeaker=!speaker;i=0;endelsei=i+1;endfive:begin//soif(i=7653)beginspeaker=!speaker;i=0;endelsei=i+1;endsix:begin//loif(i=6818)beginspeaker=!speaker;i=0;endelsei=i+1;endseven:begin//siif(i=6073)beginspeaker=!speaker;i=0;endelsei=i+1;enddefault:beginspeaker=0;i=0;endendcaseendendassigncarry=(divider==16383);always@(posedgeclk_6MHz)beginif(carry)divider=origin;elsedivider=divider+1;endalways@(posedgecarry)beginout=~out;//2分频产生方波信号endalways@(posedgeclk_4Hz)begincase({high,med,low})//分频比预置'b000000000011:origin=7281;'b000000000101:origin=8730;'b000000000110:origin=9565;'b000000000111:origin=10310;'b000000010000:origin=10647;'b000000100000:origin=11272;'b000000110000:origin=11831;'b000001010000:origin=12556;'b000001100000:origin=12974;'b000100000000:origin=13516;'b000000000000:origin=16383;endcaseendalways@(posedgeclk_4Hz)beginif(counter==63)counter=0;//计时,以实现循环演奏elsecounter=counter+1;case(counter)//记谱0:{high,med,low}='b000000000011;//低音“3”1:{high,med,low}='b000000000011;//持续4个时钟节拍2:{high,med,low}='b000000000011;3:{high,med,low}='b000000000011;4:{high,med,low}='b000000000101;//低音“5”5:{high,med,low}='b000000000101;//发3个时钟节拍6:{high,med,low}='b000000000101;7:{high,med,low}='b000000000110;//低音“6”8:{high,med,low}='b000000010000;//中音“1”9:{high,med,low}='b000000010000;//发3个时钟节拍10:{high,med,low}='b000000010000;11:{high,med,low}='b000000100000;//中音“2”12:{high,med,low}='b000000000110;//低音“6”13:{high,med,low}='b000000010000;14:{high,med,low}='b000000000101;15:{high,med,low}='b000000000101;16:{high,med,low}='b000001010000;//中音“5”17:{high,med,low}='b000001010000;//发3个时钟节拍18:{high,med,low}='b000001010000;19:{high,med,low}='b000100000000;//高音“1”20:{high,med,low}='b000001100000;21:{high,med,low}='b000001010000;22:{high,med,low}='b000000110000;23:{high,med,low}='b000001010000;24:{high,med,low}='b000000100000;//中音“2”25:{high,med,low}='b000000100000;//持续11个时钟节拍26:{high,med,low}='b000000100000;27:{high,med,low}='b000000100000;28:{high,med,low}='b000000100000;29:{high,med,low}='b000000100000;30:{high,med,low}='b000000100000;31:{high,med,low}='b000000100000;32:{high,med,low}='b000000100000;33:{high,med,low}='b000000100000;34:{high,med,low}='b000000100000;35:{high,med,low}='b000000110000;//中音“3”36:{high,med,low}='b000000000111;//低音“7”37:{high,med,low}='b000000000111;38:{high,med,low}='b000000000110;//低音“6”39:{high,med,low}='b000000000110;40:{high,med,low}='b000000000101;//低音“5”41:{high,med,low}='b000000000101;42:{high,med,low}='b000000000101;43:{high,med,low}='b000000000110;//低音“6”44:{high,med,low}='b000000010000;//中音“1”45:{high,med,low}='b000000010000;46:{high,med,low}='b000000100000;//中音“2”47:{high,med,low}='b000000100000;48:{high,med,low}='b000000000011;//低音“3”49:{high,med,low}='b000000000011;50:{high,med,low}='b000000010000;//中音“1”51:{high,med,low}='b000000010000;52:{high,med,low}='b000000000110;53:{high,med,low}='b000000000101;//低音“5”54:{high,med,low}='b000000000110;55:{high,med,low}='b000000010000;//中音“1”56:{high,med,low}='b000000000101;//低音“5”57:{high,med,low}='b000000000101;//持续8个时钟节拍58:{high,med,low}='b000000000101;59:{high,med,low}='b000000000101;60:{high,med,low}='b000000000101;61:{high,med,low}='b000000000101;62:{high,med,low}='b000000000101;63:{high,med,low}='b000000000101;endcaseendendmodule
本文标题:Verilog-电子琴程序
链接地址:https://www.777doc.com/doc-5682610 .html