1、 1 基于 FPGA的电子琴制作 【摘要】 文章 介绍了基于 FPGA的电子琴的工作原理和设计过程。用 Altera公司的 Cyclone 系列的 EP3C16F484C6N芯片为核心器件,通过超高速硬件描述语言 VHDL,在 Quartus 9.0平台上,实现了电子琴的手动弹奏和自动演奏功能。本系统主要由音乐输入模块( music.vhd),音 调发生模块 (tone.vhd)和音频播放模块 (speaker.vhd)组成。拨动开关选择手动弹奏模式时,通过拨动音符开关和 音调选择后就会选择相应的频率输出;拨动开关选择自动演奏模式时,音乐输入模块会将编写好的音乐简谱 依次取出,去选通各个对应的
2、频率输出,实现自动演奏。 音频播放模块 由分频器来实现,可产生 21 个频率, 分别为低中音各 7个音符,通过喇叭 发出声音。 【关键词】 FPGA ; Quartus ; VHDL ;电子琴 ; 音符 2 目录 第一章 引言 1.1 课题解析 1.2 VHDL 语言与 Quartus 环境简介 1.2.1 VHDL 语言简介 1.2.2 Quartus 环境简介 第二章 原理分析 2.1 电子琴设计 原理 2.2 系统设计的主要组成部分 第三章 硬件设计 3.1 现场可编程门阵列 FPGA简介 3.2 按键模块及其功能 3.3 显示模块及其功能 第四章 软件设计 4.1 系统的流程 4.2
3、设计模块 4.2.1 音乐输入模块( music.vhd) 4.2.2 音调发生模块 (tone.vhd) 4.2.3 音频播放模块 (speaker.vhd) 第五章 软硬件的系统测试 第六章 心得体会 6.1 实验中遇到的问题和解决过程 6.2 电子琴 的进一步改进计划 附录 各个模块程序以及顶层原理图 附录 内置音乐简谱 3 第一章 引言 电子琴作为音乐与科技的产物,在电子化和信息化的时代,为音乐的 大众化做出了 很大 的贡献,歌曲的制作 大多数 都要 由 电子琴 来 完成,然后通过媒介流传开来,电视剧 和 电影 的 插曲、电视节目音效、甚至你的手机铃声,都很可能包含电子琴的身影。 1.
4、1 课题分析 随着电子技术的高速发展, 由于 FPGA/CPLD 具有 高速、高可靠性、串并行工作方式等突出优点 ,所以 在电子设计中 受到 广泛 的 应用, 并且它 代表着未来 EDA设计的方向。 FPGA/CPLD 的设计采用了高级语言 ,例 如 VHDL 语言, AHDL语言 。从而 进一步打破了软硬件之间的界限,加速了产品的开发过程 ,缩短了设计周期 。所以 采用 FPGA/CPLD 取代传统的标准集成电路、接口电路 已经成为 电子技术发展的必然趋势。 EDA( 电子设计自动化 ) 代表了当今电子设计技术的最新发展方向 , 它的基本特征是 : 设计人员按照 “ 自顶向 下 ” 的设计方
5、法 , 对整个系统进行方案设计和功能划分 , 系统的关键电路用一片或几片集成电路 ( FPGA/CPLD) 实现。 电子琴是数字电路中的一个典型应用。在实际的硬件设计中用到的器件非常多,连线比较复杂,同时会产生比较大的延时,从而造成测量误差较大,可靠性不好。以 EDA 工具作为开发手段,运用 VHDL 硬件描述语言将使整个系统大大简化,提高了电子琴整体的性能和可靠性。 1.2 VHDL 语言和 Quartus 环境简介 1.2.1 VHDL 语言简介 VHDL 是超高速集成电路硬件描述语言 , 是一种用于电路设计的高级语言。它出现于 80 年代后期, 最初是由美国国防部开发出来 的,是为了 供
6、美军用来提高设计的可靠性和缩减开发周期的一种使用范围较小的设计语言 。 VHDL主要是应用在数字电路的设计中。目前,它在中国的应用多数是用在 FPGA/CPLD/EPLD的设计中 ,同时也被 一些实力较为雄厚的单位用来设计 ASIC。 VHDL 具有多层次描述系统硬件功能的能力,支持自顶向下和基于库的设计特点。其开发流程:在顶层用方框图或硬件语言对电路的行为进行描述后,进行系统仿真验证和纠错。再用逻辑综合优化工具生成具体的门级逻辑 电路的网表。然后通过适配器将网表文件配置于指定的目标器件,产生最终下载文件或配置文件。最后把适配后生成的下载或配置文件通过编程器或编程电缆下载到具体的FPGA/CP
7、LD 器件中去,以便进行硬件调试和验证,而实现可编程的专用集成电路4 ASIC 的设计。 VHDL 主要用于描述数字系统的结构,行为,功能和接口。除了含有许多具有硬件特征的语句外, VHDL 的语言形式和描述风格与句法是十分类似于一般的计算机高级语言。 VHDL 系统设计与其他硬件描述语言相比, VHDL 具有更强的行为描述能力,从而决定了他成为系统设计领域最佳的硬件描述语言。强大的行为描述能力是避开具体的器件结构,从逻辑行为上描述和设计大规模电子系统的重要保证 。 1 1.2.2 Quartus 简介 Quartus 是 Altera 公司的综合性 PLD 开发软件,支持原理图、 VHDL、
8、VerilogHDL 以及 AHDL( Altera Hardware Description Language)等多种设计输入形式,内嵌自有的综合器以及仿真器,可以完成从设计输入到硬件配置的完整 CPLD 设计流程。 Quartus 支持 Altera 的 IP核,包含了 LPM/MegaFunction 宏功能模块库,使用户可以充分利用成熟的模块,简化了设计的复杂性、加快了设计速度。Maxplus 作为 Altera 的上一代 PLD 设计软件,由于其出色的易用性而得到了广泛的应用。目前 Altera 已经停止了对 Maxplus 的更新支持, Quartus 与之相比不仅仅是支持器件类型
9、的丰富和图形界面的改变。 Altera 在 Quartus 中包含了许多诸如 SignalTap 、 Chip Editor 和 RTL Viewer 的设计辅助工具,集成了 SOPC 和 HardCopy 设计流程, 并且 继承了 Maxplus 友好的图形界面及简便的使用方法。 Altera Quartus 作为一种可编程逻辑的设计环境 , 由于其强大的设计能力和直观易用的接口,越来越受到数字系统设计者的欢迎 。 2 第二章 原理分析 乐曲都是由一连串的音符组成,按照乐曲的乐谱依次输出这些音符所对应的频率,就可以在扬声器上连续地发出各个音符的音调。为了准确地演奏出一首乐曲,仅仅让扬声器能够
10、发出声音是远远不够的,还必须准确地控制乐曲的节奏,即每个音符的持续时间。由此可见,乐曲中每个音符的发音频率以及音符持续的时间是乐曲能够连续演奏的两个关键因素。 乐曲的 12平均率规定:每 2个八度音之间的频率要相差 1倍,比如简谱中的中音 2与高音 2。在 2个八度音之间,又可分为 12个半音。另外,音符 A(简谱中的低音 5)的频率为 392Hz,音符 E到 F 之间、 B到 C之 间为半音,其余为全5 音。由此可以计算出简谱中从低音 l至高音 1之间每个音符的频率。简谱音名与频率对应关系如图 2-1所示: 音名 频率 /Hz 音名 频率 /Hz 音名 频率 /Hz 低音 1 261.63
11、中音 1 523.25 高音 1 1046.50 低音 2 293.66 中音 2 587.33 高音 2 1174.66 低音 3 329.63 中音 3 659.25 高音 3 1381.51 低音 4 349.23 中音 4 698.46 高音 4 1396.92 低音 5 392.00 中音 5 783.99 高音 5 1567.98 低音 6 440.00 中音 6 880.00 高音 6 1760.00 低音 7 493.88 中音 7 987.76 高音 7 1975.52 表 2-1 简谱音名与频率的对应关系 音名 分频系数 音名 分频系数 音名 分频系数 低音 1 19111
12、0 中音 1 95557 高音 1 47778 低音 2 170265 中音 2 85131 高音 2 42566 低音 3 151685 中音 3 75844 高音 3 36192 低音 4 143172 中音 4 71586 高音 4 35793 低音 5 127551 中音 5 63776 高音 5 31888 低音 6 113636 中音 6 56818 高音 6 28409 低音 7 101239 中音 7 50620 高音 7 25310 表 2-2 简谱音名与分频系数 的对应关系 6 第三章 硬件设计 3.1 Cyclone 简介 低成本 Cyclone III FPGA 是 A
13、ltera Cyclone 系列的第三代产品。 Cyclone III FPGA 系列前所未有地同时实现了低功耗、低成本和高性能,进一步扩展了FPGA 在成本敏感大批量领域中的应用。 采用台湾半导体生产公司 (TSMC)的 65-nm低功耗 (LP)工艺技术, Cyclone III 器件对芯片和软件采取了更多的优化措施,在所有 65-nm FPGA中是功耗最低的,在对成本和功耗敏感的大量应用中,提供丰富的特性推动宽带并行处理的发展。 Cyclone III 系列包括 8 个型号,容量在 5K 至 120K 逻辑单元 (LE)之间,最多534 个用户 I/O 引脚。如表 1 所示, Cyclo
14、ne III 器件具有 4-Mbit 嵌入式存储器、 288 个嵌入式 18x18 乘法器、专用外部存储器接口电路、锁相环 (PLL)以及高速差分 I/O 等。 Cyclone III FPGA 系列为成本敏感的各种大批量应用提供多种器件和封装选择。 Cyclone III 器件结温在 -40C 至 125C 之间,有三种温度等级,支持各种工作环境。 3.2 按键 模块 及其 功能 设计 初期采用的是开关控制,效果并不好,后期将采用键盘进行控制已充分模拟电子琴的弹奏 效果 。 3.3 显示 模块及其 功能 3 个 LED 灯显示 低中高 音。一个 共阴极 的数码管显示 对应 简谱值 。 其中
15、共阴极 的数码管如图所示: 7 第四章 软件设计 4.1 系统的流程 本设计采用 Altera 公司的 EDA 软件系统 EP2C8Q208C8 来完成。采用自顶向下的设计方法。图 4-1为其软件流程图: 是 否 4.1系统的流程图 软件设计采用结构化程序设计方法,功能模 块各自独立,实际上在设计中将键盘输入和乐曲存储放在了一个音乐输入 模块中,软件设计的核心部分是数控分频器,键盘输入和乐曲储存都是提供给它相应的分频比。对输入的 系统 时钟进行进入 自动演奏? 乐曲存储 键盘输入 音符显示 和高低音显示 数控分频 音频 播放 16Hz 的 节拍时钟 50MHz系统 时钟 8 分频, 得到 50
16、%占空比的 信号, 最终输出的就是想得到的音阶的频率。 4.2 顶层 设计模块 本系统主要由三个功能模块组成: music.vhd、 speaker.vhd 和 tone.vhd。系统顶层设计原理图如图 4-2所示,该系统有 4个输入, 3 个输出端口。其原理图如 4-2: 4.2 顶层设计模块 organ6.vhd 4.3 音频播放模块 音频播放模块通过对 系统时钟( 50MHz)按特定的分频系数进行分频,得到音符的频率输入到喇叭中。为了更好的驱动喇叭, 有两种方法可以获得占空比约为50%的方波。方案一为通过对系统分频到 2 倍频程然后再通过二分频获得占空比50%的方波。我用的是方案二,通过
17、 vhdl代码内部约束,在分频过程中通过 not语句实现时钟信号的翻转,具体如下: div_clk:process(clk) variable count:integer range 0 to 200000:=1; variable stop:integer range 0 to 200000:=1; begin if(clkevent and clk=1)then if(tone_index=0)then clk_tone=0; elsif(count=tone_index)then count:=count+1; else count:=0;clk_tone=not clk_tone; e
18、nd if; if(clkevent and clk=0 and count=0)then clk_tone=0; end if; 9 end if; spks=clk_tone; end process; end bhv; 4.3 speaker.vhd 4.4 音调发生模块 通过 case 语句对外部输入产生的二进制分情况对号入座,此模块输出的high_tone 和 hex0 直接驱动 LED 灯和数码管的显示。而输出的分频系数输入到speaker.vhd 模块中。 4.4 tone.vhd 4.5 音乐输入模块 音乐输入分为自动输入和手动输入两部分,由 auto 键控制。乐谱通过 case 语句存在此模块中,通过 mux21 切换两首歌曲。通过外部输入转换到对应 9位二进制编码, 2 位用于区分低中高音, 7 位分别表示 1-2-3-4-5-6-7,譬如 100000001表示高音的 1。 4.5 music.vhd 10 第五章 硬件系统测试 通过 数据线下载到 FPGA 开发板上,外接喇叭,数码管 , 开关,按键和 LED灯。经测试 , 效果良好。