1、基于FPGA硬件电子琴设计摘要文中介绍了电子琴系统的整体设计,并基于超高速硬件描述语言VHDL在Xilinx公司的Spartan系列的EMP240T100C5N芯片上编程实现.电子琴系统的设计包含四个模块,分别是控制输入电路、FPGA、显示电路和扬声器电路。其中FPGA模块的设计是整个电子琴系统设计的核心内容。四个模块的有机组合完成了电子琴自动演奏的功能。文中还详细介绍了FPGA功能模块的原理及其工作时序仿真图。本产品的特点是成本较低,性能稳定,精度高,有一定的开发价值。摘要 2一、整体设计方案 41.1设计要求 41.2整体设计原理 41.3方案比较 5二、单元电路设计52.1实验原理 52
2、.2顶层模块的设计 62.3音调发生器(tone)模块的设计62.4数控分频模块(speaker)的设计 7三、软件设计73.1 VHDL硬件描述语言简介 73.2 软件设计8四、系统测试94.1测试使用的仪器 94.2测试方法 94.3指标测试和测试结果 9五、心得11附录12参考文献15一、整体设计方案1.1 设计要求利用数控分频器设计硬件电子琴,当按下琴键时,扬声器发出该琴键相对应的音阶,同时数码管显示音阶数字,若为高音时,二极管点亮。1.2 整体设计原理本设计可以通过多种方案来实现,下面就主要的三种方案进行阐述和比较。方案一:采用数字逻辑电路制作,用IC 拼凑焊接实现,这种电路很直观,
3、简单方便。但应用数字逻辑电路制作的话,使用的器件较多,连接复杂,体积大,功耗大。电路中焊点和线路较多会,使成品的稳定度和精度大大降低。方案二: 采用现场可编程逻辑器件(FPGA)制作,利用EDA软件中的VHDL硬件描述语言编程进行控制,然后烧制实现.采用FPGA来设计的原理图如图1.1所示.它由控制输入电路、FPGA、显示电路和扬声器电路组成。控制输入电路显示电路FPGA扬声电路图1.1 采用FPGA设计的电子琴原理方框图 控制输入电路主要是为用户设计的,起到一个输入控制的作用.FPGA是现场可编程逻辑器件,也是本设计方案的核心内容,它是实现电子琴运作的主要控制模块.由设计者把编好的VHDL程
4、序烧制到现场可编程逻辑器件FPGA中,然后通过控制输入电路把乐谱输入到FPGA,产生不同的频率驱动扬声器,发出不同的乐谱.同时也把发出的乐谱符号通过显示器输出.方案三: 单片机现在已经达到很成熟的阶段了,它的应用也十分广泛. 采用单片机来实现电子琴,它的原理方框图与用FPGA来实现的原理方框图类似,如图1.2所示。控制输入电路显示电路MCU(单片机)扬声器电路图1.2 采用单片机实现电子琴的原理方框图 图1.1和图1.2的基本原理都相同,唯一不同的是一个是用FPGA来制作,一个是用单片机来实现。采用单片机来实现电子琴,主要的核心是单片机的设计。1.3 方案比较 对于电子琴的设计,三个方案均可以
5、实现,但是第一个方案中采用的是数字逻辑电路来制作,该电路硬件所需的器材多,体积庞大,比较复杂,而且精度和稳定度都不是很高。第二个方案采用的是现场可编程逻辑器件来实现, 它的优点是所有电路集成在一块芯片上,此方案所需的外围电路简单,这样它的体积就减少了,同时还提高了系统的稳定度。还可以用软件Quartus进行仿真和调试等。设计人员可以充分利用VHDL硬件描述语言方便的编程,提高开发效率,缩短研发周期,降低研发成本;而且易于进行功能的扩展,实现方法灵活,调试方便,修改容易.方案三也有它的优点,但同时也存在缺点。它对设计者的要求比较高,设计者对软硬件必须十分熟悉。和方案二来比它的实验仿真没有方案二简
6、单直观,调试也有一定的难度。在外界环境相同的条件下,方案三设计出来的产品精度和稳定度要比方案二稍微差一些。因此,电子琴的设计我们选择方案二来实现。二、单元电路设计2.1实验原理主系统由3个模块组成,程序-3(见附录)是顶层设计文件,其内部有两个功能模块(如图2-1所示):TONE.VHD(程序-2(见附录))和SPEAKER.VHD(程序-1(见附录)。模块TONE是音阶发生器,当8位发声控制输入INDEX中某一位为高电平时,则对应某一音阶的数值将从端口TONE输出,作为获得该音阶的分频预置值;同时由CODE输出对应该音阶简谱的显示数码,如5,并由HIGH输出指示音阶高8度显示。由程序-2可见
7、,其语句结构只是类似与真值表的纯组合电路描述,其中的音阶分频预置值,如Tone = 1290是根据产生该音阶频率所对应的分频比获得的。图2-1 硬件电子琴电路结构模块SPEAKER中的主要电路是一个数控分频器,它由一个初值可预置的加法计数器构成,当模块SPEAKER由端口TONE获得一个2进制数后,将以此值为计数器的预置数,对端口CLK20MHZ输入的频率进行分频,之后由SPKOUT向扬声器输出发声。2.2 顶层模块的设计 VHDL采用的是自顶向下的设计方式,顶层模块由音调发生器(tone)和数控分频器(speaker)两个模块组成。图2-1即是顶层设计原理图。其中音调发生器部分又包括了键盘编
8、码。设置八个按键(Index1)输入信号,再对其进行编码,输出的Tone都是11位二进制数,对应数控分频模块的输入。数控分频模块根据输入的预置数Tone1,对基准脉冲进行相关分频后,输出对应音阶的频率,驱动蜂鸣器发音。2.3 音调发生器(tone)模块的设计音调发生器的作用是产生获得音阶的分频预置值。当8位发声控制输入index中的某一位为低电平时,则对应某一音阶的数值将以端口tone输出,作为获得该音阶的分频预置值,该值作为数控分频器的输入,来对20MHz的脉冲进行分频,由此得到每个音阶相应的频率,例如输入index=11111101,即对应的按键是2,产生的分频系数便是912;由code输
9、出对应该音阶简谱的显示数码;由high输出指示音阶高8度的显示,低电平有效。对于tone的计算很重要,tone是根据产生该音阶频率所对应的分频比获得的。此值是通过查表和计算所到,查表我们可以知道每个乐谱符号的频率,然后计算出要得到该乐谱的频率所需的分频系数。例如音符1的发音,通过查表得它的频率是785HZ左右,我们要计算tone的值可由公式:音符频率=振荡频率/(16#7FF#-tone的值)振荡频率是经过分频之后得到的,在此是1MHZ,由公式可计算出tone的值为:773。2.4 数控分频模块(speaker)的设计数控分频模块的目的是对基准脉冲分频,得到1,2,3,4,5,6,7七个音符对
10、应频率。该模块的VHDL描述中包含了三个进程。首先对20MHz的基准脉冲进行分频得到1MHz的脉冲,然后按照tone1输入的分频系数对1MHz的脉冲再次分频,得到的便是所需要的频率。而第三个进程的作用是在音调输出时再进行二分频,将脉冲展宽,同时使其占空比为50%,以使扬声器有足够功率发音。三、软件设计3.1 VHDL硬件描述语言简介PLD的软件已发展得相当完善,利用VHDL硬件描述语言来实现程序的编制,这样硬件的功能描述可以完全在软件上实现。VHDL是用于逻辑设计的硬件描述语言,成为IEEE标准。它作为描述硬件电路的语言,有以下特点:(1) VHDL的宽范围描述能力使它成为高层次设计的核心,将
11、设计人员的工作重心提高到了系统功能的实现与调试,而花较少的精力于物理实现。(2) VHDL可以用简洁明确的代码描述来进行复杂控制逻辑的设计,灵活且方便,而且也便于设计结果的交流、保存和重用。(3)VHDL的设计不依赖于特定的器件,同一个HDL原码可以综合成FPGA或ASIC,方便了工艺的转换。(4)VHDL是一个标准语言,为众多的EDA厂商支持,而且设计出来的电路大多数并行运行,因此移植性好且速度快。采用VHDL语言设计复杂数字电路的方法具有很多优点,其语言的设计技术齐全、方法灵活、支持广泛。它可以支持自顶向下(Top Down)和基于库(Library_Based)的设计方法,而且还支持同步
12、电路、异步电路、FPGA以及其他随机电路的设计,其范围很广,语言的语法比较严格,给阅读和使用都带来了极大的好处。3.2 软件设计本设计采用ALTERA公司的EDA软件系统Quartus来完成。采用自顶向下的设计方法。程序设计的流程图如图3-1所示:开始等待用户按下琴键显示音阶和高低音标志根据按下的键进行音阶频率的预置根据频率的预置数输出相应的音阶的频率扬声器发音图3-1 程序设计流程图软件设计采用结构化程序设计方法,功能模块各自独立,实际上在设计中将键盘输入存储放在了音调发生器(tone)模块中,显示部分存放在数控分频器模块中。软件设计的核心部分是数控分频器,键盘输入是提供给它相应的分频比。对
13、输入的基准时钟进行多次分频,最终输出的就是想得到的音阶的频率。VHDL描述语言程序清单见附录。 四、系统测试4.1测试使用的仪器 ALTERA公司的EDA软件系统QuartusALTERA公司MAX系列的EMP240T100C5N板子4.2测试方法首先用ALTERA公司的Quartus软件的仿真工具进行对系统的仿真。功能仿真用于综合前检查设计的逻辑功能是否符合设计要求。仿真过程中可以通过观察检测设计的输入信号,输出信号以及内部信号以检测设计的逻辑功能。如果仿真都通过的话就可以进行引脚锁定,然后下载程序,烧制出功能芯片,在实验板上可以直观的操作,从而看到结果。4.3指标测试和测试结果 每个音阶对
14、应着不同的频率。频率的大小直接影响着音调的高低以及失真度。 表4-1 频率测试音阶12 345671(H)频率(Hz)78588098810461175131814001568测试结果可以看出,得到的频率和分频结果基本一致,发音情况良好,音调准确,键盘输入可行,能按照按键所对应的音阶发音。图4-1 电子琴系统顶层映射仿真图五、心得 经过对测试结果的分析,发现采用FPGA所设计的电子琴,系统设计趋于简单、开发时间缩短;外围器件少,体积小,抗干扰能力强,可靠性高;系统维护更方便、快捷。尤其对于设计者来说,不需要考虑太多的硬件设计,只需要有自己的设计思路,编程实现再用烧到FPGA器件中进行测试即可。
15、电子琴作为一种乐器,成本也不高,因此有一定的生产价值。本设计利用超高速硬件描述语言VHDL实现了电子琴的键盘输入发音的简易功能,经过编程,综合,仿真,下载,芯片烧制,最终做出成品,测试情况良好,能够准确实现音阶的发音功能。 附 录【硬件电子琴程序清单】:【程序-1】LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY Speaker IS PORT ( clk1 : IN STD_LOGIC; Tone1 : IN INTEGER RANGE 0 TO 16#7FF#; SpkS : OU
16、T STD_LOGIC );END;ARCHITECTURE one OF Speaker IS SIGNAL CLK2 , Full : STD_LOGIC; BEGIN PROCESS(clk1) VARIABLE Cnt1 : INTEGER RANGE 0 TO 16#31#:=0; BEGIN CLK2 19 THEN CLK2 = 1; Cnt1:=0; ELSIF clk1EVENT AND clk1=1 THEN Cnt1 := Cnt1+1; END IF; END PROCESS; PROCESS(CLK2, Tone1) VARIABLE Count11 : INTEGE
17、R RANGE 0 TO 16#7FF#:=0; BEGIN - 11位可预置计数器 IF CLK2EVENT AND CLK2 = 1 THEN IF Count11=16#7FF# THEN Count11 := Tone1; Full = 1; ELSE Count11:=Count11 + 1; Full = 0; END IF; END IF; END PROCESS; PROCESS(Full) VARIABLE Cnt2 : STD_LOGIC:=0; BEGIN IF FullEVENT AND Full= 1 THEN Cnt2 := NOT Cnt2; IF Cnt2 =
18、1 THEN SpkS = 1; ELSE SpkS Tone =773; CODE =11111001; HIGH Tone =912; CODE =10100100; HIGH Tone =1036; CODE =10110000; HIGH Tone =1116; CODE =10011001; HIGH Tone =1197; CODE =10010010; HIGH Tone =1290; CODE =10000010; HIGH Tone =1372; CODE =11111000; HIGH Tone =1410; CODE =11111001; HIGH Tone = 2047
19、; CODE =11000000; HIGHIndex1, Tone=Tone0,CODE=CODE1,HIGH=HIGH1);u2 : Speaker PORT MAP (clk1=CLK20MHZ,Tone1=Tone0, SpkS=SPKOUT );END;参 考 文 献1潘松 黄继业编著EDA技术与VHDL(第2版)清华大学出版社2007年2贾立新 王拥等编著电子系统设计与实践清华大学出版社2007年4月3高仁璟、孙鹏,数字电子基础与设计及M大连理工大学出版社2004年4赵俊超集成电路设计VHDL教程M北京希望电子出版社2002年5王金明,周顺.数字系统设计与VHDL.北京:电子工业出版社,2010
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1