EDA与VHDL课程设计论文音乐节拍器Word格式文档下载.docx
《EDA与VHDL课程设计论文音乐节拍器Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《EDA与VHDL课程设计论文音乐节拍器Word格式文档下载.docx(16页珍藏版)》请在冰豆网上搜索。
随着电子技术的发展,应用系统向着小型化、快速化、大容量、重量轻的方向发展,EDA技术的应用引起电子产品及系统开发的革命性变革。
1.系统的设计要求
设计一个音乐节拍器,三种可选拍号(2/4,3/4,4/4),能准确声光同步显示拍强(即拍显),可连续调整并用数码管显示拍速,可连续调整音量。
2.系统分析
2.1系统构成
CPU(CPLD)部分的逻辑功能:
检测按钮输入模块的信息(拍号、拍速、音量),并按相应信息进行分频调整得到正确频率的输出信号,并驱动扬声器,数码管及LED灯以显示所需信息。
外围电路有两部分,一部分为输出(声光模块),一部分为输入(按钮模块),系统框图如图2.1:
图2.1系统构成框图
本文着重讲述系统设计中的CPLD程序设计部分,故“CPLD芯片的输入信号”、“CPLD芯片的输出信号”、“CPLD芯片的逻辑结构”等词语均省略为“输入信号”、“输出信号”、“逻辑结构”等,特此声明,不再赘述。
2.2系统实现过程
用VHDL进行设计,首先应该了解,VHDL语言一种全方位硬件描述语言,包括系统行为级描述,寄存器传输级和逻辑门阵列等多个设计层次。
充分利用VHDL“自顶向下”的设计优点以及层次化的设计概层次概念对于设计复杂的数字系统非常有用,能使得再复杂的系统设计也可从简单的单元入手,简化设计过程,降低设计难度,且提高了程序的可读性,并降低了程序的维护难度。
根据本系统设计要求知(如图2.1)——
1)整个系统共有三个输入信号:
a)控制拍号(2/4、3/4、4/4)的逻辑输入信号TK;
b)控制拍速(20…400)的调节信号TS[0,1],分别为“增加”、“减小”;
c)控制音量的上下调节信号(1…20);
2)整个系统共有四个输出信号:
a)扬声器驱动信号Speaker;
b)拍显LED驱动信号LED[1…3];
c)数码管驱动信号S[1…8];
d)数码管片选信号CS[1…2]。
据此,我们可以将整个节拍产生电路分为三大部分:
a)数控分频电路TimeCLK;
b)数码管驱动显示LED8;
c)声光输出OutputTem电路。
综上,系统的工作原理便可简述如下:
1)数码管驱动根据输入信号拍速TS结合字形码(按数码管类型分为共阴极或共阳极)动态扫描三位数码管即可;
2)数控分频电路根据输入信号TS、CLK,可产生无可察觉干扰指定频率的,可供声光输出电路使用的时钟信号(节拍信号)CLK1;
3)声光输出电路则是根据拍号TK及CLK1则可以产生能驱动扬声器发出不同音调的波形,输出给扬声器,同时按拍强让三个同色不同亮度的LED灯依次亮起,产生声光同步的拍显效果。
完整的音乐节拍系统的逻辑结构图如图2.2所示:
CS
S[0…7]
Spd
数码管驱动电路
TS
输出信号
输入信号
CLK1
CLK
Speaker
数控分频
TK
LED[0…2]
声光输出
VM
图2.2逻辑结构图
3.具体模块设计
3.1数控分频电路TimeCLK
数控分频电路功能:
利用计数器,结合输入信号TS、CLK,实现分频,产生无可察觉干扰指定频率的,可供声光输出电路使用的时钟信号(节拍信号)CLK1;
3.2数码管驱动显电路LED8
数码管驱动电路功能:
1)根据输入信号——拍速调节信号TS计算当前拍速并输出;
2)根据当前拍速按字形码(共阴极或共阳极)动态扫描三位数码管;
3.3声光输出电路OutputTem
声光输出电路功能:
1)根据拍号TK及CLK1产生能驱动扬声器发出不同音调的波形,输出给扬声器;
2)按拍强让三个同色不同亮度的LED灯依次亮起,产生声光同步的拍显效果。
4.程序设计
4.1数控分频电路TimeCLK源代码
libraryIEEE;
UseIEEE.STD_LOGIC_1164.ALL;
UseIEEE.STD_LOGIC_ARITH.ALL;
UseIEEE.STD_LOGIC_UNSIGNED.ALL;
entityTimeCLKis
PORT(
CLK:
INSTD_LOGIC;
SPEED:
ININTEGERRANGE24TO400;
CLK1:
bufferSTD_LOGIC
);
ENDENTITY;
ARCHITECTUREBHVOFTimeCLKIS
SIGNALflag:
STD_LOGIC:
='
0'
;
SIGNALSUM:
INTEGERRANGE0TO1000:
=1000;
BEGIN
SUM<
=24000/SPEED;
process(CLK)
variablecot:
INTEGERRANGE0to5000;
BEGIN
IF(clk='
1'
)THEN
IF(COT<
SUM)THEN
cot:
=cot+1;
CLK1<
ELSIF(COT<
2*SUM)THEN
ELSE
=0;
ENDIF;
ENDIF;
ENDPROCESS;
ENDARCHITECTURE;
4.2数码管驱动显电路LED8源代码
LibraryIEEE;
entityLED8is
CLK:
TS:
INSTD_LOGIC_VECTOR(0TO1);
S:
bufferSTD_LOGIC_VECTOR(0TO7);
CS:
bufferSTD_LOGIC_VECTOR(0TO3);
SPEED1:
BUFFERINTEGERRANGE24TO400
);
ARCHITECTUREBHVOFLED8IS
SIGNALShun:
STD_LOGIC_VECTOR(0TO7)
:
="
00000110"
SIGNALSten:
00111111"
SIGNALSone:
STD_LOGIC_VECTOR(0TO7):
SIGNALSPEED:
INTEGERRANGE24TO400
=100;
PROCESS(TS)
variablehun:
integerrange0to4;
variableten:
integerrange0to9;
variableone:
hun:
=Speed/100;
ten:
=(Speed-hun*100)/10;
one:
=Speed-hun*100-ten*10;
CASEhunISWHEN0=>
Shun<
WHEN1=>
WHEN2=>
01011011"
WHEN3=>
01001111"
WHEN4=>
01100110"
WHENOTHERS=>
Shun<
11111111"
ENDCASE;
CASE(ten)IS
WHEN0=>
Sten<
WHEN1=>
WHEN5=>
01101110"
WHEN6=>
01111110"
WHEN7=>
00000111"
WHEN8=>
01111111"
WHEN9=>
01101111"
Sten<
CASE(one)IS
Sone<
Sone<
ENDCASE;
PROCESS(CLK)
if(clk'
eventandclk='
)then
CASECSIS
WHEN"
0001"
=>
S<
=Sone;
CS<
0010"
=Sten;
0100"
=Shun;
WHENOTHERS=>
S<
11000011"
ENDCASE;
SPEED1<
=SPEED;
endif;
PROCESS(TS)
IF(TS(0)='
Speed<
=Speed+1;
IF(TS
(1)='
=Speed-1;
4.3声光输出电路OutputTem源代码
entityOutputTemis
PORT(
CLK:
CLK1:
TK:
Speaker:
BUFFERSTD_LOGIC;
LED:
OUTSTD_LOGIC_VECTOR(0TO2)
);
ARCHITECTUREBHVOFOutputTemIS
SIGNALTemKind:
integerrange2to4:
=2;
BEGIN
variablecount:
variableSPKBuf:
STD_LOGIC;
BEGIN
IF(CLK1='
)THEN
Speaker<
=notCLK;
count:
ELSE
Speaker<
ENDIF;
PROCESS(CLK1)
variablecount1:
IFCLK1='
THEN
CASE(TemKind)is
when2=>
case(count1)is
when1=>
LED<
001"
whenOTHERS=>
count1:
LED<
100"
endcase;
when3=>
010"
when2=>
count1:
endcase;
when4=>
when3=>
whenothers=>
111"
=count1+1;
ENDIF;
ENDPROCESS;
PROCESS(TK)
if(TK='
CASE(TemKind)is
when2=>
TemKind<
=3;
when3=>
=4;
when4=>
whenothers=>
endif;
4.4顶层文件设计模块
entitySimTemis
CLK:
TK:
TS:
Speaker:
OUTSTD_LOGIC;
LED:
OUTSTD_LOGIC_VECTOR(0TO2);
S:
OUTSTD_LOGIC_VECTOR(0TO7);
CS:
OUTSTD_LOGIC_VECTOR(0TO3)
ARCHITECTUREBHVOFSimTemIS
ComponentTimeCLK
CLK:
SPEED:
CLK1:
OUTSTD_LOGIC
ENDComponent;
ComponentLED8
TS:
BUFFERSTD_LOGIC_VECTOR(0TO7);
BUFFERSTD_LOGIC_VECTOR(0TO3);
ENDComponent;
ComponentOutputTem
CLK1:
SIGNALCLK1:
SIGNALSPEED:
INTEGERRANGE24TO400;
U0:
TimeCLKPORTMAP(CLK,SPEED,CLK1);
U1:
LED8PORTMAP(CLK,TS,S,CS,SPEED);
U2:
OutputTemPORTMAP(CLK,CLK1,TK,Speaker,LED);
5.运行结果与分析
5.1数控分频电路TimeCLK
波形仿真图:
图5.1TimeCLK波形仿真图
当设定CLK为10MHz的时钟脉冲,且speed输入为默认的200(节拍/分钟)(有预防针资源有限,图形中用s代替min)则分频后的时钟信号。
5.2数码管驱动显电路LED8
5.3声光输出电路OutputTem
按5.1设定好本仿真输入的clk与clk1,则当clk1为高电平时扬声器应发声,而扬声器的发声又需要方波驱动,顾利用clk产生局部方波;
同时按节拍产生带有一定延时效果的LED驱动信号。
6.结束语
学习所有的编程语言都离不开实践与思考,大学期间能系统的学习各门课程固然是难得的机会,但在学习之后还有机会及时的利用所学知识在实践中思考练习更为荣幸至极,珍惜这次的学习过程变认真思考,认真设计每一句代码,设计仿真输入的每一个码元值,认真对待自己疑惑的每一个知识点,认真学习也是认真对待自己的一大表现,尽管我的作品很简单逻辑也并不复杂,但我相信我在这里付出得并不少,也相信我收获的也会更多,每一不同的课程设计虽多数都用不同的语言,能让我们感受到不同的气氛,但编程之路上严谨思考,细致分析的做事方式,和不骄不躁的态度,是异曲同工的,是在一次次课程设计中联系学习磨练的,我会将自己的学习方式坚持下去,也希望我们七专业都能在老师们为我们良苦用心地设计的诸多课程之中用心去做,之外认真补缺,之后有所进步,不负老师一片用心,不负家里人的一片希望,也不负自己的一片青春,一同成长为一名合格的大学生。
我会作课设,你试着做过么?
尝试的过程是痛苦的,但结果是快乐的,你所谓的捷径的代价,,,,,,
参考文献
[1].侯伯亭,顾新.VHDL硬件描述语言与数字逻辑电路设计.西安,1999.
[2].潘松,黄继业,EDA技术与VHDL.北京:
清华大学出版社.2013
[3].马建民,孙德哲.关于音乐节拍器设计功能的思考.辽宁,2005
[4].王金明.数字系统设计VHDL.北京:
电子工业出版设.2010
[5]方爵.基本乐理.西南师范大学出版社,1997