您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 15基于EDA技术的乐曲演奏电路的设计
《EDA技术与实验》课程设计题目:基于EDA技术的乐曲演奏电路的设计姓名:院系:电子信息工程系专业:通信工程班级:学号:指导教师:2012年12月成绩指导教师:成绩指导教师:2基于EDA技术的乐曲演奏电路的设计摘要:此次设基于EDA技术,通过对输入脉冲的分频来实现对不同音符(高、中、低音)的控制,通过计数来实现对不同音符所持续时间长短的控制;通过Verilog语言来编程来实现乐曲演奏电路及扬声器的模拟,最后利用对Max+plusⅡ软件的仿真的时序波形图的额分析来完成“欢乐颂”片段的演奏。关键字:EDA;乐曲演奏;Verilog语言;Max+plusⅡ软件前言EDA是英文“ElectronicsDesignAutomation(电子设计自动化)”的缩写。EDA技术是近几年迅速发展起来的计算机软件、硬件和微电子交叉的现代电子设计学科,是现代电子工程领域的一门新技术。它是以可编程逻辑器件(PLD)为物质基础,以计算机为工作平台,以EDA工具软件为开发环境,以硬件描述语言(HDL)作为电子系统功能描述的主要方式,以电子系统设计为应用方向的电子产品自动化设计过程。【1】目前以硬件描述语言(Verilog或VHDL)所完成的电路设计,可以经过简单的综合与布局,快速的烧录至FPGA上进行测试,是现代IC设计验证的技术主流。【2】超高速集成电路硬件描述语言VHDL是HDL的一种,是一种标准化程度较高的硬件描述语言,主要用于描述数字系统的结构、行为、功能和接口。进入到21世纪后,EDA技术得到了更快的发展,开始步入了一个新的时期,突出地表现在以下几个方面:电子技术各个领域全方位融入EDA技术,除了日益成熟的数字技术外,可编程模拟器件的设计技术也有了很大的进步。EDA技术使得电子领域各学科的界限更加模糊,它们相互渗透和包容,如模拟与数字、软件和硬件、系统和器件、ASIC与FPGA、行为与结构等,软、硬协同设计技术也成为EDA技术的一个发展方向。IP核在电子设计领域得到了广泛的应用,基于IP核的SOC设计技术趋向成熟,电子设计成果的可重用性进一步提高。嵌入式微处理器软核的出现,更大规模的FPGA/CPLD器件的不断推出,使得可编程芯片系统步入实用化阶段,在一片FPGA芯片中实现一个完备的系统已成为可能。用FPGA器件实现完备硬件的数字信号处理成为可能,用纯数字逻辑进行DSP模块的设计,使得高速DSP实现成为现实,并有力地推动了软件无线电技术的实用化。基于FPGA的DSP技术为高速数字信号处理算法提供了实现途径。在设计和仿真两方面支持标准硬件描述语言的EDA软件不断推出,系统级、行为验证级硬件描述语言的出现使得复杂电子系统的设计和验证更加高效。在一些大型的系统设计中,设计验证工作非常艰巨,这些高效的EDA工具的出现减轻了开发人员的工作量。3Max+plusⅡ是Altera公司提供的FPGA/CPLD开发集成环境,Altera是世界上最大可编程逻辑器件的供应商之一。Max+plusⅡ界面友好,使用便捷,被誉为业界最易用易学的EDA软件。在Max+plusⅡ上可以完成设计输入、元件适配、时序仿真和功能仿真、编程下载整个流程,它提供了一种与结构无关的设计环境,是设计者能方便地进行设计输入、快速处理和器件编程。【3】Max+plusⅡ提供丰富的库单元供设计者调用,其中包括74系列的全部器件和多种特殊的逻辑功能(Macro-Function)以及新型的参数化的兆功能(Mage-Function)。Max+plusⅡ软件具有开放核的特点,允许设计人员添加自己认为有价值的宏函数。1设计原理本设计是在EDA的技术上,通过Verilog语句的编程来实现对输入脉冲的分频。使音调和频率具有一一对应的关系。为此,本设计将以利用数控分频器对一具有较高频率的信号进行分频来产生相应的频率。对《欢乐颂》这首乐曲进行高、中、低音的代码编写和计数脉冲(音频的持续时间)的控制。最后通过Max+plusⅡ软件进行仿真,通过分析仿真的时序波形图来验证设计的正确性。2方案设计2.1设计内容要求设计一个乐曲演奏电路,用FPGA器件驱动小扬声器演奏“欢乐颂”片段。按照图一乐谱,设计相应电路控制speaker信号的方波频率,某一频率持续时间长短,各频率间间隔大小,就可以推动小扬声器演奏乐曲。图一“欢乐颂”乐谱片段2.2设计方案比较方案一:由单片机MSP430F149来实现乐曲演奏电路的设计,外围电源采用+3V电源供电,时钟有8MHz的晶振产生,中央处理器由MS430F149单片机来完成,乐曲演奏状态由七段数码管来模拟。这种方案,结构简单容易掌握,各部分电路实现起来都非常容易,在传统的乐曲演奏设计中也应用得较为广泛,技术成熟。其原理框图见图二。4图二单片机原理实现框图方案二:基于现场可编程门阵列FPGA,通过EDA技术。采用VHDL超高速集成电路硬件描述语言实现乐曲演奏电路设计。3程序设计思想3.1分频电路产生不同频率方波;3.2利用计数器实现speaker信号频率选择,某一频率持续时间长短,各频率间间隔大小,其原理框图见图三。图三乐曲演奏电路原理框图通过方案一二的比较,可以看出方案一的设计使用分立元件电路较为多,因此会增加电路调试难度,且电路的不稳定性也会随之增加,而采用FPGA芯片实现的电路,由于在整体性上较好,在信号处理和整个系统的控制中,FPGA的方案能大大缩减电路的体积,提高电路的稳定性。此外其先进的开发工具使整个系统的设计调试周期大大缩短,一般来讲,同样的逻辑,基于FPGA要比基于单片机要快很多,因为它们工作的原理是完全不同的。单片机是基于指令工作的,同样的激励到达单片机后,单片机首先要判断,然后读取相应的指令,最后做出响应,每一步都是需要在单片机的时钟驱动下一步步的进行。而基于FPGA则是把相应的逻辑“暂时”固化为硬件电路,它对激励作出的响应速度是电信号从FPGA的一个管脚传播到另一个管脚的传播速度,当然这指的是异步逻辑,同时电信号也要在芯片内进行一些栅电容的充放电动作,但这些动作都是非常非常快的。结合本设计的要求及综合以上比较的情况,我们选择了基于FPGA的乐曲演奏电路的方案。4设计过程4.1乐曲演奏的原理组成乐曲的每个音符的频率值(音调)及其持续的时间(音长)是乐曲能持续演奏所需的两个基本数据,因此只要控制输出到扬声器的激励信号的频率高低和持续时间,就可以使5扬声器发出连续的乐曲声。首先来看怎样控制音调的高低变化。4.2音调的控制频率的高低决定了音调的高低。音乐的十二平均率规定:每两个八度音之间的频率相差一倍。在两个八度音之间,又可分为12个半音,每两个半音的频率比为1212。另外,音名A的频率为440HZ,音名B和C之间、E和F之间为半音,其余为全音。由此可以计算出简谱中从低音1到高音1之间每个音名对应的频率如表1所示。表1简谱中的音名与频率的关系音名频率/Hz音名频率/Hz音名频率/Hz低音1261.6中音1523.3高音11046.5低音2293.7中音2587.3高音21174.7低音3329.6中音3659.3高音31318.5低音4349.2中音4698.5高音41396.9低音5392中音5784高音51568低音6440中音6880高音61760低音7493.9中音7987.8高音71975.5所有不同频率的信号都是从同一个基准频率分频得到的。由于音阶频率多为非整数,而分频系数又不能为小数,故必须将计算得到的分频数四舍五入取整。若基准频率过低,则由于分频比太小,四舍五入取整后的误差较大。若基准频率过高,虽然误差变小,但分频数将变大。实际的设计中应综合考虑这两个方面的因素,在尽量减小频率误差的前提下取合适的基准频率。本例中选取6MHz为基准频率。若无6MHz的时钟频率,则可以先分频得到6MHz或换一个新的基准频率。实际上只要各个音名间的相对频率关系不变,C作1与D作1演奏出的音乐听起来都不会“走调”。表2各音阶频率对应的分频比及预置数音名分频比预置数音名分频比预置数低音576538730中音3455211831低音668189565中音5382712556中音1573610647中音6340912974中音2511111272高音1286713516这里需要演奏的是“欢乐颂”乐曲,该乐曲各音阶频率及相应的分频比如表2所示,为了减少输出的偶次谐波分量,最后输出到扬声器的波形应为对称方波,因此在到达扬声器之前,有一个二分频的分频器。表2中的分频比就是从6MHz频率二分频得到的3MHz频率基础上计算得出的。如果用正弦波代替对称方波来驱动扬声器将会有更好的效果。从表2可以看出,最大的分频系数7653,故采用14位二进制计数器分频可满足需要。在表2中,除了给出了分频比以外,还给出了对应于各个音阶频率时计数器不同的预置数。对于不同的分频系数,只要加载不同的预置数即可。采用加载预置数实现分频的方法比采用反馈复零法节省资源,实现起来也容易一些。此外,对于乐曲中的休止符,只要将分频系数设为0,即初始值为142-1=16383即可,此时扬声器将不会发声。64.3音长的控制音符的持续时间应根据乐曲的速度及每个音符的节拍数来确定。设计中演奏的欢乐颂片段,最短的音符为四分音符,在我的设计中则只需要再提供一个4MHz的时钟频率即可产生四分音符的时长。图三所示的乐曲演奏电路的原理框图,其中,乐谱产生电路用来控制音乐的音调和音长。控制音调通过设置计数器的预置数来实现,预置不同的数值就可以使计数器产生不同频率的信号,从而产生不同的音调。控制音长是通过控制计数器预置数的停留时间来实现的,预置数停留的时间越长,则该音符演奏的时间越长。每个音符的演奏时间都是0.25us的整数倍,对于节拍较长的音符,如二分音符,在记谱时将该音名连续记录两次即可。音名显示电路用来显示乐曲演奏时应的音符。可以用三个数码管分别显示高、中、低音名,实现演奏的动态显示,十分直观。在本设计中,HIGH[3:0]、MID[3:0]、LOW[3:0]等信号分别用于显示高音、中音和低音音符。为了使演奏能循环进行,需另外设置一个时长计数器,当乐曲演奏完成时,保证能自动从头开始演奏。4.4程序代码modulehuanlesong(clk_6MHz,clk_4MHz,speaker,high,mid,low);inputclk_6MHz,clk_4MHz;//clk_4MHz:用于控制音长(节拍)的时钟频率;//clk_6MHz:用于产生各种音阶频率的基准频率;outputspeaker;//speaker:用于扬声器的输出信号,在此设计中为方波信号output[3:0]high,mid,low;//high,med,low:分别用于显示高音、中音和低音音符,各驱动一个数码管来显示regspeaker;reg[3:0]high,mid,low;reg[7:0]counter;reg[13:0]divider,origin;wirecarry;assigncarry=(divider==16383);always@(posedgeclk_6MHz)beginif(carry)divider=origin;//如果divider==16383则执行这个elsedivider=divider+1;//如果if语句不成立则执行这个endalways@(posedgecarry)beginspeaker=~speaker;end//用非阻塞取反,避免引起自激7always@(posedgeclk_4MHz)begincase({high,mid,low})'b000000000110:origin=9565;低音6的分预置数'b000000000101:origin=8730;低音5的分预置数'b000001100000:origin=12974;中音6的分预置数'b000001010000:origin=12556;中音5的分预置数'b000000110000:origin=11831;中音6的分预置数'b000000100
本文标题:15基于EDA技术的乐曲演奏电路的设计
链接地址:https://www.777doc.com/doc-5906627 .html