PLD技术的音乐发生器设计

PLD技术的音乐发生器设计[20200128193200]
摘 要
本次设计在EDA开发平台QUARTUS II 6.0上利用VHDL语言设计数控分频器电路,利用数控分频的原理设计音乐硬件演奏电路,并定制LPM-ROM存储音乐数据,以“梁祝”和“月亮代表我的心”两首乐曲为例,将音乐数据存储到LPM-ROM,就达到了以纯硬件的手段来实现乐曲的演奏效果。只要修改LPM-ROM所存储的音乐数据,将其换成其他乐曲的音乐数据,再重新定制LPM-ROM,连接到程序中就可以实现其它乐曲的演奏。
本设计采用FPGA目标芯片型号为Altera公司的Cyclone系列中的EPIC12Q240C8。芯片配置成功后即可进行硬件测试:选择实验电路结构图,发音输出接SPEAKER,当乐曲一遍演奏完成后,乐曲发生器能自动从头开始循环演奏。
 *查看完整论文请+Q: 351916072 
关键字:WIDTH设置ROM的数据宽度;DEPTH设置ROM数据的深度,即4位数据的数量,文件中设置的256等效于8位地址线宽度;ADDRESS-RADIX=DEC和DATA-RADIX=DEC表示设置地址和数据的表达式格式都是十进制;地址/数据表以CONTENTBEGIN开始,以END结束;其中的地址/数据表达方式是冒号左边写ROM地址值,冒号右边写对应此地址放置的十进制数据,如469,表示46为地址,9为该地址中的数据。这样每读到一个地址,即可输出其相应的数据。文件编辑好后,保存时取文件名为“singer.mif”,存盘的路径为“gmusicsinger”。
目   录
摘 要    I
1 系统设计总述    1
1.1 设计要求    1
1.2 系统组成    1
2 总体程序设计    4
2.1 顶层模块设计流程图    4
2.2 顶层电路VHDL程序设计    4
3 单元模块程序设计    6
3.1 音乐节拍和音调发生器模块    6
3.2 音乐谱对应分频预置数查表电路模块    7
3.3 音乐谱对应分频预置数查表电路模块    9
3.4 乐曲演奏音符数据文件(《妈妈的吻》)    11
3.5 定制音符数据的ROM文件    12
4 VHDL音乐硬件演奏电路系统仿真与调试    15
4.1 NoteTabs音乐节拍和音调发生器模块的仿真    15
4.2 ToneTaba分频预置数查表模块的仿真    15
4.3 Speakera音乐符数控分频模块的仿真    16
4.4 扩大此音乐硬件演奏电路的通用性    18
5 心得体会    20
参考文献    21
1.1 设计要求
这是一种运用纯硬件实现乐曲播放的电路,比运用微处理器实现乐曲播放更加复杂。它运用了强大功能的EDA工具——开放设计试验箱和硬件描述语言VHDL。
(1)顺序播放乐曲功能:当电路开始工作时,如果存储器中有多首乐曲,那么演奏电路将从头到尾顺序播放这些乐曲。
(2)循环播放乐曲功能:当演奏完后一首乐曲时,将自动返回到第一首歌曲开始播放,反复不止,直到关闭电源电路停止工作为止。
(3)乐曲简谱显示功能:当演奏电路播放乐曲时,能够将当前播放的音符通过一列发光二极管以二进制的形式予以显示。
(4)乐曲高音显示功能:如果电路正在播放高音音符,那么将有一个发光二极管点亮来显示。
(5)音量大小可调功能:运用EDA实验箱上的数字功率放大器LM386N,对数控分频器输出的音频信号予以处理,输出大小连续可调的音频信号到扬声器。
1.2 系统组成
(1)音乐硬件演奏电路基本原理
硬件电路的发声原理,声音的频谱范围约在几十到几千赫兹,若能利用程序来控制FPGA芯片某个引脚输出一定频率的矩形波,接上扬声器就能发出相应频率的声音。乐曲中的每一音符对应着一个确定的频率,要想FPGA发出不同音符的音调,实际上只要控制它输出相应音符的频率即可。乐曲都是由一连串的音符组成,因此按照乐曲的乐谱依次输出这些音符所对应的频,就可以在扬声器上连续地发出各个音符的音调。而要准确地演奏出一首乐曲,仅仅让扬声器能够发生是不够的,还必须准确地控制乐曲的节奏,即乐曲中每个音符的发生频率及其持续时间是乐曲能够连续演奏的两个关键因素。
(2)音符频率的获得
多个不同频率的信号可通过对某个基准频率进行分频器获得。由于各个音符的频率多为非整数,而分频系数又不能为小数,故必须将计算机得到的分频系数四舍五入取整。若基准频率过低,则分频系数过小,四舍五入取整后的误差较大。若基准频率过高,虽然可以减少频率的相对误差,但分频结构将变大。实际上应该综合考虑这两个方面的因素,在尽量减少误差的前提下,选取合适的基准频率。本设计中选取750KHz的基准频率。由于现有的高频时钟脉冲信号的频率为12MHz,故需先对其进行16分频,才能获得750KHz的基准频率。对基准频率分频后的输出信号是一些脉宽极窄的尖脉冲信号(占空比=1/分频系数)。为提高输出信号的驱动能力,以使扬声器有足够的功率发音,需要再通过一个分频器将原来的分频器的输出脉冲均衡为对称方波(占空比=1/2),但这时的频率将是原来的1/2。下表中各音符的分频系数就是从750KHz的基准频率二分频得到的375KHz频率基础上计算得到的。由于最大分频系数是1274,故分频器采用11位二进制计数器能满足要求,乐曲中的休止符,只要将分频系数设为0,即初始值=211-1=2047,此时扬声器不会发声。
(3)乐曲节奏的控制    
本设计中的梁祝和月亮代表我的心的乐曲,最小的节拍为1/4拍,若将1拍的时间定为1秒,则只需要提供一个4Hz的时钟频率即可产生1/4拍的时长(0.25秒),对于其它占用时间较长的节拍(必为1/4拍的整数倍)则只需要将该音符连续输出相应的次数即可。
计数时钟信号作为输出音符快慢的控制信号,时钟快时输出节拍速度就快,演奏的速度也就快,时钟慢时输出节拍的速度就慢,演奏的速度自然降低。
(4)乐谱发生器
本文将乐谱中的音符数据存储在LPM-ROM中,如“梁祝”乐曲中的第一个音符为“3”,此音在逻辑中停留了4个时钟节拍,即1秒的时间,相应地,音符“3”就要在LPM-ROM中连续的四个地址上都存储。当一个4Hz的时钟来时,相应地就从LPM-ROM中输出一个音符数据。
(5)音乐硬件演奏电路总体设计流程
当一个4Hz的时钟脉冲来到时,乐谱发生器模块输出一个音符数据给分频系数模块,分频系数模块输出此音符相应的分频系数,将分频系数送给数控分频器模块,当12MHz的时钟脉冲来到时,数控分频器就根据分频系数输出相应的频率(即此音符所对应的发生频率)给扬声器,扬声器就可发出对应音符的声音来.连续的4Hz的时钟脉冲就将乐谱发生器里所存储的音符数据一个接一个的送给了分频系数模块,再经过数控分频模块,最后扬声器一个接一个的发出音符数据所对应的声音来。曲子也就流畅的播放出来了,当乐曲一遍演奏完成后,乐曲发生器能自动从头开始循环演奏,按下SEL键时播放第二首歌,按下RST键时从头开始播放歌曲。
音乐硬件演奏电路主要是用VHDL语言来设计,并利用Quartus6.0软件工具来编译、测试和仿真,音乐硬件演奏电路设计总体设计方框图如下图所示

版权保护: 本文由 hbsrm.com编辑,转载请保留链接: www.hbsrm.com/jxgc/zdh/4593.html

好棒文