文档库 最新最全的文档下载
当前位置:文档库 › 基于FPGA的简易电子琴设计

基于FPGA的简易电子琴设计

基于FPGA的简易电子琴设计
基于FPGA的简易电子琴设计

简易电子琴的设计

学生姓名:王春指导老师:郑大腾

摘要

本系统是采用EDA技术设计的一个简易的八音符电子琴,该系统基于计算机中时钟分频器的原理,采用自顶向下的设计方法来实现,它可以通过按键输入来控制音响。多功能电子琴的设计是在原有普通电子琴的基础上进行扩充的一个设计。该电子琴的设计大体可以由三个模块构成,分别是电子琴发声模块、存储器模块和选择控制模块。用超高速硬件描述语言VHDL编程可以实现各个模块的功能。不仅能实现弹琴和演奏的功能,它还能实现“复读”的功能,就是可以存储任意一段音乐,并且可以即时的播放出来。系统实现是用硬件描述语言VHDL 按照模块化方式进行设计,然后进行编程、时序仿真、总体整合。本系统的功能比较齐全,有一定的现实使用的价值。本文中介绍了电子琴系统的整体的设计,并基于超高速硬件描述语言VHDL在相关的芯片上编程实现的。

关键字

电子琴;EDA;VHDL;音调发生;现场可编程逻辑器件FPGA;超高速硬件描述语言VHDL;电子琴系统;

Abstract

This system is designed using EDA technology a simple eight-note keyboard, the system clock divider based on the principle of the computer, using top-down design methodology to implement, it can be controlled through the key input audio. Multi-function keyboard is designed to be an ordinary keyboard in the original expansion on the basis of a design. The design of the keyboard in general consists of three modules, namely the keyboard sound

modules, memory modules and select the control module. Ultra high-speed hardware description language VHDL programming function of each module. Not only can realize the function of playing and playing, it can achieve "repeat" function, which can store any piece of music, and real-time play out. System implementation is to use hardware description language VHDL modular way by design, then programming, timing simulation, integration. The system features a relatively complete, there is a certain value. This paper introduces the overall design of the keyboard system, and based on high speed hardware description language VHDL in Xilinx's Spartan Ⅱ series 2sc200PQ208-5 chip programming.

Keyword

Keyboard; EDA; VHDL; tone occurred;

field programmable logic device FPGA;

ultra high-speed hardware description language VHDL; organ systems;

目录

1 引言..................................................................

1.1设计的目的...........................................................

1.2设计的基本内容.......................................................

2 FPGA、EDA、VHDL简介....................................................

2.1FPGA工作原理 ........................................................

2.1.2 FPGA的基本特点....................................................

2.2EDA技术...............................................................

2.3硬件描述语言——VHDL ...................................................

2.3.1 VHDL的简介.......................................................

2.3.2 VHDL语言的特点...................................................

2.3.3VHDL语言上机操作条件.............................................

2.3.4 VHDL的设计流程...................................................

3 音乐知识介绍............................................................

4 简易电子琴设计..........................................................

4.1系统设计的总思路.....................................................

4.2程序设计的流程图.....................................................

4.3简易电子琴的工作流程图...............................................

4.4简易电子琴中各模块的设计.............................................

4.4.1 乐曲自动演奏模块...................................................

4.4.2 音调发生模块.......................................................

4.4.3 数控分频模块.......................................................

4.4.4 顶层设计...........................................................

5 系统仿真.................................................................

6 结束语..................................................................

致谢..................................................................... 参考文献................................................................. 附录.....................................................................

1 引言

我们生活在一个信息高速发达的时代,各种各样电子产品层出不穷。对于广

大老百姓来说,电子琴可以说已经不再是什么“新鲜玩意”了,它现在作为一种

休闲和娱乐的产品早就推出市面,面向百姓,进入了我们的生活。作为一个电子

信息科学与技术专业的学生,了解这些电子产品的基本的组成和设计原理是十分

必要的,我们学习过了计算机组成的理论知识,而我所做的课程设计正是对我学

习的理论进行实践和巩固。本设计主要介绍的是一个用超高速硬件描述语言

VHDL设计的一个具有若干功能的简易电子琴;集科学性,先进性,创新性,实

用性于一体,其理论基础源自于计算机组成原理的时钟分频器。

1.1 设计的目的

