我的FPGA毕业设计:一款支持歌词同步的智能音乐播放器(附完整代码)
首先先声明一下,本项目已经结题,可以放心根据我的设计进行二次开发和直接套用!!!
代码每行都标有注释,方便同学进行学习!!
制作不易,记得三连哦,给我动力,持续更新!!!
完整工程文件下载: (点击蓝色字体获取)
引言
随着数字信号处理和嵌入式系统技术的发展,基于现场可编程门阵列(FPGA)的音乐播放器因其高灵活性和实时处理能力受到广泛关注。本文介绍了一种基于Altera Cyclone IV系列FPGA芯片EP4CE10F17C8的MP3音乐播放器设计。该设计能够从SD卡读取并播放MP3或者WAV格式的音乐文件,通过按键实现播放控制(暂停/播放、切歌、音量调节、单曲循环与顺序播放切换),通过LCD显示歌名(歌名图片存储于另一张SD卡),并支持通过蓝牙模块实现上一曲/下一曲控制。整个系统使用Verilog硬件描述语言实现,兼顾性能与功能扩展性。
本文旨在分享设计过程、实现细节及遇到的问题与解决方案,为FPGA开发者提供参考,也可以找我进行二次设计和其他FPGA设计指导。
关键词:FPGA;MP3硬件解码;音频处理;Verilog HDL;LCD显示
一、系统设计概述
本音乐播放器系统的设计目标是实现一个功能完整、操作简便的嵌入式音乐播放器。系统整体架构分为硬件和软件两部分
1.1 系统功能
- 音乐播放:从SD卡读取MP3文件并解码播放。
- 按键控制:支持暂停/播放、切歌、音量加减、单曲循环与顺序播放切换。
- LCD显示:显示当前播放歌曲的歌名(歌名以图片形式存储于另一张SD卡)。
- 蓝牙控制:通过蓝牙模块实现上一曲/下一曲切换。
- 开发平台:基于Altera EP4CE10F17C8 FPGA,使用Verilog语言。
1.2 系统架构
系统由以下模块组成:
- SD卡接口模块:负责读取主SD卡中的MP3文件和辅助SD卡中的歌名图片。
- MP3解码模块:解码MP3音频数据并输出至音频接口。
- 音频输出模块:将解码后的音频数据转换为模拟信号输出至扬声器或耳机。
- 按键控制模块:处理用户按键输入,实现多种控制功能。
- LCD显示模块:驱动LCD屏幕显示歌名图片。
- 蓝牙通信模块:接收蓝牙信号,实现远程切歌控制。
- 主控模块:协调各模块的工作,管理数据流和控制信号。
具体的实现框架如下图所示:

二、硬件设计
2.1 主要硬件组件
- FPGA芯片:Altera Cyclone IV EP4CE10F17C8,逻辑单元约10K,适合中小型嵌入式应用。
- SD卡模块:
- 主SD卡:存储MP3音乐文件,支持FAT32文件系统。
- 辅助SD卡:存储歌名图片(BMP或JPEG格式)。
- 音频解码芯片:MY690-16S解码芯片,支持MP3格式解码和音频输出。
- LCD显示屏:TFT LCD 液晶屏模块 4.3 寸LCD,用于显示歌名图片。
- 蓝牙模块:HC-05蓝牙模块,支持串口通信,接收控制指令。
- 按键:5个按键(播放/暂停、下一曲、上一曲、音量加、音量减)。
- 音频输出:8R喇叭扬声器
2.2 硬件介绍
2.2.1 FPGA介绍
本设计FPGA部分没有进行硬件画板子设计,正好我手里有一个开发板就直接使用了,采用的是宏图pro开发板,该开发板正好可以满足我这次设计的所以外设,并且资源够用,如果大家没有这个开发板的话,也可以随便找一个你自己的开发板,工程可以完全移植

2.2.2 LCD介绍
本次设计LCD显示屏,我才用的是黑金的配套4.3" TFT LCD 液晶屏模块 AN430 模块,这个也是我之前设计一直在使用的模块,大家如果有别的也可以替代使用

