CPLD的音乐播放器的设计.doc

上传人:仙人指路1688 文档编号:4146396 上传时间:2023-04-07 格式:DOC 页数:24 大小:889.50KB
返回 下载 相关 举报
CPLD的音乐播放器的设计.doc_第1页
第1页 / 共24页
CPLD的音乐播放器的设计.doc_第2页
第2页 / 共24页
CPLD的音乐播放器的设计.doc_第3页
第3页 / 共24页
CPLD的音乐播放器的设计.doc_第4页
第4页 / 共24页
CPLD的音乐播放器的设计.doc_第5页
第5页 / 共24页
点击查看更多>>
资源描述

《CPLD的音乐播放器的设计.doc》由会员分享,可在线阅读,更多相关《CPLD的音乐播放器的设计.doc(24页珍藏版)》请在三一办公上搜索。

1、课程设计(论文)题 目 基于CPLD的音乐播放器的设计 姓 名 雷 学 号 11021004119 专业班级 自动化112 所在学院 电气工程学院 基于CPLD的MIDI音乐播放器的设计【摘要】 本音乐播放器依据MIDI音乐基本原理,结合EDA技术,采用ALTERA公司的可编程逻辑器件(CPLD)EPM240T100C5作为控制核心而设计的。本设计主要利用VHDL语言进行编程,在CPLD内部设计出音调发生器、音乐编码器、再配上扬声器外围电路,从而实现音乐播放。通过本次设计,可以体现出可编程逻辑器件CPLD/FPGA等在电子设计领域的广泛应用,设计者可以方便的设计出符合要求的芯片或应用系统。 【

2、关键词】 EDA,CPLD,音乐播放器,VHDL语言 Design of MIDI Music Player Based on CPLD【Abstract】 This music player is designed according to MIDI music basic principle, using EDA technology, based on Complex Programmable Logic Device (CPLD) EPM240T100C5 to be a control core block which produced by ALTERA company. This

3、 design program with VHDL language, designed Tone block, music coder in CPLD, and matched to some necessary periphery circuits such as loudhailer, Through this design, it can see that CPLD/FPGA has a widely application in Electronic area. The designer can design a chip or a system expediently.【Key W

4、ords】 EDA,CPLD, Music Player,VHDL第1章 绪论意义随着微电子技术和计算机技术的不断发展,在涉及通信、国防、航天、工业自动化、仪器仪表等领域的电子系统设计工作中,EDA技术的含量正以惊人的速度上升,它己成为当今电子技术发展的前沿之一。EDA (Electronics Design Automation)即电子设计自动化技术,是指以计算机为基本工作平台,融合应用电子技术、计算机技术、智能化技术的最新成果而研制成的一整套软件工具,主要能辅助进行三方面的设计工作:IC设计,电子电路设计,PCB设计。没有EDA技术的支持,想要完成一些超大规模集成电路的设计制造是不可想象的

5、。大规模可编程逻辑器件CPLD(Complex Programmable Logic Device,复杂可编程逻辑器件)和FPGA(Field Programmable Gates Array,现场可编辑门阵列)是当今应用最广泛的两类可编程逻辑器件,电子设计工程师利用它可以在办公室或实验室设计出所自己所需要的专用芯片和专用产品,从而大大缩短了产品上市时间,降低了开发成本。此外,可编程逻辑器件还具有静态可重复编程和动态在系统重构的特性,使得硬件的功能可以像软件一样通过编程来修改,这样就极大的提高了电子系统设计的灵活性和通用性。背景FPGA与CPLD都是可编程逻辑器件,是在PAL、GAL等逻辑器件