本次设计的目的就是在掌握计算机组成原理理论相关的基础上,了解EDA

技术,掌握VHDL硬件描述语言的设计方法和思想,通过学习的VHDL语言结

合电子电路的设计知识理论联系实际,掌握所学的课程知识,例如本课程设计就

是基于所学的计算机原理中的时钟分频器和定时器的基础之上的,通过本课程设

计,达到巩固和综合运用计算机原理中的知识,理论联系实际,巩固所学理论知

识,并且提高自己通过所学理论分析、解决计算机相关的实际问题的能力。

1.2 设计的基本内容

基于MAX+PLUS平台,运用VHDL语言对简易电子琴的各个模块进行设

计,并使用EDA 工具对各模块进行仿真验证。本设计包含如下三个模块:乐曲

自动演奏模块,音调发生模块,数控分频模块,最后把各个模块整合后,通过电

路的输入输出对应关系连接起来。

1.3 设计方案

为了实现这种有“自动播放歌曲”和“复读”功能的多功能简易电子琴,以下提供两种方案以供参考:

方案一:采用单个的逻辑器件组合实现。这样虽然比较直观,逻辑器件分工鲜明,思路也比清晰,一目了然,但是因为元器件种类、个数非常多,而且过于复杂的硬件电路也容易引起系统的精度不高、体积过大等一系列的不利因素。例如八个不同的音符是由八个不同的频率来控制输出发声的,而采用这个方案需要运用不同的分频器来对信号进行不同程度的分频。所用仪器之多显而易见。

方案二:采用VHDL语言编程来实现电子琴的各项功能。我这个系统主要由电子琴发声模块、选择控制模块和储存器模块组成的。和方案一相比较,方案二就显得比较笼统,只是把整个系统分为了若干个小模块,却不牵涉到具体的硬件电路。但是我们必须看到使用超高速硬件描述语言VHDL的优势,它不仅具有良好的电路行为描述和系统描述的能力并且通俗易懂。

2 FPGA、EDA、VHDL简介

2.1 EDA技术

EDA(Electronic Design Automation)就是电子设计自动化,它是近几年来迅速发展起来的计算机软件、硬件和微电子技术交叉运用的现代电子科学,是20世纪90年代初从CAD(计算机辅助设计)、CAM(计算机辅助制造)、CAT (计算机辅助测试)、CAE(计算机辅助工程)的概念发展而来的。EDA技术是以计算机为工作平台、以EDA软件工具为开发环境、以硬件描述语言为设计语言、以ASIC(Application Specific Integrated Circuits)为实现载体的电子产品自动化设计过程。在EDA软件平台上,根据原理图或硬件描述语言VHDL完成的设计文件,自动的完成逻辑编译、化简、分割、综合及优化、布局布线、仿真、目标芯片的适配编译、逻辑映射和编程下载等工作;EDA技术是在电子CAD技术基础上发展起来的计算机软件系统,是指以计算机为工作平台,融合了应用电

子技术、计算机技术、信息处理及智能化技术的最新成果,进行电子产品的自动设计。利用EDA工具,电子设计师可以从概念、算法、协议等开始设计电子系统,大量工作可以通过计算机完成,并可以将电子产品从电路设计、性能分析到设计出IC版图或PCB版图的整个过程的计算机上自动处理完成。在现在的电子设计领域,随着微电子技术的迅速的发展,无论是电路设计、系统设计还是芯片设计,其设计的复杂程度都在不断地增加,而且电子产品更新步伐也非常的迅速。这样一来,我们仅仅依靠传统的手工设计已经不再能满足现在工艺的要求,而电子设计自动化技术的发展给电子系统设计带来了革命性的变化,大部分设计工作都可以在计算机上借助EDA工具来完成。现在对EDA的概念或范畴用得很宽。包括在机械、电子、通信、航空航天、化工、矿产、生物、医学、军事等各个领域,都有EDA的应用。目前EDA技术已在各大公司、企事业单位和科研教学部门广泛使用。例如在飞机制造过程中,从设计、性能测试及特性分析直到飞行模拟,都可能涉及到EDA技术。本文所指的EDA技术,主要针对电子电路设计、PCB设计和IC设计。

2.2 关于FPGA介绍

2.2.1 FPGA工作原理

