数电EDA简易电子琴Verilog 设计_eda简易电子琴设计
数电EDA简易电子琴Verilog 设计由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“eda简易电子琴设计”。
数字电子技术课程设计
--简易电子琴设计
专业班级 : 电子
姓 名 :
学 号 :
日 期 : 2015.6.5
一、设计任务
用Verilog HDL语言设计简易电子琴。(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)原理框图
四、程序设计 消抖模块
module xiaodou(key_in,key_out,clk);input key_in;input clk;output key_out;reg key_out;reg [2:0]presta;integer q;parameter s0=3'b000,s1=3'b001,s2=3'b010,s3=3'b011,s4=3'b100,s5=3'b101,s6=3'b110,s7=3'b111;always@(posedge clk)begin
case(presta)
s0:
begin
key_out
q
if(key_in==1)
presta
else
presta
key_out
if(q>9999)
presta
else
q
key_out
q
if(key_in==1)
presta
else
presta
key_out
q
if(key_in==0)
presta
else
presta
key_out
if(q>44444)
presta
else
q
end s5:
begin
q
if(key_in==1)
presta
else
presta
end
s6:
begin
presta
end
s7:
begin
presta
end
endcase end end module 按键模块
module anjian(a,b,c,d,e,f,g,h,i,qout);input a,b,c,d,e,f,g,h,i;output [10:0] qout;reg [8:0] q;reg [10:0] qout;always@(a or b or c or d or e or f or g or h or i)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
9'b010000000:qout
9'b001000000:qout
9'b000100000:qout
9'b000010000:qout
9'b000001000:qout
9'b000000100:qout
9'b100000010:qout
9'b010000010:qout
9'b001000010:qout
9'b000100010:qout
9'b000010010:qout
9'b000001010:qout
9'b000000110:qout
9'b100000001:qout
9'b010000001:qout
9'b001000001:qout
9'b000100001:qout
9'b000010001:qout
9'b000001001:qout
9'b000000101:qout
9'b000000011:qout
9'b000000001:qout
9'b000000000:qout
9'b000000010:qout
module fenpin(clk_1M,yuzhi,pl_out);input clk_1M;input [10:0]yuzhi;reg [10:0]q;output pl_out;reg pl_out;always@(posedge clk_1M)begin if(yuzhi>0)
begin
if(q
begin
q
pl_out
end
else
begin
q
pl_out
end
end else
begin
q
pl_out
end end endmodule
五、原理图及仿真波形图
六、心得体会
由于之前对本次设计所需知识了解较少,所以在实验过程中遇到了很多的困难,真的很难,但是同样在解决各种困难的过程中也有所收获。从书本上获得的知识跟实践之间具有很大的差距,这要求我们要加强锻炼自己的实际操作能力。首先,在课程设计之前,要先了解我们要完成什么功能,否则做的任何努力都是无用功。其次,在编写程序过程中,要有耐心,端正态度,积极思考,认真对待。另外,遇到问题首先要自己思考,但是实在无法解决的时候一定要细心地向别人请教或是在网上查找资料。最后要对自己之前的操作和执行进行纠错和总结经验,提升自己。
在以后的学习中要注意培养自主学习的能力和文献查阅的能力,以及很重要的动手能力。