数电EDA简易电子琴Verilog设计.docx
- 文档编号:2074244
- 上传时间:2023-05-02
- 格式:DOCX
- 页数:11
- 大小:83.52KB
数电EDA简易电子琴Verilog设计.docx
《数电EDA简易电子琴Verilog设计.docx》由会员分享,可在线阅读,更多相关《数电EDA简易电子琴Verilog设计.docx(11页珍藏版)》请在冰点文库上搜索。
数电EDA简易电子琴Verilog设计
数字电子技术课程设计
--简易电子琴设计
专业班级:
电子
姓名:
学号:
日期:
2015.6.5
一、设计任务
用VerilogHDL语言设计简易电子琴。
(1)单独从左至右按下S1-S7每个按键后能够各自对应发出“哆来咪发唆啦西”的音乐声;
(2)按下最右边按键(S8),同时再配合按下S1-S7键后,发高八度的对应音;
(3)按键需要进行“消抖”处理;
(4)外部输入脉冲信号频率为1mhz;
(5)扩展要求:
自主设计(增加低8度功能)。
二、实验目的
1、学习verilogHDL语言的基本运用,能够利用其进行简单编程;
2、学习使用QuartusⅡ7.0的基本操作,能够利用其进行简单的设计;
3、结合实践加深对理论知识的理解。
三、设计原理
1)喇叭的振动频率不同,导致产生不同的声音;振动频率越低,声音越低沉,振动频率越高,声音越尖锐。
题目中音乐基本音的“哆”对应频率为523Hz、“来”对应频率为587Hz、“咪”对应频率为659Hz、“发”对应频率为698Hz、“唆”对应频率为784Hz、“啦”对应频率为880Hz、“西”对应频率为998Hz。
低8度音:
基本音频率/2,例如低音1的频率为523/2=261.5Hz。
高8度音:
基本音频率×2,例如高音1的频率为523×2=1046Hz.。
不同的频率产生利用给定的时钟脉冲来进行分频实现。
(2)消抖的原理:
按键默认输入逻辑‘1’,当有按键按下时对应的输入为逻辑
‘0’(但会存在抖动),当FPGA开始检测到该引脚从‘1’变为‘0’后开始定时(按键抖动时间大约10ms),定时时间结束后若该引脚仍然为‘0’则表示确实发生按键按下,否则视为抖动而不予以理会;按键松开过程的消抖处理和按下时原理一样。
(3)原理框图
四、程序设计
消抖模块
modulexiaodou(key_in,key_out,clk);
inputkey_in;
inputclk;
outputkey_out;
regkey_out;
reg[2:
0]presta;
integerq;
parameters0=3'b000,
s1=3'b001,
s2=3'b010,
s3=3'b011,
s4=3'b100,
s5=3'b101,
s6=3'b110,
s7=3'b111;
always@(posedgeclk)
begin
case(presta)
s0:
begin
key_out<=0;
q<=0;
if(key_in==1)
presta<=s0;
else
presta<=s1;
end
s1:
begin
key_out<=0;
if(q>9999)
presta<=s2;
else
q<=q+1;
end
s2:
begin
key_out<=0;
q<=0;
if(key_in==1)
presta<=s0;
else
presta<=s3;
end
s3:
begin
key_out<=1;
q<=0;
if(key_in==0)
presta<=s3;
else
presta<=s4;
end
s4:
begin
key_out<=1;
if(q>44444)
presta<=s5;
else
q<=q+1;
end
s5:
begin
q<=0;
if(key_in==1)
presta<=s0;
else
presta<=s3;
end
s6:
begin
presta<=s0;
end
s7:
begin
presta<=s0;
end
endcase
end
endmodule
按键模块
moduleanjian(a,b,c,d,e,f,g,h,i,qout);
inputa,b,c,d,e,f,g,h,i;
output[10:
0]qout;
reg[8:
0]q;
reg[10:
0]qout;
always@(aorborcordoreorforgorhori)
begin
q[0]=i;
q[1]=h;
q[2]=g;
q[3]=f;
q[4]=e;
q[5]=d;
q[6]=c;
q[7]=b;
q[8]=a;
end
always@(q)
begin
case(q)
9'b100000000:
qout<=11'b01110111100;
9'b010000000:
qout<=11'b01101010011;
9'b001000000:
qout<=11'b01011110111;
9'b000100000:
qout<=11'b01011001100;
9'b000010000:
qout<=11'b01001111110;
9'b000001000:
qout<=11'b01000111000;
9'b000000100:
qout<=11'b00111110101;
9'b100000010:
qout<=11'b00111011110;
9'b010000010:
qout<=11'b00110101010;
9'b001000010:
qout<=11'b00101111011;
9'b000100010:
qout<=11'b00101100110;
9'b000010010:
qout<=11'b00100111111;
9'b000001010:
qout<=11'b00100011100;
9'b000000110:
qout<=11'b00011111011;
9'b100000001:
qout<=11'b11101111000;
9'b010000001:
qout<=11'b11010100110;
9'b001000001:
qout<=11'b10111101110;
9'b000100001:
qout<=11'b10110011000;
9'b000010001:
qout<=11'b10011111100;
9'b000001001:
qout<=11'b10001110000;
9'b000000101:
qout<=11'b01111101010;
9'b000000011:
qout<=11'b00000000000;
9'b000000001:
qout<=11'b00000000000;
9'b000000000:
qout<=11'b00000000000;
9'b000000010:
qout<=11'b00000000000;
default:
qout<=qout;
endcase
end
endmodule
分频模块
modulefenpin(clk_1M,yuzhi,pl_out);
inputclk_1M;
input[10:
0]yuzhi;
reg[10:
0]q;
outputpl_out;
regpl_out;
always@(posedgeclk_1M)
begin
if(yuzhi>0)
begin
if(q begin q<=q+1; pl_out<=0; end else begin q<=11'b00000000000; pl_out<=1; end end else begin q<=11'b00000000000; pl_out<=1; end end endmodule 五、原理图及仿真波形图 六、心得体会 由于之前对本次设计所需知识了解较少,所以在实验过程中遇到了很多的困难,真的很难,但是同样在解决各种困难的过程中也有所收获。 从书本上获得的知识跟实践之间具有很大的差距,这要求我们要加强锻炼自己的实际操作能力。 首先,在课程设计之前,要先了解我们要完成什么功能,否则做的任何努力都是无用功。 其次,,在编写程序过程中,要有耐心,端正态度,积极思考,认真对待。 另外, 遇到问题首先要自己思考,但是实在无法解决的时候一定要细心地向别人请教或是在网上查找资料。 最后要对自己之前的操作和执行进行纠错和总结经验,提升自己。 在以后的学习中要注意培养自主学习的能力和文献查阅的能力,以及很重要的动手能力。 如有侵权请联系告知删除,感谢你们的配合!
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- EDA 简易 电子琴 Verilog 设计