6、的基础上发展起来的,与分立元件相比,具有速度快、容量大、功耗小和可靠性高等优点。由于集成度高、设计方法先进、现场可编程,它可以替代几十甚至上百片通用IC芯片。这种芯片具有现场可编程和方案容易改动的特点。所以FPGA和CPLD芯片收到世界范围内电子工程设计人员的广泛关注和普遍欢迎,可以设计各种数字电路和数字系统2。国内外研究现状PLD生产厂商众多,有Xilinx、Altera、Actel、Lattic、Atmel等,其中以Xilinx和Altera的产品较有代表性,Xilinx的产品称为FPGA,Altera的产品称为CPLD,他们各有特点3:1同样藉由EPROM和SRAM的结构。2Altera

7、 CPLD适合完成各类算法和组合逻辑,而Xilinx FPGA更适合于完成时序较多的逻辑电路。3对于SRAM结构的产品,Altera公司的PLD的输出电流可达25mA,而Xilinx的FPGA只有16mA。4Altera公司的PLD延时时间可预测,弥补了FPGA的缺点。5Altera公司的FLEX10K10E系列的产品具有更大的集成度。因此,针对上述特点,结合本设计题目的要求,我们采用Altera公司的CPLD芯片,7128型号,这是目前市场最为通用的一种CPLD,采用其构成的最小系统通用板,利用外围电路的拓展,可以完成许多设计员需要的电路系统功能。基于PLD的设计,有一下几种较为成熟的设计方

8、法:1原理图设计2程序设计方法3状态机设计4功能模块输入法5IP模块使用6基于平台的设计方法其中,最为广泛普遍应用的为程序设计方法。程序设计是使用硬件描述语言(简称HDL),在EDA软件提供的设计想到或语言助手的支持之下进行设计。HDL设计是目前工程设计最重要的设计方法。程序设计的语言种类较多,近年来广泛使用的有ABEL、VHDL和VerilogHDL语言。本次设计,主要采用VHDL语言设计。VHDL语言是随着集成电路系统化和高集成化发展起来的,是一种用于数字系统的设计和测试方法的描述语言。应用及发展趋势CPLD/FPGA的发展已经非常普及,在各个行业及领域都有广泛的应用,包括在机械、电子、通

9、信、航空航天、化工、矿产、生物、医学、军事等各个领域,都有EDA的应用4。2008年6月24日,北京Altrea公司宣布,深圳华禹高科技有限公司在其新的携式手持机中选用了MAXIIZ CPLD。之所以选用Altera MAX IIZ CPLD,是因为它不但可以迅速安全地实现新特性和功能,而且还具有最低的功耗和最小的电路板面积,该器件管理P1200便携式手持机中的多个接口,包括射频识别(RFID)读卡器、红外数据协会(IRDA)传感器、蓝牙接121以及LED控制端口等。该P1200便携式手持机已于2008年5月1日正式在杭州公交自行车项目中使用, 同年8月也已应用于北京奥运的身份识别、物流领域以

10、及公交等小额消费领域5。另外,EDA软件的功能日益强大,原来功能比较单一的软件,现在增加了很多新用途。如AutoCAD软件可用于机械及建筑设计,也扩展到建筑装璜及各类效果图,汽车和飞机的模型、电影特技等领域。1.2研究的基本内容1.2.1 CPLD的设计本设计的关键还是在于内部芯片的设计。由于EDA软件的功能日益强大,原来功能比较单一的软件,现在增加了很多新用途。本次设计采用的是Altera公司的CPLD芯片,我们会利用Quartus II进行设计,其中采用软件中的集成文本编辑器,来进行VHDL语言的设计。关于音乐的选择方面,尽量选择一些节奏缓慢,节拍清晰的歌曲,且音律范围不要太广的歌曲,这样

