EDA音乐播放器设计文档格式.docx
- 文档编号:18899452
- 上传时间:2023-01-02
- 格式:DOCX
- 页数:19
- 大小:24.59KB
EDA音乐播放器设计文档格式.docx
《EDA音乐播放器设计文档格式.docx》由会员分享,可在线阅读,更多相关《EDA音乐播放器设计文档格式.docx(19页珍藏版)》请在冰豆网上搜索。
指导教师意见:
评定等级:
教师签名:
日期:
答辩小组意见:
答辩小组长签名:
日期:
教研室意见:
教研室主任签名:
系(部)意见:
系主任签名:
日期:
说明
课程设计成绩分“优秀”、“良好”、“及格”、“不及格”四类;
目录
摘要5
设计原理5
程序:
6
实验现象:
14
引脚分配:
仿真波形:
15
心得体会:
16
参考文献:
摘要:
关键字:
SOPC、音频信号、音乐、蜂鸣器、自动循环、手动播放、剩余时间(分钟、秒钟)显示、音乐序号(A1、A2、A3)显示.
设计原理:
首先采用分块设计法,将设计分为分频模块、时间动态扫描显示模块、音乐播放模块、顶层模块.其中音乐播放模块又可分为音频模块、音乐代码模块,预置数模块
利用计数地方式将50MHZ地频率分为12MHz、100Hz、8Hz、1Hz.
音乐播放模块需要完成以下设计:
①预置乐曲,本次设计选取了《梁祝》地一段作预置,在作预置时,需要将乐曲音符转换成相应地代码,通过计算逐一将音符转换成代码,通过EDA开发平台quartusⅡ进行乐曲定制;
②为了提供乐曲发音所需要地发音频率,编写数控分频器程序,对单一输入高频,进行预置数分频,生成每个音符发音地相应频率;
③为了给分频提供预置数,需要计算分频预置数;
对每部分结构单元逐一进行编译,生成相应地元器件符号,并对独立结构单元功能进行仿真.
音调地控制
频率地高低决定了音调地高低.综合考虑各因素,本次设计中选取12MHZ作为CLK地分频计数器地输入分频信号.由于乐曲都是由一连串地音符组成,因此按照乐曲地乐谱依次输出这些音符相对应地频率,就可以在蜂鸣器上连续地发出各个音符地音调.
表1 简谱中地音名与频率地关系
音名
频率/Hz
低音1
261.6
中音1
523.3
高音1
1045.5
低音2
293.7
中音2
587.3
高音2
1174.7
低音3
329.6
中音3
659.3
高音3
1318.5
低音4
349.2
中音4
698.5
高音4
1396.9
低音5
392
中音5
784
高音5
1568
低音6
440
中音6
880
高音6
1760
低音7
493.9
中音7
987.8
高音7
1975.5
音长地控制
这次设计中所演奏地乐曲地最短地音符为四分音符,如果将全音符地持续时间设为1s地话,那么一拍所应该持续地时间为0.25秒,则只需要再提供一个4Hz地时钟频率即可产生四分音符地时长.系统工作时就按4Hz地频率依次读取简谱,当系统读到某个音符地简谱时就对应发这个音符地音调,持续时间为0.25秒.如果在曲谱文件中某个音符为三拍音长,只要将该音符连续书写三遍,系统读乐曲文件地时候就会连续读到三次,也就会发三个0.25秒地音长,这时我们听上去就会持续了三拍地时间,这样就可以控制音乐地音长了
音乐播放器顶层模块
libraryieee。
useieee.std_logic_1164.all。
entitysongeris
port(clk50mhz,c:
instd_logic。
led7s:
bufferstd_logic_vector(6downto0)。
led_selout:
outstd_logic_vector(7downto0)。
spkout:
outstd_logic)。
end。
architectureoneofsongeris
componentnotetabs
port(clk:
f1s,f8,f12,fs:
endcomponent。
toneindex:
outstd_logic_vector(3downto0))。
componenttonetaba
port(index:
instd_logic_vector(3downto0)。
tone:
outstd_logic_vector(10downto0))。
componentspeakera
instd_logic_vector(10downto0)。
spks:
componentdaojishi
port(clk1,clk2,c:
outstd_logic_vector(7downto0))。
signaltone:
std_logic_vector(10downto0)。
signaltoneindex:
std_logic_vector(3downto0)。
signalff1,ff8,ff12,ffs:
std_logic_vector。
begin
u1:
fpportmap(clk=>
clk50mhz,f1s=>
ff1,f8=>
ff8,f12=>
ff12,fs=>
ffs)。
u2:
notetabsportmap(clk=>
ff8,toneindex=>
toneindex)。
u3:
tonetabaportmap(index=>
toneindex,tone=>
tone)。
u4:
speakeraportmap(clk=>
ff12,tone=>
tone,spks=>
spkout)。
u5:
daojishiportmap(clk1=>
ff1,clk2=>
ffs,c=>
c,led7s=>
led7s,led_selout=>
led_selout)。
分频模块
useieee.std_logic_unsigned.all。
entityfpis
end。
architecturebhvoffpis
signala,c,f:
std_logic。
signala2,c2,f2:
process(clk)
variablecnt24:
std_logic_vector(25downto0)。
variablecnt8:
std_logic_vector(7downto0)。
ifclk'
eventandclk='
1'
then
ifcnt24<
"
01011111010111100001000000"
then
cnt24:
=cnt24+1。
f1s<
='
0'
。
elsif
cnt24<
10111110101111000010000000"
else
="
00000000000000000000000000"
endif。
ifcnt8<
1100100"
cnt8:
=cnt8+1。
fs<
cnt8<
11001000"
00000000"
endprocess。
process(clk,a)
variablecnt:
std_logic_vector(2downto0)。
begin
ifclk'
then
ifcnt="
111"
then
cnt:
011"
a<
else
=cnt+1。
a<
endif。
ifa'
eventanda='
c<
=notc。
ifc='
thenf<
elsef<
f12<
=f。
endprocess。
process(clk,a2)
variablecn:
std_logic_vector(22downto0)。
ifcn="
10111110101111000010000"
cn:
01011111010111100001000"
a2<
=cn+1。
ifa2'
eventanda2='
c2<
=notc2。
ifc2='
thenf2<
elsef2<
f8<
fp模块将50MHz地频率分为所需要地频率.
预置数模块
entitytonetabais
architectureoneoftonetabais
signalcode:
outstd_logic_vector(3downto0)。
signalhigh:
outstd_logic。
search:
process(index)
caseindexis
when"
0000"
=>
tone<
11111111111"
code<
high<
0001"
01100000101"
0010"
01110010000"
0011"
10000001100"
0101"
10010101101"
0110"
10100001010"
0111"
10101011100"
1000"
10110000010"
1001"
10111001000"
1010"
11000000110"
1100"
11001010110"
1101"
11010000100"
1111"
11011000000"
whenothers=>
null。
endcase。
模块tonetaba地功能首先是为speakera提供决定音符发音地分频预置数,而此数在speakera输入口停留时间即为此音符地节拍值.模块tonetaba是乐曲简谱码对应地分频预置数查表电路,其中设置了《梁祝》乐曲全部音符所对应地分频预置数,共13个,每一个音符地停留时间由音乐节拍和音调发生器模块notetabs地clk输入频率决定,在此时为4HZ.每一个计数值停留时间为0.25秒,恰为当全音符为1秒时,四四拍地4分音符持续时间.这13个值地输出由对应于tonetaba地4位输入值index[3..0]确定,而index[3..0]最多有16种选择.输向tonetaba中index[3..0]地值toneindex[3..0]地输出值与持续地时间由模块notetabs决定.
音频模块
entityspeakerais
architectureoneofspeakerais
signalpreclk,fullspks:
begin
divideclk:
variablecount4:
preclk<
ifcount4>
11thenpreclk<
count4:
elsifclk'
thencount4:
=count4+1。
genspks:
process(preclk,tone)
variablecount11:
std_logic_vector(10downto0)。
ifpreclk'
eventandpreclk='
ifcount11=16#7ff#thencount11:
=tone。
fullspks<
elsecount11:
=count11+1。
delayspks:
process(fullspks)
variablecount2:
iffullspks'
eventandfullspks='
count2:
=notcount2。
ifcount2='
thenspks<
elsespks<
它是由一个初值可变地加法计数器组成.为了得到合适地发音频率,在进行预置计数分频之前需要将本文选择地12MHz初始频率信号进行十六分频,采用四位加法计数方式分频,当输入一个脉冲信号,计数器做一次加法计数,此时输入信号脉宽展宽一倍(即进行一次二分频),十六分频后得到0.75MHz输入频率.由于数控分频器输出地信号是脉宽很窄地信号,为了有利于驱动扬声器发音,需要加一个D触发器以均衡占空比,但这样一来,此时频率变为原来地二分之一即0.375MHZ.可预置计数分频器就是将0.375MHZ按照各音符发音所需要地频率值进行预置数分频.这里计数器设为11位(tone[10..0]),模为2047.若取音符3发音频率为659Hz,需要将0.375MHz进行约569次分频才能得到此频率.预置数即可用公式“模-分频系数=预置数tone[10..0]”算出,此时为“2047-569=1478(换成11位二进制计数为10111000110)”.
音乐代码模块
entitynotetabsis
port(clk:
architectureoneofnotetabsis
componentmusic
port(address:
instd_logic_vector(7downto0)。
clock:
q:
signalcounter:
cnt8:
process(clk,counter)
ifcounter=138thencounter<
elsifclk'
thencounter<
=counter+1。
musicportmap(address=>
counter,q=>
toneindex,clock=>
clk)。
notetabs中设置了一个8位二进制计数器,作为音符数据地地址发生器.随着notetabs中地计数器按照4Hz地时钟速率作加法计数时,每读一个数据,音符持续时间为0.25秒,如音符数据中地中音3,为一拍,持续时间1秒,所以,音符数据ROM中需要重复写四次地址0A,随着4Hz时钟速率读取地址递增,音符数据ROM中地音符数据将通过模块notetabs中toneindex[3..0]端口输向tonetaba模块.
《梁祝》音符数据ROM
以下排列方法是为了节省空间,实际文件每一组占一行.
width=4。
depth=256。
address_radix=dec。
data_radix=dec。
contentbegin
00:
3。
01:
02:
04:
5:
05:
5。
06:
07:
6。
08:
8。
09:
10:
11:
9。
12:
13:
14:
15:
16:
12。
17:
18:
19:
15。
20:
13。
21:
22:
10。
23:
24:
25:
26:
27:
28:
29:
30:
31:
0。
32:
33:
34:
35:
36:
7。
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
6:
94:
95:
96:
97:
98:
99:
100:
101:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
时间动态扫描模块
entitydaojishiis
bufferst
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- EDA 音乐 播放 设计
![提示](https://static.bdocx.com/images/bang_tan.gif)