基于FPGA的音乐播放器的设计毕业设计论文.docx
- 文档编号:29478883
- 上传时间:2023-07-23
- 格式:DOCX
- 页数:20
- 大小:246.62KB
基于FPGA的音乐播放器的设计毕业设计论文.docx
《基于FPGA的音乐播放器的设计毕业设计论文.docx》由会员分享,可在线阅读,更多相关《基于FPGA的音乐播放器的设计毕业设计论文.docx(20页珍藏版)》请在冰豆网上搜索。
基于FPGA的音乐播放器的设计毕业设计论文
课程设计
课程名称:
可编程数字片上系统实训
设计题目:
基于FPGA的音乐播放器设计
院系:
电气信息学院
指导教师:
谷雷
专业:
通信工程
学号:
122700109
姓名:
尚斌成
长春建筑学院
2015年12月31日
摘要
在
开发环境下,采用
硬件描述语言设计了一个可以在
芯片上实现的音乐播放器.通过将音乐播放器电路设计进行模块化分解,层次化设计,分成几个单独的结构体,每个结构体实现部分功能,经顶层文件将各单独结构体进行综合,最后将设计代码结合
模块制作的
文件下载到
实验箱进行功能验证,实现乐曲播放.由于音乐播放器的通用性及
语言的可移植性,因此本音乐播放器可直接应用于各种不同系列的
芯片的设计中.
关键词:
音乐播放器,
目录
第一章设计目的
1.1设计背景
现代
技术代表了当今电子设计技术的最新发展方向,它的基本特征是采用硬件描述语言进行电路与系统的设计,具有系统级仿真和综合能力.
和
使设计方法发生了质的变化.把以前"电路设计+硬件搭试+调试焊接"转化为"功能设计+软件模拟+仿真下载".随着电脑普及,互联网飞速发展,这些技术使得各种电子产品迅速的进入了我们的生活,每一个产品的诞生都离不开
技术,从彩色电视机,智能冰箱,再到个人随身用的音乐播放器都需要
技术提供支持.人们生活水平逐步提部分.顺应电子技术的发展趋势,可利用
开发平台,采用可编程逻辑器件
使硬件的功能可通过编程来实现音乐播放器,
软件是进行
设计的操作平台,它是由
公司开发的进行基于
技术的可编程逻辑器件设计的一种设计软件,其功能强大,界面友好,使用便捷.
软件集成了
公司的可编程逻辑器件开发流程中所涉及的几乎所有的工具和第三方软件接口,可以创建,组织和管理用户的设计.主要能够实现设计输入,综合,布局布线,时序分析,仿真,编程和配置,系统级设计,软件开发,时序逼近,调试和工程更改管理的功能.可以根据不同的配置模式,采用不同的编程方式,能够反复使用,无需专用的
编程器,只要换一片
芯片即可修改
功能.增强了设计的灵活性,有效地提高了工作效率,增加了系统的可靠性和稳定性,提高了技术指标.因此,基于
的电路设计过程更加灵活且通用性更好.
1.2实习目的
1利用
硬件描述语言结合
器件设计一个音乐播放器,为其他电路的设计提供一定借鉴作用.
2了解音乐播放器的原理,运用刚刚学过的数电知识设计并制作音乐播放器,而且通过音乐播放器的制作进一步了解各种在制作中用到的中小规模集成电路的作用及其使用方法.由于音乐播放器包括组合逻辑电路和时序电路,通过它可以进一步学习与掌握各种组合逻辑电路与时序电路的原理与使用方法,从而实现理论与实践相结合.
3总的来说,本次设计有助于学生对电子线路知识的整合和电子线路设计能力的训练,并为后继课程的学习和毕业设计打下一定的基础.
第二章设计要求
2.1设计要求
2.1.1实习设计任务
设计并实现具有一定功能的音乐播放器:
1实现预先设置乐曲的播放功能.
2实现乐曲按键输入,实现简易电子琴功能.
3实现实时连续播放.
2.1.2实习设计要求
1采用
语言编写程序,启动
全程编译,生成具体输入,输出端口的图形文件.启动全程功能仿真,生成仿真波形文件.生成下载文件,在
实验开发板上利用
公司的
芯片进行功能验证.
2编写设计报告,要求包括方案选择,程序清单,调试过程,测试结果及心得.
第三章总体方案
3.1原理介绍
为了便于理解,首先介绍一下硬件电路的发声原理.我们知道,声音的频谱范围约在几十到几千赫兹,若能利用程序来控制
某个引脚输出一定频率的矩形波,接上扬声器就能发出相应频率的声音.而乐曲中的每一音符对应着一个确定的频率,因此,要想
发出不用音符的音调,实际上只要控制它输出相应音符的频率即可.乐曲都是由一连串的音符组成,因此按照乐曲的乐谱依次输出这些音符所对应的频率,就可以在扬声器上连续地发出各个音符的音调.而要准确地演奏出一首乐曲,仅仅让扬声器能够发声是不够的,还必须准确地控制乐曲的节奏,即每个音符的持续时间.由此可见,乐曲中每个音符的发音频率及其持续的时间是乐曲能够连续演奏的两个关键因素.
而简易电子琴,工作原理与乐曲演奏一样,只是将固定预置乐曲变成了手动按键输入,节拍时间取决于按键的停留时间,如果合适,同样能播放出完整的歌曲来.
3.1.1音调的控制
频率的高低决定了音调的高低.音乐的十二平均率规定:
每两个八度音(如简谱中的中音1和高音1)之间的频率相差一倍.在两个八度音之间又分为十二个半音.另外,音名A(简谱中的低音6)的频率为440Hz,音名B到C之间、E到F之间为半音,其余为全音.由此可以计算出简谱中从低音1到高音1之间每个音名对应的频率,所有不同频率的信号都是从同一个基准频率分频得到的.由于音阶频率多为非整数,而分频系数又不能为小数,因此必须将计算得到的分频数四舍五入取整.若基准频率过低,则由于分频比太小,四舍五入取整后的误差较大,若基准频率过高,虽然误差较小,但分频数将变大.实际的设计应综合考虑这两方面的因素,在尽量减小频率误差的前提下取合适的基准频率.因此,要想
发出不同音符的音调,实际上只要控制它输出相应音符的频率即可.综合考虑各因素,本文中选取12MHZ作为CLK的分频计数器的输入分频信号.乐曲都是由一连串的音符组成,因此按照乐曲的乐谱依次输出这些音符所对应的频率,就可以在扬声器上连续地发出各个音符的音调.
表3-1 简谱中的音名与频率的关系
音名
频率/Hz
音名
频率/Hz
音名
频率/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
3.1.2音长的控制
音符的持续时间须根据乐曲的速度及每个音符的节拍数来确定.因此,在想控制音符的音长,就必须知道乐曲的速度和每个音符所对应的节拍数,在这个设计中所播放的乐曲的最短的音符为四分音符,如果将全音符的持续时间设为1s的话,那么一拍所应该持续的时间为0.25秒,则只需要再提供一个4HZ的时钟频率即可产生四分音符的时长.要想让系统知道现在应该播放哪个音符,而这个音符持续的时间应该是多少,就必须编写乐曲文件,在乐曲文件中音符是按地址存放的,当系统工作时就按4Hz的频率依次读取简谱,当系统读到某个音符的简谱时就对应发这个音符的音调,持续时间为0.25秒,而如果在曲谱文件中这个音符为三拍音长,那又该如何控制呢?
其实只要将该音符连续书写三遍,这时系统读乐曲文件的时候就会连续读到三次,也就会发三个0.25秒的音长,这时我们听上去就会持续了三拍的时间,通过这样一个简单的操作就可以控制音乐的音长了.
3.2 系统结构图
图3-1 系统结构图
第四章具体实现
4.1系统模块组成
本系统主要由四个功能模块组成:
音符数据地址发生器模块,实现按节拍读乐谱的功能,预置数查表电路电路模块,提供分频预置数,实现乐曲译码输出,发声频率产生模块,产生发音频率,实现乐曲播放,简易电子琴功能模块实现简易电子琴功能.系统功能模块组成图如(图4-1).
图4-1系统功能模块组成图
该系统有三个输入,五个输出端口:
1三输入端口分别是:
CLK4HZ端口,作为节拍脉冲信号输入端口,CLK12MHZ端口,作为发音频率初始信号输入端口,KEYIN输入端口,作为简易电子琴音符输入端口.
2五输出端口分别是:
CODE输出端口,作为音符简码输出LED显示端口,HIGH输出端口,作为音符高8度指示端口,SPKS输出端口,作为《生日快乐》乐曲的声音输出端口,BUZZOUT输出端口,作为简易电子琴声音输出端口,LEDOUT输出端口,作为简易电子琴输入音符显示端口.
4.2 各模块分析与设计
4.2.1 定制《生日快乐》音符数据
为了实现乐曲的播放,首先需要将曲谱定制到音符数据
里面,然后才能按照一定的节拍从
中读出曲谱.由于所选曲子中不含高音,转换关系如表4-1).
表4-1音符与
中数据转换关系
低音
ROM中十进制表示
ROM中十六进制表示
中音
ROM中十进制表示
ROM中十六进制表示
1
1
01
1
8
08
2
2
02
2
9
09
3
3
03
3
10
0A
4
4
04
4
11
0B
5
5
05
5
12
0C
6
6
06
6
13
0D
7
7
07
7
14
0E
在
下定制的
图4-1
模块仿真波形图
波形分析:
此乐谱发生器模块的功能是输出存储在
中的各个音符数据,由上面的仿真波形图可看到《生日快乐》乐曲中的第一个音符为"3"即为"00011"此音在逻辑中停留了4个时钟,那么相应随着程序中的地址计数器按4Hz的时钟频率作加法计数时,即随地址递增时,将从音符数据
中将连续取出4个音符"00011",乐曲中的第二个音符为"5"即为"00101"此音在逻辑中停留了3个时钟,相应地,将从音符数据ROM中将连续取出3个音符"00101"等其它状态时,仿真波形图证明了模块的功能.
4.2.2 音符数据地址发生器模块
图4-2
元件符号
端口说明:
CLK4HZ端口:
作为节拍脉冲信号输入端口,
RST端口:
作为从头开始播放歌曲脉冲信号输入端口,
SEL端口:
作为播放第二首歌脉冲信号输入端口,
[4..0]端口:
作为音符数据地址的输出端口,
中设置了一个8位二进制计数器(计数最大值138),作为音符数据的地址发生器.随着
中的计数器按照4HZ的时钟速率作加法计数时,每读一个数据,音符持续时间为0.25秒,如音符数据中的中音3,为一拍,持续时间1秒,所以,音符数据
中需要重复写四次地址0A,随着4HZ时钟速率读取地址递增,音符数据
中的音符数据将通过模块
输向
模块.音符数据地址发生器模块
的仿真波形如(图4-3)所示:
图4-3音符数据地址发生器模块仿真波形图
4.2.3 预置数查表电路电路模块
图4-4
生成元件符号
端口说明:
INDEX[4..0]端口:
作为上一级音符数据地址的输入端,
CODE[4..0]端口:
作为音符数据简谱码的输出显示端,
HIGH端口:
作为音符数据简谱码高8度的输出显示端,
TONE[10..0]端口:
作为音符数据分频预置数的输出端.
音符的持续时间须根据乐曲的速度及每个音符的节拍数来确定,(图4-4)中模块
的功能首先是为
提供决定音符发音的分频预置数,而此数在
输入口停留时间即为此音符的节拍值.模块
是乐曲简谱码对应的分频预置数查表电路,其中设置了《生日快乐》乐曲全部音符所对应的分频预置数,共9个,每一个音符的停留时间由音乐节拍和音调发生器模块
的CLK输入频率决定,在此时为4HZ.每一个计数值停留时间为0.25秒,恰为当全音符为1秒时,四四拍的4分音符持续时间.这9个值的输出由对应于
的4位输入值Index[3..0]确定,而Index[3..0]最多有16种选择.输向
中Index[3..0]的值ToneIndex[3..0]的输出值与持续的时间由模块
决定.
表4-2各音阶对应的分频预置数关系表
音符名
频率(Hz)
分频
系数
计数初值
音符名
频率(Hz)
分频
系数
计数
初值
休止符
375000
0
2047
中音4
796.178
468
1579
低音1
294.349
1274
773
中音5
882.353
425
1622
低音2
330.396
1135
912
中音6
989.446
379
1668
低音3
370.92
1011
1036
中音7
1136.363
330
1717
低音4
386.598
970
1077
高音1
1175.549
319
1728
低音5
394.737
950
1197
高音2
1353.790
277
1770
低音6
495.376
757
1290
高音3
1512.097
248
1799
低音7
555.56
675
1372
高音4
1609.442
233
1814
中音1
588.697
637
1410
高音5
1802.884
208
1839
中音2
638.84
587
1480
高音6
2027.027
185
1862
中音3
742.574
505
1542
高音7
2272.727
165
1882
音符数据地址发生器模块
的仿真波形如(图3.5)所示:
图4-5
的仿真波形图
波形分析:
模块的功能是输出各个音符所对应的分频预置数,即当index是"00000",tone输出为2047,即休止符的分频预置数,当index是"00101"时,tone输出为1197即低音5的分频预置数,当index是"01010"时,tone输出为1542即高音1的分频预置数等等其它状态时,tone分别输出相应音符的13分频预置数,仿真波形图证明了程序实现了模块的功能.
4.2.4发声频率产生模块
图4-6
生成元件符号
端口说明:
CLK12MHZ端口:
作为发音频率初始信号输入端口,
TONE[10..0]端口:
作为音符数据分频预置数的输入端,
SPKS端口:
作为乐曲的声音输出端口.
这是乐曲演奏电路最重要的模块,由它产生乐曲发音所需要的对应频率.此模块的核心是一个可预置数控分频器,下面是可预置数控分频器的原理介绍:
它是由一个初值可变的加法计数器组成.为了得到合适的发音频率,在进行预置计数分频之前需要将本文选择的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)".
表4-3《生日快乐》各音阶对应的分频预置数关系
音符
分频预置数
二进制码
音符
分频预置数
二进制码
中音1
1329
10100110001
中音5
1568
11000100000
中音2
1408
10110000000
中音6
1620
11001010100
中音3
1478
10111000110
低音5
1087
10000111111
中音4
1510
10111100110
低音6
1194
10010101010
发声频率产生模块
的仿真波形如(图4-7)所示:
图4-7
的仿真波形图
波形分析:
音乐符数控分频此模块的功能是根据初始值Tone的值,对输入时钟信号ClK的频率进行分频,得到想要的音符的发声频率其时钟(Clk)端输入的是在十六进制模块里对12MHz的信号进行16分频得到的750KHz,750KHz的信号根据分频预置数模块中所提供的计数初值,分别得出相应音符频率的两倍值.在分频预置数模块中若取tone[10..0]=912,将发出音符为低音2的信号频率的发声频率等等其它状态,因此这个程序实现了模块的功能.
4.2.5简易电子琴功能模块
此模块完成简易电子琴的设计,实现按键输入音符,发出与之相应声音.其原理与预先定制的乐曲播放原理相似,同样需要一个可预置数控分频器,一个可预置查表电路,不过,为了体现
程序设计的优越性,此模块,在做将数控分频器与可预置查表电路合二为一,在同一个功能模块下实现,使原本复杂的程序设计更加简单化.
为了产生与表4-3音符对应的频率信号,在此还必须用到有源时钟Clock,且把它当作乐曲的基频,而所有不同的频率信号都从这一基频分频而取得,本文选取的是12MHz时钟,中音1(对应的频率值为523.3Hz)的分频系数应改为:
12×106/523.3×2=0x2cc9,这样只需对系统时钟进行0x2cc9次分频即可得所要的中音1.至于其他音符,同样可由上式求出对应的分频系数,这样利用程序可以很轻松地得到相应的乐声.
4.2.6顶层电路
据各个模块产生的元件符号,连接组成乐曲播放电路顶层文件,其顶层电路分为三个模块,音符数据地址发生器模块
预置数查表电路电路模块
发声频率产生模块
顶层电路组成图如图4-8所示.
图4-8顶层电路组成图
4.3电路测试
将当前工程文件中所生成的文件通过计算机下载到实验箱中,验证此设计是否符合要求.先通过
开发工具
对各个模块的
源程序及顶层电路进行编译、逻辑综合,完成电路的纠错、验证、仿真等各种测试工作.再对顶层文件进行编译,配置下载电缆,选择下载模式,进行下载验证操作.将设计的顶层电路组成图
文件内容下载到对应的配置芯片中,外接扬声器,系统成功实现了《生日快乐》的播放,能自动从头开始循环播放,也可随时起停、整体复位、按键选择播放方式、循环演奏以及发光管二极管动态显示播放的音符和高8度音调.(引脚锁定的对应关系如表4-4所示),经实际电路测试验证,达到了设计的要求.在软件中进行基于的数字钟电路的设计过程,真正实现了硬件设计的软件化,展示了使用技术进行电子电路设计的特点,是进行现代电子电路设计的一种更可取的方法.
表4-4实验箱主板与下载板元件的连接封装关系表
器件
名称
信号名
端口名
EPF
10K10
器件
名称
信号名
端口名
EPF
10K10
输出发光管
LED1
CODE4
27
拨位开关
KD1
RST
54
输出发光管
LED2
CODE3
28
拨位开关
KD2
SEL
58
输出发光管
LED3
CODE2
29
输出发光管
LED8
HIGH
38
输出发光管
LED4
CODE1
30
全局时钟1
P2.4
CLK4HZ
1
输出发光管
LED5
CODE0
35
全局时钟2
P2.5
CLK12MHZ
43
喇叭
SPEAK
SPKOUT
3
4.4结束语
本文设计的音乐播放器实现了整体复位、按键选择播放方式、循环演奏以及发光管显示乐谱的功能.数控分频器模块的仿真时一定要处理好时序问题,
音调发生器的程序中通过时钟计数来决定音符的输出,会加大编程的繁杂度,这时一个很好的解决办法就是把将要演奏的乐谱存放在人为开辟的存储空间里,这样只需要在相应地址中读出音符即可.
第五章心得体会
通过本次论文设计,让我学会了利用
软件绘制原理图,硬件描述语言
的编写程序,仿真等具体应用.并能根据仿真结果分析设计的存在的问题和缺陷从而进行程序的调试和完善.同时了解了数控分频器的工作原理和功能作用,并会了利用
模块制作
文件的方法,也更深一层地懂得了顶层文件通过例化语句与其他模块结合的好处,对
实验箱的操作也有了进一步的了解,熟悉掌握了
的文本编程设计方法和仿真波形的编辑.
在设计电路中,往往是先仿真后连接实物图但有时候仿真和电路连接并不是完全一致的例如在对具体模块的仿真的过程中往往没有考虑到整体设计的层面以及与上下模块接口的设计.再加上器件对信号的延时等问题实际下载硬件电路上后会出现一系列的问题.
相信随着电子技术的发展数字钟的功能会更加多样化满足人们的各种需要.设计过程也将变得相对简单容易修改.
同时特别感谢谷雷老师在
软件绘制上的指导和对论文规范修改提出的宝贵意见.
参考文献
潘松,黄继业编著,
技术实用教程.科学出版社,2007.12.
王永维.一种基于
的数字秒表设计方法
.电子元器件应用,2012.
李岩,黄夫海,基于FPGA的MIDI音乐发生器设计,2010
刑建平,曾繁泰.VHDL程序设计教程.3版.北京:
清华大学出版社,2005:
45-46
纪欣然,丁一,梁致源.基于
的多功能数字钟设计
.电子设计工
程,2012:
177-179.
罗杰.
与数字
设计基础
.武汉:
华中科技大学出版
社,2008:
188-196.
童建华.音响设备原理与维修[M].北京:
电子工业出版社,2005.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 FPGA 音乐 播放 设计 毕业设计 论文
![提示](https://static.bdocx.com/images/bang_tan.gif)