11、在设计上,即可尽量节约芯片内部资源6。另外,CPLD器件的选择也是一个关键。我们拟采用CPLD通用板来设计,这样的话,包括基准时钟在内的所有芯片外的东西,都需要外部接入来完成,因此,对芯片的结构了解也是一个关键。外围电路的设计外围电路都是一些最基本,最常见的模拟电路,因此在使用不会有太大问题,但有一个要注意的地方,就是在一些电阻和电容的取值上,要比较细心,比如说在放大器的发生模块上,要求驱动扬声器的电阻值就比较小,而且非常精确,一旦太大,可能会导致无法驱动扬声器,因此可以尽量采用滑动变阻器,通过计算与调试后,得出比较精准的数据7。外围电路的调试工作要配合芯片设计一起进行,这样可以调试出音乐输出

12、的最佳状态。总体设计概述MAX II 系列CPLDMAX II器件系列是一种非易失性、即用性可编程逻辑系列,它采用了一种突破性的新型CPLD架构。这种新型架构的成本是原先MAX 器件的一半,功耗是其十分之一,密度是其四倍,性能却是其两倍。这些超级性能是在提供了所有MAX系列CPLD 先进特性的架构的基础上,根据Altera专家们的意见而重新采用基于查找表的架构而得到的。这种基于查找表的架构在最小的I/O焊盘约束的空间内提供了最多的逻辑容量。因此,MAX II CPLD是所有CPLD系列产品中成本最低、功耗最小和密度最高的器件。基于成本优化的0.18微米6层金属Flash工艺,MAX II器件系

13、列具有CPLD所有的优点,例如非易失性、即用性、易用性和快速传输延时性。以满足通用性,低密度逻辑应用为目标,MAX II器件成为接口桥接、I/O扩展、器件配置和上电顺序等应用最理想的解决方案。除这些典型的CPLD应用之外,MAX II器件还能满足大量从前在FPGA、ASSP和标准逻辑器件中实现的低密度可编程逻辑需求。MAX II器件提供的密度范围从240到2210个逻辑单元(LE),最多达272个用户I/O管脚。本次设计核心模块CPLD采用ALTERA公司MAX II系列的EPM240T100C芯片。该芯片共有100个管脚,内部240个逻辑单元,如图2.1所示,为该芯片的封装图及管脚功能8。总

14、体设计思路总体设计框图与设计思路如图2.2所示,是本设计的音乐播放器的原理框图。其核心模块为CPLD芯片,内部有音调发生器和音乐编码器模块。音乐编码器内储存着预先设定的歌曲的编码。音乐编码器控制着音调发生器,每当音乐节奏时钟送给音乐编码器一个时钟脉冲时,音乐编码器就当前要播放的音符的编码送给音调发生器。音调发生器根据编码对应的分频系数将基准时钟分频,得到当前要播放的音符所对应频率的脉冲,再用这个脉冲去激励扬声器,就可以得到这个音符的声音。核心部分CPLD利用VHDL语言来完成,其他部分通过外围电路实现。 CPLD设计思路在购买CPLD芯片之前,首先对所编写好的程序在Quartus II软件中进

15、行编译仿真,在编译中,软件会自动计算出整个程序所需要的CPLD逻辑单元数。因此根据最后编译的结果,我们选择了EPM240型芯片,其内部逻辑单元数为240个,只要对程序进行一定的优化处理,即可以满足所有的设计要求。另外,为了使整个设计尽量简洁,程序中的四首歌全部编写歌曲的高潮部分,这样听起来更加耳熟能详,同时也能节省更多的芯片内部资源。外围电路设计思路扬声器方面则没有太多的选择,只要能够整个电路系统能够驱动的扬声器,都可以用。因此,扬声器的选择要等到最后全部系统设计完成后,实地选择播放效果较好的扬声器。另外,由于CPLD内部输出的信号比较弱,因此为了能够驱动扬声器导致发声,必须在扬声器前借一个音

