基于FPGA的简易电子琴实现.docx

上传人:h**** 文档编号:139933 上传时间:2018-07-10 格式:DOCX 页数:24 大小:73.22KB
下载 相关 举报
基于FPGA的简易电子琴实现.docx_第1页
第1页 / 共24页
基于FPGA的简易电子琴实现.docx_第2页
第2页 / 共24页
基于FPGA的简易电子琴实现.docx_第3页
第3页 / 共24页
基于FPGA的简易电子琴实现.docx_第4页
第4页 / 共24页
基于FPGA的简易电子琴实现.docx_第5页
第5页 / 共24页
点击查看更多>>
资源描述

1、 基于 FPGA 的简易电子琴实现 李全 摘要 本系统是采用 EDA 技术设计的一个简易的八音符电子琴,该系统基于计算机中时钟分频器的原理,采用自顶向下的设计方法来实现,它可以通过按键输入来控制音响。 多功能电子琴的设计是在原有普通电子琴的基础上进行扩充的一个设计。该电子琴的设计大体 可以由 三个模块构成,分别 是 电子琴音调发生器模块、数控分频模块和自动演奏模块。用超高速硬件描述语言 VHDL 编程 可以 实现各个模块的功能。能 够 实现弹琴和 自动 演奏的功能 。系统实现是 用硬件描述语言 VHDL 按 照 模块化方式进行设计,然后 进行编程 、时序仿真、总体整合。本系统的功能比较齐全,有

2、一定的现实使用的价值。本文中介绍了电子琴系统的整体的设计 ,并基于超高速硬件描述语言 VHDL 在相关的芯片上编程实现的。 关键字 电子琴; EDA;现场可编程逻辑器件 FPGA;超高速硬件描述语言 VHDL;音调发生;数控分频; 1 引 言 我们生活在一个信息高速发达的时代,各种各样电子产品层出不穷。对于广大老百姓来说,电子琴可以说已经不再是什么 “ 新鲜玩意 ” 了,它现在 作为一种休闲 和 娱乐的产品早就推出市面, 面向百姓, 进入了 我 们的生活。 作为一个电子信息科学与技术专业的学生,了解这些电子产品的基本的组成和设计原理是十分必要的,我们学习过了计算机组成的理论知识,而我所做的课程

3、设计正是对我学习的理论进行实践和巩固。本设计主要介绍的是一个用超高速硬件描述语言 VHDL 设计的一个具有若干功能的简易电子琴; 集科学性,先进性,创新性,实用性于一体 ,其理论基础源自于计算机组成原理的时钟分频器。 1.1 设计的 目的 本次设计的目的就是在掌握 计算机组成原理理论相关的 基础上, 了解EDA 技术, 掌握 VHDL 硬件描述语言的设计方法和思想,通过学习的 VHDL语言结合电子电路的设计知识理论联系实际,掌握所学的课程知识, 例如本课程设计就是基于所学的计算机原理中的时钟分频器和定时器的基础之上的,通过本课程设计 , 达到 巩固和综合运用 计算机原理中的知识 ,理论联系实际

4、, 巩固所学理论知识 , 并且 提高 自己通过所学理论 分析、解决计算机 相关的实际问题的能力。 1.2 设计的 基本内容 基于 Quartus 平台,运用 VHDL 语言对简易电子琴的各个模块进行设计,并使用 EDA 工具对 各模块 进行仿真验证 。本设计包含如下三个模块:音调发生模块 、 数控分频模块 、乐曲自动演奏模块, 最后 把各个模块整合后,通过电路的输入输出对应关系连接起来。 1.3 设计 方案 为了实现这种有 “ 弹奏 ” 和 “ 自动播放歌 曲” 功能的多功能 简易 电子琴,以下提供两种方案以供参考: 方案一 :采用单个的逻辑器件组合实现。这样虽然比较直观,逻辑器件分工鲜明,思

5、路也比清晰,一目了然,但是 因为 元器件种类、个数 非常多,而 且 过于复杂的硬件电路也容易引起系统的精度不高、体积过大等 一系列的 不利因素。例如八个不同的音符是由八个不同的频率来控制 输出发声 的,而采用 这个方案需要 运用不同的分频器来对信号进行不同程度的分频。所用仪器之多显而易见。 方案二 : 采用 VHDL 语言编程来实现电子琴的各项功能。 我这个 系统主要由 音调发生 器 模块、数控分频模块、乐曲自动演奏模块 组成 的 。和方案一相比较,方案二就显得比较笼统,只是把整个系统分为了若干个 小 模块, 却 不牵涉到具体的硬件电路。但是我们必须看到 使 用超高速硬件描述语言 VHDL 的

6、优势,它不仅具有良好的电路行为描 述和系统描述的能力 并且通俗易懂。 2 简易电子琴设计 2.1 系统设计的总体思路 实现这个多功能电子琴,我们要考虑的主要是以下三个方面的内容:一、每个音符都有自己的固有频率,由频率的不同就决定了发出什么音调。二、一首乐曲的组成不仅仅是音调,还包括每个音调持续时间的长短,也就是我们通常所说的音长。本设计就是以这 两 个部分为核心内容展开。 经过 对引言 两种方案的分析、比较和总结,我们选用方案二来进行电子琴的设计。 采用现场可编程逻辑器件( FPGA)制作,利用 EDA 软件中的 VHDL 硬件描述语言编程进行控制,下载至试验箱中的 FPGA 模块中,再利用其

