当前位置:首页 > 基于FPGA的音乐播放器设计
1.3 开发语言VHDL
VHDL是非常高速集成电路硬件描述语言,是可以描述硬件电路的功能、信号连接关系及定时关系的语言.它能比电路原理图更有效地表示硬件电路的特性。使用VHDL语言,可以就系统的总体要求出发,自上至下地将设计内容细化,最后完成系统硬件的整体设计。VHDL语言的主要特点是:
①功能强大,灵活性高:VHDL语言是一种功能强大的语言结构,可用简洁明确的代码来进行复杂控制逻辑的设计。同时VHDL语言还支持层次化的设计,支持设计库和可重复使用的元件生成。目前,VHDL语言已成为一种设计、仿真、综合的标准硬件描述语言。
②器件无关性:VHDL语言允许设计者在生成一个设计时不需要首先选择一个具体的器件。对于同一个设计描述,可以采用多种不同器件结构来实现其功能。因此设计描述阶段,可以集中精力从事设计构思。当设计、仿真通过后,指定具体的器件综合、适配即可。
③可移植性:VHDL语言是一种标准的语言,故采用VHDL进行的设计可以被不同的EDA工具所支持。从一个仿真工具移植到另一个仿真工具,从一个综合工具移植到另一个综合工具,从一个工作平台移植到另一个工作平台。在一个EDA工具中采用的技术技巧,在其它工具中同样可以采用。
④自顶向下的设计方法:传统的设计方法是,自底向上的设计或平坦式设计。自底向上的设计方法是先从底层模块设计开始,逐渐由各个模块形成功能复杂的电路。这种设计方法优点是很明显的,因为它是一种层次设计电路,一般电路的子模块都是按照结构或功能划分,因此这种电路层次清楚,结构明确,便于多人合作开发,同时设计文件易于存档,易于交流。自底向上设计方法的缺点也很明显,往往由于整体设计思路不对而使的花费几个月的低层设计付之东流。平坦式设计是整个电路只含有一个模块,电路的设计是平铺直叙的,没有结构和功能上的划分,因此不是层次电路的设计方式。优点是小型电路设计时可以节省时间和精力,但随着电路复杂程度的增加,这种设计方式的缺点变的异常突出。自顶向下的设计方法是将要设计的电路进行最顶层的描述(顶层建模),然后利用EDA软件进行顶层仿真,如果顶层设计的仿真结果满足要求,则可以继续将顶层划分的模块进行低一级的划分并仿真,这样一级一级设
3
计最终将完成整个电路的设计。自顶向下的设计方法与前面两种方法相比优点是很明显的。
⑤数据类型丰富:作为硬件描述语言的一种VHDL语言的数据类型非常丰富,除了VHDL语言自身预定义的十种数据类型外,在VHDL语言程序设计中还可以由用户自定义数据类型。特别是std_logic数据类型的使用,使得VHDL语言能最真实模拟电路中的复杂信号。
⑥运行库和程序包丰富:目前支持VHDL语言的程序包很丰富,大多以库的形式存放在特定的目录下,用户可随时调用。如IEEE库收集了std_logic_1164、std_logic_arith、std_logic_unsigned等程序包。在FPGA综合时,还可以使用EDA软件商提供的各种库和程序包。而且用户利用VHDL语言编写的各种成果都可以以库的形式存放,在后续的设计中可以继续使用。
⑦建模方便:由于VHDL语言中可综合的语句和用于仿真的语句齐备,行为描述能力强,因此VHDL语言特别适合信号建模。VHDL语言无论仿真还是综合都是非常合适的描述语言。
⑧ VHDL语言是一种硬件电路的建模描述语言,因此与普通的计算机语言有较大差别,普通计算机语言是CPU按照时钟的节拍,一条指令执行完后才能执行下一条指令,因此指令执行是有先后顺序的,也即是顺序执行,而每条指令的执行占用特定的时间。而与VHDL语言描述结果相对应的是硬件电路,它遵循硬件电路的特点,语句的执行没有先后顺序,是并发的执行的;而且语句的执行不象普通软件那样每条指令占用一定的时间,只是遵循硬件电路自身的延迟时间。 1.4 开发环境MAX+PLUSⅡ
MAX+PLUSⅡ提供了全面的逻辑设计能力,包括电路图、文本和波形的设计输入以及编译、逻辑综合、仿真和定时分析以及器件编程等诸多功能。特别是在原理图输入等方面,MAX+PLUSⅡ被公认为是最易使用、人机界面最友好的PLD 开发软件。这样灵活多变的输入方式,给设计使用者带来了极大的方便。 1.5 研究思路及主要工作
本文按照EDA开发流程,采用VHDL硬件描述语言开发,将乐曲硬件播放电路设计进行模块化分解,层次化设计,分成几个单独的结构体,每个结构体实现部分功能,最后,经顶层文件将各单独结构体进行综合,实现乐曲硬件播放。
4
主要工作:根据硬件播放电路的功能进行全局分析,采用自上至下的设计方法,从系统总体要求出发,逐步将设计内容细化,最后完成系统结构的整体设计,实现预先设置乐曲的播放功能。
实现功能乐曲播放,需要完成以下设计:
①.预置乐曲,本文选取了《梁祝》与《欢乐颂》作预置,作预置时,需要将乐曲音符转换成相应的代码,通过计算逐一将音符转换成代码,通过EDA开发平台MAX+PLUSII进行乐曲定制;
②.为了提供乐曲发音所需要的发音频率,编写数控分频器程序,对单一输入高频,进行预置数分频,生成每个音符发音的相应频率;
③.为了给分频提供预置数,需要计算分频预置数;
④.对每部分结构单元逐一进行编译,生成相应的元器件符号,并对独立结构单元功能进行仿真;
启动MAX+PLUSII全程编译,生成具体输入,输出端口的图形文件。启动全程功能仿真,生成仿真波形文件。生成下载文件,在ZYE1502D实验开发板上利用Altera公司的FLXE10K—EPF10K10LC84—4芯片进行功能验。
第2章 系统设计
2.1 系统原理
传统数字逻辑设计方法相比,本设计借助于功能强大的EDA工具和硬件描述语言来完成,如果只以纯硬件的方法完成乐曲播放电路的设计,将是难以实现的。本设计采用了《梁祝》与《欢乐颂》的曲子来完成。
表2.1 简谱中的音名与频率的关系表
频 率音符名 (Hz) 休止符 低音1 低音2 低音3 低音4 375000 低音5 294.349 低音6 330.396 低音7 370.92 中音4 386.598 中音5 音符名 (Hz) 394.737 中音6 495.376 中音7 555.56 高音1 频 率音符名 (Hz) 989.446 高音4 1136.363 高音5 1175.549 高音6 1353.790 高音7 1512.097 频 率音符名 (Hz) 1609.442 1802.884 2027.027 2272.727 频 率796.178 高音2 882.353 高音3 5
为了便于理解,首先介绍一下硬件电路的发声原理。我们知道,声音的频谱范围约在几十到几千赫兹,若能利用程序来控制FPGA某个引脚输出一定频率的矩形波,接上扬声器就能发出相应频率的声音。而乐曲中的每一音符对应着一个确定的频率,因此,要想FPGA发出不用音符的音调,实际上只要控制它输出相应音符的频率即可(音符和频率的关系见表2.1)。乐曲都是由一连串的音符组成,因此按照乐曲的乐谱依次输出这些音符所对应的频率,就可以在扬声器上连续地发出各个音符的音调。而要准确地播放出一首乐曲,仅仅让扬声器能够发声是不够的,还必须准确地控制乐曲的节奏,即每个音符的持续时间。由此可见,乐曲中每个音符的发音频率及其持续的时间是乐曲能够连续播放的两个关键因素。 2.1.1 音调的控制
频率的高低决定了音调的高低。计算出简谱中从低音1到高音1之间每个音名对应的频率,所有不同频率的信号都是从同一个基准频率分频得到的。由于音阶频率多为非整数,而分频系数又不能为小数,因此必须将计算得到的分频数四舍五入取整。若基准频率过低,则由于分频比太小,四舍五入取整后的误差较大;若基准频率过高,虽然误差较小,但分频数将变大。实际的设计应综合考虑这两方面的因素,在尽量减小频率误差的前提下取合适的基准频率。因此,要想FPGA发出不同音符的音调,实际上只要控制它输出相应音符的频率即可。综合考虑各因素,本文中选取12MHZ作为CLK的分频计数器的输入分频信号。乐曲都是由一连串的音符组成,因此按照乐曲的乐谱依次输出这些音符所对应的频率,就可以在扬声器上连续地发出各个音符的音调。
2.1.2 音长的控制
音符的持续时间须根据乐曲的速度及每个音符的节拍数来确定。因此,在想控制音符的音长,就必须知道乐曲的速度和每个音符所对应的节拍数,在这个设计中所播放的乐曲的最短的音符为四分音符,如果将全音符的持续时间设为1s的话,那么一拍所应该持续的时间为0.25秒,则只需要再提供一个4HZ的时钟频率即可产生四分音符的时长。要想让系统知道现在应该播放哪个音符,而这个音符持续的时间应该是多少,就必须编写乐曲文件,在乐曲文件中音符是按地址存放的,当系统工作时就按4Hz的频率依次读取简谱,当系统读到某个音符的简谱时就对应发这个音符的音调,持续时间为0.25秒,而如果在曲谱文件中这个音符为三拍音长,那又该如何控制呢?
6
共分享92篇相关文档