FPGA采用了逻辑单元阵列LCA(Logic Cell Array)这样一个概念,内部包括可配置逻辑模块CLB(Configurable Logic Block)、输出输入模块IOB(Input Output Block)和内部连线(Interconnect)三个部分。

2.2.2 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的使用非常灵活。

2.3 硬件描述语言——VHDL

2.3.1 VHDL的简介

VHDL是一种用来描述数字逻辑系统的“编程语言”它的全名是Very-High-Speed Integrated Circuit HardwareDescription Language,就是超高速集成电路硬件描述语言。HDL发展的技术源头是:在HDL形成发展之前,已有了许多程序设计语言,如汇编、C、Pascal、Fortran、Prolog等。这些语言运行在不同硬件平台和不同的操作环境中,它们适合于描述过程和算法,不适合作硬件描述。CAD的出现,使人们可以利用计算机进行建筑、服装等行业的辅助设计,电子辅助设计也同步发展起来。在从CAD工具到EDA工具的进化过程中,电子设计工具的人机界面能力越来越高。在利用EDA工具进行电子设计时,逻辑图、分立电子原件作为整个越来越复杂的电子系统的设计已不适应。任何一种EDA工具,都需要一种硬件描述语言来作为EDA工具的工作语言。这些众多的EDA工具软件开发者,各自推出了自己的HDL语言。

HDL发展的社会根源是:美国国防部电子系统项目有众多的承包公司,由于各公司技术路线不一致,许多产品不兼容,他们使用各自的设计语言,使得一个公司的设计不能被另一个公司重复利用,造成了信息间的交换困难和维护困难。美

国政府为了降低开发费用,避免重复设计,国防部为他们的超高速集成电路提供了一种硬件描述语言,以期望VHDL功能强大、严格、可读性好。政府要求各公司的合同都用它来描述,以避免产生歧义。由政府牵头,VHDL工作小组于1981年6月成立,提出了一个满足电子设计各种要求的能够作为工业标准的HDL。1983年第3季度,由IBM公司、TI公司、Intermetrics公司签约,组成开发小组,工作任务是提出语言版本和开发软件环境。1986年IEEE标准化组织开始工作,讨论VHDL语言标准,历时一年有余,于1987年12月通过标准审查,并宣布实施,即IEEE STD 1076—1987[LRM87]。1993年VHDL重新修订,形成了新的标准,即IEEE STD 1076—1993[LRM93]。从此以后,美国国防部实施新的技术标准,要求电子系统开发商的合同文件一律采用VHDL文档。即第一个官方VHDL标准得到推广、实施和普及。它源于美国政府于1980年开始启动的超高速集成电路计划,VHDL主要用于描述数字系统的结构,行为,功能和接口。除了含有许多具有硬件特征的语句外,VHDL的语言形式和描述风格与句法是十分类似于一般的计算机高级语言。VHDL的程序结构特点是将一项工程设计,或称设计实体(可以是一个元件,一个电路模块或一个系统)分成外部(或称可是部分,及端口)和内部(或称不可视部分),既涉及实体的内部功能和算法完成部分。在对一个设计实体定义了外部界面后,一旦其内部开发完成后,其他的设计就可以直接调用这个实体。这种将设计实体分成内外部分的概念是VHDL 系统设计的基本点。应用VHDL进行工程设计的优点是多方面的。VHDL的应用必将成为当前以及未来EDA解决方案的核心,更是整个电子逻辑系统设计的核心。

2.3.2 VHDL语言的特点

(1)VHDL具有更强的行为描述能力,从而决定了他成为系统设计领域最佳的硬件描述语言。强大的行为描述能力是避开具体的器件结构,从逻辑行为上描述和设计大规模电子系统的重要保证。

(2)VHDL语句的行为描述能力和程序结构决定了他具有支持大规模设计的分解和已有设计的再利用功能。符合市场需求的大规模系统高效,高速的完成必须有多人甚至多个代发组共同并行工作才能实现。

(3)VHDL丰富的仿真语句和库函数,使得在任何大系统的设计早期就能查验设计系统的功能可行性,随时可对设计进行仿真模拟。

(4)对于用VHDL完成的一个确定的设计,可以利用EDA工具进行逻辑综合和优化,并自动的把VHDL描述设

2.3.3 VHDL语言上机操作条件

