基于FPGA的音乐电子琴.docx

上传人:b****5 文档编号:29914567 上传时间:2023-08-03 格式:DOCX 页数:25 大小:91.18KB
下载 相关 举报
基于FPGA的音乐电子琴.docx_第1页
第1页 / 共25页
基于FPGA的音乐电子琴.docx_第2页
第2页 / 共25页
基于FPGA的音乐电子琴.docx_第3页
第3页 / 共25页
基于FPGA的音乐电子琴.docx_第4页
第4页 / 共25页
基于FPGA的音乐电子琴.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

基于FPGA的音乐电子琴.docx

《基于FPGA的音乐电子琴.docx》由会员分享,可在线阅读,更多相关《基于FPGA的音乐电子琴.docx(25页珍藏版)》请在冰豆网上搜索。

基于FPGA的音乐电子琴.docx

基于FPGA的音乐电子琴

毕业设计(论文)

课题名称:

基于FPGA的音乐电子琴

指导教师:

***

系别:

电子信息系

专业:

应用电子技术

班级:

13应用电子

(1)班

姓名:

***

【摘要】介绍了基于FPGA的电子琴的工作原理和设计过程。

用Altera公司的EP3C40Q240C8芯片为核心器件,通过运用硬件编程语言VHDL描述,在QuartusII平台上,实现了电子琴的手动弹奏和自动演奏功能。

本系统主要由音频发生模块,键盘控制模块和存储器模块组成。

选择手动弹奏模式按键时,按下音符键后就会选通相应的频率输出;选择自动演奏模式按键时,储存器会将编写好的音乐信息依次取出,去选通各个对应的频率输出,实现自动演奏。

音频发生器由分频器来实现,可产生16个频率,这些频率经放大后驱动喇叭,从而发出声音。

 

目录

第一章引言3

1.1课题分析3

1.2VHDL语言和QUARTUSII环境简介4

1.3FPGA简介6

第二章任务要求及原理分析9

2.1任务要求9

2.2任务分析9

2.3系统设计的主要组成部分12

第三章任务实施13

3.1系统流程13

3.2设计模块13

3.3CycloneIII芯片简介16

3.4结论17

附录18

1.简谱18

2.程序18

参考资料27

致谢27

第一章引言

1.1课题分析

电子琴因其操作简单,且能模拟各种传统乐器的音色,而深受消费者喜爱。

基于可编程逻辑器件FPGA(FieldProgrammableLogicalDevice)芯片,利用VHDL硬件描述语言设计系统核心部件,再配以适当的外围电路,可从琴键上进行演奏也可自动进行乐曲演奏。

随着电子技术的高速发展,由于FPGA/CPLD具有高速、高可靠性、串并行工作方式等突出优点,所以在电子设计中受到广泛的应用,并且它代表着未来EDA设计的方向。

FPGA/CPLD的设计采用了高级语言,例如VHDL语言,AHDL语言。

从而进一步打破了软硬件之间的界限,加速了产品的开发过程,缩短了设计周期。

所以采用FPGA/CPLD取代传统的标准集成电路、接口电路已经成为电子技术发展的必然趋势。

EDA(电子设计自动化)代表了当今电子设计技术的最新发展方向,它的基本特征是:

设计人员按照“自顶向下”的设计方法,对整个系统进行方案设计和功能划分,系统的关键电路用一片或几片集成电路(FPGA/CPLD)实现。

电子琴是数字电路中的一个典型应用。

在实际的硬件设计中用到的器件非常多,连线比较复杂,同时会产生比较大的延时,从而造成测量误差较大,可靠性不好。

以EDA工具作为开发手段,运用VHDL硬件描述语言将使整个系统大大简化,提高了电子琴整体的性能和可靠性。

 

1.2VHDL语言和QUARTUSII环境简介

1.2.1VHDL语言简介

VHDL是超高速集成电路硬件描述语言,是一种用于电路设计的高级语言。

它出现于80年代后期,最初是由美国国防部开发出来的,是为了供美军用来提高设计的可靠性和缩减开发周期的一种使用范围较小的设计语言。

VHDL主要是应用在数字电路的设计中。

目前,它在中国的应用多数是用在FPGA/CPLD/EPLD的设计中,同时也被一些实力较为雄厚的单位用来设计ASIC。

VHDL具有多层次描述系统硬件功能的能力,支持自顶向下和基于库的设计特点。

其开发流程:

在顶层用方框图或硬件语言对电路的行为进行描述后,进行系统仿真验证和纠错。