16、频功率放大电路,同样,在该电路中接入可滑动变阻器,这样在后期的调试中,可以通过调节滑动变阻器,改变放大器的放大倍数,从而调试出放大出来音色最好的倍数。 MIDI音乐播放器芯片设计工作原理 MIDI音乐是Windows下的一种合成音乐,由于它通过记谱的方式来记录一段音乐,因此与wave音乐相比,它可以极大地减少存储容量。MIDI音乐的基本原理为:组成乐曲的每一个音符的频率值及其持续的时间是乐曲能连续演奏的两个基本数据,因此只要控制输出到扬声器的激励信号频率的高低和每一个频率信号的持续时间,就可以使扬声器发生连续的乐曲。如图所示,为CPLD内部芯片设计原理图。模块设计 音乐编码器模块设计此模块包括

17、节拍控制电路和音符产生电路。节拍控制电路以乐曲中最短音符的节拍为基准,产生乐曲所需要的全部节拍。在大部分音乐中,多以1/4为一拍,一拍则为一秒,同时在乐谱中,一般最短的音符多为1/16音符,因此为了达到四首歌曲的统一,我们将1/16音符设置为计数器的一个计数,对应的1/4音符则是四个计数。为了节省内部资源,我们只演奏高潮部分。这样的话,比如说涛声依旧为4/4拍的音乐,即一个小节有4拍,而高潮部分共有8个小节,所以在计数器的范围上我们设定为0127,即128位的计数器即可。另外,在设计中为了让歌曲循环播放,计数器设定计满自动清零计数的功能,这样,只要不断电,不关开关,歌曲就可以自动循环播放了。音

18、符产生电路采用查找表形式12。在节拍控制产生电路的接拍信号作用下,按乐曲中音符持续时间的长短输出相应音符名称。具体歌曲的音符,只需要通过互联网查找后,将对应音符储存在内部即可。音调发生模块设计此模块包括预置数产生电路和频率发生器。预置数产生电路设计采用查找表形式,按照音符的频率要求产生相应的预置数13。根据可变模值计数器的设计原理及音符的分频系数,可计算出乐曲中各音符的预置数,如表3.1所示。表3.1 音符的分频数和预置数音名分频系数初始值低音551023089低音645453646低音740504141中音138224369中音234054786中音330345157中音428635328中

19、音525515640中音622735918中音720256166高音119116280高音217036488高音315176674高音414326759高音512756816休止符008191在音符的选择上,选择了最广泛应用的16个音。若想编辑音域更广的音乐,则需要重新设定初始值。频率发生器由可变模值计数器实现。由于系统要求产生出的信号频率较高,因此选用2MHz高频脉冲作为可变模值计数器的技计数脉冲。所以,上图所给出的分频系数是用分频后的2MHz基础上计算得出的。各音阶频率及相应的分频如表3.2所示。表3.2 音符与频率对照表音名频率/Hz分频系数低音5391.995102低音64404545

20、低音7493.884050中音1523.253822中音2587.333405中音3659.253034中音4698.462863中音5783992551中音68802273中音7987.762025高音11046.501911高音21174.661703高音31318.511517高音41396.921432高音51567.981275休止符081910由于音阶频率多为非整数,而分频系数又不能为小数,故必须将得到的分频数四舍五入取整。由于最大的分频系数为5102,故采用13位二进制计数器已能满足分频要求。在表中可以看到不同音阶对应的不同初始值。对于不同的分频系数,只要加载不同的初始值即可。采

21、用加载初始值而不将分频输出译码反馈,可以有效地减少设计占用可编程逻辑器件的资源。“0”表示休止符,在很多音乐中,休止符也是一个重要的音符。对于休止符,只要将分频系数设为0,扬声器就不会发声了。 顶层模块设计顶层模块的设计可以采用原理图设计或者VHDL设计,我们直接采用VHDL语言进行顶层模块设计,将上述所提到的所有模块,利用component语句进行集合,然后利用管脚映射的方法,将所有输入输出连接在一起,这样就设计出了一个完整的MIDI音乐播放芯片,只需再连入外围电路即可进行演示。时钟电路在本次设计中,除了要提供给CPLD的4MHz晶振时钟以外,还要产生4Hz时钟接入音乐节奏时钟。这两个时钟信