VHDL语言描述能力强,覆盖面广,抽象能力强,所以用VHDL语言作为硬件模型建模很合适。设计者的原始描述是非常简练的硬件描述,经过EDA工具综合处理,最终生成付诸生产的电路描述或版图参数描述的工艺文件。整个过程通过EDA工具自动完成,大大减轻了设计人员的工作强度,提高了设计质量,减少了出错机会。

VHDL语言可读性好。VHDL既能被人容易读懂,又能被计算机识别,作为技术人员编写的源文件,它既是计算机程序、技术文档和技术人员硬件信息交流的文件,又是签约双方的合同文件。VHDL语言中的设计实体(Design entity)、程序包(Package)、设计库(Library),为设计人员重复利用他人的设计提供了技术手段。重复利用他人的IP模块和软核(Soft core)是VHDL的特色,许多设计不必个个都从头再来,而是只要在更高层次上把IP模块利用起来,就能达到事半功倍的效果。

VHDL语言可以在多种EDA工具设计环境中运行。硬件平台是工作站或高档微机。高档微机的配置应该具有:

高分彩显17英寸以上,分辨率1024×768或更高

硬盘20GB以上

内存512MB以上

CPU Intel兼容CPU

光驱8倍速以上

操作系统Windows XP

开发工具MAX+plus II 或Quartus II

Candence、Menter、ALTERA等公司的EDA工具均支持VHDL语言环境

2.3.4 VHDL的设计流程

用VHDL语言设计电路的流程:

在用VHDL语言来设计电路时,主要的过程是这样的:

(1)使用文本编辑器输入设计源文件。

(2)使用编译工具编译源文件。VHDL的编译器有很多,ACTIVE公司,MODELSIM公司,SYNPLICITY公司,SYNOPSYS公司,VERIBEST公司等都有自己的编译器。

(3)功能仿真。对于某些人而言,仿真这一步似乎是可有可无的。但是对于一个可靠的设计而言,任何设计最好都进行仿真,以保证设计的可靠性。另外,对于作为一个独立的设计项目而言,仿真文件的提供足可以证明你设计的完整性。(4)综合。综合的目的是在于将设计的源文件由语言转换为实际的电路。这一部分的最终目的是生成门电路级的网表(Netlist)。

(5)布局、布线。这一步的目的是生成用于烧写的编程文件。在这一步,将用到第(4)步生成的网表并根据CPLD/FPG厂商的器件容量,结构等进行布局、布线。这就好像在设计PCB时的布局布线一样。先将各个设计中的门根据网表的内容和器件的结构放在器件的特定部位。然后,在根据网表中提供的各门的连接,把各个门的输入输出连接起来。

(6)后仿真。这一步主要是为了确定你的设计在经过布局布线之后,是不是还满足你的设计要求。

3 乐理知识

音频就是一个专业术语,人们能够听到的所有的声音都可以称之为音频,它可能包括处理;如果把它制作成CD,这时候所有的声音都不会有改变了,因为CD本来就是音频文件的一个种类。音频只是储存在计算机里的声音,如果现在有一台计算机再加上相应的音频卡——就是我们说的声卡,这样一来我们把我们想放的声音录制下了,声音的声学特性像是音的高低是可以用计算机硬盘文件的方式把它们储存下来的;反过来,我们也可以把储存在计算机硬盘文件的音频文件用一定的音频程序播放,还原以前录下的声音。

3.1 音频

3.1.1 音频的数字化处理

随着计算机科学技术的发展,特别是海量存储设备和大容量内存在PC机上的运用,对音频进行数字化处理便成为了可能了。数字化处理的核心就是对音频信息的采样,通过对采集到的样本数据进行处理,得到所需要的相应数据,这是音频数字化处理的基本含义。

3.1.2 音频的处理

不同采样率、频率、通道数之间的变换和转换。而变换就是信息的一种格式转化成可利用的格式,转化就离不开采样了,有时候还要根据精确度的需要采用一些算法(如插值)以补偿转化中的失真现象。现在有淡入、淡出、音量调节等方法是针对音频数据本身进行的各种变换的。而高通、低通滤波器是通过数字滤波算法进行的变换。音乐产生原理及硬件设计由于一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我们就可以利用不同的频率的组合,即可构成我们所想要的音乐了,当然对于单片机来产生不同的频率非常方便,我们可以利用单片机的定时/计数器来产生这样方波频率信号,因此,我们只要把一首歌曲的音阶对应频率关系弄正确即可。本次设计中单片机晶振为12MHZ,那么定时器的计数周期为1MHZ,假如选择工作方式1,那T值便为T= 216--5﹡105/相应的频率,那么根据不同的频率计算出应该赋给定时器的计数值。那么根据不同的频率计算出应该赋给定时器的计数值,列出不同音符与单片机计数T0相关的计数值如下表所示:

