基于verilog语言简易电子琴设计 数字电子技术课程设计报告.docx

上传人:b****6 文档编号:8502254 上传时间:2023-01-31 格式:DOCX 页数:15 大小:140.05KB
下载 相关 举报
基于verilog语言简易电子琴设计 数字电子技术课程设计报告.docx_第1页
第1页 / 共15页
基于verilog语言简易电子琴设计 数字电子技术课程设计报告.docx_第2页
第2页 / 共15页
基于verilog语言简易电子琴设计 数字电子技术课程设计报告.docx_第3页
第3页 / 共15页
基于verilog语言简易电子琴设计 数字电子技术课程设计报告.docx_第4页
第4页 / 共15页
基于verilog语言简易电子琴设计 数字电子技术课程设计报告.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

基于verilog语言简易电子琴设计 数字电子技术课程设计报告.docx

《基于verilog语言简易电子琴设计 数字电子技术课程设计报告.docx》由会员分享,可在线阅读,更多相关《基于verilog语言简易电子琴设计 数字电子技术课程设计报告.docx(15页珍藏版)》请在冰豆网上搜索。

基于verilog语言简易电子琴设计 数字电子技术课程设计报告.docx

基于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

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

当前位置:首页 > 初中教育 > 科学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1