7、上资源连接电路从而实现预定功能。采用 FPGA 来设计的原理图如图 2.1 所示 .它由控制输入电路、 FPGA、显示电路和扬声器电路组成。 图 2.1 采用 FPGA 设计的电子琴原理方框图 控制输入电路主要是为用户设计的 , 起到一个输入控制的作用 通过 8控制输入电路 FPGA 显示电路 扬声电路 个按钮对应 8 个音符,外加一个 键盘输入 /自动演奏 切换按钮 。 FPGA 是现场可编程逻辑器件 , 也是本设计方案的核心内容 , 它是实现电子琴运作的主要控制模块 。 编好的 VHDL 程序 下载 到现场可编程逻辑器件 FPGA 中 ,然后通过控制输入电路把乐谱输入到 FPGA,产生不同

8、的频率驱动扬声器 ,发出不同的乐谱 , 同时也把发出的乐谱符号通过 七段数码管 输出 。 2.2 程序设计的流程图 程序设计的流程图如图 2.2 所示 。 图 2.2 程序设计流程图 根据系统的两大功能:手动弹奏与自动演奏,可将其分成 音调发生器模块、数控分频模块和自动演奏模块 三部分。 音调 发生 器模块由分频模块获得其 产生 的 8 个频率(还可扩展),对应 8 个音符(中央 C, D, E, F,开始 等待用户输入 音符信号 根据 音符信号 进行音阶频率的预置 根据频率的预置数输出相应的乐谱的频率 扬声器发音 显示乐谱和高低音标志 G, A, B 和高音 C 分别在七段数码管上显示数字

9、1-8), 为了实现自动播放的友谊地久天长,我们还编辑了低音 G 和 A 两个音。 这些频率经放大后驱动 蜂鸣器 ,即可发出声音。键盘选择手动弹奏模式时,按下音符键后就选通相应的频率输出, 驱动蜂鸣器产生相应的乐音 ;选择自动演奏模式时,存储器里事先编写好的音符信息被依次取出,去选通各个频率输 出,实现自动奏乐。 2.3 简易电子琴的 顶层设计图 图 2.3 简易电子琴 的 顶层设计图 50mhz 系统时钟 player tonemaker 2.4 简易电子琴中各模块的设计 FPGA 的设计是整个系统的中心环节 ,具有 举足轻重 的作用 .它的实现主要是由 小组成员利 用 VHDL 硬件描述语

10、言编程实现电子琴的功能 ,仿真调试成功之后 ,再 下载到试验箱上的 FPGA 器件中去 ,外部连接完成后 的成品 在带电情况下即可 运行 实现预定功能。 而 FPGA 模块的设计又重在 VHDL语言的编程实现 , 用 VHDL 语言编写的程序总的顶层模块映射原理图如图2.3 所示 , 它是由 音调发生器模块( tonemaker)、数控分频模块( Speaker)、自动演奏模块( player) 组成。 系统 pin_28 输入 50MHz 时钟频率经 6 分频得到一个 近似 8HZ 的 基准 频率, 经过二次分频后得到对应音符的频率 。从自动演奏模块输出的是乐谱信号,该乐谱信号作为音调发生

11、器 模块的敏感信号输入并对其进行控制。音调发生模块有两个输出,分别是 code 和high,两个都接外部的显示部分, code 接七段数码管 显示乐谱, high 显示的是该乐谱是高音还是低音。 由于本系统结构较为简单,程序编译无错后我们小组直接在试验箱上连接 好各类外部资源后利用实物验证,经过调试,我们实现了预定功能。 在本系统中我负责的是主要是数控分频模块的元件例华以及顶层设计部分的修改,以下对模块进行说明。 2.4.1 数控分频模块 在对计算机组成原理的学习中,我们知道 数控分频器的功能是在输入端输入不同数据时,对输入时钟产生不同的分频比,输出不同频率的时钟,以改变输出信号的频率。本设计

12、中 数控分频模块是 利用并行预置数的减法计数器 对时基脉冲进行分频,得到与 1、 2、 3、 4、 5、 6、 7 七个音符相对应的频率。 该模块的 VHDL 程序中包含了三个进程。首先对 FPGA 的 50MHz 的时基脉冲进行 6 分频得到 近似 8MHz 的脉冲,然后按照 tone1 输入的分频系数对8MHz 的脉冲再次分频,得到所需要的音符频率。第三个进程的作用是在音调输出时再进行二分频,将脉冲展宽,使扬声器有足够发声功率。 数控分频模块元件图: 数控分频模块原理图 数控分频模块程序: library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEE

13、E.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity speaker is Port ( clk1 : in std_logic; -系统时钟 tone1 : in integer range 0 to 2047; -音符分频系数 spks : out std_logic); -驱动扬声器的音频信号 end speaker; CLK1 SPKS TONE110.0 architecture Behavioral of speaker is signal preclk,fullspks:std_logic; begin pu

14、lse1:process(clk1) -此进程对系统时钟进行 4 分频 variable count:integer range 0 to 12; begin if clk1event and clk1=1 then count:=count+1; if count=3 then preclk=1; elsif count=6 then preclk=0;count:=0; end if; end if; end process pulse1; genspks:process(preclk,tone1) -此进程按照 tone1 输入的分频系数对 8MHz 的脉冲再次分频,得到所需要的音符频率

15、 variable count11:integer range 0 to 2047; begin if preclkevent and preclk=1 then if count11tone1 then count11:=count11+1;fullspks=1; else count11:=0;fullspks=0; end if; end if; end process; delaysps:process(fullspks) -此进程对 fullspks 进行 2分频将脉冲展宽,使扬声器有足够发声功率 variable count2 :std_logic:=0; begin if fullspksevent and fullspks=1 then count2:=not count2; if count2=1 then spks=1; else spks=0; end if; end if; end process; end Behavioral;

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文资料库 > 毕业论文

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。