1、目 录1 绪论 .21.1 研究背景 .21.2 可编程逻辑控件 FPGA.21.3 开发语言 VHDL.41.4 开发环境 MAX+PLUS .51.5 研究思路及主要工作 .62 系统设计 .62.1 系统原理 .62.1.1 音调的控制 .72.1.2 音长的控制 .82.2 系统结构 .83 各模块设计与仿真 .93.1 定制音符数据 .93.1.1定制音符数据 ROM的 mif文件 .93.1.2在 MAX+PLUS下定制的 LPM_ROM.103.2 音符数据地址 发生器模块 NOTETABS.113.3 预置数查表电路模块 TONETABA.123.4 发声频率产生模块 SPEA
2、KERA.143.5乐曲播放电路顶层电路 .164 硬件测试 .165 心得体会 .17参考 文献 .18附录 .190绪论1.1 研究背景随着电子技术的飞速发展,微电子技术的进步主要表现在大规模集成电路加工技术即半导体工艺技术的发展上,使得本征半导体的工艺水平的线宽已经达到了60nm,并在不断地缩小,面在硅片单位面积上,集成了更多的晶体管。集成电路设计正在不断地向超大规模,极低功耗和超高速的方向发展,电子产品的功能越来越强大,体积越来越小,功耗越来越低。顺应电子技术的发展趋势,可编程逻辑器件和 EDA 技术使设计方法发生了质的变化。把以前“电路设计+硬件搭试+调试焊接”转化为“功能设计+软件
3、模拟+仿真下载” 。利用 EDA 开发平台,采用可编程逻辑器件 CPLDFPGA 使硬件的功能可通过编程来实现,这种新的基于芯片的设计方法能够使设计者有更多机会充分发挥创造性思维,实现多种复杂数字逻辑系统的功能,将原来由电路板设计完成的工作放到芯片的设计中进行,减少了连线和体积,提高了集成度,降低了干扰,大大减轻了电路设计和 PCB设计的工作量和难度,增强了设计的灵活性,有效地提高了工作效率,增加了系统的可靠性和稳定性,提高了技术指标。这些技术使得各种电子产品迅速的进入了我们的生活,我们处在一个被电子产品深度包围的时代,在一个普通老百姓的家里,衣食住行,每一个产品的诞生都离不开 EDA技术,从
4、彩色电视机,到智能冰箱,到全自动洗衣机,电饭煲,到微波炉,电磁炉,电子琴,再到个人随身用的手机,MP3 音乐播放器都需要 EDA技术提供支持。本文应用 VHDL硬件描述语言,设计一个乐曲硬件播放电路,它能将预先设置存储好的乐曲自动播放出来,下面对乐曲播放电路的设计与实现中涉及的 EDA技术,以及 EDA技术中常用的开发器件 CPLDFPGA 可编程逻辑器件,开发语言 VHDL以及开发软件 MAX+PLUSII作简单介绍。1.2 可编程逻辑控件 FPGA本设计中选用 FPGA,主要是因为它与传统的 MCU相比有以下几个方面的优点:编程方式简便先进。FPGA 产品中部分是采用菊花链在系统编程方式的
5、。这种先进的编程方式已成为当今世界上各类可编程器件发展的趋势。因为它省却了价格1昂贵,操作不便的专用编程器,只需要一个十分简单的下载编程电路和一条 PC机的打印机通讯线就行了。它无须编程高压,在 TTL电平下随时可进行在线编程,并可进行所谓菊花链式多片串行编程。高可靠性。在高可靠应用领域,MCU 的缺憾为 FPGA的应用留下了很大的用武之地。这族器件尽管在功能开发上是通过 EDA软件实现的。但物理机制却像一片74LS164那样纯属硬件电路,十分可靠。通过合理设计,大多数应用中,无须考虑复杂的复位和初始化。设计中只需利用简单的语句将闲置状态导入同一初始入口,就能有效防止任何可能的“死机”现象。由
6、于是并行工作,它的任一输入脚都可用作类似于MCU的中断监测引脚,且反应速度仅为纳妙级。FPGA 的高可靠性还表现在几乎可将整个系统下载于同一芯片中,从而大大缩小了体积,易于管理和屏蔽。高速。FPGA 的时钟延迟可达纳秒级,结合其并行工作方式,在超高速应用领域和实时测控方面有非常广阔的应用前景。功能强大,应用广阔。目前,FPGA 的可选择范围很大,可根据不同的应用选用不同容量的芯片,如 Lattice的 ispLSI和 AMD公司的 MACH,最小芯片的等效逻辑门为 1000门,最大达数十万门。ALTERA 和 XILINX公司推出的百万门的 FPGA可实现几乎任何形式的数字电路或数字系统的设计
7、。随着这类器件的广泛应用和成本的大幅下降,以及产品上市速率的提高,FPGA 在系统中的直接应用率正直逼 ASIC的开发。易学易用,开发便捷。单片机应用系统的设计对于行家里手来说是十分简单的事。然而,对于初学者,诸如 CPU的工作方式、众多特殊寄存器的用法、中断概念等等,着实不是一件容易的事。相比之下,FPGA 应用的学习却不需要太多的预备知识,只要稍具一点数字电路和计算机软件设计的基础知识,就能在短期内掌握基本的设计方法和开发技巧。而且反过来去学用单片机,就显得轻车熟路多了。这无疑是高技术为我们的学习提供了捷径,站在巨人的肩膀当然能更快地获得成功。可以预言,我国EDA技术的学习热潮和 FPGA
8、的应用热潮决不会逊色于过去 10年的单片机热潮。开发周期短。由于相应的 EDA软件功能完善而强大,仿真能力便捷而实时,开发过程形象而直观,兼之硬件因素涉及甚少,因此可以在很短时间内完成十分复杂的系统设计,这是产品快速进入市场的最宝贵的特征。一些 EDA专家预言,未来的大系统的 FPGA设计仅仅是各类再应用逻辑与 IP核(CORE)的拼装,其设计周期仅以小时计。TI公司认为,一个 ASIC百分之八十的功能可用 IP核等现成逻辑合成。21.3 开发语言 VHDLVHDL是非常高速集成电路硬件描述语言,是可以描述硬件电路的功能、信号连接关系及定时关系的语言它能比电路原理图更有效地表示硬件电路的特性。
9、使用VHDL语言,可以就系统的总体要求出发,自上至下地将设计内容细化,最后完成系统硬件的整体设计。VHDL 语言的主要特点是:功能强大,灵活性高:VHDL 语言是一种功能强大的语言结构,可用简洁明确的代码来进行复杂控制逻辑的设计。同时 VHDL语言还支持层次化的设计,支持设计库和可重复使用的元件生成。目前,VHDL 语言已成为一种设计、仿真、综合的标准硬件描述语言。器件无关性:VHDL 语言允许设计者在生成一个设计时不需要首先选择一个具体的器件。对于同一个设计描述,可以采用多种不同器件结构来实现其功能。因此设计描述阶段,可以集中精力从事设计构思。当设计、仿真通过后,指定具体的器件综合、适配即可
10、。可移植性:VHDL 语言是一种标准的语言,故采用 VHDL进行的设计可以被不同的 EDA工具所支持。从一个仿真工具移植到另一个仿真工具,从一个综合工具移植到另一个综合工具,从一个工作平台移植到另一个工作平台。在一个 EDA工具中采用的技术技巧,在其它工具中同样可以采用。自顶向下的设计方法:传统的设计方法是,自底向上的设计或平坦式设计。自底向上的设计方法是先从底层模块设计开始,逐渐由各个模块形成功能复杂的电路。这种设计方法优点是很明显的,因为它是一种层次设计电路,一般电路的子模块都是按照结构或功能划分,因此这种电路层次清楚,结构明确,便于多人合作开发,同时设计文件易于存档,易于交流。自底向上设
11、计方法的缺点也很明显,往往由于整体设计思路不对而使的花费几个月的低层设计付之东流。平坦式设计是整个电路只含有一个模块,电路的设计是平铺直叙的,没有结构和功能上的划分,因此不是层次电路的设计方式。优点是小型电路设计时可以节省时间和精力,但随着电路复杂程度的增加,这种设计方式的缺点变的异常突出。自顶向下的设计方法是将要设计的电路进行最顶层的描述(顶层建模),然后利用 EDA软件进行顶层仿真,如果顶层设计的仿真结果满足要求,则可以继续将顶层划分的模块进行低一级的划分并仿真,这样一级一级3设计最终将完成整个电路的设计。自顶向下的设计方法与前面两种方法相比优点是很明显的。数据类型丰富:作为硬件描述语言的
12、一种 VHDL语言的数据类型非常丰富,除了 VHDL语言自身预定义的十种数据类型外,在 VHDL语言程序设计中还可以由用户自定义数据类型。特别是 std_logic数据类型的使用,使得 VHDL语言能最真实模拟电路中的复杂信号。运行库和程序包丰富:目前支持 VHDL语言的程序包很丰富,大多以库的形式存放在特定的目录下,用户可随时调用。如 IEEE库收集了std_logic_1164、std_logic_arith、std_logic_unsigned 等程序包。在 FPGA综合时,还可以使用 EDA软件商提供的各种库和程序包。而且用户利用 VHDL语言编写的各种成果都可以以库的形式存放,在后续
13、的设计中可以继续使用。建模方便:由于 VHDL语言中可综合的语句和用于仿真的语句齐备,行为描述能力强,因此 VHDL语言特别适合信号建模。VHDL 语言无论仿真还是综合都是非常合适的描述语言。 VHDL语言是一种硬件电路的建模描述语言,因此与普通的计算机语言有较大差别,普通计算机语言是 CPU按照时钟的节拍,一条指令执行完后才能执行下一条指令,因此指令执行是有先后顺序的,也即是顺序执行,而每条指令的执行占用特定的时间。而与 VHDL语言描述结果相对应的是硬件电路,它遵循硬件电路的特点,语句的执行没有先后顺序,是并发的执行的;而且语句的执行不象普通软件那样每条指令占用一定的时间,只是遵循硬件电路
14、自身的延迟时间。1.4 开发环境 MAX+PLUSMAX+PLUS提供了全面的逻辑设计能力,包括电路图、文本和波形的设计输入以及编译、逻辑综合、仿真和定时分析以及器件编程等诸多功能。特别是在原理图输入等方面,MAX+PLUS被公认为是最易使用、人机界面最友好的 PLD 开发软件。这样灵活多变的输入方式,给设计使用者带来了极大的方便。41.5 研究思路及主要工作本文按照 EDA开发流程,采用 VHDL硬件描述语言开发,将乐曲硬件播放电路设计进行模块化分解,层次化设计,分成几个单独的结构体,每个结构体实现部分功能,最后,经顶层文件将各单独结构体进行综合,实现乐曲硬件播放。主要工作:根据硬件播放电路
15、的功能进行全局分析,采用自上至下的设计方法,从系统总体要求出发,逐步将设计内容细化,最后完成系统结构的整体设计,实现预先设置乐曲的播放功能。实现功能乐曲播放,需要完成以下设计:预置乐曲,本文选取了梁祝与欢乐颂作预置,作预置时,需要将乐曲音符转换成相应的代码,通过计算逐一将音符转换成代码,通过 EDA开发平台MAX+PLUSII进行乐曲定制;为了提供乐曲发音所需要的发音频率,编写数控分频器程序,对单一输入高频,进行预置数分频,生成每个音符发音的相应频率;为了给分频提供预置数,需要计算分频预置数;对每部分结构单元逐一进行编译,生成相应的元器件符号,并对独立结构单元功能进行仿真;启动 MAX+PLU
16、SII全程编译,生成具体输入,输出端口的图形文件。启动全程功能仿真,生成仿真波形文件。生成下载文件,在 ZYE1502D实验开发板上利用Altera公司的 FLXE10KEPF10K10LC844芯片进行功能验。系统设计2.1 系统原理传统数字逻辑设计方法相比,本设计借助于功能强大的 EDA工具和硬件描述语言来完成,如果只以纯硬件的方法完成乐曲播放电路的设计,将是难以实现的。本设计采用了梁祝与欢乐颂的曲子来完成。表 2.1 简谱中的音名与频率的关系表音符名 频 率 音符名 频 率(Hz) 音符名 频 率(Hz) 音符名 频 率(Hz)5(Hz)休止符 375000 低音 5 394.737 中
17、音 6 989.446 高音 4 1609.442低音 1 294.349 低音 6 495.376 中音 7 1136.363 高音 5 1802.884低音 2 330.396 低音 7 555.56 高音 1 1175.549 高音 6 2027.027低音 3 370.92 中音 4 796.178 高音 2 1353.790 高音 7 2272.727低音 4 386.598 中音 5 882.353 高音 3 1512.097为了便于理解,首先介绍一下硬件电路的发声原理。我们知道,声音的频谱范围约在几十到几千赫兹,若能利用程序来控制 FPGA某个引脚输出一定频率的矩形波,接上扬声器
18、就能发出相应频率的声音。而乐曲中的每一音符对应着一个确定的频率,因此,要想 FPGA发出不用音符的音调,实际上只要控制它输出相应音符的频率即可(音符和频率的关系见表 2.1) 。乐曲都是由一连串的音符组成,因此按照乐曲的乐谱依次输出这些音符所对应的频率,就可以在扬声器上连续地发出各个音符的音调。而要准确地播放出一首乐曲,仅仅让扬声器能够发声是不够的,还必须准确地控制乐曲的节奏,即每个音符的持续时间。由此可见,乐曲中每个音符的发音频率及其持续的时间是乐曲能够连续播放的两个关键因素。2.1.1 音调的控制频率的高低决定了音调的高低。计算出简谱中从低音 1到高音 1之间每个音名对应的频率,所有不同频
19、率的信号都是从同一个基准频率分频得到的。由于音阶频率多为非整数,而分频系数又不能为小数,因此必须将计算得到的分频数四舍五入取整。若基准频率过低,则由于分频比太小,四舍五入取整后的误差较大;若基准频率过高,虽然误差较小,但分频数将变大。实际的设计应综合考虑这两方面的因素,在尽量减小频率误差的前提下取合适的基准频率。因此,要想 FPGA发出不同音符的音调,实际上只要控制它输出相应音符的频率即可。综合考虑各因素,本文中选取 12MHZ作为 CLK的分频计数器的输入分频信号。乐曲都是由一连串的音符组成,因此按照乐曲的乐谱依次输出这些音符所对应的频率,就可以在扬声器上连续地发出各个音符的音调。62.1.
20、2 音长的控制音符的持续时间须根据乐曲的速度及每个音符的节拍数来确定。因此,在想控制音符的音长,就必须知道乐曲的速度和每个音符所对应的节拍数,在这个设计中所播放的乐曲的最短的音符为四分音符,如果将全音符的持续时间设为 1s的话,那么一拍所应该持续的时间为 0.25秒,则只需要再提供一个 4HZ的时钟频率即可产生四分音符的时长。要想让系统知道现在应该播放哪个音符,而这个音符持续的时间应该是多少,就必须编写乐曲文件,在乐曲文件中音符是按地址存放的,当系统工作时就按 4Hz的频率依次读取简谱,当系统读到某个音符的简谱时就对应发这个音符的音调,持续时间为 0.25秒,而如果在曲谱文件中这个音符为三拍音
21、长,那又该如何控制呢?其实只要将该音符连续书写三遍,这时系统读乐曲文件的时候就会连续读到三次,也就会发三个 0.25秒的音长,这时我们听上去就会持续了三拍的时间,通过这样一个简单的操作就可以控制音乐的音长了。2.2 系统结构本系统主要由三个功能模块组成:NOTETABS.VHD,TONETABA.VHD 和 SPEAKER.VHD。第一部分 NOTETABS,地址发生器,实现按节拍读乐谱的功能;第二部分 TONETABA,查表电路,为 SPEAKER提供分频预置数,实现乐曲译码输出CODE4:0;第三部分 SPEAKERA,产生发音频率,实现乐曲播放;其结构如图 2.1所示。图 2.1 乐曲播
22、放电路结构方框图7各模块设计与仿真3.1 定制音符数据3.1.1定制音符数据 ROM的 mif文件为了实现乐曲的播放,首先需要将曲谱定制到音符数据 ROM里面,然后才能按照一定的节拍从 ROM中读出曲谱。以下定制的是梁祝与欢乐颂的 mif 文件(梁祝与欢乐颂的简谱见附录 E、F)。WIDTH=5;DEPTH=256;ADDRESS_RADIX=DEC;DATA_RADIX=DEC;CONTENT BEGIN注意:实用文件中是展开以下数据的,每一组占一行;00:3;01:3;02:3;03:3;04:5;05:5;06:5;07:6;08:8;09:8;10:8;11:9;12:6;13:8;1
23、4:5;15:5;16:12;17:12;18:12;19:15;20:13;21:12;22:10;23:12;24:9;25:9;26:9;27:9;28:9;29:9;30:9;31:0;32:9;33:9;34:9;35:10;36:7;37:7;38:6;39:6;40:5;41:5;42:5;43:6;44:8;45:8;46:9;47:9;48:3;49:3;50:8;51:8;52:6;53:5;54:6;55:8;56:5;57:5;58:5;59:5;60:5;61:5;62:5;63:5;64:10;65:10;66:10;67:12;68:7;69:7;70:9;71:
24、9;72:6;73:8;74:5;75:5;76:5;77:5;78:5;79:5;80:3;81:5;82:3;83:3;84:5;85:6;86:7;87:9;88:6;89:6;90:6;91:6;92:6;93:6;94:5;95:6;96:8;97:8;98:8;99:9;100:12101:12;102:12;103:10;104:9;105:9;106:10;107:9;108:8;109:8;110:6;111:5;112:3;113:3;114:3;115:3;116:8;117:8;118:8;119:8;120:6;121:8;122:6;123:5;124:3;125:
25、5;126:6;127:8;128:5;129:5; 130:10;131:10;132:10;133:10;134:11;135:11;136:12;137:12;138:12;139:12;140:11;141:11;142:10;143:10;144:9;145:9;146:8;147:8;148:8;149:8;150:9;151:9;152:10;153:10;154:10;155:10;156:10;157:9;158:9;159:9;160:9;161:9;162:10;163:10;164:10;165:10;166:11;167:11;168:12;169:12;170:12;171:12;172:11;173:11;174:10;175:10;176:9;177:9;178:8;179:8;