22、号都是利用板载50MHz晶振分频后提供的。 音乐节奏时钟在上一章节中提到,我们以1/16音符为最小计数单元,而这个音符所占用的时间理论值为0.25s,所以我们在外部接入4Hz的时钟信号给计数器,已满足正常的音乐播放要求。音频功率放大电路由CPLD芯片输出的音频信号很微弱,不能直接去驱动扬声器,因此需要一个音频放大电路对输出的音频信号进行放大,然后再去驱动扬声器。我们采用由集成功率放大器LM386组成的音频功率放大器,如图4.2所示。其中C2是交流耦合电容,将功率放大器的交流输出送到负载上,输出信号通过Rw接到LM386的同相端。C1是退耦电容,R1-C3网络起到消除高频自激振荡作用。 歌曲选择

23、本次音乐播放器的设计在歌曲的选择上也至关重要。由于现在WAVE、MP3格式音乐的广泛流行,MIDI音乐听起来会稍显单调,有些歌曲在用MIDI放出来的时候,会有一些失真,而且没有MP3格式音乐那么流畅,因此在选歌上要慎重,所以尽量选择多一些歌曲,通过多次的调试,调试出最后放出来效果较好的音乐。经过了多次调试,最后确定了美丽的神话这首歌,这这首歌旋律明朗,耳熟能详,便于辨识。而且我很喜欢。芯片制作及系统调试CPLD程序下载本次设计采用的是Aletra公司的MAX II系列,因此,必须用Quartus II软件系列才能对该芯片进行编译、仿真、下载等功能。下载模式我们采用JTAG线的下载方式。Alte

24、ra的Quartus II是业内领先的FPGA/CPLD设计软件,具有最全面的开发环境,实现无与伦比的性能表现。本次设计采用VHDL语言编程设计。在Quartus软件中VHDL文本输入中,输入所有程序,并建立相应的工程项目,直接在该软件中进行编译及仿真,编译的同时,可以显示出当前芯片容量是否够用,如果不够用,则需要对程序进行进一步优化,直到容量达到芯片标准为止。所有准备就绪后,则通过软件中的下载功能,通过JTAG端口,将程序下载到芯片中。由于笔记本电脑只有通过USB BLASTER下载,而经过测试WIN7无法识别USB BLASTER。所以只有通过XP虚拟机来完成这一步,但是可以在WIN7下进

25、行仿真。系统仿真把程序下载到芯片内部后,将第四章所介绍的外围电路与CPLD连接后,形成整个系统。而仿真调试则主要针对音符预置数模块,扬声器发生及分频模块和音符储存模块进行调试。由于我们这个程序的频率较大为4MHz和4Hz。经过仿真发现由于周期太大仿真的显示结果效果不好。4Hz情况下甚至无法正常仿真。所以我们选择用一些较大的频率将我们实际的频率进行等比例的放大。这样可以方便我们的计算与观察。音符储存模块仿真音符预置数模块仿真分频器模块仿真XP虚拟机下程序下载成功图顶层模块RTL图结论通过对芯片内部的编程设计,加上必要的外围电路,构成了这个MIDI音乐播放器的系统,整体工作量适中。在前人已有的音乐

26、播放器的基础上,添加四首歌曲选择播放,彩灯闪烁,不同音乐的调试,设计更人性化,合理化,同时也多了几分创新。在此次设计中,所有设计要求全部实现,然而在音乐的播放质量上仍有一些瑕疵,可能是由于扬声器的质量问题或者芯片内部产生信号不稳定等关系,这都有待更多的时间对整个系统进行更多的测试,从而使播放出来的音乐更加悦耳。通过此次设计,对可编程逻辑器件CPLD/FPGA有了更深一步的了解,真正的达到了将课本中学习到的知识应用于实践,更深化了对这个领域的认知度。在设计的过程中,还掌握了许多有关电子领域必要软件的使用,对今后的工作都有一定得帮助。参考文献1 袁慧梅,宋宇.基于CPLD的MIDI音乐播放器的设计

