名称: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
666