通过查表的方式来获得相应的数据:

TABLE DW 64580,64684,64777,64820,64898,64968,65030

3.1.3 音频的三维化处理

长期以来,计算机的研究者们一直低估了声音对人类在信息处理中的作用。当虚拟技术不断发展之时,人们就不再满足单调平面的声音,而更催向于具有空间感的三维声音效果。听觉通道可以与视觉通道同时工作,所以声音的三维化处理不仅可以表达出声音的空间信息,而且与视觉信息的多通道的结合可以创造出极为逼真的虚拟空间,这在未来的多媒体系统中是极为重要的。这也是在媒体处理方面的重要措施。

人类感知声源的位置的最基本的理论是双工理论,这种理论基于两种因素:两耳间声音的到达时间差和两耳间声音的强度差。时间差是由于距离的原因造成,当声音从正面传来,距离相等,所以没有时间差,但若偏右三度则到达右耳的时间就要比左耳约少三十微秒,而正是这三十微秒,使得我们辨别出了声源的位置。强度差是由于信号的衰减造成,信号的衰减是因为距离而自然产生的,或是因为人的头部遮挡,使声音衰减,产生了强度的差别,使得靠近声源一侧的耳朵听到的声音强度要大于另一耳。

基于双工理论,同样地,只要把一个普通的双声道音频在两个声道之间进行相互混合,便可以使普通双声道声音听起来具有三维音场的效果。这涉及到以下有关音场的两个概念:音场的宽度和深度。

音场的宽度利用时间差的原理完成,由于现在是对普通立体声音频进行扩展,所以音源的位置始终在音场的中间不变,这样就简化了我们的工作。要处理的就只有把两个声道的声音进行适当的延时和强度减弱后相互混合。由于这样的扩展是有局限性的,即延时不能太长,否则就会变为回音。

音场的深度利用强度差的原理完成,具体的表现形式是回声.音场越

深,则回音的延时就越长.所以在回音的设置中应至少提供三个参数:回音的衰减率、回音的深度和回音之间的延时。同时,还应该提供用于设置另一通道混进来的声音深度的多少的选项。

音频是个专业术语,人类能够听到的所有声音都称之为音频,它可能包括噪音等。声音被录制下来以后,无论是说话声、歌声、乐器都可以通过数字音乐软件处理,或是把它制作成CD,这时候所有的声音没有改变,因为CD本来就是音频文件的一种类型。而音频只是储存在计算机里的声音。如果有计算机再加上相应的音频卡——就是我们经常说的声卡,我们可以把所有的声音录制下来,声音的声学特性如音的高低等都可以用计算机硬盘文件的方式储存下来。反过来,我们也可以把储存下来的音频文件用一定的音频程序播放,还原以前录下的声音。

3.2 节拍及音符

在音乐中,时间被分成均等的基本单位,每个单位叫做一个“拍子”或称一拍。拍子的时值是以音符的时值来表示的,一拍的时值可以是四分音符(即以四分音符为一拍),也可以是二分音符(以二分音符为一拍)或八分音符(以八分音符为一拍)。拍子的时值是一个相对的时间概念,比如当乐曲的规定速度为每分钟 60 拍时,每拍占用的时间是一秒,半拍是二分之一秒;当规定速度为每分钟 120 拍时,每拍的时间是半秒,半拍就是四分之一秒,依此类推。拍子的基本时值确定之后,各种时值的音符就与拍子联系在一起。例如,当以四分音符为一拍时,一个全音符相当于四拍,一个二分音符相当于两拍,八分音符相当于半拍,十六分音符相当于四分之一拍;如果以八分音符做为一拍,则全音符相当于八拍,二分音符是四拍,四分音符是两拍,十六分音符是半拍。

小节中强拍和弱拍的循环称2拍子;强拍、弱拍、弱拍循环的称3拍子。表示每小节中基本单位拍的时值和数量的记号,称拍号。拍号的上方数字表示每小节的拍数,下方数字表示每拍的时值。例如,2/4表示以4分音符为1拍,每小节有 2拍。拍号中时值的实际时间,应视乐曲所标速度而定。例如快速度2/2中的2分音符就可能比慢速度4/4中的4分音符占时更短,因

