基于FPGA硬件电子琴设计Word文档格式.docx

上传人:b****5 文档编号:19785116 上传时间:2023-01-10 格式:DOCX 页数:11 大小:60.61KB
下载 相关 举报
基于FPGA硬件电子琴设计Word文档格式.docx_第1页
第1页 / 共11页
基于FPGA硬件电子琴设计Word文档格式.docx_第2页
第2页 / 共11页
基于FPGA硬件电子琴设计Word文档格式.docx_第3页
第3页 / 共11页
基于FPGA硬件电子琴设计Word文档格式.docx_第4页
第4页 / 共11页
基于FPGA硬件电子琴设计Word文档格式.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

基于FPGA硬件电子琴设计Word文档格式.docx

《基于FPGA硬件电子琴设计Word文档格式.docx》由会员分享,可在线阅读,更多相关《基于FPGA硬件电子琴设计Word文档格式.docx(11页珍藏版)》请在冰豆网上搜索。

基于FPGA硬件电子琴设计Word文档格式.docx

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方案比较

对于电子琴的设计,三个方案均可以实现,但是第一个方案中采用的是数字逻辑电路来制作,该电路硬件所需的器材多,体积庞大,比较复杂,而且精度和稳定度都不是很高。

第二个方案采用的是现场可编程逻辑器件来实现,它的优点是所有电路集成在一块芯片上,此方案所需的外围电路简单,这样它的体积就减少了,同时还提高了系统的稳定度。

还可以用软件QuartusⅡ进行仿真和调试等。

设计人员可以充分利用VHDL硬件描述语言方便的编程,提高开发效率,缩短研发周期,降低研发成本;

而且易于进行功能的扩展,实现方法灵活,调试方便,修改容易.方案三也有它的优点,但同时也存在缺点。

它对设计者的要求比较高,设计者对软硬件必须十分熟悉。

和方案二来比它的实验仿真没有方案二简单直观,调试也有一定的难度。

在外界环境相同的条件下,方案三设计出来的产品精度和稳定度要比方案二稍微差一些。

因此,电子琴的设计我们选择方案二来实现。

二、单元电路设计

2.1实验原理

主系统由3个模块组成,程序-3(见附录)是顶层设计文件,其内部有两个功能模块(如图2-1所示):

TONE.VHD(程序-2(见附录))和SPEAKER.VHD(程序-1(见附录))。

模块TONE是音阶发生器,当8位发声控制输入INDEX中某一位为高电平时,则对应某一音阶的数值将从端口TONE输出,作为获得该音阶的分频预置值;

同时由CODE输出对应该音阶简谱的显示数码,如‘5’,并由HIGH输出指示音阶高8度显示。

由程序-2可见,其语句结构只是类似与真值表的纯组合电路描述,其中的音阶分频预置值,如Tone<

=1290是根据产生该音阶频率所对应的分频比获得的。

图2-1硬件电子琴电路结构

模块SPEAKER中的主要电路是一个数控分频器,它由一个初值可预置的加法计数器构成,当模块SPEAKER由端口TONE获得一个2进制数后,将以此值为计数器的预置数,对端口CLK20MHZ输入的频率进行分频,之后由SPKOUT向扬声器输出发声。

2.2顶层模块的设计

VHDL采用的是自顶向下的设计方式,顶层模块由音调发生器(tone)和数控分频器(speaker)两个模块组成。

图2-1即是顶层设计原理图。

其中音调发生器部分又包括了键盘编码。

设置八个按键(Index1)输入信号,再对其进行编码,输出的Tone都是11位二进制数,对应数控分频模块的输入。

数控分频模块根据输入的预置数Tone1,对基准脉冲进行相关分频后,输出对应音阶的频率,驱动蜂鸣器发音。

2.3音调发生器(tone)模块的设计

音调发生器的作用是产生获得音阶的分频预置值。

当8位发声控制输入index中的某一位为低电平时,则对应某一音阶的数值将以端口tone输出,作为获得该音阶的分频预置值,该值作为数控分频器的输入,来对20MHz的脉冲进行分频,由此得到每个音阶相应的频率,例如输入index="

11111101"

,即对应的按键是2,产生的分频系数便是912;

由code输出对应该音阶简谱的显示数码;

由high输出指示音阶高8度的显示,低电平有效。