再用逻辑综合优化工具生成具体的门级逻辑电路的网表。

然后通过适配器将网表文件配置于指定的目标器件,产生最终下载文件或配置文件。

最后把适配后生成的下载或配置文件通过编程器或编程电缆下载到具体的FPGA/CPLD器件中去,以便进行硬件调试和验证,而实现可编程的专用集成电路ASIC的设计。

VHDL主要用于描述数字系统的结构,行为,功能和接口。

除了含有许多具有硬件特征的语句外,VHDL的语言形式和描述风格与句法是十分类似于一般的计算机高级语言。

VHDL系统设计与其他硬件描述语言相比,VHDL具有更强的行为描述能力,从而决定了他成为系统设计领域最佳的硬件描述语言。

强大的行为描述能力是避开具体的器件结构,从逻辑行为上描述和设计大规模电子系统的重要保证。

1.2.2QUARTUSⅡ简介

QuartusII可以在XP、Linux以及Unix上使用,除了可以使用Tcl脚本完成设计流程外,提供了完善的用户图形界面设计方式。

具有运行速度快,界面统一,功能集中,易学易用等特点。

QuartusII支持Altera的IP核,包含了LPM/MegaFunction宏功能模块库,使用户可以充分利用成熟的模块,简化了设计的复杂性、加快了设计速度。

对第三方EDA工具的良好支持也使用户可以在设计流程的各个阶段使用熟悉的第三方EDA工具。

此外,QuartusII通过和DSPBuilder工具与Matlab/Simulink相结合,可以方便地实现各种DSP应用系统;支持Altera的片上可编程系统(SOPC)开发,集系统级设计、嵌入式软件开发、可编程逻辑设计于一体,是一种综合性的开发平台。

MaxplusII作为Altera的上一代PLD设计软件,由于其出色的易用性而得到了广泛的应用。

目前Altera已经停止了对MaxplusII的更新支持,QuartusII与之相比不仅仅是支持器件类型的丰富和图形界面的改变。

Altera在QuartusII中包含了许多诸如SignalTapII、ChipEditor和RTLViewer的设计辅助工具,集成了SOPC和HardCopy设计流程,并且继承了MaxplusII友好的图形界面及简便的使用方法。

AlteraQuartusII作为一种可编程逻辑的设计环境,由于其强大的设计能力和直观易用的接口,越来越受到数字系统设计者的欢迎。

 

1.3FPGA简介

FPGA是英文FieldProgrammableGateArray的缩写,即现场可编程门阵列,它是在PAL、GAL、EPLD等可编程器件的基础上进一步发展的产物。

它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。

当今社会是数字社会,数字集成电路应用非常广泛,其发展从电子管、晶体管、小规模集成SSI、MSI、LSI、VLSI(几万门以上)到超大规模集成电路ULSI和超位集成电路GSI,其规模几乎平均每一到两年翻一番。

集成电路的发展大大促进了EDA的发展,先进的EDA已从传统的“自下而上”的设计方法改变为“自上而下”的设计方法。

ASIC(ApplicationSpecificIntegratedCircuit)的设计与制造,已不再完全由半导体厂商独立承担,系统设计师在实验室里就可以设计出合适的ASIC芯片,并且立即投入实际应用中,这都得益于可编程逻辑器件PLD(ProgrammableLogicDevice)的出现。

现在应用最广泛的PLD主要是现场可编程门阵列FPGA(FieldProgrammableGateArray)、复杂可编程逻辑器件CPLD(ComplexProgrammableLogicDevice)、可擦除可编程逻辑器件EPLD(ErasableProgrammableLogicDevice)。

FPGA器件集成度高、体积小,具有通过用户编程实现专门应用的功能,特别适合于产品的样机开发和小批量生产。

现场可编程门阵列FPGA是一种新型的高密度PLD,采用CMOS—SRAM工艺制作,与门阵列PLD不同,其内部由许多独立的可编程逻辑模块(CLB)组成,逻辑块之间可以灵活地相互连接。

现场可编程门阵列FGPA的结构一般分为三部分:

可编程逻辑块、可编程I/O模块和可编程内部连线。

CLB的功能很强,不仅能够实现逻辑函数,还可以配置成RAM等复杂的形式,配置数据存放在片内的SRAM或者熔丝图上。

基于SRAM的FPGA器件工作前需要从芯片外部加载配置数据,配置后的数据可以存储在片外的EPROM上或者计算机上。

现场可编程门阵列FPGA允许电路设计者利用基于计算机的开发平台,经过设计输入、仿真、测试和校验,直接达到预期的结果。

