成都信息工程大学
数字电路综合设计报告
课程名称: 数字电路综合设计
系
部: 网络空间安全学院
专业班级:
学生姓名:
学
号:
指导教师:
报告成绩:
计题目:基于 FPGA 的音乐演奏电路设计
一.设计要求
1. 设计一个乐曲硬件演奏电路,通过数字逻辑电路控制蜂鸣器演奏指定的
乐曲;
2. 使用数字电路实验板上的 FPGA 器件(EP4CE15E22C8)作为硬件电路平台,
使用板载的蜂鸣器作为发声元件;
3. 在 QuartusII 环境下,设计各单元电路(可用原理图、VHDL 和 LMP 模块
设计),并将各单元电路按各自对应关系相互连接,构成乐曲硬件演奏电路,进
行编译及仿真;
4. 将设计下载到实验板上验证乐曲演奏的效果。
二.系统概述及工作原理
1、乐曲发声原理:
乐曲中的每一音符对应着一个特定的频率(见表 1),要想 FPGA 发出不
同音符的音调,实际上只要控制它输出相应音符的频率即可。
乐曲都是由一连串的音符组成,因此按照乐曲的乐谱依次输出这些音符所
对应的频率,就可以在喇叭上连续地发出各个音符的音调。
组成乐曲的每个音符的发音频率值及其持续的时间是乐曲能够连续演奏
所需要的两个基本要素。
音名
频率
(Hz)
低音 1
261.1
音名
中音 1
频率
(Hz)
音名
频率
(Hz)
523.3
高音 1
1049.5
低音 2
293.7
中音 2
587.3
高音 2
1174.7
低音 3
329.6
中音 3
659.3
高音 3
1318.5
低音 4
349.2
中音 4
698.5
高音 4
1396.9
低音 5
392
中音 5
784
高音 5
1568
低音 6
440
中音 6
880
高音 6
1760
低音 7
493.9
中音 7
987
高音 7
1975.5
2、硬件电路的发声原理:
声音的频谱范围约在几十到几 kHz,若能利用程序来控制 FPGA 芯片某个
引脚按照一定的顺序输出一定频率的矩形波,接上喇叭就能发出相应频率的声
音。
三.硬件介绍
1.课程设计实验板
2. FPGA
FPGA(Field-Programmable Gate Array),即现场可编程门阵列,它是在
PAL、GAL、CPLD 等可编程器件的基础上进一步发展的产物。它是作为专用集成
电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又
克服了原有可编程器件门电路数有限的缺点。FPGA 采用了逻辑单元阵列 LCA
( Logic Cell Array ) 这 样 一 个 概 念 , 内 部 包 括 可 配 置 逻 辑 模 块 CLB
(Configurable Logic Block)、输入输出模块 IOB(Input Output Block)和
内部连线(Interconnect)三个部分。 现场可编程门阵列(FPGA)是可编程器
件,与传统逻辑电路和门阵列(如 PAL,GAL 及 CPLD 器件)相比,FPGA 具有不
同的结构。FPGA 利用小型查找表(16×1RAM)来实现组合逻辑,每个查找表连
接到一个 D 触发器的输入端,触发器再来驱动其他逻辑电路或驱动 I/O,由此构
成了既可实现组合逻辑功能又可实现时序逻辑功能的基本逻辑单元模块,这些模
块间利用金属连线互相连接或连接到 I/O 模块。FPGA 的逻辑是通过向内部静态
存储单元加载编程数据来实现的,存储在存储器单元中的值决定了逻辑单元的逻
辑功能以及各模块之间或模块与 I/O 间的联接方式,并最终决定了 FPGA 所能实
现的功能,FPGA 允许无限次的编程。
四.软件介绍
Quartus II 是 Altera 公司的综合性 CPLD/FPGA 开发软件,原理图、VHDL、
VerilogHDL 以及 AHDL(Altera Hardware 支持 Description Language)等多种
设计输入形式,内嵌自有的综合器以及仿真器,可以完成从设计输入到硬件配置
的完整 PLD 设计流程。Quartus II 提供了完全集成且与电路结构无关的开发包
环境,具有数字逻辑设计的全部特性,包括:可利用原理图、结构框图、
VerilogHDL、AHDL 和 VHDL 完成电路描述,并将其保存为设计实体文件;芯片(电
路)平面布局连线编辑;LogicLock 增量设计方法,用户可建立并优化系统,然
后添加对原始系统的性能影响较小或无影响的后续模块;功能强大的逻辑综合工
具;完备的电路功能仿真与时序逻辑仿真工具;定时/时序分析与关键路径延时
分析;可使用 SignalTap II 逻辑分析工具进行嵌入式的逻辑分析;支持软件源
文件的添加和创建,并将它们链接起来生成编程文件;使用组合编译方式可一次
完成整体设计流程;自动定位编译错误;高效的期间编程与验证工具;可读入标
准的 EDIF 网表文件、VHDL 网表文件和 Verilog 网表文件;能生成第三方 EDA 软
件使用的 VHDL 网表文件和 Verilog 网表文件。
五.设计的具体实现
1. 总体设计
音乐器件演奏电路主要是用 VHDL 语言来设计,并利用 QuartusII 软件工具来编
译、测试和仿真。根据原理图,共分为十六分频器、数控分频器、分频数预置器
这三个主要模块。分频数预置器模块提供分频预置数给数控分频模块提供基数初
值。数控分频模块根据分频预置数输出各个音符对应的频率。其步骤如下:
1、创建一个新的设计工程
2、用 VHDL 语言设计 16 分频器,并生成逻辑符号块;
3、用 VHDL 语言设计数控分频器,并生成逻辑符号块;
4、用 VHDL 语言或调用 LPM-rom 设计分频数预置器,并生成逻辑符号块;
5、调用 LPM-counter 产生一个计数器,用 JK 触发器实现一个 2 分频器(
即一个 T’触发器);
6、添加输入及输出端口,并完成电路连接;
7、编译;
8、锁定引脚,晶体振荡器时钟输入为 Pin23(16MHz 信号),计数器时钟输入(1Hz
或 2Hz 信号)和清零信号 ,蜂鸣器(喇叭)输出用导线通开放接口连接;
9、再次编译;
10、器件下载。
11、听乐曲验证结果。
总体结构框图如下:
其中:
1.晶体振荡器时钟输入为 Pin23(16MHz 信号);
2.数控分频器用于产生各音符所需的频率;
3.计数器时钟输入(1Hz 或 2Hz 信号)和清零信号;
4.蜂鸣器(喇叭)输出用导线通开放接口连接。
5.16 分频计数器用于将输入的 16MHz 信号输出为 1MHz 的信号,二分频器同样如
此
演奏乐曲时,每一音符的停留时间由音符数据查表电路的节拍数决定;音符数据
查表电路本质上是一个在计数器控制下的 ROM,根据音符数据的个数确定该 ROM
的地址位数,当输入 2Hz 查表时钟频率时,计数器提供的地址值从 ROM 中取出音
符数据,传递给分频预置器;再由其查表找出对应的分频预置数,从而通过数控
分频器产生对应的音符频率输出,乐曲就开始连续地演奏起来了。
2. 单元电路设计、仿真与分析
1、用 VHDL 语言设计十六分频器:注意 VHDL 代码的文件名与实体名一致。
其波形仿真图如下:
2、用 VDHL 语言设计数控分频器
产生各音符所需的频率可用数控分频器实现,将较高频率的信号输入数
控分频器,数控分频器在与相应音符对应的分频预置数的控制下,就可产生所对
应音符的信号频率。若基准频率采用 1MHz,则使用 11 位数控分频器即可满足要
求。输出信号的频率与分频预置数的关系如下:
其代码设计如下:
3、用 VHDL 语言实现分频数预置器:注意计数器的输出与预置器的输入类型
一样;2047 为空音不出声;因为我做的是生日快乐歌,需要 28 个音,所以取 2
的 5 次方,模 5;利用 Case 语句设置音,设置每个音的频率。
x
2047
610
2
f
m
本实验中想要演奏的音乐为“两只老虎”,所以最终代码实现为:
3.调试及相关说明
引脚设置如图,锁定引脚,晶体振荡器时钟输入为 Pin23(16MHz 信号),
计数器时钟输入(1Hz 或 2Hz 信号)和清零信号 ,蜂鸣器(喇叭)输出用
导线通开放接口连接;
每次编译,选择 Project->Set as Top-Level Enitity 设置置顶,并启用
全程编译,若出现报错,根据提示排查错误。
将自己设计的 VDHL 描述生成元件符号,选择
File->Create/Update->Create Symbol File for Current File,自己设计