- 1、本文档共15页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
一、实验目的和要求(必填) 二、实验内容和原理(必填)
三、主要仪器设备(必填) 四、操作方法和实验步骤
五、实验数据记录和处理 六、实验结果与分析(必填)
讨论、心得
一、实验目的和要求:
实验目的:
(1)掌握音符产生的方法,了解DDS技术的应用。
(2)了解AC97音频接口电路的应用。
(3)掌握系统“自顶而下”的设计方法。
实验任务:
设计一个音乐播放器。
(1)可以播放四首乐曲,设置play、next、reset三个按键。按play键播放当前乐曲,按next键播放下一首乐曲。
(2)LED0指示播放情况(播放时点亮)、LED2和LED3指示当前乐曲序号。
二、实验内容和原理
(1)音乐播放器的设计原理
根据实验任务可将系统分为主控制器(mcu)、乐曲读取(song_reader)、音符播放(note_player)、AC97音频接口(codec_conditioner)和ac97_if五个子模块,系统的总体框图如下:
各个模块的功能如下:
1.mcu模块接收按键信息,通知song_reader模块是否要播放(play)及播放哪首乐曲(song),若一曲播放结束则进入播放结束END状态。
2.song_reader模块根据mcu模块的要求,逐个取出音符{note,duration}送给note_player模块播放,当一首乐曲播放完毕,回复mcu模块乐曲播放结束信号(song_done)。
3.note_player模块接收到需播放的音符,在音符的持续时间内,以48kHz速率送出该音符的正弦波样品给AC97音频接口模块。当一个音符播放结束,向song_reader模块发送一个note_done脉冲索取新的音符。
4.codec_conditiner、ac97_if模块负责与AC97音频系统接口工作,本实验已提供了这两个模块的代码。
另外,按键处理模块完成输入同步化、防颤动和脉宽变换等功能。
1、 主控制模块mcu的设计
mcu模块是主控制模块,有响应按键信息、控制系统播放两大任务,工作流程如下面的流程图所示。要求系统复位后经RESET状态初始化后进入WAIT状态等待按键输入或乐曲播放结束应答,若有按键输入则转入相应的按键处理状态(NEXT或PLAY),若一曲播放结束则进入结束播放END状态。
mcu的控制器算法流程图如下图:
以下为mcu的端口含义
引脚名称 I/O 引脚说明 clk Input 100MHz时钟信号 reset Input 复位信号,高电平有效 play_button Input “播放”按键,低电平有效 next_button Input “下一曲”按键,一个时钟周期宽度的高电平脉冲 play Output 高电平表示播放 song_done Output 当播放下一曲时,输出一个时钟周期宽度的高电平复位脉冲reset_play,并复位note_player模块 song_done Input note_player模块的应答信号一个时钟周期宽度的高电平脉冲表示一曲播放结束 song[1:0] Output 当前乐曲的序号 结合以上算法流程图和端口定义,mcu模块代码如下:
module mcu(clk, reset, play_button, next, play, reset_play, song, song_done );
parameter RESET=0, WAIT=1, END=2, NEXT=3, PLAY=4;
input reset, play_button,song_done,clk,next;
output reg [1:0] song;
output reg play, reset_play;
reg state;
always @( posedge clk )
begin
if (reset)
begin play=0; song=2b00;reset_play=1; state=RESET; end
else
case (state)
RESET:
begin reset_play=0; state=WAIT; end
WAIT:
if (song_done)
begin state =END; play=0; reset_play=1; end
else if (next)
begin state =NEXT; play=1; reset_play=1; son
文档评论(0)