使用FPGA器件可以大大缩短系统的研制周期,减少资金的投入。

更吸引人的是,采用FPGA器件可以将原来的电路板级产品集成为芯片级产品,从而降低了功耗,提高了可靠性,同时还可以很方便地对设计进行在线修改。

因此,FPGA的出现受到了电子设计师的普遍欢迎,发展十分迅速。

FPGA采用了逻辑单元阵列LCA(LogicCellArray)这样一个新概念,内部包括可配置逻辑模块CLB(ConfigurableLogicBlock)、输出输入模块IOB(InputOutputBlock)和内部连线(Interconnect)三个部分。

FPGA的基本特点主要有:

1)采用FPGA设计ASIC电路,用户不需要投片生产,就能得到合用的芯片。

2)FPGA可做其它全定制或半定制ASIC电路的中试样片。

3)FPGA内部有丰富的触发器和I/O引脚。

4)FPGA是ASIC电路中设计周期最短、开发费用最低、风险最小的器件之一。

5)FPGA采用高速CHMOS工艺,功耗低,可以与CMOS、TTL电平兼容。

可以说,FPGA芯片是小批量系统提高系统集成度、可靠性的最佳选择之一。

FPGA是由存放在片内RAM中的程序来设置其工作状态的,因此,工作时需要对片内的RAM进行编程。

用户可以根据不同的配置模式,采用不同的编程方式。

加电时,FPGA芯片将EPROM中数据读入片内编程RAM中,配置完成后,FPGA进入工作状态。

掉电后,FPGA恢复成白片,内部逻辑关系消失,因此,FPGA能够反复使用。

FPGA的编程无须专用的FPGA编程器,只须用通用的EPROM、PROM编程器即可。

当需要修改FPGA功能时,只需换一片EPROM即可。

这样,同一片FPGA,不同的编程数据,可以产生不同的电路功能。

因此,FPGA的使用非常灵活。

FPGA有多种配置模式:

并行主模式为一片FPGA加一片EPROM的方式;主从模式可以支持一片PROM编程多片FPGA;串行模式可以采用串行PROM编程FPGA;外设模式可以将FPGA作为微处理器的外设,由微处理器对其编程。

 

第二章任务要求及原理分析

2.1任务要求

基于FPGA的电子琴设计要求:

①音乐自动播放,存储两首歌曲,有按键控制选择播放;

②琴键演奏,含高低16个音符;

③配有随音乐节奏而闪烁变化的LED灯以及乐谱显示。

2.2任务分析

乐曲都是由一连串的音符组成,因此按照乐曲的乐谱依次输出这些音符所对应的频率,就可以在扬声器上连续地发出各个音符的音调。

而要准确地演奏出一首乐曲,仅仅让扬声器能够发声是不够的,还必须准确地控制乐曲的节奏,即每个音符的持续时间。

由此可见,乐曲中每个音符的发声频率及其持续时间是乐曲能够连续演奏的关键因素。

乐曲的12平均率规定:

每两个八度音之间的频率相差1倍(如简谱中的中音1与高音1)。

在两个八度音之间,又可分为12个半音。

另外,音符A的频率为440Hz,音符B到C之间、E到F之间为半音,其余为全音。

由此可以计算出简谱中从低音1至高音1之间每个音符的频率,如表2-1所示。

表2-1

产生各个音符所需要的频率可用一个分频器实现,由于各音符对应的频率多为非整数,而分频系数又不能为小数,故必须将计算得到的分频数四舍五入取整。

若分频器时钟频率过低,则由于分频系数过小,四舍五入取整后的误差较大;若时钟频率过高,虽然误差变小,但分频数将变大。

实际的设计应综合考虑两个方面的因素,在尽量减小频率误差的前提下取合适的时钟频率。

实际上,只要各个音符的相对频率关系不变,演奏出的乐曲听起来就不会走调。

音符的持续时间须根据乐曲速度及每个音符的节拍数来确定。

因此,要控制音符的音长,就必须知道乐曲的速度和每个音符所对应的节拍数,实验中所演奏的乐曲最短音符为四分音符,如果将全音符的持续时间设为1s的话那么1拍所应该持续的时间为0.25s,则只需要提供一个4Hz的时钟频率即可产生四分音符的时长。

本实验设计的音乐电子琴选取12MHz的系统时钟频率。

在数控分频器模块,首先对时钟频率进行16分频,得到0.75MHz的输入频率,然后再次分频得到各音符的频率。

