基于verilog语言简易电子琴设计 数字电子技术课程设计报告.docx
《基于verilog语言简易电子琴设计 数字电子技术课程设计报告.docx》由会员分享,可在线阅读,更多相关《基于verilog语言简易电子琴设计 数字电子技术课程设计报告.docx(15页珍藏版)》请在冰豆网上搜索。
基于verilog语言简易电子琴设计数字电子技术课程设计报告
数字电子技术课程设计报告基于verilogHDL语言地简易电子琴设计
学院:
__信息与控制工程学院________
专业班级:
___电气11级四班______________
姓名:
___商玉玺________________________
学号:
___11053421_____________________
指导教师:
___________________________________
一、实验目地语言地基本运用,能够利用其进行简单编程;verilogHDL1、学习地基本操作,能够利用其进行简单地设计;Ⅱ7.0、学习使用2Quartus
.3、结合实践加深对理论知识地理解二、设计题目.语言设计简易电子琴用verilogHDl
三、题目要求
(1)单独从左至右按下S1-S7每个按键后能够各自对应发出“哆来咪发唆啦西”地音乐声;
键后,发高八度地对应音;),同时再配合按下S1-S72()按下最右边按键(S8处理;消抖”(3)按键需要进行“;)外部输入脉冲信号频率为1mhz(4).8度功能,自动播放一段音乐(5)扩展要求:
自主设计(增加低四、设计原理
(1)喇叭地振动频率不同,导致产生不同地声音;振动频率越低,声音越低沉,振动频率越高,声音越尖锐.题目中音乐基本音地“哆”对应频率为523Hz、“来”对应频率为587Hz、“咪”对应频率为659Hz、“发”对应频率为698Hz、“唆”对应频率为784Hz、“啦”对应频率为880Hz、“西”对应频率为998Hz.
2=261.5Hz./1地频率为523低8度音:
基本音频率/2,例如低音523×2=1046Hz..1地频率为,例如高音高8度音:
基本音频率×2.不同地频率产生利用给定地时钟脉冲来进行分频实现
(2)消抖地原理:
按键默认输入逻辑‘1',当有按键按下时对应地输入为逻辑‘0'(但会存在抖动),当FPGA开始检测到该引脚从‘1'变为‘0'后开始定时(按键抖动时间大约10ms),定时时间结束后若该引脚仍然为‘0'则表示确实发生按键按下,否则视为抖动而不予以理会;按键松开过程地消抖处理和按下时原理一样.
)原理框图3(.
四、管脚对应表
说明对应信号名称FPGA管脚名L21MHz基准时钟F3OU音频输出F8S1A14S2F10S3B16S基本功能按F1SB1SF1SB1SMBTMBT扩展功能按U1BTU1BT4五、实验过程、设计按键防抖模块1)设计程序1(。
modulexiaodou(rst,clk_1M,out).
。
inputclk_1M。
inputrst。
outputout。
wirerst
。
regout。
reg[24:
0]cnt。
reg[2:
0]stateparameterstate0=3'b000,
state1=3'b001,
state2=3'b010,
state3=3'b011,
state4=3'b100,
。
state5=3'b101
always@(posedgeclk_1M)
begin
。
cnt<=24'd0case(state)
state0:
if(!
rst)
begin
。
out=0。
state<=state1end
else
。
state<=state0state1:
begin
。
out=0。
cnt<=cnt+1if(cnt==10000)
。
state<=state2else
begin
。
//out=1。
state<=state1end
end
state2:
if(!
rst)
。
state<=state3else
。
state<=state0state3:
if(!
rst)
begin
。
out=1。
cnt<=0。
//state<=state3end
else
。
state<=state4
state4:
begin
。
cnt<=cnt+1if(cnt==200000)
begin
。
out=1
。
state<=state5end
else
begin
。
out=1。
state<=state4end
end
state5:
if(rst)
begin
。
out=0。
state<=state0end
else
。
state<=state3
endcaseend
endmodule)原理图及仿真波形(2
、按键识别模块设计2)程序设计1(.
。
modulexkey(a,b,c,d,e,f,g,h,l,qout)。
inputa,b,c,d,e,f,g,h,l。
outputqout。
reg[8:
0]qin。
reg[4:
0]qoutalways@(aorborcordoreorforgorhorl)begin。
qin[8]=a。
qin[7]=b。
qin[6]=c。
qin[5]=d。
qin[4]=e。
qin[3]=f。
qin[2]=g。
qin[1]=h。
qin[0]=lendalways@(qin)begincase(qin)。
9'b100000000:
qout<=5'b00001。
9'b010000000:
qout<=5'b00010。
9'b001000000:
qout<=5'b00011。
9'b000100000:
qout<=5'b00100。
9'b000010000:
qout<=5'b00101。
9'b000001000:
qout<=5'b00110。
9'b000000100:
qout<=5'b00111。
9'b100000010:
qout<=5'b01000。
9'b010000010:
qout<=5'b01001。
9'b001000010:
qout<=5'b01010.
。
9'b000100010:
qout<=5'b01011。
9'b000010010:
qout<=5'b01100。
9'b000001010:
qout<=5'b01101。
9'b000000110:
qout<=5'b01110。
9'b100000001:
qout<=5'b01111。
9'b010000001:
qout<=5'b10000。
9'b001000001:
qout<=5'b10001。
9'b000100001:
qout<=5'b10010。
9'b000010001:
qout<=5'b10011。
9'b000001001:
qout<=5'b10100。
9'b000000101:
qout<=5'b10101。
9'b000000000:
qout<=5'b00000。
9'b000000010:
qout<=5'b00000。
9'b000000001:
qout<=5'b00000。
default:
qout<=0endcaseendendmodule)原理图及仿真波形2(
、分频器模块地设计3)程序设计1(。
modulefenpin(in,clk_1M,out)。
inputin。
inputclk_1M。
outputout。
wire[4:
0]in。
regout。
reg[11:
0]count。
reg[4:
0]stateinitial。
count<=12'd0parameterstate0=5'b00000,
state1=5'b00001,
state2=5'b00010,
state3=5'b00011,
state4=5'b00100,
state5=5'b00101,
state6=5'b00110,
state7=5'b00111,
state8=5'b01000,
state9=5'b01001,
state10=5'b01010,
state11=5'b01011,
state12=5'b01100,
state13=5'b01101,
state14=5'b01110,
state15=5'b01111,
state16=5'b10000,
state17=5'b10001,
state18=5'b10010,
state19=5'b10011,
state20=5'b10100,
state21=5'b10101,
。
state22=5'b10110
always@(posedgeclk_1M)begincase(state)
state0:
begin
//if(allin==5'b10110)
。
//state<=state0if(in==5'b00001)
。
state<=state1elseif(in==5'b00010)
。
state<=state2
elseif(in==5'b00011)
。
state<=state3elseif(in==5'b00100)
。
state<=state4
elseif(in==5'b00101)
。
state<=state5elseif(in==5'b00110)
。
state<=state6
elseif(in==5'b00111)
。
state<=state7elseif(in==5'b01000)
。
state<=state8elseif(in==5'b01001)
。
state<=state9elseif(in==5'b01010)
。
state<=state10elseif(in==5'b01011)
。
state<=state11elseif(in==5'b01100)
。
state<=state12elseif(in==5'b01101)
。
state<=state13elseif(in==5'b01110)
。
state<=state14
elseif(in==5'b01111)
。
state<=state15elseif(in==5'b10000)
。
state<=state16elseif(in==5'b10001)
。
state<=state17elseif(in==5'b10010)
。
state<=state18elseif(in==5'b10011)
。
state<=state19
elseif(in==5'b10100)
。
state<=state20elseif(in==5'b10101)
。
state<=state21elseif(in==5'b00000)
。
state<=state22
else
。
state<=state0
end
state1:
begin
if(count<=956)
begin
begin
。
count=count+12'd1end
if(in==5'b00001)
。
state<=state1else
begin
。
out=0
。
state<=state0end
end
else
begin
begin
。
out=~out
。
count=0
end
if(in==5'b00001)
。
state<=state1else
begin
。
out=0。
state<=state0end
end
end
if(count<=852)begin
begin
count=count+12'd1。
end
state2:
begin
if(in==5'b00010)state<=state2。
elsebeginout=0。
state<=state0。
endend
elsebeginbeginout=~out。
count=0。
endif(in==5'b00010)state<=state2。
elsebegin
out=0。
state<=state0。
endendend
state3:
begin
if(count<=759)begin
begin
count=count+12'd1。
end
if(in==5'b00011)state<=state3。
elsebeginout=0。
state<=state0。
endend
elsebeginbeginout=~out。
count=0。
endif(in==5'b00011)state<=state3。
elsebegin
out=0。
state<=state0。
endendend
state4:
begin
if(count<=716)begin
begin
count=count+12'd1。
end
if(in==5'b00100)state<=state4。
elsebeginout=0。
state<=state0。
endend
elsebeginbeginout=~out。
count=0。
endif(in==5'b00100)state<=state4。
elsebegin
out=0。
state<=state0。
endendend
state5:
begin
if(count<=638)begin
begin
count=count+12'd1。
end
if(in==5'b00101)state<=state5。
elsebeginout=0。
state<=state0。
endend
elsebeginbeginout=~out。
count=0。
endif(in==5'b00101)state<=state5。
elsebegin
out=0。
state<=state0。
endendend
state6:
begin
if(count<=568)begin
begin
count=count+12'd1。
end
if(in==5'b00110)state<=state6。
elsebeginout=0。
state<=state0。
endend
elsebeginbeginout=~out。
count=0。
endif(in==5'b00110)state<=state6。
elsebegin
out=0。
state<=state0。
endendend
end
。
count=count+12'd1begin
if(count<=501)begin
state7:
begin
if(in==5'b00111)state<=state7。
elsebeginout=0。
state<=state0。
endend
elsebeginbeginout=~out。
count=0。
endif(in==5'b00111)state<=state7。
elsebegin
out=0。
state<=state0。
endendend
state8:
begin
if(count<=478)begin
begin
count=count+12'd1。
end
if(in==5'b01000)state<=state8。
elsebeginout=0。
state<=state0。
endend
elsebeginbeginout=~out。
count=0。
endif(in==5'b01000)state<=state8。
elsebegin
out=0。
state<=state0。
endendend
state9:
begin
if(count<=426)begin
begin
count=count+12'd1。
end
if(in==5'b01001)state<=state9。
elsebeginout=0。
state<=state0。
endend
elsebeginbeginout=~out。
count=0。
endif(in==5'b01001)state<=state9。
elsebegin
out=0。
state<=state0。
endendend
state10:
begin
if(count<=380)begin
begin
count=count+12'd1。
end
if(in==5'b01010)state<=state10。
elsebeginout=0。
state<=state0。
endend
elsebeginbeginout=~out。
count=0。
endif(in==5'b01010)state<=state10。
elsebegin
out=0。
state<=state0。
endendend
state11:
begin
if(count<=358)begin
begin
count=count+12'd1。
end
if(in==5'b01011)state<=state11。
elsebeginout=0。
state<=state0。
endend
elsebeginbeginout=~out。
count=0。
endif(in==5'b01011)state<=state11。
elsebegin
out=0。
state<=state0。
endendend
state12:
begin
if(count<=319)begin
begin
count=count+12'd1。
end
if(in==5'b01100)state<=state12。
elsebeginout=0。
state<=state0。
endend
elsebeginbeginout=~out。
count=0。
endif(in==5'b01100)state<=state12。
elsebegin
out=0。
state<=state0。
endendend
state13:
begin
if(count<=284)begin
begin
count=count+12'd1。
end
if(in==5'b01101)state<=state13。
elsebeginout=0。
state<=state0。
endend
elsebeginbeginout=~out。
count=0。
endif(in==5'b01101)state<=state13。
elsebegin
out=0。
state<=state0。
endendend
state14:
begin
if(count<=251)begin
begin
count=count+12'd1。
end
if(in==5'b01110)state<=state14。
elsebeginout=0。
state<=state0。
endend
begin
else。
if(in==5'b01110)state<=state14end。
count=0。
out=~outbeginbeginelse
out=0。
state<=state0。
endendend
state15:
begin
if(count<=1912)begin
begin
count=count+12'd1。
end
if(in==5'b01111)state<=state15。
elsebeginout=0。
state<=state0。
endend
elsebeginbeginout=~out。
count=0。
endif(in==5'b01111)state<=state15。
elsebegin
out=0。
state<=state0。
endendend
state16:
begin
if(count<=1704)begin
begin
count=count+12'd1。
end
if(in==5'b10000)state<=state16。
elsebeginout=0。
state<=state0。
endend
elsebeginbeginout=~out。
count=0。
endif(in==5'b10000)state<=state16。
elsebegin
out=0。
state<=state0。
endendend
state17:
begin
if(count<=1518)begin
begin
count=count+12'd1。
end
if(in==5'b10001)state<=state17。
elsebeginout=0。
state<=state0。
endend
elsebeginbeginout=~out。
count=0。
endif(in==5'b10001)state<=state17。
elsebegin
out=0。
state<=state0。
endendend
state18:
begin
if(count<=1432)begin
begin
count=count+12'd1。
end
if(in==5'b10010)state<=state18。
elsebeginout=0。
state<=state0。
endend
elsebeginbeginout=~out。
count=0。
endif(in==5'b10010)state<=state18。
elsebegin
out=0。
state<=state0。
endendend
state19:
begin
if(count<=1276)begin
begin
count=count+12'd1。
end
if(in==5'b10011)state<=state19。
elsebeginout=0。
state<=state0。
endend
elsebeginbeginout=~out。
count=0。
endif(in==5'b10011)state<=state19。
elsebegin
out=0。
state<=state0。
endendend
state20:
begin
if(count<=1136)begin
begin
count=count+12'd1。
end
if(in==5'b101