1、 1 基于 FPGA 的电子琴设计 摘要 : 文中介绍了电子琴系统的整体设计 ,并基于超高速硬件描述语言 VHDL在 Xilinx 公司的 Spartan 系列的 2sc200PQ208-5 芯片上编程实现 . 电子琴系统的设计包含四个模块 ,分别是控制输入电路、 FPGA、显示电路和扬声器电路。其中 FPGA 模块的设计是整个电子琴系统设计的核心内容。四个模块的有机组合完成了电子琴自动演奏的功能。文中还详细介绍了 FPGA 功能模块的原理及其工作时序仿真图。本产品的特点是成本较低,性能稳定,精度高,有一定的开发价值。 关键词 : 现场可编程 逻辑器件 FPGA 超高速硬件描述语言 VHDL
2、电子琴系统 自动演奏 Design of Electronics_orgon system based on FPGA Abstract: It will introduce the integrate design electronics_orgon system based on FPGA. The design will be achieved in the 2sc200 5pq208 chipof Xilinx corporation with the VHDL(Very High-speed Description-Language) The design of Electronic
3、s_orgon System consist of 4 parts, they are control input circuit、 FPGA、 display circuit and speaker circuit. The program design of FPGA is the core of the system design. Four parts combined to achieve the automatic play electronics_orgon system. the article illuminates the detail of the basic law o
4、f FPGA module and its working timing characteristics. Since the most specialty of the product is its low cost 、 high precision, its worth developing. Keyword: FPGA VHDL Electronics_orgon system Automatic play 目 录 摘要 2 关键字 2 第一章 系统设计 . .4 1.1 设计要求 . .4 1.2 整体设计原理 . .4 第二章 单元电路设计 . .5 2.1 顶层模块 (top)的设
5、计 .5 2.2 自动演奏模块( automusic)的设计 5 2.3 音调发生模块( tone)的设计 .5 2.4 数控分频模块( speaker)的设计 5 第三章 软件设计 . . 6 3.1VHDL 语言简介 . 6 3.2 软件设计 .6 2 第四章 结束语 . .7 第五章 参考文献 . .7 第六章 附录 . .8 第一章 系统设计 1.1 设计要求 1.1.1 基本部分 设计一八音电子琴,由键盘输入来控制其对应的 音响。 1.1.2 发挥部分 设计一乐曲自动演奏器,由用户自己编制乐曲存入电子琴,电子琴可以完成自动演奏的功能。 1.2 总体设计方案 采用现场可编程逻辑器件(
6、FPGA)制作,利用 EDA 软件中的 VHDL 硬件描述语言编程进行控制,然后烧制实现 .采用 FPGA 来设计的原理图如图 1.1 所示 .它由控制输入电路、 FPGA、显示电路和扬声器电路组成。 图 1.1 采用 FPGA 设计的电子琴原理方框图 控制输入电路主要是为用户设计的 ,起到一个输入控制的作用 .FPGA 是现场可编 程逻辑器件 ,也是本设计方案的核心内容 ,它是实现电子琴运作的主要控制模块 .由设计者把编好的VHDL 程序烧制到现场可编程逻辑器件 FPGA 中 ,然后通过控制输入电路把乐谱输入到 FPGA,产生不同的频率驱动扬声器 ,发出不同的乐谱 .同时也把发出的乐谱符号通
7、过显示器输出 . 1.2.1 设计思路 通过可编程逻辑器件( PLD)和 VHDL 硬件描述引言来实现电子琴的基本部分和发挥部分的设计。对于基本部分,设计的主体是数控分频器,对输入的频率进行分频,得到各个音阶对应的频率最为输出。对于发挥部分,则在原设计的基础上,增 加一个乐曲存储模块,代替了键盘输入,产生节拍控制( index 数据存留时间)和音阶选择信号,即在此模块中可存放一个乐曲曲谱真值表,由一个计数器来控制此真值表的输出,而由此计数器的计数时钟信号作为乐曲节拍控制信号,从而可以设计出一个纯硬件的乐曲自动演奏电路。 第二章 单元电路设计 2.1 顶层模块的设计 VHDL 采用的是自顶向下的
8、设计方式,顶层模块由乐曲自动演奏( automusic),音调控制输入电路 FPGA 显示电路 扬声电路 3 发生器( tone)和数控分频器( speaker)三个模块组成。图 2-1-1 即是顶层设计原理图。 其中乐曲演奏部 分又包括了键盘编码。设置一个自动演奏 /键盘输入切换 auto,即当 auto=0时,选择自动演奏音乐存储器里面的乐曲, auto=1时,选择由键盘输入的信号,再对其进行编码,输出的都是八位二进制数,对应音调发生器的输入。 图 2-1-1 顶层设计原理图 2.2 自动演奏模块 (automusic)的设计 为了实现扩展部分的设计,便需要多加上一个音乐存储模块,该模块的
9、作用是产生 8位发声控制输入 index, auto 为 0 或 1 时 可以选择自动演奏或者键盘输入,如果 auto 为 0,则而由存储在此模块中的 8 位二进制数来作为发声控制输入,由此便可自动演奏乐曲。此模块的 VHDL 语言中包括两个进程,首先是对基准脉冲进行分频得到 4Hz 的脉冲,作为第二个进程的时钟信号,它的目的是控制每个音阶之间的停顿时间,此处便是 1/4=0.25s,第二个进程是音乐的存储,可根据需要编写不同的乐曲。 2.3 音调发生器 (tone)模块的设计 音调发生器的作用是产生获得音阶的分频预置值。当 8 位发声控制输入 index 中的某一位为高电平时,则对应某一音阶
10、的数值将以端口 tone 输出,作为获得该音阶的分频预置值,该值作为数控分频器的输入,来对 4MHz 的脉冲进行分频,由此得到每个音阶相应的频率,例如输入 index=“00000010“,即对应的按键是 2,产生的分频系数便是 6809;由 code输出对应该音阶简谱的显示数码;由 high 输出指示音阶高 8 度的显示,低电平有效。 2.4 数控分频模块( speaker)的设计 数控分频模块的目的是对基准脉冲分频,得到 1,2,3,4,5,6,7 七个音符对应频率。该模块的 VHDL 描述中包含了三个进程。首先对 32MHz 的基准脉冲进行分频得到 8MHz 的脉冲,然后按照 tone1
11、 输入的分频系数对 4MHz 的脉冲再次分频,得到的便是所需要的频率。而第三个进程的作用是在音调输出时再进行二分频,将脉冲展宽,以使扬声器有足够功率发音。 第三章 软件设计 3.1 VHDL 硬件描述语言简介 PLD 的软件已发展得相当完善,利用 VHDL 硬件描述语言来实现程序的编制,这样硬件4 的功能描述可以完全在软件上实现。 VHDL 是用于逻辑设计的硬件描述语言,成为 IEEE 标准。它作为描述硬件电路的语言,有以下特点: ( 1) VHDL 的宽范围描述能力使它成为高层次设计的核心,将设计人员的 工作重心提高到了系统功能的实现与调试,而花较少的精力于物理实现。 ( 2) VHDL 可
12、以用简洁明确的代码描述来进行复杂控制逻辑 的设计,灵活且方便,而且也便于设计结果的交流、保存和重用。 ( 3) VHDL 的设计不依赖于特定的器件,同一个 HDL 原码可以综合 成 FPGA 或 ASIC,方便了工艺的转换 。 ( 4) VHDL 是一个标准语言,为众多的 EDA 厂商支持,而且设计出来的电路大多数并行运行 ,因此移植性好且速度快 。 采用 VHDL 语言设计复杂数字电路的方法具有很多优点,其语言的设计技术齐全、方法灵活、支持广泛。它可以支持自顶向 下( Top Down)和基于库( Library_Based)的设计方法,而且还支持同步电路、异步电路、 FPGA 以及其他随机
13、电路的设计,其范围很广,语言的语法比较严格,给阅读和使用都带来了极大的好处。 3.2 软件设计 本设计采用 Xilinx 公司的 EDA 软件系统 Foundation Series ISE 4.2i 来完成。采用自顶向下的设计方法。图 3.2.1 为其软件流程图。 软件设计采用结构化程序设计方法,功能模块各自独立,实际上在设计中将键盘输入和乐曲存储放在了一个自动 演奏模块中,软件设计的核心部分是数控分频器,键盘输入和乐曲储存都是提供给它相应的分频比。对输入的基准时钟进行多次分频,最终输出的就是想得到的音阶的频率。 VHDL 描述语言和仿真图详见附录。 第四章 结束语 5 本设计利用超高速硬件
14、描述语言 VHDL实现了电子琴的自动演奏和键盘输入发音的简易功能,经过编程,综合,仿真,下载,芯片烧制,最终做出成品,测试情况良好,能够准确实现音阶的发音功能,可切换到自动演奏存储好的乐曲,可根据需要更改程序而实现不同的乐曲存储。 在设计实验时,我本来想做一个电子琴,可是由于对基础知识不够纯熟 ,最终没有成功,这个硬件演奏电路是之后匆忙整的,有很多粗糙的地放,主要是参考了实验教材上的程序,实验过程中,犯了很多应该避免的小错误,比如在编写顶层连接文件时,只是单纯按照自己的想法和例题去编写,后来发现编译的结果有错误。后来发现是因为管脚的名称和模块的名称一样或相近导致的,后来在老师的指导下发现问题所
15、在,从而解决了问题。 第五章 参考文献 1 李冬梅 .PLD 器件与 EDA 技术【 M】 . 北京:北京光播学院出版社, 2000 年第一版 2 赵俊超 .集成电路设计 VHDL 教程【 M】 .北京:北京希望电子出版社, 2002 年第一版 3 赵曙光 .郭万有 .可编程逻辑器件原理,开发与应用【 M】 .西安:电子科技大学出版社 .2000年第一版 4 甘历 .VHDL 应用与开发实践【 M】 .北京:科技出版社 .2003 年 第一版 第七章 附录 与利用微处理器 (CPU 或 MCU)来实现乐曲演奏相比,以纯硬件完成乐曲演奏电路的逻辑要复杂得多,如果不借助于功能强大的 EDA 工具和
16、硬件描述语言,仅凭传统的数字逻辑技术,即使最简单的演奏电路也难以实现。如何使用 EDA 工具设计电子系统是人们普遍关心的问题,本设计在美国 ALTERA 公司 MAX + plus 的 EDA 软件平台上,使用层次化设计方法,实现了乐曲发生器的设计。乐曲选取梁祝中化蝶部分,其简谱如图 1 所示。 1、系统结构描述 1)本设计完全用 VHDL 语言实现的 主系统由 顶层文件 SONGER.VHD 和 三个 底层 模 块 组 成 , 有TONETABA.VHD,NOTETABS.VHD 和 SPCAKERA.VHD 2)源代码 1.顶层文件 1.SONGER.VHD. -顶层文件 LIBRARY
17、IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY SONGER IS PORT(CLK12MHZ:IN STD_LOGIC; CLK8HZ:IN STD_LOGIC; 6 CODE1:OUT INTEGER RANGE 0 TO 15; HIGH1:OUT STD_LOGIC; SPKOUT: OUT STD_LOGIC); END ENTITY SONGER; ARCHITECTURE one OF SONGER IS COMPONENT NOTETABS PORT(CLK:IN STD_LOGIC; TONEINDEX:OUT INTEGER RANGE
18、0 TO 15); END COMPONENT; COMPONENT TONETABA PORT( INDEX: IN INTEGER RANGE 0 TO 15; CODE: OUT INTEGER RANGE 0 TO 15; HIGH:OUT STD_LOGIC; TONE:OUT INTEGER RANGE 0 TO 16#7FF#); END COMPONENT; COMPONENT SPEAKERA PORT( CLK: IN STD_LOGIC; TONE:IN INTEGER RANGE 0 TO 16#7FF#; SPKS: OUT STD_LOGIC); END COMPO
19、NENT; SIGNAL TONE:INTEGER RANGE 0 TO 16#7FF#; SIGNAL TONEINDEX:INTEGER RANGE 0 TO 15; BEGIN U1:NOTETABS PORT MAP(CLK=CLK8HZ,TONEINDEX=TONEINDEX); U2:TONETABA PORT MAP(INDEX=TONEINDEX,TONE=TONE,CODE=CODE1,HIGH=HIGH1); U3:SPEAKERA PORT MAP(CLK=CLK12MHZ,TONE=TONE,SPKS=SPKOUT); END; 2) 底层文件 1.TONETABA.V
20、HD 用来查询音调频率 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY TONETABA IS PORT(INDEX: IN INTEGER RANGE 0 TO 15; CODE:OUT INTEGER RANGE 0 TO 15; -定义错的输出引脚 HIGH:OUT STD_LOGIC; -定义 high 输出引脚 TONE:OUT INTEGER RANGE 0 TO 16#7FF#); -定义 tone 输出引脚 END TONETABA; ARCHITECTURE one OF TONETABA IS 7 BEGIN SEARCH
21、:PROCESS(INDEX) BEGIN CASE INDEX IS -此项用来检索音调的频率,高八度和低八度 共十六个音符 WHEN 0 =TONETONETONETONE TONE TONE TONE TONE TONE TONE TONE TONE TONE TONE TONE TONE NULL; END CASE; END PROCESS; END; 2.SPEAKERA.VHD - 用来分频 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY SPEAKERA IS PORT(CLK:IN STD_LOGIC; TONE:IN IN
22、TEGER RANGE 0 TO 16#7FF#; SPKS:OUT STD_LOGIC); END SPEAKERA; ARCHITECTURE behav OF SPEAKERA IS SIGNAL PRECLK,FULLSPKS:STD_LOGIC; BEGIN DIVIDECLK:PROCESS(CLK) VARIABLE COUNT4:INTEGER RANGE 0 TO 15; BEGIN PRECLK11 THEN PRECLKtoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextonei
23、ndextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneinde
24、xtoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindexto
25、neindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextonei
26、ndextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindextoneindexNULL; END CASE; END PROCESS; END; 三系统以及各个模块的仿真波形 1.顶层模块 songer.vhd 2.底层模块 toneba.vhd 3.底层模块 notetabs.vhd