由于数控分频器输出的波形是脉宽极窄的脉冲波,为了更好地驱动扬声器发声,在到达扬声器之前需要均衡占空比,从而生成各音符对应频率的对称方波输出。

这个过程实际上进行了一次二分频,频率变为原来的二分之一,即0.375MHz。

因此,分频系数的计算可以按照下面的方法进行。

以中音1为例,对应的频率值为523.3Hz,它的分频系数应为

=

=716

至于其他音符,同样可以由上式求出对应的分频系数,这样利用程序就可以很轻松地得到相应的乐声。

各音名的分频系数如表2-2所示。

音名

频率/Hz

分频系数

音名

频率/Hz

分频系数

低音1

261.6

1433

高音1

1045.5

358

低音2

293.7

1277

高音2

1174.7

319

低音3

329.6

1138

高音3

1318.5

284

低音4

349.2

1074

高音4

1396.9

268

低音5

392

960

高音5

1568

239

低音6

440

853

高音6

1760

213

低音7

493.9

759

高音7

197.5

190

中音1

523.3

716

中音2

587.3

638

表2-2

至于音长的控制,在自动演奏模块,每个乐曲的音符都是按地址存放的,播放乐曲时按4Hz的时钟频率依次读取简谱,每个音符持续时间为0.25s。

如果乐谱中某个音符为3拍音长,只要在三个连续地址上存放该音符,这时候就会发出三个0.25s的音长,即持续了3拍的时间,通过这样一个简单的操作就可以控制音长了。

2.3系统设计的主要组成部分

本设计采用VHDL语言编程设计实现,音频发生部分、键输入部分和数码显示部分以外,其余全部在一片FPGA芯片上实现。

其系统结构如下图2-1所示。

图2-1音乐电子琴系统框图

 

第三章任务实施

3.1系统流程

本设计采用Altera公司的EDA软件系统EP3C40Q240C8来完成。

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

图3-1为其软件流程图:

图3-1系统流程图

3.2设计模块

本系统主要由三个功能模块组成:

自动演奏模块music.vhd、音阶发生模块tone.vhd和数控分频器模块speaker.vhd。

系统顶层设计原理图如图3-2所示。

该系统有4个输入端口,3个输出端口。

输入端口

1、CLK:

12MHz系统时钟输入端口;

2、handTOauto:

电子琴模式控制端口,高电平为1时是按键弹奏模式,低电平为0时是播放预存储歌曲

3、Tonekey:

电子琴音符输入端口;

4、Sel:

播放模式下,乐曲选择控制端口。

输出端口

1、Led:

音符简码输出LED显示端口;

2、SPKS:

乐曲声音输出端口,输出的是对应各音符频率的方波信号。

3、HIGH1:

音符高音指示端口。

图3-2音乐电子琴的顶层设计原理图

3.2.1音阶发生模块

本模块根据music模块提供的音符,完成音符到音符的分频系数、音频的显示、高低音阶的译码。

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

当16位发声控制输入index中的某一位为高电平时,则对应某一音阶的数值将以端口tone输出,作为获得该音阶的分频预置值,该值作为数控分频器的输入,来对0.5MHz的脉冲进行分频,由此得到每个音阶相应的频率,例如输入index="0000000000000010",即对应的按键是2,产生的分频系数便是865由code输出对应该音阶简谱的显示数码;由high输出指示音阶高8度的显示,低电平有效。

自动演奏模块如图3-3所示:

 

图3-3音阶发生模块

3.2.2数控分频器模块

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

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

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

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

数控分频模块如图3-4所示:

图3-4数控分频器模块

3.2.3自动演奏模块

自动演奏模块的作用是产生8位发声控制输入index,handauto为0或1时可以选择自动演奏或者键盘输入,如果auto为0,则而由存储在此模块中的2位二进制数来作为发声控制输入,由此便可自动演奏乐曲。

此模块的VHDL语言中包括两个进程,首先是对基准脉冲进行分频得到4Hz的脉冲,作为第二个进程的时钟信号,它的目的是控制每个音阶之间的停顿时间,此处便是1/4=0.25s,第二个进程是音乐的存储,可根据需要编写不同的乐曲,在这里编写了两首歌曲(“两只老虎”、“字母歌”)。

自动演奏模块如图3-5所示:

图3-5自动演奏模块

3.3CycloneIII芯片简介

CycloneIII是Altera公司推出的一款FPGA器件,CycloneIIIFPGA比竞争FPGA的功耗低75%,含有5K至120K逻辑单元(LE),288个数字信号处理(DSP)乘法器,存储器达到4Mbits。

