EDA课程设计音乐播放器.docx
《EDA课程设计音乐播放器.docx》由会员分享,可在线阅读,更多相关《EDA课程设计音乐播放器.docx(34页珍藏版)》请在冰豆网上搜索。
EDA课程设计音乐播放器
EDA课程设计
音乐播放器
一、前言
1、课程的目的与任务
《EDA课程设计》(注:
EDA即电子设计自动化,ElectronicsDesignAutomation)是继《模拟电子技术基础》、《数字电子技术基础》、《电子技术基础实验》课程后,电气类、自控类和电子类等专业学生在电子技术实验技能方面综合性质的实验训练课程,是电子技术基础的一个部分,其目的和任务是通过一周的时间,让学生掌握EDA的基本方法,熟悉一种EDA软件(MAXPLUS2),并能利用EDA软件设计一个电子技术综合问题,并在实验板上成功下载,为以后进行工程实际问题的研究打下设计基础。
2、课程的基本要求
1、通过课程设计使学生能熟练掌握一种EDA软件(MAXPLUS2)的使用方法,能熟练进行设计输入、编译、管脚分配、下载等过程。
2、通过课程设计使学生能利用EDA软件(MAXPLUS2)进行至少一个电子技术综合问题的设计(内容可由老师指定或自由选择),设计输入可采用图形输入法或AHDL硬件描述语言输入法。
3、通过课程设计使学生初步具有分析寻找和排除电子电路中常见故障的能力。
4、通过课程设计使学生能独立写出严谨的、有理论根据的、实事求是的、文理通顺的字迹端正的课程设计报告。
3、与其他课程的联系与分工
《EDA课程设计》中应用了《模拟电子技术基础》、《数字电子技术基础》中的基础知识和基本理论,并且利用了《电子技术基础实验》中的基本实验方法,在时间上的安排上应该在这些课程之后。
《EDA课程设计》的后续课程是《微机原理》等其它专业课程,《EDA课程设计》中对学生综合设计能力的培养将为这些后续课程的学习打下良好基础。
二、设计任务及要求
用VHDL语言设计乐音的节拍与音符产生电路;用VHDL语言设计分频系数、音符显示数据产生电路;用VHDL语言设计可控分频器电路;理解简易音乐播放器总体设计方案。
掌握基本的VHDL语言;理解音乐播放电路设计方案。
掌握用VHDL语言设计节拍与音符产生电路;掌握用VHDL语言设计分频系数、音符显示数据产生电路;掌握用VHDL语言设计可控分频器电路。
设计结果:
原理图与原程序、电路仿真图、能在实训系统上播放悦耳动听的音乐。
三、设计原理及总体框图
产生音乐的两个因素是音乐频率和音乐的持续时间,以纯硬件完成演奏电路比利用微处理器(CPU)来实现乐曲演奏要复杂的多如果不借助于功能强大的EDA工具和硬件描述语言,凭借传统的数字逻辑技术,即使最简单的演奏电路也难以实现。
根据6.4.1的设计要求,乐曲硬件演奏电路系统主要由数控分频器和乐曲存储模块组成。
数控分频器对FPGA的基准频率进行分频,得到与各个音阶对应的频率输出。
乐曲存储模块产生节拍控制和音阶选择信号,即在此模块中可存放一个乐曲曲谱真值表,由一个计数器来控制此真值表的输出,而由计数器的计数时钟信号作为乐曲节拍控制信号。
1、音名与频率的关系
音乐的十二平均率规定:
每两个八度音(如简谱中的中音1与高音1)之间的频率相差一倍.在两个八度音之间,又可分为十二个半音,每两个半音的频率比为4。
另外,音名A(简谱中的低音6)的频率为440Hz,音名B到C之间,E到F之间为半音,其余为全音,由此可以计算出简谱中从低音1到高音1之间每个音名的频率如表1所示.
表1简谱中的音名与频率的关系
音名
频率/Hz
音名
频率/Hz
音名
频率/Hz
低音1
261.63
中音1
532.25
高音1
1046.50
低音2
293.67
中音2
587.33
高音2
1174.66
低音3
329.63
中音3
659.25
高音3
1318.51
低音4
349.23
中音4
698.46
高音4
1396.92
低音5
391.99
中音5
783.99
高音5
1567.98
低音6
440
中音6
880
高音6
1760
低音7
493.88
中音7
987.76
高音7
1975.52
由于音阶频率多为非整数,而分频系数又不能为小数,故必须将得到的分频数四舍五入取整。
若基准频率过低,则由于分频系数过小,四舍五入取整后的误差较大,若基准频率过高,虽然误码差变小,但分频结构将变大。
实际的设计应综合考虑两方面的因素,在尽量减小频率误差的前提下取舍合适的基准频率。
本例中选取4MHz的基准频率,若无4MHz的时钟频率,实际上,只要各个音名间的相对品频率关系不变,C作1与D作1演奏出的音乐听起来都不会“走调”。
各音阶频率及相应的分频系数如表2所示。
为了减少输出的偶次谐波分量,最后输出到扬声器的波形应为对称方波,因此在到达扬声器之前,有一个二分频的分频器。
表2中的分频系数就是从4MHZ频率二分频得到的2MHZ频率基础上计算得出的。
表2各音阶频率对应的分频值
音名
分频系数
初始值
音名
分频系数
初始值
音名
分频系数
初始值
低音1
7644
547
中音1
3822
4369
高音1
1911
6280
低音2
6810
1381
中音2
3405
4786
高音2
1270
6921
低音3
6067
2124
中音3
3034
5157
高音3
1517
6674
低音4
5727
2464
中音4
2864
5327
高音4
1432
6759
低音5
5102
3089
中音5
2551
5640
高音5
1256
6935
低音6
4545
3646
中音6
2273
5918
高音6
1137
7054
低音7
4050
4141
中音7
2025
6166
高音7
1013
7178
由于最大的分频系数为7644,故采用13位二进制计数器已能满足分频要求。
在表2,除给出了分频比以外,给出了对应于各个音阶频率时计数器不同的初始值,对于乐曲中的休止符,要将分频系数设为0,即初始值为8191即可,此时扬声器将不会发声。
对于不同的分频系数,加载不同的初始值即可。
用加载初始值而不是将分频输出译码反馈,可以有效地减少本设计占用可编程逻辑器件的资源,也是同步计数器的一个常用设计技巧。
2、控制音长的节拍发生器
该演奏电路演奏的乐曲是“梁祝”片段,其最小的节拍为1拍。
将1拍的时长定为0.25秒,则只需要再提供一个4Hz的时钟频率即可产生1拍的时长,演奏的时间控制通过ROM查表的方式来完成。
对于占用时间较长的节拍,如全音符为4拍(重复4),2/4音符为2拍(重复2),1/4音符为1拍(重复1)。
3、总体框图:
(如图1)
图1
总体框图说明:
NOTETABS相当于一个计数器,通过计数自动加1读MUSIC模块里的值,然后通过MUXA选择模块选择MUSIC模块中不同的输出,TONETABA模块根据MUXA模块不同的输出选择相应的值,SPEAKERA模块根据TONETABA的输出对12MHZ的时钟信号进行分频,从而得到相信的频率输出发出声音(音调),从而实现播放不同的歌曲。
四、程序设计:
1、NOTETABS模块:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYNOTETABSIS
PORT(CLK:
INSTD_LOGIC;
COUNTER1:
inoutSTD_LOGIC_vector(7downto0));
ENDNOTETABS;
ARCHITECTUREaOFNOTeTABsIS
BEGIN
P1:
PROCESS(CLK,COUNTER1)
BEGIN
IFCOUNTER1=183THEN
COUNTER1<="00000000";
ELSIFCLK'EVENTANDCLK='1'THEN
COUNTER1<=COUNTER1+1;
ENDIF;
ENDPROCESS;
ENDa;
创建符号:
(如图2)
图2
2、muxA模块:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYmuxAIS
PORT(a:
INSTD_LOGIC_vector(3downto0);
b:
outSTD_LOGIC_vector(3downto0);
INDEX:
OUTSTD_LOGIC_vector(3downto0);
Q1:
INSTD_LOGIC_vector(3downto0);
Q2:
INSTD_LOGIC_vector(3downto0);
Q3:
INSTD_LOGIC_vector(3downto0);
Q4:
INSTD_LOGIC_vector(3downto0));
ENDmuxA;
ARCHITECTUREaOFmuxAIS
BEGIN
PROCESS(a,Q1,Q2,Q3,Q4)
BEGIN
CASEaIS
WHEN"0001"=>
b<="0001";
INDEX<=Q1;
WHEN"0011"=>
b<="0010";
INDEX<=Q2;
WHEN"0010"=>
b<="0011";
INDEX<=Q3;
WHEN"0110"=>
b<="0100";
INDEX<=Q4;
WHENOTHERS=>
null;
ENDCASE;
ENDPROCESS;
ENDa;
创建符号:
(如图3)
图3
3、TONETABA模块:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYTONETABAIS
PORT(
INDEX:
INSTD_LOGIC_vector(3downto0);
CODE:
OUTSTD_LOGIC_vector(3downto0);
HIGH:
OUTSTD_LOGIC;
TONE:
OUTSTD_LOGIC_vector(10downto0));
ENDTONETABA;
ARCHITECTUREaOFTONETABAIS
BEGIN
SEARCH:
PROCESS(INDEX)
BEGIN
CASEINDEXIS
WHEN"0000"=>TONE<="11111111111";CODE<="0000";HIGH<='0';--2047
WHEN"0001"=>TONE<="01100000101";CODE<="0001";HIGH<='0';--773
WHEN"0010"=>TONE<="01110010000";CODE<="0010";HIGH<='0';--912
WHEN"0011"=>TONE<="10000001100";CODE<="0011";HIGH<='0';--1036
WHEN"0101"=>TONE<="10010101101";CODE<="0101";HIGH<='0';--1197
WHEN"0110"=>TONE<="10100001010";CODE<="0110";HIGH<='0';--1290
WHEN"0111"=>TONE<="10101011100";CODE<="0111";HIGH<='0';--1372
WHEN"1000"=>TONE<="10110000010";CODE<="0001";HIGH<='1';--1410
WHEN"1001"=>TONE<="10111001000";CODE<="0010";HIGH<='1';--1480
WHEN"1010"=>TONE<="11000000110";CODE<="0011";HIGH<='1';--1542
WHEN"1100"=>TONE<="11001010110";CODE<="0101";HIGH<='1';--1622
WHEN"1101"=>TONE<="11010000100";CODE<="0110";HIGH<='1';--1668
WHEN"1111"=>TONE<="11011000000";CODE<="0001";HIGH<='1';--1728
WHENOTHERS=>NULL;
ENDCASE;
ENDPROCESS;
ENDa;
创建符号:
(如图4)
图4
4、SPEAKERA模块:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
useieee.std_logic_unsigned.all;
ENTITYSPEAKERAIS
PORT(
CLK:
INSTD_LOGIC;
TONE:
INSTD_LOGIC_vector(10downto0);
SPKS:
OUTSTD_LOGIC);
ENDSPEAKERA;
ARCHITECTUREaOFSPEAKERAIS
SIGNALPRECLK:
STD_LOGIC;
SIGNALFULLSPKS:
STD_LOGIC;
BEGIN
DIVIDECLK:
PROCESS(CLK)
VARIABLECOUNT4:
STD_LOGIC_vector(3downto0);
BEGIN
PRECLK<='0';
IFCOUNT4>11THEN
PRECLK<='1';
COUNT4:
="0000";
ELSIFCLK'EVENTANDCLK='1'THEN
COUNT4:
=COUNT4+1;
ENDIF;
ENDPROCESS;
GENSPKS:
PROCESS(PRECLK,TONE)
VARIABLECOUNT11:
STD_LOGIC_vector(10downto0);
BEGIN
IFPRECLK'EVENTANDPRECLK='1'THEN
IFCOUNT11=16#7FF#THEN
COUNT11:
=TONE;
FULLSPKS<='1';
ELSECOUNT11:
=COUNT11+1;
FULLSPKS<='0';
ENDIF;
ENDIF;
ENDPROCESS;
DELAYSPKS:
PROCESS(FULLSPKS)
VARIABLECOUNT2:
STD_LOGIC;
BEGIN
IFFULLSPKS'EVENTANDFULLSPKS='1'THEN
COUNT2:
=NOTCOUNT2;
IFCOUNT2='1'THEN
SPKS<='1';
ELSE
SPKS<='0';
ENDIF;
ENDIF;
ENDPROCESS;
ENDa;
创建符号:
(如图5)
图5
5、MUSIC模块:
Music1:
liangzhu_rom(歌曲名:
梁祝)
WIDTH=4;
DEPTH=256;
ADDRESS_RADIX=DEC;
DATA_RADIX=DEC;
CONTENTBEGIN
00:
3;
01:
3;
02:
3;
03:
3;
04:
5;
05:
5;
06:
5;
07:
6;
08:
8;
09:
8;
10:
8;
11:
9;
12:
6;
13:
8;
14:
5;
15:
5;
16:
12;
17:
12;
18:
12;
19:
15;
20:
13;
21:
12;
22:
10;
23:
12;
24:
9;
25:
9;
26:
9;
27:
9;
28:
9;
29:
9;
30:
9;
31:
0;
32:
9;
33:
9;
34:
9;
35:
10;
36:
7;
37:
7;
38:
6;
39:
6;
40:
5;
41:
5;
42:
5;
43:
6;
44:
8;
45:
8;
46:
9;
47:
9;
48:
3;
49:
3;
50:
8;
51:
8;
52:
6;
53:
5;
54:
6;
55:
8;
56:
5;
57:
5;
58:
5;
59:
5;
60:
5;
61:
5;
62:
5;
63:
5;
64:
10;
65:
10;
66:
10;
67:
12;
68:
7;
69:
7;
70:
9;
71:
9;
72:
6;
73:
8;
74:
5;
75:
5;
76:
5;
77:
5;
78:
5;
79:
5;
80:
3;
81:
5;
82:
3;
83:
3;
84:
5;
85:
6;
86:
7;
87:
7;
88:
6;
89:
6;
90:
6;
91:
6;
92:
6;
93:
6;
94:
5;
95:
6;
96:
8;
97:
8;
98:
8;
99:
9;
100:
12;
101:
12;
102:
12;
103:
10;
104:
9;
105:
9;
106:
10;
107:
9;
108:
8;
109:
8;
110:
6;
111:
5;
112:
3;
113:
3;
114:
3;
115:
3;
116:
8;
117:
8;
118:
8;
119:
8;
120:
6;
121:
8;
122:
6;
123:
5;
124:
3;
125:
5;
126:
6;
127:
8;
128:
5;
129:
5;
130:
5;
131:
5;
132:
5;
133:
5;
134:
5;
135:
5;
136:
0;
137:
0;
138:
0;
END;
创建符号:
(如图6)
图6
Music2:
shengri_rom(歌曲名:
生日快乐)
WIDTH=4;
DEPTH=256;
ADDRESS_RADIX=DEC;
DATA_RADIX=DEC;
CONTENTBEGIN
00:
13;
01:
13;
02:
13;
03:
13;
04:
13;
05:
13;
06:
13;
07:
12;
08:
12;
09:
10;
10:
10;
11:
10;
12:
10;
13:
12;
14:
12;
15:
12;
16:
12;
17:
15;
18:
15;
19:
15;
20:
15;
21:
13;
22:
13;
23:
12;
24:
12;
25:
13;
26:
13;
27:
13;
28:
13;
29:
13;
30:
13;
31:
13;
32:
13;
33:
10;
34:
10;
35:
10;
36:
10;
37:
12;
38:
12;
39:
13;
40:
13;
41:
12;
42:
12;
43:
12;
44:
12;
45:
10;
46:
10;
47:
10;
48:
10;
49:
8;
50:
8;
51:
6;
52:
6;
53:
12;
54:
12;
55:
10;
56:
10;
57:
9;
58:
9;
59:
9;
60:
9;
61:
9;
62:
9;
63:
9;
64:
9;
65:
9;
66:
9;
67:
9;
68:
9;
69:
9;
70:
9;
71:
10;
72:
10;
73:
12;
74:
12;
75:
12;
76:
12;
77:
12;
78:
12;
79:
13;
80:
13;
81:
10;
82:
10;
83:
10;
84:
10;
85:
9;
86:
9;
87:
9;
88:
9;
89:
8;
90:
8;
91:
8;
92:
8;
93:
8;
94:
8;
95:
8;
96:
8;
97:
12;
98:
12;
99:
12;
100:
12;
101:
12;
102:
12;
103:
10;
104:
10;
105:
9;
106:
9;
107:
8;
108:
8;
109:
6;
110:
6;
111:
8;
112:
8;
113:
5;
114:
5;
115:
5;
116:
5;
117:
5;
118:
5;
119:
5;
120:
5;
121:
5;
122:
5;
123:
5;
124:
5;
125:
0;
126:
0;
127:
0;
END;
创建符号:
(如图7)
图7
Music3:
yydcb_rom(歌曲名:
隐形的翅膀)
WIDTH=4;
DEPTH=256;
ADDRESS_RADIX=DEC;
DATA_RADIX=DEC;
CONTENTBEGIN
00:
10;
01:
10;
02:
12;
03:
12;
04:
15;
05:
15;
06:
15;
07:
15;
08:
15;
09:
15;
10:
15;
11:
15;
12:
15;
13:
15;
14:
15;
15:
15;
16:
13;
17:
13;
18:
12;
19:
12;
20:
13;
21:
13;
22:
15;
23:
15;
24:
10;
25:
10;
26:
9;
27:
9;
28:
8;
29:
8;
30:
8;
31:
8;
32:
8;
33:
8;
34:
8;
35:
8;
36:
8;
37:
8;
38:
15;
39:
15;
40:
15;
41:
1