android音乐播放器实验报告总结,音乐播放器设计实验报告.docx

41528d3028836879cd698677c3999917.gif音乐播放器设计实验报告.docx

实验报告课程名称数字系统设计实验指导老师成绩_____________实验名称音乐播放器设计实验实验类型设计型一、实验目的和要求(必填)二、实验内容和原理(必填)三、主要仪器设备(必填)四、操作方法和实验步骤五、实验数据记录和处理六、实验结果与分析(必填)七、讨论、心得一、实验目的和要求实验目的(1)掌握音符产生的方法,了解DDS技术的应用;(2)了解AC97音频接口电路的应用;(3)掌握系统“自顶而下”的设计方法。实验要求(1)可以播放四首乐曲,设置PLAY、NEXT、RESET三个按键。按PLAY键播放当前乐曲,按键NEXT播放下一首乐曲。(2)LED0指示播放情况(播放时点亮),LED2和LED3指示当前乐曲序号。2、个性化要求(1)用键盘上的三个按键P、N、ESC控制乐曲的播放。(2)用SVGA显示乐曲的播放波形。二、实验内容和原理本次实验共可分成MCU、SONG_READER、NOTE_PLAYER、CODEC_CONDITIONER和AC97_IF五个子模块。如下图1、MCU模块接受按键信息,通知SONG_READER模块是否要播放(PLAY)及播放哪首乐曲(SONG)。2、SONG_READER模块根据MCU的要求,逐个取出音符{NOTE,DURATION}送给NOTE_PLAYER模块播放,当一首乐曲播放完毕,回复MCU模块乐曲播放结束信号(SONG_DONE)。3、NOTE_PLAYER模块接收到需播放的音符,在音符的持续时间内,以48HZ速率送出该音符的正弦波样品给AC97音频接口模块。当一个音符播放结束,向SONG_READER模块发送一个NOTE_DONE脉冲索取新的音符。4、CODEC_CONDITIONER、AC97_IF模块负责与AC97音频系统接口工作。另外,按键处理模块完成输入同步化、防颤动和脉宽变换等功能。设计原理1、主控制模块MCU的设计根据设计要求,模块MCU的工作流程图如下图所示。系统复位后经RESET状态初始化后进入WAIT状态等待按键输入或乐曲播放结束应答,若有按键输入则转入相应的按键处理状态(NEXT或PLAY),若一曲播放结束则进入结束播放END状态。2、乐曲读取模块SONG_READER的设计结构框图如下图所示,地址计数器为5位二进制计数器,其中NOTE_DONE为计数允许输入,状态Q为SONG_ROM的低5位地址,SONG10为SONG_ROM高两位地址。当地址计数器出现进位或DURATION为0时,表示乐曲结束,应输出一个时钟周期宽度的高电平脉冲信号SONG_DONE。SONG_READER控制器的算法流程图暂略。由于从SONG_ROM中读取数据需要一个数据周期,所以在流程图中插入NEXT_NOTE转态,目的是延迟一个时钟周期输出NEW_NOTE信号,以配合SONG_ROM的读取要求。3、音符播放模块NOTE_PLAYER的设计NOTE_PLAYER的结构框图如下图所示NOTE_PLAYER控制器负责与SONG_READER模块接口,读取音符信息,并根据音符信息从FREQUENCYROM中读取相位增量STEP_SIZE送给DDS子模块SINE_READER。另外,NOTE_PLAYER控制器还需要控制音符播放时间。音符定时器为6位二进制计数器,BEAT、TIME_CLEAR分别为使能、清0信号,均为高电平有效。定时时间为音符的长短(DURATION_TO_LOAD个BEAT周期),TIMER_DONE为定时结束标志。子模块SINE_READER的功能及就是利用DDS技术产生正弦样品,其原理框图如下所示由于SINEROM只给出四分之一周期的正弦样品,所以地址或数据也需要进行相应的处理,可以直接根据下图设计地址处理器和数据处理器。三、主要仪器设备XUPVIRTEXIIPRO开发系统、ISE92、MODELSIM60C四、实验数据记录与处理各模块仿真结果如下所示1、MCURESET000WAIT001END010NEXT011PLAY100以STATE为核心综合分析,首先置为RESET状态,下个时钟周期置为WAIT,PLAY_BUTTON置0后状态变为PLAY,之后又是WAIT按照波形分析过去,发现和流程图是一致的,仿真正确。2、SONG_READER先观察整体,再取几小段观察,着重分析STATE、NEW_NOTE、SONG_DONE等波形,可以发现是符合要求的。3、SINE_READER首先观察曲线是否是和STEP_SIZE有关的正弦曲线,这一点是满足的。然后将UUT中的信号也添加进去,从中抽查一些小段,看SAMPLE、SAMPLE_OUT、ROM_ADDR是否满足要求。这才能够初步判断波形正确。4、NOTE_PLAYER首先观察曲线是频率符合要求的正弦信号。一旦SINE_READER是正确的,NOTE_PLAYER出错的几率就比较小。观察TIMER_DONE信号可以发现是符合要求的,初步判定NOTE_PLAYER模块正确。5、MUSIC_PLAYER当其他模块正确时可基本判定MUSIC_PLAYER仿真正确,因为之前正弦波信号正确此时不再观察正弦波。我之前犯了一个错误就是SONG_READER的状态机NEW_NOTE状态有误,NEW_NOTE应该是1而不是0。且之前由于疏忽没有在测试SONG_READER时发现,在测试MUSIC_PLAYER时我发现其他都正常,但是SAMPLE_OUT在很长时间后才不是0,经过长时间的思考和尝试后我意识到是这里出了问题。五、实验结果与分析用ISE92软件对VERILOG代码进行综合实现后,下载到XUPVIRTEXIIPRO开发系统进行验证,具体过程不再详述。六、思考题1、在实验中,为什么NEXT按键需要消颤动及同步化处理,而RESET、PLAY两个按键不需要消颤动及同步化处理因为输入多个RESET或PLAY信号都是置零或播放,和输入一个脉冲信号的效果是相同的,没有消颤动及同步化处理也没有影响。但是对于NEXT键,输入多个脉冲信号和输入一个脉冲信号的效果不同,不能达到放下一首的目的,可能会跳到很多个下一首,导致很大的问题。2、如果将PLAY按钮功能重新定义为PLAY/PAUSE,即单击此按钮,乐曲在“播放”和“暂停”两种转态之间切换,那么应怎样修改设计修改设计MCU状态机即可,如下图所示七、讨论、心得一开始面对如此大的工程设计我觉得难以入手,好在老师给出了提示从DDS开始。开始我想要完全弄懂DDS的原理,看了很久很久的书仍然不太明白,耽误了很多时间,导致后面进度一直跟不上,心里非常慌。后来干脆就直接做SINE_READER模块,从全加器开始,地址处理、数据处理一个个做下去。这样虽然对原理和设计一知半解,但是随着后面的仿真等对原理的认识逐渐加深。虽然还是不太理解为什么这样设计以及某个已经给了代码的模块究竟是干什么的,但是总比开始好多了。我觉得做实验一开始不用追求完全理解,总要先入手才能慢慢明白的。代码的编写总是存在一些瓶颈,一开始语法不熟,总要想半天怎样表达这个意思,一般是通过翻书或者问人来解决。一般来说,只要理解了要做什么之后,就比较简单了。难的是仿真改错。语法错误是最好办的,唯一的问题软件提示错误原因

你可能感兴趣的:(android音乐播放器实验报告总结,音乐播放器设计实验报告.docx)