27、.微计算机信息.2006.11.2 张丽萍,楼勇,朱尧富.利用VHDL语言设计数字电路. 机械与电气.2008.5.3 李洋. 现代电子设计与创新M.北京:中国电力出版社,2007.4 袁慧梅,宋宇.MIDI音乐发生器芯片的设计J.东北师大学报(自然科学版).2006.65 金红莉,周国娟. EDA技术及其应用J.科学之友.2008.4VHDL源代码顶层设计模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY Songer ISPORT(CLK4MHZ:IN STD_LOGIC; SPKOUT: OUT STD_LOGIC);END;ARCHITE

28、CTURE one OF Songer ISCOMPONENT NoteTabsPORT(clk: IN STD_LOGIC; ToneIndex: OUT INTEGER RANGE 0 TO 15);END COMPONENT;COMPONENT ToneTabaPORT(index: IN INTEGER RANGE 0 TO 15; Tone: OUT INTEGER RANGE 0 TO 16#1FFF#);END COMPONENT;COMPONENT SpeakeraPORT(clk: IN STD_LOGIC; Tone: IN INTEGER RANGE 0 TO 16#1F

29、FF#; fullspks: OUT STD_LOGIC);END COMPONENT;SIGNAL Tone: INTEGER RANGE 0 TO 16#1FFF#;SIGNAL ToneIndex: INTEGER RANGE 0 TO 15;BEGINu1: NoteTabs PORT MAP(clk=CLK4MHZ,ToneIndex=ToneIndex);u2: ToneTaba PORT MAP(Index=ToneIndex, Tone=Tone);u3: Speakera PORT MAP(clk=CLK4MHZ, Tone=Tone, fullspks=SPKOUT);EN

30、D;扬声器发生及分频模块library ieee;use ieee.std_logic_1164.all;entity Speakera isPORT(clk: IN STD_LOGIC; Tone: IN INTEGER RANGE 0 TO 16#1FFF#; fullspks: OUT STD_LOGIC);END ;architecture one of Speakera issignal CLK4MHz:std_logic;beginprocess(clk)variable cnt:integer range 0 to 16#0FFF#;variable ff:std_logic;b

31、eginif clkevent and clk=1 thenif cnt2 thencnt:=cnt+1;elsecnt:=0;ff:=not ff; -反向end if;end if;clk4MHz=ff;end process;process(CLK4MHz, Tone)variable Count11: integer range 0 to 20;variable ft:std_logic;begin if CLK4MHzevent and CLK4MHz=1 thenif Count1115 thenCount11:=Count11+1;elsecount11:=Tone;ft:=no

32、t ft;end if;end if;fullspks Tone Tone Tone Tone Tone Tone Tone Tone Tone Tone Tone Tone Tone Tone Tone ToneNULL;end case;end process;end;音符储存模块library ieee;use ieee.std_logic_1164.all;entity NoteTabs isPORT(clk: IN STD_LOGIC; ToneIndex: OUT INTEGER RANGE 0 TO 15);END;architecture one of NoteTabs iss

33、ignal CLK4Hz:std_logic;beginp2:process(clk) variable cnn:integer range 0 to 6249999; -分频系数为6249999variable dd:std_logic;beginif clkevent and clk=1 thenif cnn6249999 thencnn:=cnn+1;elsecnn:=0;dd:=not dd; end if;end if;clk4Hz =dd;end process p2;process(clk4Hz)VARIABLE Counter :integer range 0 to 130;b

34、egin IF clk4Hzevent AND clk4Hz=1THEN if counterToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexT

35、oneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexTone

36、IndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneInd

37、exToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexToneIndexNULL;end case;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公文档 > 其他范文


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号