简易电子琴设计-可编程逻辑设计实践课程报告.doc
《简易电子琴设计-可编程逻辑设计实践课程报告.doc》由会员分享,可在线阅读,更多相关《简易电子琴设计-可编程逻辑设计实践课程报告.doc(24页珍藏版)》请在沃文网上搜索。
1、基于FPGA的简易电子琴设计报告3一、设计简介3二、方案论述41)、基本乐理知识:42)、模块方案:41、数控分频部分:4各音阶频率对应的分频值以及初始化52、音乐节拍产生器:53、键盘输入及译码模块64、音量控制模块:75、数码管显示模块:8三、总体结构框图:8四、单元模块设计81、键盘输入译码模块ToneData82、播放速度控制模块(包括暂停功能):103、自动演奏模块114、分频器模块(Speaker):145)、数码管显示译码模块156)、数码管动态扫描模块167、音量调节18五、系统测试20六、设计总结23基于FPGA的简易电子琴设计报告一、设计简介本次的课程设计是围绕着可编程逻辑
2、器件进行的,可编程器件强大的并行性能使得其能轻易实现许多顺序执行程序的功能,并且效率高得多,但由顺序执行的思想转化为并行的思维方式,并不是那么容易的。通过这次课程设计熟悉了FPGA设计的思路与方法,为将来的进一步发展奠定了基础。本次选择电子琴为课题,并不仅仅因为其较为简单,而是基于个人对于音频等多媒体信息处理的兴趣,希望通过此次课程设计收获些相关的知识。本次课设设计的电子琴主要实现了以下功能:1、 手动演奏功能。共用到8个按键,其中1个为shift键,用于切换不同组的音符。Shift置零时,其余七个按键为中音Do至Xi。Shift置高时,其余七个按键为低音的So La Xi和高音的Do Re
3、Mi Fa。2、 自动演奏功能。内部可识别21个音符,rom容量为512位,字宽为5位(031)。其中用0表示休止符。17表示低音DoXi,1117表示中音DoXi,2131用于表示高音DoXi。其余未使用,用于日后扩展功能。内置两首歌曲,一首占256个rom空间。3、由song键选择歌曲(高电平为歌曲0,低电平为歌曲1)。 由auto键选择手动演奏模式或自动播放模式(高电平为自动播放模式,低电平为手动演奏模式)。 由back键控制前进或者倒退播放,D1,D0键控制播放速度。Back与D1,D0按键配合可以构成快进快退,暂停播放功能。功能如下:backD1D0功能*11暂停000正常速播放00
4、11.5倍速播放0102倍速播放100正常速倒退1011.5倍速快退1102倍速倒退4、 音量调整功能。可实现音量的渐变,由于按键有限,设置了8级音量,由Volume2Volume0按键控制,三个按键为111时音量最大,三个按键为000时为静音模式。此模块用了脉冲调制与DA转换两种方式实现。5、 数码管动态扫描显示音符音高音量。二、方案论述1)、基本乐理知识:由于组成乐曲的每个音符的频率值(音调)及其持续时间(音长)是乐曲演奏的基本数据,因此需要控制输出到扬声器的激励信号的频率高低和该频率持续的时间。频率的高低决定了音调的高低,而乐曲的简谱与各音名的频率对应关系如下表所示:所有不同频率的信号都
5、是从同一基准频率分频而来的。 由于音节频率多为非整数, 而分频系数又不能为小数,故必须计算得到的分频系数进行四舍五入取整, 并且其基准频率和分频系数应综合加以选择, 从而保证音乐不会走调。 2)、模块方案:1、数控分频部分:由乐理知识可知,对电子琴声音的操作即对音乐频率以及音乐持续时间的操作。整体采用一个基准频率,基准频率经各个分频器产生的频率不应与简谱中各个音调的频率差别太大,基频太低则误差太大,基频太高则分频器过于复杂,因此因综合各方面考虑。由于简谱中最高音不超过2k,取所有音的最小公倍数便可。但人耳的精度,故只要保证各音名的相对频率不变即可。由可得各个音色的分频系数。采用N位的分频器的话
6、,则初始化时计数器的值应为:-1本实验采用12M时钟频率,预先进过16分频,为减少偶次谐波,展宽脉冲,在扬声器之前要进过一个2分频电路,故可得下表:各音阶频率对应的分频值以及初始化(12M,预16分频,再经2分频展宽)音名频率初始值音名频率初始值音名频率初始值低音1261.36612 中音1532.251342 高音11046.51689 低音2293.67770 中音2587.331409 高音21174.661728 低音3329.63909 中音3659.251478 高音31318.511763 低音4349.23973 中音4698.461510 高音41396.921779 低音5
7、391.991090 中音5783.991569 高音51567.981808 低音64401195 中音68801621 高音617601834 低音7493.881288 中音7987.761667 高音71975.521857 注:对于音乐中的休止符,其分频系数设为0,初始值设为2N-1即可(此处为2047)。音量调整12M CLK计数器初始值数控分频电路2、音乐节拍产生器:在音乐中,时间被分成均等的基本单位,每个单位叫做一个“拍子”或 称一拍。拍子的时值是以音符的时值来表示的,一拍的时值可以是四分音符(即以四分音符为一拍),也可以是二分音符(以二分音符为一拍)或八分音符(以八分音符为一
8、拍)。故设置一个4Hz的时钟,每一次计数停留的时间为0.25s,即最小节拍。并经一个二进制计数器进行计数,将计数器的值作为ROM的地址进行寻址,这样便可以读出储存在ROM中的乐谱了。当要实现快进、快退、播放、暂停功能时:设置两个播放速度控制键,调整播放的速度,实现快进,快退中“快”的功能。设置一个正序/逆序播放按键,正序时地址递增,实现“进”的功能,逆序时地址递减,实现“退”的功能。这两组按键配合即可实现快进,快退,暂停,播放功能。因为要求有自动演奏功能和键盘弹奏功能,所以设置一个开关auto对其模式进行选择。考虑到总线的抢占问题,所以要在合适的时候输出高阻态,让出总线控制权。自动播放键节拍频
9、率输入播放控制按键由播放控制按键决定分频比,正常播放时为4Hz,内含地址产生器和储存音乐的ROM各个音调对应的计数器初值由自动播放键控制使能,当自动播放键按下时,正常输出,当未按下时,输出高阻态。3、键盘输入及译码模块此模块实际为一个查表模块,对于不同的按键输入,从表中读取相应的分频值及计数器初始化值,由节拍发生器决定其停留时间,改变节拍可改变演奏音符延时长短,将其输出给数控分频器,即可得到相应的声音。节拍输入键盘按键根据键盘信号查表输出各音调初始值各个音调对应的计数器初值自动播放键由自动播放键控制使能,当自动播放键按下时,输出高阻态,当未按下时,正常输出。节拍选择4、音量控制模块:方案一:进
10、过数控分频模块输出的是占空比为50%的脉冲信号,可直接接入麦克风便可以了。为了实现音量调控,可将输出信号与以高频信号相乘,改变其占空比,占空比改变之后,输出功率也随之改变,响度也随之改变。负面影响是会加入一个高次的载波。所以载波频率不能太低(20kHz),否则喇叭输出会有噪声。改变高频信号的占空比即改变了音频信号的占空比,从而改变音频信号的功率,实现声音的多级可调。示意图如下:音频输入音量调控键喇叭音量值输出音量调整模块,通过高频信号与音频信号相乘从而改变其占空比方案二:通过DA0809进行数模转换,将输出的值转为模拟量输出,同样也可得到调节音量的效果。5、数码管显示模块:可从计数器的初始值逆
11、推得到相对应的音色音高,从音量控制模块获得相关的音量信息。数码管以动态显示的方式输出相应的信息,在极短的时间片段中只点亮一个数码管。计数器初值音量值输入数码管译码及动态显示音符音高音量三、总体结构框图:分频输出模块自动播放控制手动播放控制按键输入音量调整数码管显示喇叭 系统分为输入部分,主控部分,音量调整部分和数码管显示部分。主控部分为核心,同时也是最花时间的部分,其包括模式选择,总线分配,系统编码译码,分频控制等部分,是整个电子琴的心脏,因此此模块的实现至关重要。各模块功能已在前文中具体阐述,后文将阐述各模块的具体实现。四、单元模块设计1、键盘输入译码模块ToneDatalibrary ie
12、ee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;USE IEEE.STD_LOGIC_ARITH.ALL;-为增加易读性,用到了conv_std_logic_vector函数ENTITY ToneData IS PORT( key_in: in std_logic_vector(7 downto 0); code : out std_logic_vector(3 downto 0); auto : std_logic; Tone : out std_logic_vector(10 downto 0);end enti
13、ty;ARCHITECTURE one OF ToneData IS beginprocess(key_in) begin if auto = 0 then-模式判断 case key_in is-键盘判断 when 00000000|10000000=Tone=conv_std_logic_vector(2047,11);codeTone=conv_std_logic_vector(1342,11);codeTone=conv_std_logic_vector(1409,11);codeTone=conv_std_logic_vector(1478,11);codeTone=conv_std
14、_logic_vector(1510,11);codeTone=conv_std_logic_vector(1569,11);codeTone=conv_std_logic_vector(1621,11);codeTone=conv_std_logic_vector(1667,11);codeTone=conv_std_logic_vector(1090,11);codeTone=conv_std_logic_vector(1195,11);codeTone=conv_std_logic_vector(1288,11);codeTone=conv_std_logic_vector(1689,1
15、1);codeTone=conv_std_logic_vector(1728,11);codeTone=conv_std_logic_vector(1763,11);codeTone=conv_std_logic_vector(1779,11);code Tone=11111111111; end case; else Tone = ZZZZZZZZZZZ;-高阻态输出 end if;end process; end one;说明:这是一个简单的译码模块,通过选择key_in的值确定键盘的输入,从而根据预先算好的分频器的初始值赋予Tone,作为下一级模块的输入,同时注意到总线的占用问题,所以当
16、未选择手动演奏模块时(auto为1时),输出高阻态,让出总线控制权。仿真输出结果:可见对于不同的输入,此模块都有正确的译码输出。2、播放速度控制模块(包括暂停功能):library ieee;-实际即是一个2位的数控分频器use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity DVF is port ( clk : in std_logic; d : in std_logic_vector(1 downto 0);-输入控制端 fout : out std_logic );-D触发器输出脉冲end entity;ar
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
20 积分
下载 | 加入VIP,下载更划算! |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 简易 电子琴 设计 可编程 逻辑设计 实践 课程 报告