CycloneIII系列比前一代产品每逻辑单元成本降低20%,使设计人员能够更多地在成本敏感的应用中使用FPGA。

利用台积电(TSMC)的65nm低功耗(LP)工艺,CycloneIIIFPGA提供丰富的逻辑、存储器和DSP功能,功耗更低。

在可编程逻辑发展历史中,CycloneIIIFPGA比其他低成本FPGA系列能够支持实现更多的应用。

本设计中所采用的芯片具体型号是EP3C40Q240C8。

 

3.4结论

本设计在QuartusII软件上进行了仿真,并在实验箱上进行了实测,从实际测试结果看,实现了程序设计的目标,达到了预期效果。

该设计将的核心部分集成在可编程逻辑器件FPGA芯片上,大大简化了外部电路,较以前的传统设计,既减少了所用芯片的种类和数量,缩小了体积,降低了功耗,提高了系统的整体性能,对系统在使用中的故障率大为减少。

此外,这种基于可编程逻辑器件以VHDL硬件描述语言进行设计,在电子设计的各个阶段、各个层次进行计算机模拟验证,保证设计过程的正确性,可降低设计成本,缩短设计周期,具有广阔的应用前景。

 

附录

1.简谱

2.程序

2.1音阶发生模块程序

Libraryieee;

Useieee.std_logic_1164.all;

Useieee.std_logic_arith.all;

Useieee.std_logic_unsigned.all;

EntityTONEis

Port(INDEX:

instd_logic_vector(15downto0);——音符输入信号

TUNE_SEG:

outstd_logic_vector(6downto0);——音符显示信号

HIGH:

outstd_logic;——高低音显示信号

TONE0:

outintegerrange0to2047);——音符的分频系数

EndTONE;

ArchitectureBEHAVIORALofTONEis

Begin

SEARCH:

process(INDEX)——此进程完成音符到音符的分频系数、音符的显示、高低音阶的译码

Begin

CaseINDEXis

when"0000000000000001"=>TONE0<=1433;TUNE_SEG<="0000110";HIGH<='0';

when"0000000000000010"=>TONE0<=1277;TUNE_SEG<="1011011";HIGH<='0';

when"0000000000000100"=>TONE0<=1138;TUNE_SEG<="1001111";HIGH<='0';

when"0000000000001000"=>TONE0<=1074;TUNE_SEG<="1100110";HIGH<='0';

when"0000000000010000"=>TONE0<=960;TUNE_SEG<="1101101";HIGH<='0';

when"0000000000100000"=>TONE0<=853;TUNE_SEG<="1111101";HIGH<='0';

when"0000000001000000"=>TONE0<=759;TUNE_SEG<="0000111";HIGH<='0';

when"0000000010000000"=>TONE0<=716;TUNE_SEG<="0000110";HIGH<='1';

when"0000000100000000"=>TONE0<=358;TUNE_SEG<="0000110";HIGH<='1';

when"0000001000000000"=>TONE0<=319;TUNE_SEG<="1011011";HIGH<='1';

when"0000010000000000"=>TONE0<=284;TUNE_SEG<="1001111";HIGH<='1';

when"0000100000000000"=>TONE0<=268;TUNE_SEG<="1100110";HIGH<='1';

when"0001000000000000"=>TONE0<=239;TUNE_SEG<="1101101";HIGH<='1';

when"0010000000000000"=>TONE0<=213;TUNE_SEG<="1111101";HIGH<='1';

when"0100000000000000"=>TONE0<=190;TUNE_SEG<="0000111";HIGH<='1';

when"1000000000000000"=>TONE0<=638;TUNE_SEG<="1011011";HIGH<='1';

Whenothers=>TONE0<=0;TUNE_SEG<="0000000";HIGH<='0';

Endcase;

Endprocess;

EndBEHAVIORAL;

2.2数控分频器模块程序

Libraryieee;

Useieee.std_logic_1164.all;

Useieee.std_logic_arith.all;

Useieee.std_logic_unsigned.all;

EntitySPEAKERis

Port(CLK1:

instd_logic;——系统时钟12MHz

TONE1:

inintegerrange0to2047;——音符分频系数

SPKS:

outstd_logic);——驱动扬声器的音频信号

EndSPEAKER;

ArchitectureBEHAVIORALofSPEAKERis

SignalPRECLK,FULLSPKS:

std_logic;

begin

P1:

process(CLK1)——此进程对系统时钟进行16分频

variableCO

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

当前位置:首页 > 经管营销 > 经济市场

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

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