您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 基于FPGA简易乐器演奏器设计
课程设计说明书1乐曲演奏设计实验任务:采用VHDL来实现的简易乐曲演奏器。它能实现自动演奏已存歌曲。且要求实现如下功能:(1)演奏时可以通过按键选择是自动演奏,自动演奏则是演奏已存入的固定乐曲;(2)至少保存一首自动演奏的乐曲,且自动演奏的乐曲能重复播放;(3)进行自动演奏时,数码管上要同时能显示演奏乐曲的乐谱;(4)自动播放时,设置低速,中速,快速控制键,能实现乐曲不同速度的播放。1乐曲演奏电路原理声音的频谱范围约在几十到几千赫兹,若能利用程序来控制FPGA某个引脚输出一定频率的矩形波,接上扬声器就能发出相应频率的声音。乐曲中的每一音符对应着一个确定的频率,要想FPGA发出不同音符的音调,实际上只要控制它输出相应音符的频率即可。乐曲都是由一连串的音符组成,因此按照乐曲的乐谱依次输出这些音符所对应的频,就可以在扬声器上连续地发出各个音符的音调。而要准确地演奏出一首乐曲,仅仅让扬声器能够发生是不够的,还必须准确地控制乐曲的节奏,即乐曲中每个音符的发生频率及其持续时间是乐曲能够连续演奏的两个关键因素。当一个20MHz的时钟脉冲来到时,乐谱发生器模块输出一个音符数据给分频系数模块,分频系数模块输出此音符相应的分频系数,将分频系数送给数控分频器模块,当20MHz的时钟脉冲来到时,数控分频器就根据分频系数输出相应的频率(即此音符所对应的发生频率)给扬声器,扬声器就可发出对应音符的声音来.连续的4Hz的时钟脉冲就将乐谱发生器里所存储的音符数据一个接一个的送给了分频系数模块,再经过数控分频模块,最后扬声器一个接一个的发出音符数据所对应的声音来。曲子也就流畅的播放出来了。2整体设计思想根据设计要求,系统组成方框图3-1所示,它由乐曲选择模块、数码显示模块、蜂鸣器模块、模式选择模块组成。课程设计说明书23乐曲演奏电路模块3.1乐曲选择模块1乐曲选择模块在此模块中设置了一个9位二进制计数器((计数最大值为511),作为音符数据ROM的地址发生器。这个计数器的计数频率选为4Hz,即每一计数值的停留时间为0.25s,恰为当全音符设为1s时,四四拍的4分音符持续时间。同时为了实现对歌曲选择得控制以及对播放速度的要求,可以多分出几个频率,然后由控制开关来选择歌曲和播放频率。随着音调发生器模块中的计数器按不同的时钟速率作加法计数时,乐曲就开始连续自然地依据不同的速度演奏起来了。2乐曲选择模块的仿真图通过仿真图可以清楚的看到,时钟clk由0开始计数,每计一次数输出toneindex的值随之发生一定的变化,只不过根据乐谱的不同,输出的变化也不尽相同。由于选择开关的控制可以看出,在不同模式下播放的歌曲是不同的,实现了选歌的功能。3乐曲选择模块生成的逻辑符号图基准时钟20MHz模式选择选歌,控制FPGA时钟电路峰鸣器电路乐曲选择电路数码显示电路4Hz20MHz扬声器数码管图3-1乐曲演奏电路结构方框图图3-3乐曲选择模块逻辑符号图图3-2乐曲选择模块仿真图课程设计说明书33.2数码显示模块1数码显示模块该编码模块的作用为将输入的音符数据翻译为音乐产生模块的所需要的分频系数,并且显示音符的数字码型和高音阶,通过对照表各音名对应的分频系数值及初始值,根据输入得到初始值,从而得到分频系数以便进行分频,得到所需的频率。2音数码显示模块的仿真图在此程序中index为音乐节拍产生模块输出的音符数据,经过翻译后将tone输出到数控分频模块为其提供分频系数的初始值,code为数码管显示的字符数,high1为高音显示,当乐谱中有高音时,就会相应地以二进制的形式表现出来。3数码显示模块生成的逻辑符号图3.3模式选择模块1模式选择模块根据设计的要求,该简易乐曲演奏器能实现自动演奏乐曲的功能。与此同时,还需要一个整体复位信号rst来控制该演奏器是否工作,当rst为1时,停止演奏,为0时,可以演奏。2模式选择模块仿真图由仿真图可以看出,当rst为1时,输出为0,电路停止工作。图3-4数码显示模块仿真图图3-5数码显示生模块逻辑符号图课程设计说明书43模式选择模块生成的逻辑符号图3.4蜂鸣器模块1蜂鸣器模块该模块的clk端输入一个具有较高频率(本实验为20MHz)的信号,通过分频后由spks输出。由于直接从数控分频器中出来的输出信号是脉宽极窄的脉冲信号,为了便于驱动喇叭,需另加一个D触发器均衡其占空比,也即作二分频处理。speak对clk输入信号的分频比由11位预置数tone[10..0]决定。spks的输出频率将决定每一音符的音调,这样分频计数器的预置数tone[10..0]与spks的输出频率就有了对应关系。2蜂鸣器模块的仿真图图3-6模式选择模块仿真图图3-10蜂鸣器模块仿真图图3-7模式模块逻辑符号图课程设计说明书5在此仿真图中,输入clk是一个频率较大的时钟信号,输入tone代表着某个音符的分频初始值,输出spks则代表将输入clk先经过12次分频,再经过(预置数终值2048-tone)次分频,最终再进行二分频处理,而这个信号的频率就是我们需要演奏的音谱的频率,根据频率的不同,从而能通过喇叭听到不同的声音,实现音乐的播放。3蜂鸣器模块生成的逻辑符号图4顶层文件利用元件例化把各个子模块组合起来,进行编译、下载,从而实现整体功能。它将音调发生器模块、音调编码器模块、分频器模块、模式选择模块,手动输入模块及数控分频器模块连接起来。5硬件下载输入程序并且编译无误,并且仿真无误后,便进行引脚锁定及程序下载,在进行引脚锁定时必须对照引脚锁定图进行锁定。引脚锁定图如图3-13所示:CLK为20M时钟输入,RST为整体复位开关,CODE1为数码管显示,HIGH1为高音显示,SEL速度控制开关,SPKS为蜂鸣器输入。引脚锁定后下载到FPGA试验箱的EP3C40Q240C8芯片中,通过开关及按键的控制,试验箱的蜂鸣器就会根据选择演奏优美的音乐,经验证本次设计完全达到了预先的设计要求。图3-11蜂鸣器模块逻辑符号图图3-12顶层文件仿真图图3-13引脚锁定图课程设计说明书6硬件锁引脚图总结通过本次课程设计,深刻体会了VHDL设计的优势,通过强大的EDA工具和硬件描述语言使演奏电路很易实现。并且通过此次设计让我们把课本中的知识系统的联系起来,更加体会到模块式设计的方法所带来的方便和明了化。通过模块式的方法,可以将复杂的总程序分成几个模块各自分工执行,独立工作互不干扰。然后通过原理图将各个模块直接相连,或者用元件例化的方式,用VHDL语言进行描述,达到了统一化管理各个模块的作用。通过查找资料,与同学交流增强了我们自主学习的能力;了解到了声音音谱的发生规律,信号的频率与声音的关系,并且通过对基准频率的分频,来生成不同的声谱。从设计方面得知,在进行设计时,应首先对各方面的资料进行综合,在基本原理的范围内进行模块式的分解和综合,最后达到设计的需求。这次设计使我对quartusⅡ的运用更加灵活,熟悉了对该软件从工程建立到程序下载执行各个步骤的操作,对以前学习上的不足得到了补充。总之,这次设计让我们学到了很多知识,为我们以后的学习奠定了基础。在课设的过程当中,不知不觉中增添了对专业课的学习兴趣,感觉我们学的东西终于与实际真正得结合起来了,学习的知识不再感觉枯燥乏味。尤其是当自己设计的音乐播放器发出声音的时候,心中的喜悦与自豪油然而生。课程设计说明书7最后,感谢老师的辛勤指导和严格要求。真诚地说一声:老师,您辛苦了!还有帮助过我的同学,谢谢你们。附录全部程序如下:libraryieee;useieee.std_logic_1164.all;entityyuepuISport(clk:instd_logic;sel:instd_logic_vector(0to1);sel2:instd_logic_vector(0to1);toneindex:outintegerrange0TO15);endyuepu;architecturebhvofyuepuIStypeyinyue1isarray(0to369)ofintegerrange0to15;typeyinyue2isarray(0to498)ofintegerrange0to15;typeyinyue3isarray(0to198)ofintegerrange0to15;typeyinyue4isarray(0to159)ofintegerrange0to15;constantmemory1:yinyue1:=(12,12,13,13,1,1,1,1,1,1,5,5,3,3,3,3,3,3,2,2,3,3,3,3,3,3,3,3,3,3,3,3,12,12,13,13,1,1,1,1,1,1,5,5,2,2,2,2,2,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,3,3,5,5,6,6,6,6,6,6,6,6,6,6,6,6,3,3,5,5,1,1,1,1,1,1,3,3,2,2,14,14,13,13,13,13,0,0,2,2,2,2,3,3,2,2,2,2,14,14,13,13,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,1,1,1,1,1,1,6,6,1,1,1,1,1,1,1,1,1,1,1,1,3,3,15,15,7,7,7,7,7,7,6,6,7,7,7,7,7,7,7,7,7,7,7,7,6,6,3,3,2,2,2,2,2,2,2,2,3,3,7,7,7,7,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,15,15,15,15,15,15,6,6,15,15,15,15,15,15,15,15,15,15,15,15,3,3,15,15,7,7,7,7,7,7,6,6,7,7,7,7,7,7,7,7,7,7,7,7,6,6,3,3,2,2,2,2,3,3,5,5,5,5,5,5,5,5,0,0,2,2,2,2,13,13,1,1,1,1,1,1,1,1,1,1,1,1,5,5,6,6,1,1,1,1,1,1,1,1,1,1,1,1,6,6,3,3,2,2,2,2,2,2,3,3,5,5,5,课程设计说明书85,5,5,5,5,0,0,2,2,2,2,13,13,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0);--《牧羊曲》constantmemory2:yinyue2:=(12,12,13,13,1,1,1,1,1,1,1,1,1,1,1,1,13,13,12,12,1,1,1,1,1,1,2,2,1,1,1,1,13,13,1,1,2,2,2,2,2,2,2,2,2,2,2,2,1,13,13,2,2,2,2,2,2,3,3,2,2,2,2,3,3,5,5,6,6,5,5,5,5,5,5,6,6,6,6,5,5,3,3,2,2,3,3,2,2,1,1,13,13,13,13,12,12,13,13,12,12,13,13,1,1,1,1,1,1,1,1,1,1,1,1,13,13,12,12,1,1,1,1,1,1,2,2,1,1,1,1,13,13,1,1,2,2,2,2,2,2,2,2,2,2,2,2,1,13,13,2,2,2,2,2,2,3,3,2,2,2,2,3,3,5,5,6,6,5,5,5,5,5,5,6,6,6,6,5,5,3,3,2,2,3,3,2,2,1,1,13,13,13,13,12,12,13,13,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,5,5,6,6,6,6,6,6,6,6,6,6,6,6,15,15,6,6,5,5,5,5,5,5,6,6,5,5,5,5,3,3,2,2,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,1,1,1,1,1,1,1,1,1,1,1,1,15,15,6,6,5,5,5,5,5
本文标题:基于FPGA简易乐器演奏器设计
链接地址:https://www.777doc.com/doc-7348287 .html