- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数字电子技术课程设计
-- 简易电子琴设计
专业班级
:
电子
姓 名
:
学 号
日 期
:
:
2015.6.5
一、设计任务
用 Verilog HDL 语言设计简易电子琴。
)单独从左至右按下 S1-S7 每个按键后能够各自对应发出 “ 哆来咪发唆啦西”的音乐声;
)按下最右边按键( S8),同时再配合按下 S1-S7 键后,发高八度的对应音;
)按键需要进行“消抖”处理;
)外部输入脉冲信号频率为 1mhz;
)扩展要求:自主设计(增加低 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.。不同的频率产生利用给定的时钟脉冲来进行分频实现。
消抖的原理:按键默认输入逻辑‘ 1’,当有按键按下时对应的输入为
逻辑‘ 0’(但会存在抖动) ,当 FPGA开始检测到该引脚从‘ 1’变为‘ 0’后开始定时(按键抖动时间大约 10ms),定时时间结束后若该引脚仍然为‘ 0’则表示确实发生按键按下, 否则视为抖动而不予以理会; 按键松开过程的消抖处理和按下时原理一样。
原理框图
四、程序设计消抖模块
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=3b000,
s1=3b001, s2=3b010, s3=3b011, s4=3b100, s5=3b101, s6=3b110, s7=3b111;
always@(posedge clk)
begin
case(presta)
s0:
begin
key_out=0; q=0;
if(key_in==1)
presta=s0;
s1:
end
else
presta=s1;
begin
key_out=0; if(q9999)
presta=s2;
s2:
end
else
q=q+1;
begin
key_out=0; q=0;
if(key_in==1)
presta=s0;
s3:
end
else
presta=s3;
begin
key_out=1; q=0;
if(key_in==0)
presta=s3;
s4:
end
else
presta=s4;
begin
key_out=1; if(q44444)
presta=s5;
else
q=q+1;
end
s5:
begin
q=0;
if(key_in==1)
presta=s0;
s6:
end
else
presta=s3;
s7:
begin presta=s0; end
begin presta=s0; 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)
9b100000000:qout=11b01110111100;
9b010000000:qout=11b01101010011;
9b001000000:qout=11b01011110111;
9b000100000:qout=11b01011001100;
9b000010000:qout=11b01001111110;
9b000001000:
文档评论(0)