音乐播放器设计实验报告

  • 格式:docx
  • 大小:538.21 KB
  • 文档页数:6

下载文档原格式

  / 6
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验报告

课程名称:数字系统设计实验指导老师:成绩:_____________

实验名称:音乐播放器设计实验实验类型:设计型

一、实验目的和要求(必填)二、实验内容和原理(必填)

三、主要仪器设备(必填)四、操作方法和实验步骤

五、实验数据记录和处理六、实验结果与分析(必填)

七、讨论、心得

一、实验目的和要求

实验目的:

(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键,输入多个脉冲信号和输入一个脉冲信号的效果不同,不能达到放下一首的目的,可能会跳到很多个下一首,导致很大的问题。