《基于FPGA的音乐播放器的设计-毕业设计论文.doc》由会员分享,可在线阅读,更多相关《基于FPGA的音乐播放器的设计-毕业设计论文.doc(20页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、课程设计 课程名称:可编程数字片上系统实训 设计题目: 基于FPGA的音乐播放器设计 院 系: 电气信息学院 指导教师: 谷 雷 专 业: 通信工程 学 号: 122700109 姓 名: 尚斌成 长春建筑学院2015年 12月 31日摘 要在开发环境下,采用硬件描述语言设计了一个可以在 芯片上实现的音乐播放器.通过将音乐播放器电路设计进行模块化分解,层次化设计,分成几个单独的结构体,每个结构体实现部分功能,经顶层文件将各单独结构体进行综合,最后将设计代码结合模块制作的文件下载到实验箱进行功能验证,实现乐曲播放.由于音乐播放器的通用性及 语言的可移植性, 因此本音乐播放器可直接应用于各种不同系
2、列的芯片的设计中.关键词:音乐播放器,目录第一章 设计目的11.1设计背景11.2实习目的1第二章 设计要求32.1 设计要求32.1.1实习设计任务32.1.2实习设计要求3第三章 总体方案43.1原理介绍43.1.1音调的控制43.1.2 音长的控制53.2系统结构图6第四章 具体实现74.1系统模块组成74.2各模块分析与设计84.2.1定制生日快乐音符数据84.2.2音符数据地址发生器模块94.2.3预置数查表电路电路模块104.2.4发声频率产生模块114.2.5简易电子琴功能模块134.2.6顶层电路134.3电路测试144.4结束语15第五章 心得体会16参考文献17第一章 设计
3、目的1.1设计背景 现代技术代表了当今电子设计技术的最新发展方向, 它的基本特征是采用硬件描述语言进行电路与系统的设计, 具有系统级仿真和综合能力.和使设计方法发生了质的变化.把以前电路设计+硬件搭试+调试焊接转化为功能设计+软件模拟+仿真下载.随着电脑普及,互联网飞速发展,这些技术使得各种电子产品迅速的进入了我们的生活,每一个产品的诞生都离不开技术,从彩色电视机,智能冰箱,再到个人随身用的音乐播放器都需要技术提供支持.人们生活水平逐步提部分.顺应电子技术的发展趋势,可利用开发平台,采用可编程逻辑器件使硬件的功能可通过编程来实现音乐播放器,软件是进行设计的操作平台, 它是由公司开发的进行基于技
4、术的可编程逻辑器件设计的一种设计软件, 其功能强大,界面友好,使用便捷.软件集成了公司的可编程逻辑器件开发流程中所涉及的几乎所有的工具和第三方软件接口,可以创建,组织和管理用户的设计.主要能够实现设计输入,综合,布局布线,时序分析,仿真,编程和配置,系统级设计,软件开发,时序逼近,调试和工程更改管理的功能.可以根据不同的配置模式, 采用不同的编程方式, 能够反复使用, 无需专用的编程器, 只要换一片芯片即可修改功能.增强了设计的灵活性,有效地提高了工作效率,增加了系统的可靠性和稳定性,提高了技术指标.因此, 基于的电路设计过程更加灵活且通用性更好.1.2实习目的1 利用硬件描述语言结合器件设计
5、一个音乐播放器 ,为其他电路的设计提供一定借鉴作用. 2 了解音乐播放器的原理,运用刚刚学过的数电知识设计并制作音乐播放器,而且通过音乐播放器的制作进一步了解各种在制作中用到的中小规模集成电路的作用及其使用方法.由于音乐播放器包括组合逻辑电路和时序电路,通过它可以进一步学习与掌握各种组合逻辑电路与时序电路的原理与使用方法,从而实现理论与实践相结合.3 总的来说,本次设计有助于学生对电子线路知识的整合和电子线路设计能力的训练,并为后继课程的学习和毕业设计打下一定的基础.第二章 设计要求2.1 设计要求2.1.1实习设计任务设计并实现具有一定功能的音乐播放器:1 实现预先设置乐曲的播放功能.2 实
6、现乐曲按键输入,实现简易电子琴功能.3 实现实时连续播放.2.1.2实习设计要求1 采用语言编写程序,启动全程编译,生成具体输入,输出端口的图形文件.启动全程功能仿真,生成仿真波形文件.生成下载文件,在实验开发板上利用公司的芯片进行功能验证. 2 编写设计报告,要求包括方案选择,程序清单,调试过程,测试结果及心得.第三章 总体方案3.1原理介绍 为了便于理解,首先介绍一下硬件电路的发声原理.我们知道,声音的频谱范围约在几十到几千赫兹,若能利用程序来控制某个引脚输出一定频率的矩形波,接上扬声器就能发出相应频率的声音.而乐曲中的每一音符对应着一个确定的频率,因此,要想发出不用音符的音调,实际上只要
7、控制它输出相应音符的频率即可.乐曲都是由一连串的音符组成,因此按照乐曲的乐谱依次输出这些音符所对应的频率,就可以在扬声器上连续地发出各个音符的音调.而要准确地演奏出一首乐曲,仅仅让扬声器能够发声是不够的,还必须准确地控制乐曲的节奏,即每个音符的持续时间.由此可见,乐曲中每个音符的发音频率及其持续的时间是乐曲能够连续演奏的两个关键因素. 而简易电子琴,工作原理与乐曲演奏一样,只是将固定预置乐曲变成了手动按键输入,节拍时间取决于按键的停留时间,如果合适,同样能播放出完整的歌曲来.3.1.1音调的控制 频率的高低决定了音调的高低.音乐的十二平均率规定:每两个八度音(如简谱中的中音1和高音1)之间的频
8、率相差一倍.在两个八度音之间又分为十二个半音.另外,音名A(简谱中的低音6)的频率为440Hz,音名B到C之间、E到F之间为半音,其余为全音.由此可以计算出简谱中从低音1到高音1之间每个音名对应的频率,所有不同频率的信号都是从同一个基准频率分频得到的.由于音阶频率多为非整数,而分频系数又不能为小数,因此必须将计算得到的分频数四舍五入取整.若基准频率过低,则由于分频比太小,四舍五入取整后的误差较大,若基准频率过高,虽然误差较小,但分频数将变大.实际的设计应综合考虑这两方面的因素,在尽量减小频率误差的前提下取合适的基准频率.因此,要想发出不同音符的音调,实际上只要控制它输出相应音符的频率即可.综合
9、考虑各因素,本文中选取12MHZ作为CLK的分频计数器的输入分频信号.乐曲都是由一连串的音符组成,因此按照乐曲的乐谱依次输出这些音符所对应的频率,就可以在扬声器上连续地发出各个音符的音调.表3-1简谱中的音名与频率的关系音名频率/Hz音名频率/Hz音名频率/Hz低音1261.6中音1523.3高音11045.5低音2293.7中音2587.3高音21174.7低音3329.6中音3659.3高音31318.5低音4349.2中音4698.5高音41396.9低音5392中音5784高音51568低音6440中音6880高音61760低音7493.9中音7987.8高音71975.53.1.2
10、音长的控制音符的持续时间须根据乐曲的速度及每个音符的节拍数来确定.因此,在想控制音符的音长,就必须知道乐曲的速度和每个音符所对应的节拍数,在这个设计中所播放的乐曲的最短的音符为四分音符,如果将全音符的持续时间设为1s的话,那么一拍所应该持续的时间为0.25秒,则只需要再提供一个4HZ的时钟频率即可产生四分音符的时长.要想让系统知道现在应该播放哪个音符,而这个音符持续的时间应该是多少,就必须编写乐曲文件,在乐曲文件中音符是按地址存放的,当系统工作时就按4Hz的频率依次读取简谱,当系统读到某个音符的简谱时就对应发这个音符的音调,持续时间为0.25秒,而如果在曲谱文件中这个音符为三拍音长,那又该如何
11、控制呢?其实只要将该音符连续书写三遍,这时系统读乐曲文件的时候就会连续读到三次,也就会发三个0.25秒的音长,这时我们听上去就会持续了三拍的时间,通过这样一个简单的操作就可以控制音乐的音长了.3.2系统结构图图3-1系统结构图第四章 具体实现4.1系统模块组成 本系统主要由四个功能模块组成:音符数据地址发生器模块,实现按节拍读乐谱的功能,预置数查表电路电路模块,提供分频预置数,实现乐曲译码输出,发声频率产生模块,产生发音频率,实现乐曲播放,简易电子琴功能模块实现简易电子琴功能.系统功能模块组成图如(图4-1).图4-1系统功能模块组成图该系统有三个输入,五个输出端口: 1 三输入端口分别是:C
12、LK 4HZ端口,作为节拍脉冲信号输入端口,CLK 12MHZ端口,作为发音频率初始信号输入端口,KEYIN输入端口,作为简易电子琴音符输入端口. 2 五输出端口分别是: CODE输出端口,作为音符简码输出LED显示端口,HIGH输出端口,作为音符高8度指示端口,SPKS输出端口,作为生日快乐乐曲的声音输出端口,BUZZOUT输出端口,作为简易电子琴声音输出端口,LEDOUT输出端口,作为简易电子琴输入音符显示端口.4.2各模块分析与设计4.2.1定制生日快乐音符数据为了实现乐曲的播放,首先需要将曲谱定制到音符数据里面,然后才能按照一定的节拍从中读出曲谱.由于所选曲子中不含高音,转换关系如表4
13、-1).表4-1音符与中数据转换关系低音ROM中十进制表示ROM中十六进制表示中音ROM中十进制表示ROM中十六进制表示110118082202290933033100A44044110B55055120C66066130D77077140E在下定制的图4-1模块仿真波形图波形分析: 此乐谱发生器模块的功能是输出存储在中的各个音符数据,由上面的仿真波形图可看到生日快乐乐曲中的第一个音符为3即为00011此音在逻辑中停留了4个时钟,那么相应随着程序中的地址计数器按4Hz的时钟频率作加法计数时,即随地址递增时,将从音符数据中将连续取出4个音符00011,乐曲中的第二个音符为5即为00101此音在逻
14、辑中停留了3个时钟,相应地,将从音符数据ROM中将连续取出3个音符00101等其它状态时,仿真波形图证明了模块的功能.4.2.2音符数据地址发生器模块 图4-2元件符号端口说明: CLK 4HZ端口:作为节拍脉冲信号输入端口, RST端口:作为从头开始播放歌曲脉冲信号输入端口, SEL端口:作为播放第二首歌脉冲信号输入端口, 4.0端口:作为音符数据地址的输出端口, 中设置了一个8位二进制计数器(计数最大值138),作为音符数据的地址发生器.随着中的计数器按照4HZ的时钟速率作加法计数时,每读一个数据,音符持续时间为0.25秒,如音符数据中的中音3,为一拍,持续时间1秒,所以,音符数据中需要重
15、复写四次地址0A,随着4HZ时钟速率读取地址递增,音符数据中的音符数据将通过模块输向模块.音符数据地址发生器模块的仿真波形如(图4-3)所示:图4-3音符数据地址发生器模块仿真波形图4.2.3预置数查表电路电路模块图4-4生成元件符号端口说明: INDEX4.0端口:作为上一级音符数据地址的输入端, CODE4.0端口:作为音符数据简谱码的输出显示端, HIGH端口:作为音符数据简谱码高8度的输出显示端, TONE10.0端口:作为音符数据分频预置数的输出端. 音符的持续时间须根据乐曲的速度及每个音符的节拍数来确定,(图4-4)中模块的功能首先是为提供决定音符发音的分频预置数,而此数在输入口停
16、留时间即为此音符的节拍值.模块是乐曲简谱码对应的分频预置数查表电路,其中设置了生日快乐乐曲全部音符所对应的分频预置数,共9个,每一个音符的停留时间由音乐节拍和音调发生器模块的CLK输入频率决定,在此时为4HZ.每一个计数值停留时间为0.25秒,恰为当全音符为1秒时,四四拍的4 分音符持续时间.这9个值的输出由对应于的4位输入值Index3.0确定,而Index3.0最多有16种选择.输向中Index3.0的值 ToneIndex3.0的输出值与持续的时间由模块决定.表4-2 各音阶对应的分频预置数关系表音符名频 率(Hz)分频系数计数初值音符名频 率(Hz)分频系数计数初值休止符3750000
17、2047中音4796.1784681579低音1294.3491274773中音5882.3534251622低音2330.3961135912中音6989.4463791668低音3370.9210111036中音71136.3633301717低音4386.5989701077高音11175.5493191728低音5394.7379501197高音21353.7902771770低音6495.3767571290高音31512.0972481799低音7555.566751372高音41609.4422331814中音1588.6976371410高音51802.8842081839中音
18、2638.845871480高音62027.0271851862中音3742.5745051542高音72272.7271651882音符数据地址发生器模块的仿真波形如(图3.5)所示:图4-5 的仿真波形图波形分析:模块的功能是输出各个音符所对应的分频预置数,即当index是00000,tone输出为2047,即休止符的分频预置数,当index是00101时, tone输出为1197即低音5的分频预置数,当index是01010时, tone输出为1542即高音1的分频预置数等等其它状态时,tone分别输出相应音符的10分频预置数,仿真波形图证明了程序实现了模块的功能.4.2.4发声频率产生
19、模块图4-6生成元件符号端口说明: CLK12MHZ端口:作为发音频率初始信号输入端口, TONE10.0端口:作为音符数据分频预置数的输入端, SPKS端口:作为乐曲的声音输出端口. 这是乐曲演奏电路最重要的模块,由它产生乐曲发音所需要的对应频率.此模块的核心是一个可预置数控分频器,下面是可预置数控分频器的原理介绍: 它是由一个初值可变的加法计数器组成.为了得到合适的发音频率,在进行预置计数分频之前需要将本文选择的12MHZ初始频率信号进行十六分频,采用四位加法计数方式分频,当输入一个脉冲信号,计数器做一次加法计数,此时输入信号脉宽展宽一倍(即进行一次二分频),十六分频后得到0.75MHZ输
20、入频率.由于数控分频器输出的信号是脉宽很窄的信号,为了有利于驱动扬声器发音,需要加一个D触发器以均衡占空比,但这样一来,此时频率变为原来的二分之一即0.375MHZ.可预置计数分频器就是将0.375MHZ按照各音符发音所需要的频率值进行预置数分频.这里计数器设为11位(Tone10.0),模为2047(预置数可由预置数查表电路模块查得).若取音符3发音频率为659HZ,需要将0.375MHZ进行约569次分频才能得到此频率.预置数即可用公式模分频系数预置数Tone10.0算出,此时为20475691478(换成11位二进制计数为10111000110).表4-3生日快乐各音阶对应的分频预置数关
21、系音符分频预置数二进制码音符分频预置数二进制码中音1132910100110001中音5156811000100000中音2140810110000000中音6162011001010100中音3147810111000110低音5108710000111111中音4151010111100110低音6119410010101010发声频率产生模块的仿真波形如(图4-7)所示:图4-7 的仿真波形图波形分析:音乐符数控分频此模块的功能是根据初始值Tone的值,对输入时钟信号ClK的频率进行分频,得到想要的音符的发声频率其时钟(Clk)端输入的是在十六进制模块里对12MHz的信号进行16分频得到
22、的750KHz,750KHz的信号根据分频预置数模块中所提供的计数初值,分别得出相应音符频率的两倍值.在分频预置数模块中若取 tone10.0=912,将发出音符为低音2的信号频率的发声频率等等其它状态,因此这个程序实现了模块的功能.4.2.5简易电子琴功能模块此模块完成简易电子琴的设计,实现按键输入音符,发出与之相应声音.其原理与预先定制的乐曲播放原理相似,同样需要一个可预置数控分频器,一个可预置查表电路,不过,为了体现程序设计的优越性,此模块,在做将数控分频器与可预置查表电路合二为一,在同一个功能模块下实现,使原本复杂的程序设计更加简单化.为了产生与表4-3音符对应的频率信号,在此还必须用
23、到有源时钟Clock,且把它当作乐曲的基频,而所有不同的频率信号都从这一基频分频而取得,本文选取的是12MHz时钟,中音1(对应的频率值为523.3Hz)的分频系数应改为:12106/523.32=0x2cc9,这样只需对系统时钟进行0x2cc9 次分频即可得所要的中音1.至于其他音符,同样可由上式求出对应的分频系数,这样利用程序可以很轻松地得到相应的乐声.4.2.6顶层电路据各个模块产生的元件符号,连接组成乐曲播放电路顶层文件,其顶层电路分为三个模块,音符数据地址发生器模块,预置数查表电路电路模块,发声频率产生模块,顶层电路组成图如图4-8所示.图4-8 顶层电路组成图4.3电路测试 将当前
24、工程文件中所生成的文件通过计算机下载到实验箱中, 验证此设计是否符合要求.先通过开发工具对各个模块的源程序及顶层电路进行编译、逻辑综合,完成电路的纠错、验证、仿真等各种测试工作.再对顶层文件进行编译,配置下载电缆, 选择下载模式, 进行下载验证操作.将设计的顶层电路组成图文件内容下载到对应的配置芯片中,外接扬声器,系统成功实现了生日快乐的播放,能自动从头开始循环播放,也可随时起停、整体复位、按键选择播放方式、循环演奏以及发光管二极管动态显示播放的音符和高8度音调.(引脚锁定的对应关系如表4-4所示),经实际电路测试验证,达到了设计的要求.在 软件中进行基于的数字钟电路的设计过程, 真正实现了硬
25、件设计的软件化, 展示了使用 技术进行电子电路设计的特点, 是进行现代电子电路设计的一种更可取的方法.表4-4实验箱主板与下载板元件的连接封装关系表器件名称信号名端口名EPF10K10器件名称信号名端口名EPF10K10输出发光管LED1CODE427拨位开关KD1RST54输出发光管LED2CODE328拨位开关KD2SEL58输出发光管LED3CODE229输出发光管LED8HIGH38输出发光管LED4CODE130全局时钟1P2.4CLK4HZ1输出发光管LED5CODE035全局时钟2P2.5CLK12MHZ43喇叭SPEAKSPKOUT34.4结束语本文设计的音乐播放器实现了整体复
26、位、按键选择播放方式、循环演奏以及发光管显示乐谱的功能.数控分频器模块的仿真时一定要处理好时序问题,音调发生器的程序中通过时钟计数来决定音符的输出,会加大编程的繁杂度,这时一个很好的解决办法就是把将要演奏的乐谱存放在人为开辟的存储空间里,这样只需要在相应地址中读出音符即可.第五章 心得体会 通过本次论文设计,让我学会了利用软件绘制原理图,硬件描述语言的编写程序,仿真等具体应用.并能根据仿真结果分析设计的存在的问题和缺陷从而进行程序的调试和完善.同时了解了数控分频器的工作原理和功能作用,并会了利用模块制作文件的方法,也更深一层地懂得了顶层文件通过例化语句与其他模块结合的好处,对实验箱的操作也有了
27、进一步的了解,熟悉掌握了的文本编程设计方法和仿真波形的编辑. 在设计电路中,往往是先仿真后连接实物图但有时候仿真和电路连接并不是完全一致的例如在对具体模块的仿真的过程中往往没有考虑到整体设计的层面以及与上下模块接口的设计.再加上器件对信号 的延时等问题实际下载硬件电路上后会出现一系列的问题.相信随着电子技术的发展数字钟的功能会更加多样化满足人们的各种需要.设计过程也将变得相对简单容易修改.同时特别感谢谷雷老师在软件绘制上的指导和对论文规范修改提出的宝贵意见.参考文献潘松,黄继业编著,技术实用教程.科学出版社,2007.12.王永维.一种基于的数字秒表设计方法.电子元器件应用,2012.李岩,黄夫海,基于FPGA的MIDI音乐发生器设计,2010刑建平,曾繁泰.VHDL程序设计教程.3版.北京:清华大学出版社,2005:45-46纪欣然,丁一,梁致源.基于的多功能数字钟设计.电子设计工 程,2012:177-179.罗杰.与数字设计基础.武汉:华中科技大学出版 社,2008:188-196.童建华音响设备原理与维修M北京:电子工业出版社,200515