此不能视为3/4比3/2快,3/8比3/4更快。

每小节只有一个强拍的叫做单拍子,如2/4、2/8是单2拍子,3/4、3/8是单3拍子。每小节有一个强拍并有次强拍的叫做复拍子,因为它可被看作是单拍子的组合,如4/4、6/8是复2拍子,9/8、9/16是复3拍子。还有另一种划分单、复拍子的方法,即:每拍是单音符(如□或□)的叫做单拍子。每拍是附点音符(如□.或□.)的叫做复拍子。根据这种拍子划分法,4/2、4/4、4/8等是单4拍子,12/4、12/8、12/16等是复4拍子。单位拍时值相同而拍数不同的单拍子组合在一小节内,叫做混合拍子。常见的有:5拍子(如5/4是由2/4+3/4或3/4+2/4组合而成)和 7拍子(如7/8是由2/8+2/8+

3/8或2/8+3/8+2/8或3/8+2/8+2/8组合而成等)。不能把每小节包含两个3拍子和一个2拍子的8拍子(如8/8是由2+3+3/8或3+2+2/8或□组合而成)和每小节由两个 4拍子组成的复拍子相混淆。

在计算机术语中,一个CPU时钟周期也成为节拍。

在运营管理理论中,节拍是指在一个工作站上完成相邻两个产品的实际时间,又可称之为产品间隔时间.

音符们各有不同,不同的音符代表不同的长度。音符有以下几种:

全音符:没有符干和符尾的空心的白色音符叫“全音符”。它是音符家族的老大哥,其他音符的时值都比它短,而且要以它为准。依次分为两半。

二分音符:带有符干、没有符尾的白色音符叫“二分音符”。它只有全音符的一半长,等于全音符1/2的时值;

四分音符:带有符干、没有符尾的黑色音符叫“四分音符”。它比二分音符又小一半,等于全音符1/4的时值;

八分音符:带有符干和1条符尾的黑色音符叫“八分音符”。它比四分音符还小一半,等于全音符1/8的时值;

十六分音符:带有符干和2条符尾的黑色音符叫“十六分音符”。它比八分音符还小一半,等于全音符1/16的时值;

三十二分音符:带有符干和3条符尾的黑色音符叫“三十二分音符”。它比十六分音符小一半,等于全音符1/32的时值;

六十四分音符:带有符干4条符尾的黑色音符叫“六十四分音符”。它比

三十二分音符小一半,等于全音符1/64的时值。

音名与频率的关系:音乐的十二平均率规定:每两个八度音(如简谱中的中音1 与高音1)之间的频率相差一倍。在两个八度音之间,又可分为十二个半音,每两个半音的频率比为。另外,音名A(简谱中的低音6)的频率为440Hz,音名B 到C 之间、E 到F之间为半音,其余为全音。由此可以计算出简谱中从低音1 至高音1 之间每个音名的频率,如表5 所示。由于音阶频率多为非整数,而分频系数又不能为小数,故必须将计算得到的分频数四舍五入取整。若基准频率过低,则由于分频系数过小,四舍五入取整后的误差较大。若基准频率过高,虽然误码差变小,但分频结构将变大。实际的设计应综合考虑两方面的因素,在尽量减小频率误差的前提下取合适的基准频率。本实验中选取5MHZ 的基准频率。若无5MHz 的时钟频率,则可以先分频得到4MHz 或换一个新的基准频率。实际上,只要各个音名间的相对频率关系不变,C 作1 与D 作1 演奏出的音乐昕起来都不会“走调”。

4 简易电子琴设计

4.1 系统设计的总体思路

实现这个多功能电子琴,我们要考虑的主要是以下三个方面的内容:一、每个音符都有自己的固有频率,由频率的不同就决定了发出什么音调。二、一首乐曲的组成不仅仅是音调,还包括每个音调持续时间的长短,也就是我们通常所说的音长。三、要实现“复读”功能,就需要一个既可以存入又可以即时输出的RAM。于是本设计就是以这三个部分为核心内容展开。

