《音乐播放器设计实验报告(共6页).docx》由会员分享,可在线阅读,更多相关《音乐播放器设计实验报告(共6页).docx(6页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上实验报告课程名称: 数字系统设计实验 指导老师: 成绩:_实验名称: 音乐播放器设计实验 实验类型: 设计型 一、实验目的和要求(必填)二、实验内容和原理(必填)三、主要仪器设备(必填)四、操作方法和实验步骤五、实验数据记录和处理六、实验结果与分析(必填)七、讨论、心得一、实验目的和要求实验目的:(1)掌握音符产生的方法,了解DDS技术的应用;(2)了解AC97音频接口电路的应用;(3)掌握系统“自顶而下”的设计方法。实验要求:(1)可以播放四首乐曲,设置play、next、reset三个按键。按play键播放当前乐曲,按键next播放下一首乐曲。(2)LED0指示播
2、放情况(播放时点亮),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模块乐曲播放结束信
3、号(song_done)。3、note_player模块接收到需播放的音符,在音符的持续时间内,以48Hz速率送出该音符的正弦波样品给AC97音频接口模块。当一个音符播放结束,向song_reader模块发送一个note_done脉冲索取新的音符。4、codec_conditioner、ac97_if模块负责与AC97音频系统接口工作。另外,按键处理模块完成输入同步化、防颤动和脉宽变换等功能。设计原理:1、主控制模块mcu的设计根据设计要求,模块mcu的工作流程图如下图所示。系统复位后经RESET状态初始化后进入WAIT状态等待按键输入或乐曲播放结束应答,若有按键输入则转入相应的按键处理状态(
4、NEXT或PLAY),若一曲播放结束则进入结束播放END状态。 2、乐曲读取模块song_reader的设计结构框图如下图所示,地址计数器为5位二进制计数器,其中note_done为计数允许输入,状态q为song_rom的低5位地址,song1:0为song_rom高两位地址。当地址计数器出现进位或duration为0时,表示乐曲结束,应输出一个时钟周期宽度的高电平脉冲信号song_done。song_reader控制器的算法流程图暂略。由于从song_rom中读取数据需要一个数据周期,所以在流程图中插入NEXT_NOTE转态,目的是延迟一个时钟周期输出new_note信号,以配合song_r
5、om的读取要求。3、音符播放模块note_player的设计note_player的结构框图如下图所示:note_player控制器负责与song_reader模块接口,读取音符信息,并根据音符信息从Frequency ROM中读取相位增量step_size送给DDS子模块sine_reader。另外,note_player控制器还需要控制音符播放时间。音符定时器为6位二进制计数器,beat、time_clear分别为使能、清0信号,均为高电平有效。定时时间为音符的长短(duration_to_load个beat周期),timer_done为定时结束标志。子模块sine_reader的功能及就
6、是利用DDS技术产生正弦样品,其原理框图如下所示:由于Sine ROM只给出四分之一周期的正弦样品,所以地址或数据也需要进行相应的处理,可以直接根据下图设计地址处理器和数据处理器。三、主要仪器设备XUP Virtex-II Pro开发系统、ISE9.2、ModelSim6.0C四、实验数据记录与处理各模块仿真结果如下所示:1、mcu:RESET:000 WAIT:001 END:010 NEXT:011 PLAY:100以state为核心综合分析,首先置为RESET状态,下个时钟周期置为WAIT,play_button置0后状态变为PLAY,之后又是WAIT按照波形分析过去,发现和流程图是一致
7、的,仿真正确。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信号可以发现是符合要求的,初步判定
8、note_player模块正确。5、music_player:当其他模块正确时可基本判定music_player仿真正确,因为之前正弦波信号正确此时不再观察正弦波。我之前犯了一个错误就是song_reader的状态机NEW_NOTE状态有误,new_note应该是1而不是0。且之前由于疏忽没有在测试song_reader时发现,在测试music_player时我发现其他都正常,但是sample_out在很长时间后才不是0,经过长时间的思考和尝试后我意识到是这里出了问题。五、实验结果与分析用ISE9.2软件对Verilog代码进行综合实现后,下载到XUP Virtex-II Pro开发系统进行验
9、证,具体过程不再详述。六、思考题1、在实验中,为什么next按键需要消颤动及同步化处理,而reset、play两个按键不需要消颤动及同步化处理?因为输入多个reset或play信号都是置零或播放,和输入一个脉冲信号的效果是相同的,没有消颤动及同步化处理也没有影响。但是对于next键,输入多个脉冲信号和输入一个脉冲信号的效果不同,不能达到放下一首的目的,可能会跳到很多个下一首,导致很大的问题。2、如果将play按钮功能重新定义为play/pause,即单击此按钮,乐曲在“播放”和“暂停”两种转态之间切换,那么应怎样修改设计?修改设计mcu状态机即可,如下图所示:七、讨论、心得一开始面对如此大的工
10、程设计我觉得难以入手,好在老师给出了提示:从DDS开始。开始我想要完全弄懂DDS的原理,看了很久很久的书仍然不太明白,耽误了很多时间,导致后面进度一直跟不上,心里非常慌。后来干脆就直接做sine_reader模块,从全加器开始,地址处理、数据处理一个个做下去。这样虽然对原理和设计一知半解,但是随着后面的仿真等对原理的认识逐渐加深。虽然还是不太理解为什么这样设计以及某个已经给了代码的模块究竟是干什么的,但是总比开始好多了。我觉得做实验一开始不用追求完全理解,总要先入手才能慢慢明白的。代码的编写总是存在一些瓶颈,一开始语法不熟,总要想半天怎样表达这个意思,一般是通过翻书或者问人来解决。一般来说,只
11、要理解了要做什么之后,就比较简单了。难的是仿真改错。语法错误是最好办的,唯一的问题软件提示错误原因的英文句子每个词都认识,联系在一起就不知道是什么意思了。例如我也犯了漏掉endmodule 这样傻的错误,看半天也看不懂错误原因,直到询问老师。好的一面是如果老师出一样的改错题目我肯定会做了。端口不对等错误自己难以查出,软件也会提示我们。但是出来的那些绿线是否正确是个大问题。像mcu这样的小模块是很好判断的,一个状态一个状态的看一遍就能确保正确与否。大的模块怎么办?我碰了很多壁,明明知道自己有错就是查不出来,看代码左看右看都没问题。不知道是不是我太笨,起码有七八个小时花在查错上,查出来之后简直哭笑不得。我有两个花了很多时间的错误,全部都是把1写成了0或者把0写成了1这样的。我发现,当大体没有问题但有一两个数据一直不对头一般说明就是1写成了0或者把0写成了1这样的粗心错误。有个方法就是找关键引脚,盯紧关键引脚对不对。还有一点,我之前检查的时候往往抽样查,看一两个地方好像是对的就以为对了,其实不是这样的,要找代表性的区域。例如sine_reader,00、01、10、11区域都要看才行。专心-专注-专业
限制150内