课程设计说明书
1 引言
电子设计自动化 EDA(Electronic Design Automation)是指利用计算机
完成电子的设计。EDA 技术是以计算机和微电子技术为先导,汇集了计算
机图形学、拓扑、逻辑学、微电子工艺与结构学和计算机数学等等多种计
算机应用学科最新成果的先进技术。EDA 工具的发展经历了两个阶段:物
理工具和逻辑工具。现在 EDA 和系统设计工具正逐渐被理解成一个整体的
概念:电子系统设计自动化。物理工具用来完成设计中的实际物理问题,
如芯片布局、印制电路板布线等;逻辑工具是基于网表、布尔逻辑、传输
时序等概念,首先由原理图编辑器或硬件描述语言进行设计输入,然后利
用 EDA 系统完成综合、仿真、优化等过程,最后生成物理工具可以接受的
网表或 VHDL,Verilog-HDL 的结构化描述。现在常见的 EDA 工具有编辑
器、仿真器、检查分析工具、优化综合工具等。
VHDL 是一种用于电路设计的高级语言。它在 80 年代的后期出现。最
初是由美国国防部开发出来供美军用来提高设计的可靠性和缩减开发周期
的一种使用范围较小的设计语言 。
VHDL 的 英 文 全 写 是 : VHSI ( Very High Speed Integrated Circuit )
Hardware Description Language.翻译成中文就是超高速集成电路硬件描述语
言。因此它的应用主要是应用在数字电路的设计中。目前,它在中国的应
用多数是用在 FPGA/CPLD/EPLD 的设计中。当然在一些实力较为雄厚的单
位,它也被用来设计 ASIC。
VHDL 主要用于描述数字系统的结构,行为,功能和接口。除了含有
许多具有硬件特征的语句外,VHDL 的语言形式和描述风格与句法是十分
类似于一般的计算机高级语言。VHDL 的程序结构特点是将一项工程设计,
或称设计实体(可以是一个元件,一个电路模块或一个系统)分成外部(或
称可视部分,及端口)和内部(或称不可视部分),既涉及实体的内部功能和
算法完成部分。在对一个设计实体定义了外部界面后,一旦其内部开发完
成后,其他的设计就可以直接调用这个实体。这种将设计实体分成内外部
分的概念是 VHDL 系统设计的基本点 。
与其他硬件描述语言相比,VHDL 具有以下特点:
(1)功能强大、设计灵活。VHDL 具有功能强大的语言结构,可以用简
洁明确的源代码来描述复杂的逻辑控制。它具有多层次的设计描述功能,
层层细化,最后可直接生成电路级描述。VHDL 支持同步电路、异步电路
和随机电路的设计,这是其他硬件描述语言虽不能比拟的。VHDL 还支持
1
课程设计说明书
各种设计方法,既支持自底向上的设计,又支持自顶向下的设计;既支持
模块化设计,又支持层次化设计。
(2)支持广泛、易于修改。由于 VHDL 已经成为 IEEE 标准所规范的硬
件描述语言,目前大多数 EDA 工具几乎都支持 VHDL,这为 VHDL 的进一
步推广和广泛应用奠定了基础。在硬件电路设计过程中,主要的设计文件
是用 VHDL 编写的源代码,因为 VHDL 易读和结构化,所以易于修改设计。
(3)强大的系统硬件描述能力。VHDL 具有多层次的设计描述功能,既
可以描述系统级电路,又可以描述门级电路。而描述既可以采用行为描述、
寄存器传输描述或结构描述,也可以采用三者混合的混合级描述。另外,
VHDL 支持惯性延迟和传输延迟,还可以准确地建立硬件电路模型。VHDL
支持预定义的和自定义的数据类型,给硬件描述带来较大的自由度,使设
计人员能够方便地创建高层次的系统模型。
(4)独立于器件的设计、与工艺无关。设计人员用 VHDL 进行设计时,
不需要首先考虑选择完成设计的器件,就可以集中精力进行设计的优化。
当设计描述完成后,可以用多种不同的器件结构来实现其功能。
(5)很强的移植能力,易于共享和复用。 VHDL 采用基于库(Library)
的设计方法,可以建立各种可再次利用的模块。这些模块可以预先设计或
使用以前设计中的存档模块,将这些模块存放到库中,就可以在以后的设
计中进行复用,可以使设计成果在设计人员之间进行交流和共享,减少硬
件电路设计。
目前有多种 EDA 工具支持采用 VHDL 进行电路综合、仿真以及实现。
一些可编程器件生产商将使用 VHDL 进行电路设计所需的多种 EDA 工具集
成为统一的开发平台提供给用户,进行针对本公司可编程器件产品的开发,
从而使整个设计流程更加简捷和易于使用。目前比较常见的是 Altera 公司
的 QuartusII 和 Xilinx 公司的 ISE 开发平台。
本次课程设计是利用 EDA 设计一个简单的乐曲演奏器,可通过按键输
入来控制音响声音 ,演奏时可以通过按键选择是手动演奏还是自动演奏,
手动演奏是通过按键进行简易乐曲的演奏,自动演奏则是演奏已存入的固
定乐曲。
2
课程设计说明书
2 软件介绍
Quartus II 是 Altera 公司的综合性 PLD 开发软件,支持原理图、VHDL、
VerilogHDL 以及 AHDL(Altera Hardware Description Language)等多种设计
输入形式,内嵌自有的综合器以及仿真器,可以完成从设计输入到硬件配置的完
整 PLD 设计流程。
Quartus II 支持 Altera 的 IP 核,包含了 LPM/MegaFunction 宏功能模
块库,使用户可以充分利用成熟的模块,简化了设计的复杂性、加快了设计速度。
对第三方 EDA 工具的良好支持也使用户可以在设计流程的各个阶段使用熟悉的
第三放 EDA 工具。
此外,Quartus II 通过和 DSP Builder 工具与 Matlab/Simulink 相结
合,可以方便地实现各种 DSP 应用系统;支持 Altera 的片上可编程系统(SOPC)
开发,集系统级设计、嵌入式软件开发、可编程逻辑设计于一体,是一种综合性
的开发平台。
Maxplus II 作为 Altera 的上一代 PLD 设计软件,由于其出色的易用性
而得到了广泛的应用。目前 Altera 已经停止了对 Maxplus II 的更新支持,
Quartus II 与之相比不仅仅是支持器件类型的丰富和图形界面的改变。Altera
在 Quartus II 中包含了许多诸如 SignalTap II、Chip Editor 和 RTL Viewer
的设计辅助工具,集成了 SOPC 和 HardCopy 设计流程,并且继承了 Maxplus II 友
好的图形界面及简便的使用方法。
Altera Quartus II 作为一种可编程逻辑的设计环境, 由于其强大的设
计能力和直观易用的接口,越来越受到数字系统设计者的欢迎。
Altera 的 Quartus II 可编程逻辑软件属于第四代 PLD 开发平台。该平台支
持一个工作组环境下的设计要求,其中包括支持基于 Internet 的协作设计。
Quartus 平 台 与 Cadence 、 ExemplarLogic 、 MentorGraphics 、 Synopsys 和
Synplicity 等 EDA 供应商的开发工具相兼容。改进了软件的 LogicLock 模块设
计功能,增添 了 FastFit 编译选项,推进了网络编辑性能,而且提升了调试能
力。
3
课程设计说明书
3 设计流程
3.1 原理描述
3.1.1 音名与频率的关系
根据声乐知识,产生音乐的两个因素是音乐频率的持续时间,音乐的十二平
均率规定,每两个八音度之间的频率相差一倍,在两个八音度之间,又可分为
12 个半音。每两个半音的频率比为 4。另外,音名 A(乐谱中的低音 6)的频率
为 440HZ,音名 B 到 C 之间,E 到 F 之间为半音,其余为全音。由此可以计算
出乐谱中从低音 1 到高音 1 之间每个音名的频率如图 3-1-1 所示:
图 3-1-1 简谱中的音名与频率的关系
音名
低音 1
低音 2
低音 3
低音 4
低音 5
低音 6
频率(Hz)
261
293
329
349
391
440
低音 7
439
3.1.2 可变分频器
(1)基准频率的选取
音名
中音 1
中音 2
中音 3
中音 4
中音 5
中音 6
中音 7
频率(Hz)
523
578
659
698
784
880
988
音名
高音 1
高音 2
高音 3
高音 4
高音 5
高音 6
高音 7
频率(Hz)
1046
1175
1318
1397
1568
1760
1976
各音名所对应的频率可由一频率较高的基准频率进行整数分频得到,所以实
际产生各音名频率为近似的整数值。这是由于音阶频率多为非整数,而分频系数
又不能为小数,故必须将得到的分频系数四舍五入取整,若基准频率过低,则由
于分频系数过小,四舍五入取整后的误差较大,若基准频率过高,虽然误码差较
小,但分频结构将变大,实际的设计应综合考虑两方面的因素,在尽量减小频率
差的前提下取舍合适的基准频率。本次设计选择 12MHz 作为基准频率。
(2)分频系数 A、公用二进制的计数容量 N 及初始值的选取 D
1、分频系数的选取
首先将 12MHz 的基准频率进行 12 分频,得到 1MHz 的基准频率,分频系
数 A=1MHz/音名频率,此分频系数可由计数器实现。但若不加处理语句,其
分频后的信号将不是对称方波。而占空比很小的方波很难使扬声器有效地发出声
响。
为得到对称方波,可将分频系数 A 分解为:分频系数 A=分频系数 n×2。即
先进行分频系数 n 的分频,得到不对称方波,然后再 2 分频得到对称方波。
2、公用二进制的计数容量 N 的选取
4
课程设计说明书
n 分频可由 n 进制计数器实现。n 进制计数器可用复位法或置位法实现,由
于加载初始值 d 的置位法可有效地减少设计所占用的可编程逻辑器件资源,因
此,此次设计采用置位法。
低音 1 的分频数 n 为最大,其值为 1275,应取公用二进制计数器的计数容
量 N 大与“最大分频系数 n”,故本次设计的公用二进制计数器应该设计为十一位
二进制加法计数器,其计数最大容量为 2048,计数的最大值 N 为 2047,可满足
本次设计中所有音名对音频系数的要求。
3、初始值的选取 D
初始值 D = 计数最大值 N - 分频系数 n
此次设计中应用的各音名对应的分频系数值及初始值部分如表所示:
图 3-1-2 各音名对应的分频系数值及初始值
音符
初始值
对应音谱
区别高中音
0
1
2
3
4
5
6
7
8
9
10
12
2047
1091
1196
1289
1331
1409
1479
1541
1569
1621
1668
1728
0
1
2
3
4
5
6
7
1
2
3
5
0
0
0
0
0
0
0
0
1
1
1
1
(3)《世上只有妈妈好》的音符谱为:
6;5;3;5;1;6;5;6;3;5;6;5;5;3;2;1;6;5;3;2;2;3;
5;5;6;3;2;1;5;3;
3.1.3 节拍发生器原理
该演奏电路的最小节拍为 1 拍,将一拍的时长定为 0.25s,则需要将 12MHz
进行分频,从而得到一个 4Hz 的时钟频率即可产生一拍的时长。为了能达到演
奏时能循环进行,则需设置一个时长计数器,当乐曲演奏完时,保证能自动从头
开始演奏。
3.2 乐曲演奏电路各模块设计
本次设计乐曲演奏电路结构方框图如图 3-2-1 所示:
5
课程设计说明书
FPGA
12MHz
时钟电路
4Hz
音乐节拍
产生电路
数控分频器
电路
扬声器
音 调 编 码
电路
数码管
基准时钟 12MHz
模式选择 auto
手动输入
3.3 乐曲演奏电路的子结构
图 3-2-1 乐曲演奏电路结构方框图
顶层结构所包含的模块分别有分频器(fenpin),音调发生器(ydfsq)模块、音
调编码器(ydbmq)模块、手动\自动选择(zdsd)模块及数控分频器 skfpq)模块。
3.3.1 音调发生器模块
1、音调发生器模块
在此模块中设置了一个 8 位二进制计数器(计数最大值为 89),这个计数器
的计数频率为 4Hz,即每一计数值的停留时间为 0.25s,恰好为当全音符设为 1s
时,四四拍的 4 分音符的持续时间。例如,ydfsq 在以下的 VHDL 逻辑描述中,
“世上只有妈妈好”的第一个音符为“6”,此音在逻辑中停留了 4 个时钟节拍,即
为 1s 时间,相应地所对应“6”音符分频预置数为 1479 在 skfpq 的输入端停留了
1s。随着计数器按 4Hz 的时钟频率做加法计数时,乐谱逐次被选取,“世上只有
妈妈好”乐曲就开始自然连续而且循环地演奏起来。
音调发生器模块 VHDL 源程序如下:
library ieee;
use ieee.std_logic_1164.all;
entity ydfsq is
port(clk:in std_logic;
toneindex:out
end;
architecture bhv of ydfsq is
signal counter:integer range 0 to 89;
begin
process(counter)
begin
if counter=90 then
integer range 0 to 15);
6
课程设计说明书
counter<=0;
elsif clk'event and clk='1'then
counter<=counter+1;
end if;
end process;
search:process(counter)
begin
case counter is
when 0 to 2=>toneindex<=6;
when 3 to 4=>toneindex<=5;
when 5 to 8=>toneindex<=3;
when 9 to 12=>toneindex<=5;
when 13 to 16=>toneindex<=8;
when 17 to 18=>toneindex<=6;
when 19 to 20=>toneindex<=5;
when 21 to 25=>toneindex<=6;
when 26 to 29=>toneindex<=3;
when 30 to 32=>toneindex<=5;
when 33 to 35=>toneindex<=6;
when 36 to 39=>toneindex<=5;
when 40 to 41=>toneindex<=3;
when 42 to 43=>toneindex<=2;
when 44 to 45=>toneindex<=1;
when 46 to 47=>toneindex<=6;
when 48 to 49=>toneindex<=5;
when 50 to 51=>toneindex<=3;
when 52 to 55=>toneindex<=2;
when 56 to 58=>toneindex<=2;
when 59 to 62=>toneindex<=3;
when 63 to 64=>toneindex<=5;
when 65 to 66=>toneindex<=5;
when 67 to 69=>toneindex<=6;
when 70 to 71=>toneindex<=3;
when 72 to 73=>toneindex<=2;
when 74 to 77=>toneindex<=1;
7
课程设计说明书
when 78 to 80=>toneindex<=5;
when 81 to 82=>toneindex<=3;
when 83 to 84=>toneindex<=2;
when 85 to 86=>toneindex<=1;
when 87 to 89=>toneindex<=0;
when others=>NULL;
end case;
end process;
end;
2、音调发生器模块的仿真图
图 3-3-1 音调发生器模块的仿真波形图
通过仿真图可以清楚的看到,时钟 clk 由 0 开始计数,每计一次数输出
toneindex 的值随之发生一定的变化,只不过根据乐谱的不同,输出的变化也不
尽相同。例如在本次设计中,自第 4 个时钟上升沿来临到第 5 个时钟上升沿,输
出 toneindex “5”。于是根据乐谱的不同就输出不同的音符,作为音调编码器的输
入。然后把输出 toneindex 输入到音调编码器模块,进行下一步编码工作。于是,
由仿真图可以知道本模块输出的即为演奏音乐的音符谱,说明该程序正确,可以
生成逻辑器件。
3、音调发生器模块生成的逻辑器件
8