欢迎来到三一文库! | 帮助中心 三一文库31doc.com 一个上传文档投稿赚钱的网站
三一文库
全部分类
  • 研究报告>
  • 工作总结>
  • 合同范本>
  • 心得体会>
  • 工作报告>
  • 党团相关>
  • 幼儿/小学教育>
  • 高等教育>
  • 经济/贸易/财会>
  • 建筑/环境>
  • 金融/证券>
  • 医学/心理学>
  • ImageVerifierCode 换一换
    首页 三一文库 > 资源分类 > DOC文档下载  

    基于FPGA的电子琴设计.doc

    • 资源ID:5094893       资源大小:143.54KB        全文页数:14页
    • 资源格式: DOC        下载积分:4
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录   微博登录  
    二维码
    微信扫一扫登录
    下载资源需要4
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    基于FPGA的电子琴设计.doc

    基于FPGA的电子琴设计摘要: 文中介绍了电子琴系统的整体设计,并基于超高速硬件描述语言VHDL在Xilinx公司的Spartan系列的2sc200PQ208-5芯片上编程实现.电子琴系统的设计包含四个模块,分别是控制输入电路、FPGA、显示电路和扬声器电路。其中FPGA模块的设计是整个电子琴系统设计的核心内容。四个模块的有机组合完成了电子琴自动演奏的功能。文中还详细介绍了FPGA功能模块的原理及其工作时序仿真图。本产品的特点是成本较低,性能稳定,精度高,有一定的开发价值。关键词: 现场可编程逻辑器件FPGA 超高速硬件描述语言VHDL 电子琴系统 自动演奏Design of Electronics_orgon system based on FPGAAbstract: It will introduce the integrate designelectronics_orgon system based on FPGA. The design will be achieved in the 2sc2005pq208 chipof Xilinx corporation with the VHDL(Very High-speed Description-Language) The design of Electronics_orgon System consist of 4 parts, they are control input circuit、FPGA、display circuit and speaker circuit. The program design of FPGA is the core of the system design. Four parts combined to achieve the automatic play electronics_orgon system. the article illuminates the detail of the basic law of FPGA module and its working timing characteristics. Since the most specialty of the product is its low cost、high precision, its worth developing.Keyword: FPGA VHDL Electronics_orgon system Automatic play 目 录第一章 整体设计方案 2 1.1 设计要求 2 1.2 整体设计原理 2 1.3 方案比较 3第二章 单元电路设计3 2.1 FPGA模块的原理 3 2.1.1 MHZ_generator模块的原理 3 2.1.2 NoteTabs模块的原理4 2.1.3 ToneTaba模块的原理 4 2.1.4 Speakera模块的原理 4 2.2 其他模块的原理简介 5第三章 软件设计 5第四章 系统测试 6第五章 结论 6附录 7参考文献 11第一章 整体设计方案1.1 设计要求音乐是一种享受,人们的生活中无时无刻不充满着音乐的气息,电子琴如今已成为一种时尚.设计要求:用户设计自己喜爱的乐曲输入电子琴,电子琴按照设定好的乐谱自动演奏.1.2 整体设计原理本设计主要为人们业余生活增添点乐趣.方案一:采用数字逻辑电路制作,用IC 拼凑焊接实现,这种电路很直观,简单方便。但应用数字逻辑电路制作的话,使用的器件较多,连接复杂,体积大,功耗大。电路中焊点和线路较多会,使成品的稳定度和精度大大降低。方案二: 采用现场可编程逻辑器件(FPGA)制作,利用EDA软件中的VHDL硬件描述语言编程进行控制,然后烧制实现.采用FPGA来设计的原理图如图1.1所示.它由控制输入电路、FPGA、显示电路和扬声器电路组成。控制输入电路显示电路FPGA扬声电路图1.1 采用FPGA设计的电子琴原理方框图 控制输入电路主要是为用户设计的,起到一个输入控制的作用.FPGA是现场可编程逻辑器件,也是本设计方案的核心内容,它是实现电子琴运作的主要控制模块.由设计者把编好的VHDL程序烧制到现场可编程逻辑器件FPGA中,然后通过控制输入电路把乐谱输入到FPGA,产生不同的频率驱动扬声器,发出不同的乐谱.同时也把发出的乐谱符号通过显示器输出.方案三: 单片机现在已经达到很成熟的阶段了,它的应用也十分广泛. 采用单片机来实现电子琴,它的原理方框图与用FPGA来实现的原理方框图类似,如图1.2所示.控制输入电路显示电路MCU(单片机)扬声器电路图1.2 采用单片机实现电子琴的原理方框图 图1.1和图1.2的基本原理都相同,唯一不同的是一个是用FPGA来制作一个是用单片机来实现.采用单片机来实现电子琴,主要的核心是单片机的设计.1.3 方案比较 对于电子琴的设计,三个方案均可以实现,但是第一个方案中采用的是数字逻辑电路来制作,该电路硬件所需的器材多,体积庞大,比较复杂,而且精度和稳定度都不是很高.第二个方案采用的是现场可编程逻辑器件来实现, 它的优点是所有电路集成在一块芯片上,此方案所需的外围电路简单,这样它的体积就减少了,同时还提高了系统的稳定度。还可以用Modelsim XE 5.3d软件进行仿真和调试等。设计人员可以充分利用VHDL硬件描述语言方便的编程,提高开发效率,缩短研发周期,降低研发成本;而且易于进行功能的扩展,实现方法灵活,调试方便,修改容易.方案三也有它的优点,但同时也存在缺点.它对设计者的要求比较高,设计者对软硬件必须十分熟悉.和方案二来比它的实验仿真没有方案二简单直观,调试也有一定的难度.在外界环境相同的条件下,方案三设计出来的产品精度和稳定度要比方案二稍微差一些.因此,电子琴的设计我们选择方案二来实现.第二章 单元电路设计2.1 FPGA的原理 FPGA的设计是整个系统的中心环节,具有举足清重的作用.它的实现主要是由设计者用VHDL硬件描述语言编程实现电子琴的功能,仿真调试成功之后,再烧到FPGA器件中去.这样作出来的成品插上电源,便可脱机运行.而FPGA模块的设计又重在VHDL语言的编程实现.用VHDL语言编写的程序总的顶层模块映射原理图如图2.1所示. 它是由分频器模块、Speakera模块、NoteTabs模块和ToneTaba模块组成。标准时钟频率经分频器分频得到一个12MHZ的频率和一个8HZ的频率,并分别输入Speakera模块和NoteTabs模块。从NoteTabs模块输出的是乐谱信号,该乐谱信号作为ToneTaba模块的敏感信号输入并对其进行控制。模块ToneTaba的输出Tone作为Speakera模块的输入,和12MHZ的频率共同作用与Speakera模块。同时ToneTaba模块还有两个输出,分别是code和high,两个都接外部的显示部分,只不过code显示的是乐谱,high显示的是该乐谱是高音还是低音。图2.1 顶层模块总映射原理图下面是顶层映射中各单元模块的介绍.2.1.1 MHZ_generator模块的原理 分频器的输入是一个标准时钟频率,输出是每秒12MHZ的频率和8HZ的频率。其内部实际是一个计数器,根据所需要的要求进行不同的分频设计。本程序中已知标准频率为32MHZ,要得到12MHZ和8HZ的频率,通过计算我们可以确定它的分频系数. MHZ_generator模块的工作时序仿真图(略),它的程序见附录。2.1.2 NoteTabs模块的原理 NoteTabs模块其实就是一个乐谱预置器,可设置电子琴演奏的乐谱.原理很简单即来一个脉冲输出一个已设置好的乐谱.假定预先设计的乐谱为3 3 3 5 5 5 6 2 1 1 3 3 3 3 3 3它的输出工作时序仿真图如图2.2所示,程序见附录.图2.2 NoteTabs模块的工作原理仿真图2.1.3 ToneTaba模块的原理 ToneTaba模块是一个音阶发生器,实质是译码电路,控制音调的预置数.乐谱信号是该模块的敏感信号, 输入的每一个乐谱都将被译成与之相对映的频率从Tone端口输出去控制Speakera模块,让Speakera模块发出不同的音调.ToneTaba模块在将乐谱译成相映的频率的同时会将乐谱的符号从codel输出到显示部分,并判断乐谱是高音还是低音,再从highl端口输出去显示.在ToneTaba模块的设计中tone的计算很重要,tone是根据产生该音阶频率所对应的分频比获得的.此值是通过查表和计算所到,查表我们可以知道每个乐谱符号的频率,然后计算出要得到该乐谱的频率所需的分频系数.例如音符1的发音,通过查表得它的频率是785HZ左右,我们要计算tone的值可由公式:音符频率=振荡频率/(16#7FF#-tone的值)振荡频率是经过分频之后得到的,在此是1MHZ,由公式可计算出tone的值为:773.为了进一步了解ToneTaba模块的工作原理,可假定一些参数进行仿真.设它的输入乐谱为: 3 3 3 3 5 5 5 2 1 1 3 12 15 3 则ToneTaba模块的工作时序仿真图如图2.3所示,程序见附录.图2.3 ToneTaba模块的工作时序仿真图2.1.4 Speakera模块的原理 模块Speakera中的主要电路是一个数控分频器,它由一个初值可预置的加法计数器和两个分频器构成.数控分频器的功能就是当输入端给定不同的输入时,将对输入的时钟信号有不同的分频比, Speakera模块中的数控分频器就是用计数值可并行预置的加法计数器设计完成的,方法是将计数溢出位与预置数加载输入信号相接即可.当模块Speakera由端口tone获得一个十进制数后,将以此值为计数器的预置数,对端口CLK12MHZ输入的频率进行分频,之后将输出再进行2分频,将脉冲展宽,以使扬声器有足够功率发音,最后由SPKOUT向扬声器输出发声. Speakera模块的工作时序仿真图如图2.4所示,程序见附录.注:为了能清晰的看到输入与输出的关系,第一次分频系数设的是2,第二次分频系数设的是5,第三次是2.图2.4 Speakera模块的工作时序仿真图2.2 其他外围电路的原理简介 控制输入电路是为用户输入乐谱所设计的,主要就是从键盘进行输入.宣示电路是用数码管显示器来实现,在FPGA中把要输出显示的数经过七段译码器进行译码,直接接至数码管显示器便可显示出数值.扬声器电路的设计也很简单,只需接一个扬声器就可以了,顶多在接一个电阻进行分压控制.第三章 软件设计我们在window98的平台上,用Xilinx公司生产的Xilinx4.2的软件进行VHDL硬件描述语言编程实现交通灯的功能,VHDL语言主要用来设计数字系统.用来进行系统测试的是清华同方股份有限公司生产的TPGFPGA TPG1AC0007实验箱,选用的是saprtan2系列的xc2s2005pq208芯片烧置.下面介绍基于EDA软件的FPGA开发流程(VHDL是EDA软件中的一部分):第一步:安装Xilinx4.2软件和modelsim XE 5.3d仿真软件.第二步:在Xilinx4.2软件进行程序设计,新建一个工程,用硬件描述语言编程来完成所设计的实物功能.第三步:综合和适配.综合过程是把软件设计的HDL描述与硬件结构挂钩,是文字描述与硬件实现的一座桥梁.综合就是将电路的高级语言(如行为描述)转换成低级的,可与FPGA的基本结构相映射的网表文件或程序.适配器也称结构综合器,它的功能是将由综合器产生的网表文件配置于指定的目标器件中,使之产生最终的下载文件.第四步:仿真.在编程下载前必须利用软件工具对结构综合器生成的结果进行模拟测试,就是所谓的仿真.有两种不同级别的仿真测试,分别是时序仿真和功能仿真.第五步:编程下载.把适配后生成的下载或配置文件,通过编程器向FPGA进行下载,以便进行硬件调试和验证.第六步:硬件测试.将含有载入了设计的FPGA的硬件系统进行统一测试,以便最终验证设计项目在目标系统上的实际工作情况,以排除错误,改进设计. 从FPGA(现场可编程门阵列)的实验箱上可以知道所设计的程序是否能实现我们所要的功能,最后制作电路板作出实物. 程序设计的流程图如图3.1所示.开始等待用户输入乐谱显示乐谱和高低音标志根据乐谱进行音阶频率的预置根据频率的预置数输出相应的乐谱的频率扬声器发音图3.1 程序设计流程图第四章 系统测试 系统测试用的是清华同方股份有限公司生产的TPGFPGA TPG1AC0007实验箱.设计者编好程序之后进行仿真无误,然后烧置到实验箱上.测试结果无杂音,演奏了一曲悦耳动听的音乐. 这表明用FPGA来实现电子琴的精度高系统稳定.从系统的顶层映射仿真图中我们很清晰的看到这一点,如图4.1所示,它的程序见附录.注:只显示音符1且它的频率分频系数是50,频率=clk的频率/50.图4.1 电子琴系统顶层映射仿真图第五章 结论 经过对测试结果的分析,发现采用FPGA所设计的电子琴,系统设计趋于简单、开发时间缩短;外围器件少,体积小,抗干扰能力强,可靠性高;系统维护更方便、快捷.尤其对于设计者来说,不需要考虑太多的硬件设计,只需要有自己的设计思路,编程实现再用烧到FPGA器件中进行测试即可.电子琴作为一种乐器,成本也不高,因此有一定的生产价值. 附 录一. MHZ_generator13library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity MHz_generator is Port ( clk : in std_logic; clk_12MHz : out std_logic; clk_8Hz : out std_logic);end MHz_generator;architecture Behavioral of MHz_generator isbegin process(clk) variable n12,n8:integer:=0; begin if rising_edge(clk)then n12:=n12+1; n8:=n8+1; if n12<=1 then clk_12MHz<='1' else clk_12MHz<='0' end if; if n8<= 4000000 then clk_8Hz<='1' else clk_8Hz<='0' end if; if n12= 3 then n12:=0; end if; if n8= 8000000 then n8:=0; end if; end if; end process;end Behavioral;二. NoteTabsLIBRARY IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY NoteTabs IS PORT ( clk : IN STD_LOGIC; ToneIndex : OUT INTEGER RANGE 0 TO 15 );END;ARCHITECTURE one OF NoteTabs IS SIGNAL Counter : INTEGER RANGE 0 TO 138;BEGIN CNT8 : PROCESS(clk) BEGIN IF Counter = 138 THEN Counter <= 0; ELSIF (clk'EVENT AND clk = '1') THEN Counter <= Counter + 1; END IF; END PROCESS; Search : PROCESS(Counter) BEGIN CASE Counter IS - 译码器,查歌曲的乐谱表,查表结果为音调表的索引值 WHEN 00 => ToneIndex <= 3; - 简谱"3"音, 发4个时钟节拍 WHEN 01 => ToneIndex <= 3; WHEN 02 => ToneIndex <= 3; WHEN 03 => ToneIndex <= 3; WHEN 04 => ToneIndex <= 5; - 简谱"5"音,发3个时钟节拍 WHEN 05 => ToneIndex <= 5; WHEN 06 => ToneIndex <= 5; WHEN 07 => ToneIndex <= 6; - 简谱"6"音 WHEN 08 => ToneIndex <= 2; WHEN 09 => ToneIndex <= 1; WHEN 10 => ToneIndex <= 1; WHEN 11 => ToneIndex <= 3; WHEN 12 => ToneIndex <= 3; WHEN 13 => ToneIndex <= 3; WHEN 14 => ToneIndex <= 3; WHEN 15 => ToneIndex <= 3; WHEN 16 => ToneIndex <= 6; WHEN 17 => ToneIndex <= 6; WHEN 18 => ToneIndex <= 6; WHEN 19 => ToneIndex <= 6; WHEN 20 => ToneIndex <= 6; WHEN 21 => ToneIndex <= 4; WHEN 22 => ToneIndex <= 4; WHEN 23 => ToneIndex <= 2; WHEN 24 => ToneIndex <= 2; WHEN 25 => ToneIndex <= 3; WHEN 26 => ToneIndex <= 4; WHEN 27 => ToneIndex <= 4; WHEN 28 => ToneIndex <= 5; WHEN 29 => ToneIndex <= 5; WHEN 30 => ToneIndex <= 5; WHEN 31 => ToneIndex <= 3; WHEN 32 => ToneIndex <= 3; WHEN 33 => ToneIndex <= 4; WHEN 34 => ToneIndex <= 4; WHEN 35 => ToneIndex <= 5; WHEN 36 => ToneIndex <= 5; WHEN 37 => ToneIndex <= 5; WHEN 38 => ToneIndex <= 6; WHEN 39 => ToneIndex <= 6; WHEN 40 => ToneIndex <= 5; WHEN 41 => ToneIndex <= 5; WHEN 42 => ToneIndex <= 5; WHEN 43 => ToneIndex <= 6; WHEN 44 => ToneIndex <= 8; WHEN 45 => ToneIndex <= 8; WHEN 46 => ToneIndex <= 9; WHEN 47 => ToneIndex <= 9; WHEN 48 => ToneIndex <= 3; WHEN 49 => ToneIndex <= 3; WHEN 50 => ToneIndex <= 8; WHEN 51 => ToneIndex <= 8; WHEN 52 => ToneIndex <= 6; WHEN 53 => ToneIndex <= 5; WHEN 54 => ToneIndex <= 6; WHEN 55 => ToneIndex <= 8; WHEN 56 => ToneIndex <= 5; WHEN 57 => ToneIndex <= 5; WHEN 58 => ToneIndex <= 5; WHEN 59 => ToneIndex <= 5; WHEN 60 => ToneIndex <= 5; WHEN 61 => ToneIndex <= 5; WHEN 62 => ToneIndex <= 5; WHEN 63 => ToneIndex <= 5; WHEN 64 => ToneIndex <= 10; WHEN 65 => ToneIndex <= 10; WHEN 66 => ToneIndex <= 10; WHEN 67 => ToneIndex <= 12; WHEN 68 => ToneIndex <= 7; WHEN 69 => ToneIndex <= 7; WHEN 70 => ToneIndex <= 9; WHEN 71 => ToneIndex <= 9; WHEN 72 => ToneIndex <= 6; WHEN 73 => ToneIndex <= 8; WHEN 74 => ToneIndex <= 5; WHEN 75 => ToneIndex <= 5; WHEN 76 => ToneIndex <= 5; WHEN 77 => ToneIndex <= 5; WHEN 78 => ToneIndex <= 5; WHEN 79 => ToneIndex <= 5; WHEN 80 => ToneIndex <= 3; WHEN 81 => ToneIndex <= 5; WHEN 82 => ToneIndex <= 3; WHEN 83 => ToneIndex <= 3; WHEN 84 => ToneIndex <= 5; WHEN 85 => ToneIndex <= 6; WHEN 86 => ToneIndex <= 7; WHEN 87 => ToneIndex <= 9; WHEN 88 => ToneIndex <= 6; WHEN 89 => ToneIndex <= 6; WHEN 90 => ToneIndex <= 6; WHEN 91 => ToneIndex <= 6; WHEN 92 => ToneIndex <= 6; WHEN 93 => ToneIndex <= 6; WHEN 94 => ToneIndex <= 5; WHEN 95 => ToneIndex <= 6; WHEN 96 => ToneIndex <= 8; WHEN 97 => ToneIndex <= 8; WHEN 98 => ToneIndex <= 8; WHEN 99 => ToneIndex <= 9; WHEN 100 => ToneIndex <= 12; WHEN 101 => ToneIndex <= 12; WHEN 102 => ToneIndex <= 12; WHEN 103 => ToneIndex <= 10; WHEN 104 => ToneIndex <= 9; WHEN 105 => ToneIndex <= 9; WHEN 106 => ToneIndex <= 10; WHEN 107 => ToneIndex <= 9; WHEN 108 => ToneIndex <= 8; WHEN 109 => ToneIndex <= 8; WHEN 110 => ToneIndex <= 6; WHEN 111 => ToneIndex <= 5; WHEN 112 => ToneIndex <= 3; WHEN 113 => ToneIndex <= 3; WHEN 114 => ToneIndex <= 3; WHEN 115 => ToneIndex <= 3; WHEN 116 => ToneIndex <= 8; WHEN 117 => ToneIndex <= 8; WHEN 118 => ToneIndex <= 8; WHEN 119 => ToneIndex <= 8; WHEN 120 => ToneIndex <= 6; WHEN 121 => ToneIndex <= 8; WHEN 122 => ToneIndex <= 6; WHEN 123 => ToneIndex <= 5; WHEN 124 => ToneIndex <= 3; WHEN 125 => ToneIndex <= 5; WHEN 126 => ToneIndex <= 6; WHEN 127 => ToneIndex <= 8; WHEN 128 => ToneIndex <= 5; WHEN 129 => ToneIndex <= 5; WHEN 130 => ToneIndex <= 5; WHEN 131 => ToneIndex <= 5; WHEN 132 => ToneIndex <= 5; WHEN 133 => ToneIndex <= 5; WHEN 134 => ToneIndex <= 5;WHEN 135 => ToneIndex <= 5;- 程序过长,部分省略 WHEN 136 => ToneIndex <= 0; - 简谱休止符à输出 WHEN 137 => ToneIndex <= 0; - 频率为零 WHEN 138 => ToneIndex <= 0; WHEN OTHERS => NULL; END CASE; END PROCESS;END one;三. ToneTabaLIBRARY IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY ToneTaba IS PORT ( Index : IN INTEGER RANGE 0 TO 15; CODE : OUT std_logic_vector(2 downto 0); HIGH : OUT STD_LOGIC; Tone : OUT INTEGER RANGE 0 TO 16#7FF# );END;ARCHITECTURE one OF ToneTaba ISBEGIN Search : PROCESS(Index) BEGIN CASE Index IS - 译码电路,查表方式,控制音调的预置数 WHEN 0 => Tone <= 5; CODE <= "000" HIGH <= '0' WHEN 1 => Tone <= 2; CODE <= "001" HIGH <= '0' WHEN 2 => Tone <= 912; CODE <= "010" HIGH <= '0' WHEN 3 => Tone <= 1036; CODE <= "011" HIGH <= '0' WHEN 5 => Tone <= 1197; CODE <= "100" HIGH <= '0' WHEN 6 => Tone <= 1290; CODE <= "101" HIGH <= '0' WHEN 7 => Tone <= 1372; CODE <= "110" HIGH <= '0' WHEN 8 => Tone <= 1410; CODE <= "000" HIGH <= '1' WHEN 9 => Tone <= 1480; CODE <= "001" HIGH <= '1' WHEN 10 => Tone <= 1542; CODE <= "010" HIGH <= '1' WHEN 12 => Tone <= 1622; CODE <= "

    注意事项

    本文(基于FPGA的电子琴设计.doc)为本站会员(爱问知识人)主动上传,三一文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    经营许可证编号:宁ICP备18001539号-1

    三一文库
    收起
    展开