2.2.4 SD卡模块
本设计的SD卡读写模块,采用的最常用的,而且最便宜的SD卡读写模块,大家可以自行在某宝进行购买,大概也就几块钱,读写的协议采用的是SPI协议

2.2.5 音频模块
本设计的音频模块采用的是MY1690-12P模块进行设计,此模块采用串口的方式进行读写,使用起来非常方便,大家也可自行准备

2.2.6 音频播放模块
本设计的音频播放模块,也是采用最简单的喇叭进行播放,主打一个经济实惠,但是设计完全没问题的原则,大家也可以自行准备

2.2.7 蓝牙模块
本设计的蓝牙模块采用的是HC-05蓝牙模块,也是大家经常使用的模块,之前很多设计都有用到,所以也没必要再换别的模块

三、设计思路
3.1 整体设计
本设计为多功能数字音乐播放器设计,采用FPGA作为核心控制整个电路,预期对需要的功能绘制流程图和各个子模块框图,导出数据通道和控制单元,编写Verilog代码,对代码进行仿真和验证。
整个系统设计分为音乐处理模块(mp3_top),蓝牙控制模块(lanya_ctrl),SD卡控制模块(sd_ctrl),sdram模块(sdram_top),LCD显示模块(tft_ctrl)以及图片选择模块(data_rd_ctrl)。

3.1.1 音乐处理模块
音乐模块的硬件原理图如下所示:

其中我们可以通过串口进行 音乐的选择、播放、工作模式进行设置,具体的协议如下所示

3.1.2 蓝牙模块设计
蓝牙模块主要工作原理也是通过串口给FPGA发生数据,让后由安卓手机作为主机,进行数据发送

3.1.3 SD卡读写模块
SD卡读写模块主要是使用SPI协议对SD模块进行图片的读取,其中SD卡主要的时许图如下所示

通过控制读写的地址,来切换显示的具体的音乐名称
四、代码设计
本次设计的代码全部使用verilog进行实现,开发平台为Quartus II 13.0,我将分开给大家介绍实现的代码
4.1 音乐处理模块(mp3_top)
此代码的功能为用FPGA接收按键操作,通过串口控制MP3模块播放,同时管理播放状态和曲目显示。
部分代码如下:
4.2 蓝牙控制模块(lanya_ctrl)
这个模块是 蓝牙串口通信的接收端,负责解码手机发来的控制指令,供FPGA主控使用。
部分代码如下所示:
4.3 SD卡控制模块(sd_ctrl)
此代码主要是控制SD卡读写图片信息,并通过sdram进行缓存,其中包括初始化SD卡,读取SD卡扇区和指定地址
部分代码如下:
4.4 sdram模块(sdram_top)
此模块主要是用来缓存SD卡读取的数据,并传送到LCD显示模块
主要代码如下:
4.5 LCD显示模块(tft_ctrl)
此模块主要读取sdram的图片数据,然后显示歌曲的名称图片,其中也包括初始化LCD和控制lcd显示的数据设计
代码如下:
4.6 图片选择模块(data_rd_ctrl)
此代码主要是配合音乐的播放,来控制LCD显示的图片信息,通过音乐模块反馈的当前播放的音乐来控制LCD显示的音乐名称
代码如下:
5、下板测试
连接好硬件设备,然后给开发板供电
编译工程,生成.sof文件,然后下载到FPGA开发板,进行测试,测试没问题后,固化.jjc文件到FPGA开发板。
硬件连接如下:

同时需要一个安卓手机,下载蓝牙调试助手,我就用之前小车的上进行修改,具体如下,只用到上一曲和下一曲的功能

具体演示如下面视频所示:
https://live.csdn.net/v/476912
这样我们项目的完整功能就测试完毕,后期可根据需求在进行更新!!!
如果感觉文章对您有用,麻烦三连支持一下,方便下次用到的时候,就可以快速找到我,非常感谢您的支持!!!
完整工程文件下载: (点击蓝色字体获取)

浙公网安备 33010602011771号