FPGA设计-quartus《万水千山总是情》歌曲播放器

上传人:jun****875 文档编号:17804715 上传时间:2020-12-06 格式:DOC 页数:5 大小:205.41KB
返回 下载 相关 举报
FPGA设计-quartus《万水千山总是情》歌曲播放器_第1页
第1页 / 共5页
FPGA设计-quartus《万水千山总是情》歌曲播放器_第2页
第2页 / 共5页
FPGA设计-quartus《万水千山总是情》歌曲播放器_第3页
第3页 / 共5页
点击查看更多>>
资源描述
乐曲演奏系统设计1.1 系统原理传统数字逻辑设计方法相比,本设计借助于功能强大的EDA工具和硬件描述语言来完成,如果只以纯硬件的方法完成乐曲演奏电路的设计,将是难以实现的。本设计采用了万水千山总是情(图3-1)的一部分来曲子来完成。为了便于理解,首先介绍一下硬件电路的发声原理。我们知道,声音的频谱范围约在几十到几千赫兹,若能利用程序来控制FPGA某个引脚输出一定频率的矩形波,接上扬声器就能发出相应频率的声音。而乐曲中的每一音符对应着一个确定的频率,因此,要想FPGA发出不用音符的音调,实际上只要控制它输出相应音符的频率即可(音符和频率的关系见表3-1)。乐曲都是由一连串的音符组成,因此按照乐曲的乐谱依次输出这些音符所对应的频率,就可以在扬声器上连续地发出各个音符的音调。而要准确地演奏出一首乐曲,仅仅让扬声器能够发声是不够的,还必须准确地控制乐曲的节奏,即每个音符的持续时间。由此可见,乐曲中每个音符的发音频率及其持续的时间是乐曲能够连续演奏的两个关键因素。而简易电子琴,工作原理与乐曲演奏一样,只是将固定预置乐曲变成了手动按键输入,节拍时间取决于按键的停留时间,如果合适,同样能播放出完整的歌曲来。图3-1万水千山总是情曲谱1.1.1 音调的控制频率的高低决定了音调的高低。音乐的十二平均率规定:每两个八度音(如简谱中的中音1和高音1)之间的频率相差一倍。在两个八度音之间又分为十二个半音。另外,音名A(简谱中的低音6)的频率为440Hz,音名B到C之间、E到F之间为半音,其余为全音。由此可以计算出简谱中从低音1到高音1之间每个音名对应的频率,所有不同频率的信号都是从同一个基准频率分频得到的。由于音阶频率多为非整数,而分频系数又不能为小数,因此必须将计算得到的分频数四舍五入取整。若基准频率过低,则由于分频比太小,四舍五入取整后的误差较大;若基准频率过高,虽然误差较小,但分频数将变大。实际的设计应综合考虑这两方面的因素,在尽量减小频率误差的前提下取合适的基准频率。因此,要想FPGA发出不同音符的音调,实际上只要控制它输出相应音符的频率即可。综合考虑各因素,本文中选取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.51.1.2 音长的控制音符的持续时间须根据乐曲的速度及每个音符的节拍数来确定。因此,在想控制音符的音长,就必须知道乐曲的速度和每个音符所对应的节拍数,在这个设计中所演奏的乐曲的最短的音符为四分音符,如果将全音符的持续时间设为1s的话,那么一拍所应该持续的时间为0.25秒,则只需要再提供一个4HZ的时钟频率即可产生四分音符的时长。要想让系统知道现在应该演奏哪个音符,而这个音符持续的时间应该是多少,就必须编写乐曲文件,在乐曲文件中音符是按地址存放的,当系统工作时就按4Hz的频率依次读取简谱,当系统读到某个音符的简谱时就对应发这个音符的音调,持续时间为0.25秒,而如果在曲谱文件中这个音符为三拍音长,那又该如何控制呢?其实只要将该音符连续书写三遍,这时系统读乐曲文件的时候就会连续读到三次,也就会发三个0.25秒的音长,这时我们听上去就会持续了三拍的时间,通过这样一个简单的操作就可以控制音乐的音长了。1.2 系统结构本系统主要由四个功能模块组成:NOTETABS.VHD,TONETABA.VHD和 SPEAKER.VHD。第一部分NOTETABS,地址发生器,实现按节拍读乐谱的功能;第二部分TONETABA,查表电路,为SPEAKER提供分频预置数,实现乐曲译码输出CODE3:0;第三部分SPEAKERA,产生发音频率,实现乐曲播放;第四部分ELECLOCK实现简易电子琴功能。系统结构图如(图3-2),该系统有三个输入,五个输出端口。三输入端口分别是:CLK 4HZ端口,作为节拍脉冲信号输入端口;CLK 12MHZ端口,作为发音频率初始信号输入端口;KEYIN输入端口,作为简易电子琴音符输入端口。五输出端口分别是:CODE输出端口,作为音符简码输出LED显示端口;HIGH输出端口,作为音符高8度指示端口;SPKS输出端口,作为万水千山总是情乐曲的声音输出端口;BUZZOUT输出端口,作为简易电子琴声音输出端口;LEDOUT输出端口,作为简易电子琴输入音符显示端口。图3-2系统功能模块组成图1.3 各模块分析与设计1.3.1 定制万水千山总是情音符数据ROM为了实现乐曲的播放,首先需要将曲谱定制到音符数据ROM里面,然后才能按照一定的节拍从ROM中读出曲谱。由于所选曲子中不含高音,我们转换关系如(表3-2):表3-2音符与ROM中数据转换关系低音ROM中十进制表示ROM中十六进制表示中音ROM中十进制表示ROM中十六进制表示110118082202290933033100A44044110B55055120C66066130D77077140E1.3.2 音符数据地址发生器模块NOTETABSNOTETABS中设置了一个8位二进制计数器(计数最大值138),作为音符数据的地址发生器。随着NOTETABS中的计数器按照4HZ的时钟速率作加法计数时,每读一个数据,音符持续时间为0.25秒,如音符数据中的中音3,为一拍,持续时间1秒,所以,音符数据ROM中需要重复写四次地址0A,随着4HZ时钟速率读取地址递增,音符数据ROM中的音符数据将通过模块NOTETABS中ToneIndex3.0端口输向TONETABA模块。1.3.3 预置数查表电路电路模块TONETABA音符的持续时间须根据乐曲的速度及每个音符的节拍数来确定,(图3-2)中模块 TONETABA的功能首先是为SPEAKERA提供决定音符发音的分频预置数,而此数在SPEAKERA输入口停留时间即为此音符的节拍值。模块TONETABA是乐曲简谱码对应的分频预置数查表电路,其中设置了万水千山总是情乐曲全部音符所对应的分频预置数,共9个,每一个音符的停留时间由音乐节拍和音调发生器模块TONETABS的CLK输入频率决定,在此时为4HZ。每一个计数值停留时间为0.25秒,恰为当全音符为1秒时,四四拍的4 分音符持续时间。这9个值的输出由对应于TONETABA的4位输入值Index3.0确定,而Index3.0最多有16种选择。输向TONETABA中Index3.0的值 ToneIndex3.0的输出值与持续的时间由模块NOTETABAS决定。1.3.4 发声频率产生模块SPEAKERA这是乐曲演奏电路最重要的模块,由它产生乐曲发音所需要的对应频率。此模块的核心是一个可预置数控分频器,下面是可预置数控分频器的原理介绍:它是由一个初值可变的加法计数器组成。为了得到合适的发音频率,在进行预置计数分频之前需要将本文选择的12MHZ初始频率信号进行十六分频,采用四位加法计数方式分频,当输入一个脉冲信号,计数器做一次加法计数,此时输入信号脉宽展宽一倍(即进行一次二分频),十六分频后得到0.75MHZ输入频率。由于数控分频器输出的信号是脉宽很窄的信号,为了有利于驱动扬声器发音,需要加一个D触发器以均衡占空比,但这样一来,此时频率变为原来的二分之一即0.375MHZ。可预置计数分频器就是将0.375MHZ按照各音符发音所需要的频率值进行预置数分频。这里计数器设为11位(Tone10.0),模为2047(预置数可由预置数查表电路模块TONETABA查得)。若取音符3发音频率为659HZ,需要将0.375MHZ进行约569次分频才能得到此频率。预置数即可用公式“模分频系数预置数Tone10.0”算出,此时为“20475691478(换成11位二进制计数为10111000110)”。表3-3万水千山总是情各音阶对应的分频预置数关系音符分频预置数二进制码音符分频预置数二进制码中音1132910100110001中音5156811000100000中音2140810110000000中音6162011001010100中音3147810111000110低音5108710000111111中音4151010111100110低音6119410010101010
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 大学资料


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!