对于tone的计算很重要,tone是根据产生该音阶频率所对应的分频比获得的。

此值是通过查表和计算所到,查表我们可以知道每个乐谱符号的频率,然后计算出要得到该乐谱的频率所需的分频系数。

例如音符’1’的发音,通过查表得它的频率是785HZ左右,我们要计算tone的值可由公式:

音符频率=振荡频率/(16#7FF#-tone的值)

振荡频率是经过分频之后得到的,在此是1MHZ,由公式可计算出tone的值为:

773。

2.4数控分频模块(speaker)的设计

数控分频模块的目的是对基准脉冲分频,得到1,2,3,4,5,6,7七个音符对应频率。

该模块的VHDL描述中包含了三个进程。

首先对20MHz的基准脉冲进行分频得到1MHz的脉冲,然后按照tone1输入的分频系数对1MHz的脉冲再次分频,得到的便是所需要的频率。

而第三个进程的作用是在音调输出时再进行二分频,将脉冲展宽,同时使其占空比为50%,以使扬声器有足够功率发音。

三、软件设计

3.1VHDL硬件描述语言简介

PLD的软件已发展得相当完善,利用VHDL硬件描述语言来实现程序的编制,这样硬件的功能描述可以完全在软件上实现。

VHDL是用于逻辑设计的硬件描述语言,成为IEEE标准。

它作为描述硬件电路的语言,有以下特点:

(1)VHDL的宽范围描述能力使它成为高层次设计的核心,将设计人员的工作重心提高到了系统功能的实现与调试,而花较少的精力于物理实现。

(2)VHDL可以用简洁明确的代码描述来进行复杂控制逻辑的设计,灵活且方便,而且也便于设计结果的交流、保存和重用。

(3)VHDL的设计不依赖于特定的器件,同一个HDL原码可以综合成FPGA或ASIC,方便了工艺的转换。

(4)VHDL是一个标准语言,为众多的EDA厂商支持,而且设计出来的电路大多数并行运行,因此移植性好且速度快。

采用VHDL语言设计复杂数字电路的方法具有很多优点,其语言的设计技术齐全、方法灵活、支持广泛。

它可以支持自顶向下(TopDown)和基于库(Library_Based)的设计方法,而且还支持同步电路、异步电路、FPGA以及其他随机电路的设计,其范围很广,语言的语法比较严格,给阅读和使用都带来了极大的好处。

3.2软件设计

本设计采用ALTERA公司的EDA软件系统QuartusⅡ来完成。

采用自顶向下的设计方法。

程序设计的流程图如图3-1所示:

开始

等待用户按下琴键

显示音阶和高低音标志

根据按下的键进行音阶频率的预置

根据频率的预置数输出相应的音阶的频率

扬声器发音

图3-1程序设计流程图

软件设计采用结构化程序设计方法,功能模块各自独立,实际上在设计中将键盘输入存储放在了音调发生器(tone)模块中,显示部分存放在数控分频器模块中。

软件设计的核心部分是数控分频器,键盘输入是提供给它相应的分频比。

对输入的基准时钟进行多次分频,最终输出的就是想得到的音阶的频率。

VHDL描述语言程序清单见附录。

四、系统测试

4.1测试使用的仪器

ALTERA公司的EDA软件系统QuartusⅡ

ALTERA公司MAXⅡ系列的EMP240T100C5N板子

4.2测试方法

首先用ALTERA公司的QuartusⅡ软件的仿真工具进行对系统的仿真。

功能仿真用于综合前检查设计的逻辑功能是否符合设计要求。

仿真过程中可以通过观察检测设计的输入信号,输出信号以及内部信号以检测设计的逻辑功能。

如果仿真都通过的话就可以进行引脚锁定,然后下载程序,烧制出功能芯片,在实验板上可以直观的操作,从而看到结果。

4.3指标测试和测试结果

每个音阶对应着不同的频率。

频率的大小直接影响着音调的高低以及失真度。

表4-1频率测试

音阶

1

2

3

4

5

6

7

1(H)

频率(Hz)

785

880

988

1046

1175

1318

1400

1568

测试结果可以看出,得到的频率和分频结果基本一致,发音情况良好,音调准确,键盘输入可行,能按照按键所对应的音阶发音。

图4-1电子琴系统顶层映射仿真图

五、心得

经过对测试结果的分析,发现采用FPGA所设计的电子琴,系统设计趋于简单、开发时间缩短;

外围器件少,体积小,抗干扰能力强,可靠性高;

系统维护更方便、快捷。

尤其对于设计者来说,不需要考虑太多的硬件设计,只需要有自己的设计思路,编程实现再用烧到FPGA器件中进行测试即可。

电子琴作为一种乐器,成本也不高,因此有一定的生产价值。

本设计利用超高速硬件描述语言VHDL实现了电子琴的键盘输入发音的简易功能,经过编程,综合,仿真,下载,芯片烧制,最终做出成品,测试情况良好,能够准确实现音阶的发音功能。

附录

【硬件电子琴程序清单】:

【程序-1】

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

useIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYSpeakerIS

PORT(clk1:

INSTD_LOGIC;

Tone1:

ININTEGERRANGE0TO16#7FF#;

SpkS:

OUTSTD_LOGIC);

END;

ARCHITECTUREoneOFSpeakerIS

SIGNALCLK2,Full:

STD_LOGIC;

BEGIN

PROCESS(clk1)

VARIABLECnt1:

INTEGERRANGE0TO16#31#:

=0;

CLK2<

='

0'

;

--将CLK1进20分频,CLK2为CLK120分频

IFCnt1>

19THENCLK2<

1'

Cnt1:

ELSIFclk1'

EVENTANDclk1='

THENCnt1:

=Cnt1+1;

ENDIF;

ENDPROCESS;

PROCESS(CLK2,Tone1)

VARIABLECount11:

INTEGERRANGE0TO16#7FF#:

BEGIN--11位可预置计数器

IFCLK2'

EVENTANDCLK2='

THEN

IFCount11=16#7FF#THENCount11:

=Tone1;

Full<

ELSECount11:

=Count11+1;

PROCESS(Full)

VARIABLECnt2:

STD_LOGIC:

='

BEGIN

IFFull'

EVENTANDFull='

THENCnt2:

=NOTCnt2;

IFCnt2='

THENSpkS<

ELSESpkS<

【程序-2】

ENTITYToneIS

PORT(Index:

INSTD_LOGIC_VECTOR(7DOWNTO0);

CODE:

OUTSTD_LOGIC_VECTOR(7DOWNTO0);

HIGH:

OUTSTD_LOGIC;

Tone:

OUTINTEGERRANGE0TO16#7FF#);

ARCHITECTUREoneOFToneIS

BEGIN

PROCESS(Index)

CASEIndexIS--译码电路,查表方式,控制音调的预置数

WHEN"

11111110"

=>

Tone<

=773;

CODE<

="

11111001"

HIGH<

=912;

10100100"

11111011"

=1036;

10110000"

11110111"

=1116;

10011001"

11101111"

=1197;

10010010"

11011111"

=1290;

10000010"

10111111"

=1372;

11111000"

01111111"

=1410;

WHENOTHERS=>

=2047;

11000000"

HIGH<

ENDCASE;

【程序-3】

ENTITYTOPIS--顶层设计

PORT(CLK20MHZ:

INDEX1:

CODE1:

HIGH1,SPKOUT:

END;

ARCHITECTUREoneOFTOPIS

COMPONENTTone

OUTSTD_LOGIC_VECTOR(7DOWNTO0);

--11位2进制预置数

ENDCOMPONENT;

COMPONENTSpeaker

SIGNALTone0:

INTEGERRANGE0TO16#7FF#;

u1:

TonePORTMAP(Index=>

Index1,

Tone=>

Tone0,CODE=>

CODE1,HIGH=>

HIGH1);

u2:

SpeakerPORTMAP(clk1=>

CLK20MHZ,Tone1=>

Tone0,SpkS=>

SPKOUT);

参考文献

[1]潘松黄继业编著《EDA技术与VHDL》(第2版)清华大学出版社2007年

[2]贾立新王拥等编著《电子系统设计与实践》清华大学出版社2007年4月

[3]高仁璟、孙鹏,数字电子基础与设计及[M]大连理工大学出版社2004年

[4]赵俊超《集成电路设计VHDL教程》[M]北京希望电子出版社2002年

[5]王金明,周顺.数字系统设计与VHDL.北京:

电子工业出版社,2010

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 文学研究

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1