名称:SD卡音乐播放设计Verilog代码Quartus? AX301开发板
软件:Quartus
语言:Verilog
代码功能:
本实验一个关键是在没有文件系统的情况下,搜索 SD 卡每个扇区的内容,匹配出 WAV 文件。
这里有一个假设:假设每一个文件都是从一个扇区第一个字节开始而且文件是连续存储的,经过大量实验,发现?FAT32?文件格式中的文件确实如此。
FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com
本代码已在AX301开发板验证,AX301开发板如下,其他开发板可以修改管脚适配:
设计文档:
SD?卡音乐播放
1?实验简介
在其他实验中我们已经完成了 SD 卡读写和音频模块的录音播放,本实验通过搜索 SD 卡中 WAV?音乐文件,然后送到音频模块播放,完成一个简单音乐播放器的功能。
2?实验原理
本实验一个关键是在没有文件系统的情况下,搜索?SD?卡每个扇区的内容,匹配出?WAV?文件。这里有一个假设:假设每一个文件都是从一个扇区第一个字节开始而且文件是连续存储的,经过大量实验,发现?FAT32?文件格式中的文件确实如此。
2.1?WAV?文件格式
大部分的文件都有文件头,WAV?也不例外,我们通过分析?SD?卡一个扇区的前几个字节,判断这个文件是否为?WAV?文件。
WAV 文件作为多媒体中使用的声波文件格式之一,它是以 RIFF 格式为标准的。RIFF 是英文 Resource Interchange File Format?的缩写,每个?WAV?文件的头四个字节便是“RIFF”,所以本实验就简单的以每个扇区的前?4?个字节是否为“RIFF”判断该文件是否为?WAV?文件,紧接着?4?个字节表示文件的大小,这样我们就可以确定要读取的数据量。WAV?文件头大小是?88?字节,在播放时要把前?88?个字节的文件头去掉。
wav?文件头
3?程序设计
例程中通过?wav_read?搜寻?SD?卡中的?WAV?文件,并将?WAV?文件读取出来写入?FIFO,最后再从?FIFO?中将数据输出并写入音频模块。由于在前面的例程中已经讲过其他模块的原理及使用这里不再赘述,仅说明?wav_read?模块。
wav_read?模块完成了从?SD?卡中搜索?wav?文件,读取?wav?文件,状态机如下,如果有搜索请求,则迚入搜索状态“S_FIND”,如果搜索到?WAV?文件,迚入“S_PLAY_WAIT”状态,检查?FIFO的剩余空间是否够?512?个,如果有?512?个空间,就迚入“S_PLAY”状态读取?wav?的一个扇区内容。
wav_read?模块状态机
在程序设计中,搜寻?SD?卡里图片的文件头是按每?8?个字节地址搜寻一次的形式操作,所 以在一次搜寻结束后,下一次搜寻时需要将地址左移?3?位对齐以保证下一次搜寻的地址和图片在?SD?卡中存储的地址一致。
部分代码展示:
////////////////////////////////////////////////////////////////////////////////// //??????????????????????????????????????????????????????????????????????????????// //??????????????????????????????????????????????????????????????????????????????// //??Author:?meisq???????????????????????????????????????????????????????????????// //??????????msq@qq.com??????????????????????????????????????????????????????????// //??????????ALINX(shanghai)?Technology?Co.,Ltd??????????????????????????????????// //??????????heijin??????????????????????????????????????????????????????????????// //?????WEB:?http://www.alinx.cn/????????????????????????????????????????????????// //?????BBS:?http://www.heijin.org/??????????????????????????????????????????????// //??????????????????????????????????????????????????????????????????????????????// ////////////////////////////////////////////////////////////////////////////////// //??????????????????????????????????????????????????????????????????????????????// //?Copyright?(c)?2017,ALINX(shanghai)?Technology?Co.,Ltd????????????????????????// //????????????????????All?rights?reserved???????????????????????????????????????// //??????????????????????????????????????????????????????????????????????????????// //?This?source?file?may?be?used?and?distributed?without?restriction?provided????// //?that?this?copyright?statement?is?not?removed?from?the?file?and?that?any??????// //?derivative?work?contains?the?original?copyright?notice?and?the?associated????// //?disclaimer.??????????????????????????????????????????????????????????????????// //??????????????????????????????????????????????????????????????????????????????// ////////////////////////////////////////////////////////////////////////////////// //================================================================================ //??Revision?History: //??Date??????????By????????????Revision????Change?Description //-------------------------------------------------------------------------------- //??2017/7/12?????meisq??????????1.0?????????Original //*******************************************************************************/ `timescale?1ns/1ps module?audio_rx
点击链接获取代码文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=1352