片上系统设计课程.docx
- 文档编号:9891577
- 上传时间:2023-02-07
- 格式:DOCX
- 页数:15
- 大小:1.90MB
片上系统设计课程.docx
《片上系统设计课程.docx》由会员分享,可在线阅读,更多相关《片上系统设计课程.docx(15页珍藏版)》请在冰豆网上搜索。
片上系统设计课程
中国地质大学(武汉)
课程:
片上系统设计课程实验报告
姓号:
学号:
班级:
指导老师:
王家豪
一、题目及要求:
题目:
基于FPGA的音乐播放器设计,要求:
FPGA开发板上从SD卡读取音频文件并播放音乐,支持WAV格式或MP3格式或其他格式音频文件,所有数字电路设计均采用VerilogHDL语言,软件程序设计采用C语言。
功能要求:
(可实现某几项或全部)
1.支持SD卡文件读取;
2.支持WAV或MP3或其他格式音频,如为压缩格式则需解压缩;
3.歌曲名称LCD显示;
4.支持“播放/暂停”控制功能;
5.支持“前一首”功能;
6.支持“下一首”功能;
7.支持LED灯显示音量功能;
8.支持复位功能;
9.支持硬启动,FPGA码流文件和软件二进制文件写入ROM,从ROM启动;
10.支持总歌曲数和第几首歌曲显示功能,通过LCD或数码管显示。
二、实验原理
实验目的:
实现了一个全功能的音乐播放器,打通过AlteraDE2开发板上的音乐文件的能力,可播放实时的SD卡上WAV格式音乐文件,同时为用户提供互动的音乐,如暂停,快进等等。
熟悉片上系统开发的流程。
设计构思:
按要求看,已给的工程中在播放音乐的时候不可以切换下一首歌曲,只能在选择歌曲的界面选择下一首上一首,这不像我们平时使用的音乐播放器,所以我们试图将音乐播放过程中切换歌曲此功能加到四个key上去。
这里使用的基本内存是SD卡。
板子上有一个SD卡插槽,将其插入SD卡。
SD卡控制器的设计提供的SD记忆的相互作用。
为了找到最佳的方法,界面与DE2开发板的SD卡,我们遇到了各种现有的IP可用于控制在HAL的抽象级别或物理实现SD卡的核心。
SD卡的文件系统必须符合下列要求:
-FAT16文件格式,意味着最小的数据单元是16位长。
-此外,在FAT16格式的分区将整个内存的数据块,每块512个字节组成。
其中文件系统的FAT16:
为FAT16系统需要由SD卡控制器侦测到该卡。
该系统分区成块,其中分区进行。
在按键的控制上面:
具体实现了SW[4],SW[5]和SW[6]用于快进,暂停去扭转和歌曲分别。
此外,SW[3]选择随机模式KEY[2]和KEY[3]用于通过播放列表进行浏览以选择一个特定的歌曲。
系统框架
NIOSII,SD卡以及其他外设都是通过Avalon总线相连接的。
Avalon总线是一种协议较为简单的片内总线,Nios通过Avalon总线与外界进行数据交换。
实验主要的工作就是通过NiosII来控制各个设备的工作。
其中外设有VGA(视频图形阵列)控制器、内存、LCD显示控制器、LED灯、按键和开关控制。
音频数据通过总线存入输入输出缓存器中,然后经过音频编解码器,通过扬声器输出。
软件控制的框架
具体内容可以分解为下
1.检测插入的SD卡,如果SD卡不存在就继续检测,如果存在就跳到2
2.找到根目录下的所有波形文件
3.然后设置SD卡第一个文件作为当前的文件
4.读取文件头找到采样率。
5.设置音频芯片的采样率。
6.然后读取512字节的数据,如果读取发生错误则跳到1如果没有读取错误,就播放读取的512字节的数据并且更新LED
7.随后就更新播放时间并检测文件是否读完。
如果不是就再次回到6,并重复以上步骤;如果读取完毕,就把下一个文件设置为当前文件,然后再继续设置音频芯片的采样率并回到4。
三、实验操作
实验代码和基本工程文件已经从老师那里得到。
1.打开工程
2.启动Tools>SOPCBuilder
由于我使用的较高版本软件,这里选择“openinClassic”,以旧版本打开。
3.去掉程序中不用的模块
也可不去,这样也不影响,只是浪费资源。
4.成功生成软核
选择退出
5.编译工程
6.烧入板子
打开Tools>programmer,add.soffiles后,添加硬件开始。
7.打开NiosIIIDE,建立Niosc/c++Application
8.转移代码
将已给工程中hello_led_0文件夹下的.h.c代码考到刚建立的wav_player目录下的wav_player内,在回到软件右键点击refresh。
9.编译工程后运行
成功后RunasNIOSⅡhardware
四、实验结果
1此图为提示选歌界面
2.第二幅图为播放第一首歌曲,歌名为dawn。
3.此图为播放第2首歌,歌名为CountingStars,刚开始播放第00秒。
4.此图为加载歌曲的界面,显示loading。
实验其他操作描述:
1.选歌界面:
key2为移动下一首,key3为移到上一首,key1确认播放。
2.播放歌曲的时候:
key0复位退回到选歌,key1为播放下一首,key2为播放上一首,长按key3暂停。
3.其他:
前两个数码管先当前播放第几首歌,接下来两个显示总曲目,最后四个显示歌曲的时间进度。
swi[4]开关快进,swi[5]开关快退,swi[6]开关暂停。
只保留顺序播放swi[0]开关。
其他的随机循环播放功能删除了,显示歌词也删除了。
五、实验代码(附加)
简单说明,老师提供的工程hello_led.c中是一个主函数,我在里面添加了一个子函数用于自身嵌套实现在播放歌曲时切换歌曲,退出播放等操作。
hello_led.c文件中调用各个子函数,具体实现办法要看分散在各个.c源文件中的子函数,比如LCD显示控制,数码管显示控制,LED等显示控制。
下载地址:
六、设计小结
在本次实验的过程中,主要是进行了QuartusⅡ与NIOSⅡIDE的软件操作过程,并对所提供的代码进行运行之后对所出现的问题进行相关的调试。
遇到的问题:
1.使用老师所提供的工程文件和代码进行修改,对工程进行编译和运行会遇到各种错误,经过上网查询是自己笔记本的软件版本太新的原因,通过重新编译或者新建工程解决问题。
2.在想要规则的显示音量的问题上。
我们在网上找到了另外一个人自己设计的方案。
重现他的实验过程时,但是在把程序下载的板子中去的时候出现Error:
Can’tconfiguredevice.ExpectedJTAGIDcode0x020820DDfordevice1,butfoundJTAGIDcode0x020830DD。
编译是通过的。
后来上网查找才发现是开发板的型号不对。
最后无奈还是回到了老师提供的工程方案之中。
3.其他一些零碎的软件操作小问题,向他人请教解决。
这个实验让我们熟练的使用quartus2与nios2,受益匪浅。
软核设计提供了例子,所以其中代码的理解占这个实验很大的一块:
hello_led.c中包含主函数,再调用其它源文件中定义好的子函数,很方便。
hello_led.c这个只是包含主程序,具体实现了什么功能还得看各个子程序的功能在具体实验中,我们删除了一些代码,比如歌词的显示,循环和随机播放模式。
总之,感触颇多。
有时候感觉已经摸到成功的门槛了遇到不可解决的问题导致不得不从头再来的失望。
但是每次解决问题的时候的喜悦和快乐也时时伴随着我们。
老师有一次说过:
你的努力和你的付出不一定是线性关系。
但是只要你再多努力一点,你就可能达到你的目标了。
七、实验分工
●对代码整体架构的理解和修改:
XXX
●查找相关资料解决问题,准备SD卡等材料:
XXX
●软件操作及硬件调试:
XXX
●
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 系统 设计 课程