经过对引言两种方案的分析、比较和总结,我们选用方案二来进行电子琴的设计。采用现场可编程逻辑器件(FPGA)制作,利用EDA软件中的VHDL硬件描述语言编程进行控制,然后烧制实现.采用FPGA来设计的原理图如图 4.1所示.它由控制输入电路、FPGA、显示电路和扬声器电路组成。

图4.1 采用FPGA

控制输入电路主要是为用户设计的,起到一个输入控制的作用.FPGA是现场可编程逻辑器件,也是本设计方案的核心内容,它是实现电子琴运作的主要控制模块.由设计者把编好的VHDL程序烧制到现场可编程逻辑器件FPGA中,然后通过控制输入电路把乐谱输入到FPGA,产生不同的频率驱动扬声器,发出不同的乐谱.同时也把发出的乐谱符号通过显示器输出.

4.2 程序设计的流程图

程序设计的流程图如图4.2所示.

图4.2 程序设计流程图

根据系统的两大功能:手动弹奏与自动演奏,可将其分成音频发生模块,键盘控制模块和存储器模块三部分。系统框图如下图所示。音频发生模块由分频器组成,产生8个频率(还可扩展),对应8个音符(中央C,D,E,F,G,A,

B和高音C),这些频率经放大后驱动喇叭,即可发出声音。键盘选择手动弹奏模式时,按下音符键后就选通相应的频率输出,可同时多个频率叠加输出,产生和弦效果,若同时打开录音开关,还可将所奏音乐记录下来,然后回放;选择自动演奏模式时,存储器里事先编写好的音符信息被依次取出,去选通各个频率输出,实现自动奏乐。

系统结构框图

4.3简易电子琴的工作流程图

图3.3 简易电子琴的工作流程图4.4简易电子琴中各模块的设计

FPGA的设计是整个系统的中心环节,具有举足清重的作用.它的实现主要是由设计者用VHDL硬件描述语言编程实现电子琴的功能,仿真调试成功之后,再烧到FPGA器件中去.这样作出来的成品插上电源,便可脱机运行.而FPGA模块的设计又重在VHDL语言的编程实现.用VHDL语言编写的程序总的顶层模块映射原理图如图3.4所示. 它是由乐曲自动演奏模块、音调发生模块和数控分频模块组成。标准时钟频率经分频器分频得到一个12MHZ的频率和一个8HZ的频率,并分别输入音调发生模块和自动演奏模块。从自动演奏模块输出的是乐谱信号,该乐谱信号作为音调发生模块的敏感信号输入并对其进行控制。音调发生模块有两个输出,分别是code和high,两个都接外部的显示部分,只不过code显示的是乐谱,high显示的是该乐谱是高音还是低音。

为了更清楚的了解电子琴的工作过程,我们利用EDA工具(本课程设计Max+plus)对各个模块实施时序仿真(Timing Simulation),由自顶向下的设计方式,最后将三个模块进行整合,做出简易电子琴整个系统的时序仿真图。

4.4.1 乐曲自动演奏模块

乐曲自动演奏模块的作用是产生8位发声控制输入信号。当进行自动演奏时,由存储在此模块中的8位二进制作为发声控制输入,从而自动演奏乐曲。这段模块的原理图如图所示:

乐曲自动演奏模块原理图

乐曲自动演奏模块可以由VHDL语言来实现,下面是一段主要代码:BEGIN

IF AUTO='0'THEN

CASE COUNT IS

WHEN 0=>INDEX0<="00000100"; --3

WHEN 1=>INDEX0<="00000100"; --3

WHEN 2=>INDEX0<="00000100"; --3

WHEN 3=>INDEX0<="00000100"; --3

.

.

.

WHEN 29=>INDEX0<="00000100"; --3

WHEN 30=>INDEX0<="00000010"; --2

WHEN 31=>INDEX0<="00000010"; --2

END CASE;

ELSE INDEX0<=INDEX2;

END IF;

END PROCESS;

4.4.2音调发生模块

音调发生模块的作用是产生音阶的分频预置值。当8位发声控制输入信号中的某一位为高电平时,则对应某一音阶的数值将输出,该数值即为该音阶的分频预置值,分频预置值控制数控分频模块进行分频,由此可得到每个音阶对应的频率。下图是音调发生模块的原理图:

音调发生模块原理图

音调发生模块可以由VHDL语言来实现,下面是一段主要代码:

BEGIN

CASE INDEX IS

相关文档