EDA课程设计音乐播放器.docx

上传人:b****5 文档编号:11833578 上传时间:2023-04-05 格式:DOCX 页数:34 大小:158.61KB
下载 相关 举报
EDA课程设计音乐播放器.docx_第1页
第1页 / 共34页
EDA课程设计音乐播放器.docx_第2页
第2页 / 共34页
EDA课程设计音乐播放器.docx_第3页
第3页 / 共34页
EDA课程设计音乐播放器.docx_第4页
第4页 / 共34页
EDA课程设计音乐播放器.docx_第5页
第5页 / 共34页
点击查看更多>>
下载资源
资源描述

EDA课程设计音乐播放器.docx

《EDA课程设计音乐播放器.docx》由会员分享,可在线阅读,更多相关《EDA课程设计音乐播放器.docx(34页珍藏版)》请在冰豆网上搜索。

EDA课程设计音乐播放器.docx

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

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 医药卫生 > 临床医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1