基于FPGA的音乐播放控制电路设计
- 格式:doc
- 大小:406.50 KB
- 文档页数:24
1
音乐播放器控制电路
课程设计报告
班 级:
学 号:
姓 名:
指导老师:
2 一、设计目的
将《断桥残雪》简谱按照要求进行编码并将其写入只读存储器ROM之中,然后通过设计的电路读出ROM的内容,进行解码后驱动蜂鸣器播放。
二、开发环境
采用Altera Quartus II 9.0软件设计环境。它提供了全面的逻辑设计能力,包括电路图、文本和波形的设计输入以及编译、逻辑综合、仿真和定时分析以及器件编程等诸多功能。特别是在原理图输入等方面,Altera Quartus II 9.0被公认为是最易使用、人机界面最友好开发软件。并采用FPGALP-2900开发装置硬件实现,给人们带来极大的方便。
三、设计过程概述
1、 数字简谱简介
数字简谱用不同的点和线段配合8个阿拉伯数字0~7构成音符,记录表示千变万化的音乐曲子及其基本音乐元素。
乐音是由三个要素决定的:频率决定了乐音的音高,频谱决定过了乐音的音色,音形标志着演奏方式。乐曲的基本元素是:音的高低(音高)、音的长短(时值)、音的力度和音质(音色)。音的高低和长短不同决定了乐曲的不同,因此构成了音乐的最重要的基础元素。
音乐用1、2、3、4、5、6、7分别表示同一调式7个不同的音高:多、来、米、法、索、拉、西。这七个数字上、下标注的点表示音调升高8度音程或降低8度音程。数字0为休止符,表示停止发音。
数字下或数字上的线段表示因的持续时间的长短。没有线段的数字为4分音符,器时值为音长的基本度量单元,成为一拍。数字下面标注的线段表示时间减短,没增加一条线段,表示时值减少一半,音符相应的成为8分音、16分音……数字后面的线段称为延长线,表示前一个音符的市场的增加,每条延长线的时值增量为1拍。
音长是一个相对的时间概念,一拍的时间长度没有限制,可以是1s,也可以是2s或是0.5s,。若将4分音符的时长定为1s,其他音符的时值长度以其为基本参照度量,半拍为0.5s,2拍为2s,以此类推。
2、音高与频率关系
20Hz至20KHz的音频脉冲信号控制蜂鸣器,可以使其根据控制信号的频率发出不同的音调。一般的音乐我们可以用3个8度音程进行表现,不同的音名和音程具有不同的频率,由此我们可以设计出电子电路根据音符控制输入到蜂鸣器中的频率,从而发出我们想要的声音。
3 3个八度音程的音高与频率关系
各音高的频率关系:每两个相差8度的音高频率相差一倍.
若计数器输出频率的为高音1,将分频器输入的计数脉冲频率降低一倍,则音调降低8度,发出中音1。
3、音高控制
根据简谱音符的音高控制蜂鸣器频率。
数字电路中,模N的计数器溢出信号的频率是计数脉冲信号频率的1/N。
所以,可以设计一个模可控的计数器实现不同的分频比,使溢出信号频率满足不同的音高要求。由于三个8度音程中相同音名的信号频率相差一倍 。所以在分频系数不变时,将计数脉冲频率升高(或降低)一倍可使分频器的溢出信号频率升高(或降低)一倍,音调升高(或降低)8度。
4、音长控制
某个音符音长由该音高频率信号的持续时间长短决定
可采用一个计数器对音长进行定时,计数脉冲周期是乐谱时值,决定了该单元音符的持续时间。所以,可采用计数器对音长进行定时,计数脉冲周期为所选乐谱中时值最短音符的时值,其它音符的音长定时可根据其时值与最短音符音长(度量单位)的倍数关系持续不同的计数脉冲周期。比如:乐谱中最短音符为8分音长,则4分音符为2个时钟周期,而全音符为8个时钟周期。
5、总体设计思路
① 要制作播放器,首先要解决的问题就是找一个能够产生固定频率的源,在这里很容易实现,我们使用一个10M的晶振,当其接上适当的电路之后,其将发出恒定的振荡波形。
② 有了10M的信号源之后,怎样才能使其变成驱动蜂鸣器发出我们需要的声音的信号,这里我们使用分频器来实现。
③ 为了发出不同音名的音,用计数器来实现分频器要常常改变分频系数,这里我们选用一个模可变的计数器来完成这个功能。
4 ④ 对于如何实现复位控制环节,由于音程码只能用到其中的三种组合,还有一种可以用作复位信号,当播放到最后一个音节的时候,复位信号有效,经过复位控制产生一个有效电平使得时值计数器清零,实现音乐的循环播放。
⑤ 对于如何实现间断音控制环节,从“曲谱储存表”中读出间断音控制位被送入间断音控制环节,这个环节的单稳会产生一个相当于十分之一“音符播放长度”的脉冲,使得计数使能无效产生间断。
⑥ 对于如何实现不同的音高,选择两个独立的二分频元件对10M的输入信号实现两次二分频,利用一片74153来实现数据选择,根据“曲谱表”中的音程码控制数据选择器选出需要的频率实现不同的音高。
⑦ 为了实现音乐播放的连续性,我们把乐谱存储到ROM中,播放电路的通取ROM中的内容经过特殊的解码操作便可以得到我们需要的计数器分频系数。分频后便是我们需要的驱动蜂鸣器的信号。
6、设计方案原理框图
5 四、总体设计电路图
VCCjianshuINPUTVCCjiashuINPUTVCCchangshuINPUTVCCjingyinINPUTVCCOSCINPUTVCCzhantingINPUTaOUTPUTbOUTPUTcOUTPUTdOUTPUTeOUTPUTfOUTPUTgOUTPUTaddress[2..0]q[12..0]lpm_rom_xishuinsta0q02feninst1down countersloaddata[12..0]clockcnt_enq[12..0]coutlpm_counter0inst2address[6..0]q[5..0]lpm_rom_qupuinst3ABC3C2C1C0GNY74153Minst4a0q02feninst5a0q02feninst6mcpoutdanweninst7up countersclrclockq[6..0]lpm_counter1inst9AND2inst10down countermodulus 1000000clockq[20..0]coutlpm_counter2inst11BCD TO 7SEGACDBRBINBINLTNOCOEODOFOGOBOARBON7448inst8GNDpcyuanshujianshujiashuclockshuduxuanzeinst13AND2inst14AND2inst16x[12..0]ad[4]ad[3]ad[0]ad[1]ad[2]ad[5]ad[5..0]x[12..0]ad[2..0]clockad[4]ad[3]clock时钟输入cp2分频间断音元件速度选择元件暂停控制键静音控制键数码管显示
6
五、单元电路设计与分析
各单元电路的选择与工作原理分析
1、 二分频
功能作用:作为独立的元件使用在总体电路中。
VCCa0INPUTq0OUTPUTCLRNDPRNQDFFinstVCCNOTinst3
原理分析:使用一个D触发器和一个非门实现对输入信号的二分频。
独立的二分频元件:input2fenp2feninst5生成的独立元件
2、 M分频和时值计数单元
功能作用: 10M的晶振中输出的脉冲波cp,通过“M分频”,作为时钟脉冲输入“时值计数器”,计数器便按照此时钟进行计时,其输出端连接“曲谱储存表”。
AND2inst15up countersclrclockq[7..0]lpm_counter1inst3down countermodulus 2000000clockq[22..0]coutlpm_counter2inst11f[7..0]d3d4VCCCPINPUT
7
原理分析:预设每秒钟播放5个单元的音符,对来自晶振的CP脉冲进行2000000分频(即M分频器lpm_counter2的模取为2000000),其cout端接时值计数器(lpm_counter1)。时值计数器(lpm_counter1)的q输出做为地址对ROM进行访问,由于有125个单元的音符,所以选择8位地址线,在图形上表现出就是q[7..0].
3、曲谱存储表
功能作用:“时值计数器”(lpm_counter2)的输出端连接“曲谱储存表”(lpm_rom0),这就可以使其按照地址访问ROM中的数据,从曲谱输出表ROM的输出端输出数据。 “曲谱储存表”(lpm_rom0)中的音名码作为地址被送入“分频系数表”(lpm_rom1).
address[7..0]q[5..0]lpm_rom0inst2d[5..0]f[7..0]
原理分析:按照编码规则,读出的数据一共分为6位,如下表所示
5 4 3 2 1 0
间断音控制 音程码(控制音高) 音名码(控制音名)
最高位控制间断音控制。4、3两位是音程码,用于控制高音、中音和低音。2、1、0这三个是音名码,用于控制音名,选择播放do re mi fa so la si中的哪个音。曲谱表用一个ROM储存,当address输入相应的地址之后,q段就输出其中的数据。
《断桥残雪》简谱编码
8
4、分频系数表
功能作用:“曲谱储存表”(lpm_rom0)中的音名码作为地址被送入“分频系数表”(lpm_rom1),这样相应的分频系数就被读了出来,然后被送进N分频单元中计数器(lpm_counter0)的置数端data[12..0]。
address[2..0]q[12..0]lpm_rom1inst1d[2..0]x[12..0]
原理分析:分频系数表用一个如下图所示的ROM实现,其中的地址(Addr)就代表这个do re mi fa so la si和休止符这个8个音符的简谱表示。其中的数值便是分频系数。
5、N分频单元
功能作用:从“分频系数表”(lpm_rom1)中读出来的分频系数被送进N分频单元中的计数器(lpm_counter0)的置数端data[12..0],原始的信号经过N分频便得到需要的信号。
down countersloaddata[12..0]clockcnt_enq[12..0]coutlpm_counter0inst8x[12..0]N分频 输出时钟输入计数使能
原理分析:为了方便计算,采用了减计器,cout端为溢出端,当计数其计到0以后cout出高电平,使得同步置数sload段有效,分频系数被从date[12..0]段置入计数器。
6、间断音控制模块
功能作用:从“曲谱储存表”(lpm_rom0)中读出间断音控制位被送入间断