音乐播放器设计实验报告
- 格式:docx
- 大小:538.21 KB
- 文档页数:6
实验报告
课程名称:数字系统设计实验指导老师:成绩:_____________
实验名称:音乐播放器设计实验实验类型:设计型
一、实验目的和要求(必填)二、实验内容和原理(必填)
三、主要仪器设备(必填)四、操作方法和实验步骤
五、实验数据记录和处理六、实验结果与分析(必填)
七、讨论、心得
一、实验目的和要求
实验目的:
(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位地址,song[1:0]为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模块接口,读取音符信息,并根据音符信息从Frequency ROM中读取相位增量step_size送给DDS子模块sine_reader。另外,note_player 控制器还需要控制音符播放时间。
音符定时器为6位二进制计数器,beat、time_clear分别为使能、清0信号,均为高电平有效。定时时间为音符的长短(duration_to_load个beat周期),timer_done为定时结束标志。
子模块sine_reader的功能及就是利用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……按照波形分析过去,发现和流程图是一致的,仿真正确。
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,经过长时间的思考和尝试后我意识到是这里出了问题。
五、实验结果与分析
用ISE9.2软件对Verilog代码进行综合实现后,下载到XUP Virtex-II Pro开发系统进行验证,具体过程不再详述。
六、思考题
1、在实验中,为什么next按键需要消颤动及同步化处理,而reset、play两个按键不需要消颤动及同步化处理?
因为输入多个reset或play信号都是置零或播放,和输入一个脉冲信号的效果是相同的,没有消颤动及同步化处理也没有影响。但是对于next键,输入多个脉冲信号和输入一个脉冲信号的效果不同,不能达到放下一首的目的,可能会跳到很多个下一首,导致很大的问题。