基于FPGA预置歌曲播放器硬件课程设计报告.docx
《基于FPGA预置歌曲播放器硬件课程设计报告.docx》由会员分享,可在线阅读,更多相关《基于FPGA预置歌曲播放器硬件课程设计报告.docx(43页珍藏版)》请在冰豆网上搜索。
基于FPGA预置歌曲播放器硬件课程设计报告
华中科技大学硬件课程设计总结报告
项目名称:
基于FPGA的预置乐曲播放器设计
院系:
华中科技大学__
【摘要】
本次课程设计的项目名称是‘基于FPGA的预置乐曲播放器’,本次设计是在BASYS2实验开发板上实现,使用xinlinx14.1软件,开发语言采用VHDL,、通过Basys开发板的拨码开关实现播放乐曲的相关功能的控制;该播放器还外接自制音箱实现放大乐曲功能,PS2键盘实现电子琴的扩展弹奏功能,并通过VGA显示电子琴琴键界面。
【关键词】
FPGA;Basys;xilinx;VHDL;预置音符;音乐播放;电子琴;VGA显示屏显示;PS/2键盘;数码管
一、绪论
1.1.研究背景
在电子技术的飞速发展的今天,电子产品的种类越来越多,功能越来越强大,体积越来越小,功耗越来越低。
随着经济的快速发展,人们对生活质量的要求也越来越高,在越来越高效率的生活条件下,人们需要来音乐来释放压力,而体型庞大的随身听已经满足不了人们的需求。
在此背景下,MP3应运而生。
MP3播放器,顾名思义也就是可播放MP3格式的音乐播放工具。
MP3发展到今天,其功能越来越多,外观越来越精致,受到了广大消费者的喜爱。
但是传统的Flash存储器的成本居高不下,设计者创意受限,造成MP3播放器卖价不菲但功能单一,而利用FPGA实现的MP3播放器可以用尽可能低的成本提供尽可能多的附加性能。
可编程逻辑器件和EDA技术的发展也为本次课程设计提供了一定的研究背景。
EDA技术,即电子设计自动化,是以计算机为工具,设计者在EDA软件平台上,用硬件描述语言HDL完成设计文件,然后由计算机自动地完成逻辑编译、化简、分割、综合、优化、布局、布线和仿真,直至对于特定目标芯片的适配编译、逻辑映射和编程下载等工作。
这样,将原来的“电路设计+硬件搭试+调试焊接”转化为“功能设计+软件模拟+仿真下载”,在芯片的设计中完成对电路板的设计,减少了电路板连线,提高了系统集成度,降低了可能的干扰,增加了系统的可靠性和稳定性,提高了设计的灵活性和效率,大大提升了技术指标。
MP3播放器的功能可以有很多,基本功能就有从SD卡读取文件,通过扬声器播放音乐,通过调节按钮调节音量等。
还可以有多个扩展功能,如通过LED显示歌曲的歌曲名、演唱者、播放时间等相关信息,快进后退,暂停等。
甚至可以实现一些较高级别的创新功能,如通过语音识别实现MP3的密码保护功能。
这是一个发展空间很大的课题,研究者可以根据自己的能力水平和兴趣爱好自由发展。
本次课程设计中,我完成了预置音乐的播放,暂停,音符显示,播放模式控制,播放时间显示,暂停及重新播放控制,快进及回放控制,快速及慢放控制,VGA显示乐谱彩条,键盘敲击电子琴,音量调节功能。
1.2.基本技术简介
1.2.1.可编程逻辑器件FPGA
FPGA(Field-ProgrammableGateArray),即现场可编程门阵列,在结构上主要分为三个部分,即可编程逻辑单元,可编程输入/输出单元和可编程连线三个部分。
它采用专用的集成电路,用户不需要投片生产就可以得到合用的芯片。
FPGA是ASIC电路中设计周期最短、开发费用最低、风险最小的器件之一,功耗低,是小批量系统提高系统集成度、可靠性的最佳选择之一。
了解利用FPGA实现电子琴的基本原理,综合运用所学知识实现一个具有多个模块的模数混合系统,为后续课程学习和工作打下基础,而且实现乐曲播放器设计业十分有趣,能够加深电子系统在音乐计数领域的作用。
本次课程设计使用的是BASYS2开发板,是一个基于xinlinxSpartan-3E可编程逻辑器件和AtmelAT90USB2USB控制器的电路设计和实现的平台,USB电缆提供电源和编程接口,所以他没有其他的电源供应器和编程电缆。
BASYS2开发板向用户提供完整的,准备使用的,硬件适合托管范围的,基本的逻辑器件复杂控制器的电路,开发板上包括I/O设备和所必须的FPGA支持电路,不需要任何其他组件就可以实现无数的电路设计。
1.2.2.硬件描述语言VHDl
VHDL语言是一种超高速集成电路硬件描述语言,是用于电路设计的高级语言,事实上已成为通用的硬件描述语言。
VHDL主要用于描述数字系统的结构、行为、功能和接口,他的语言形式十分类似于一般的计算机高级语言。
他的程序特点是将一个设计实体分成外部和内部,外部又称可视部分,或者端口,同理,内部又称不可视部分,涉及实体的内部功能和算法完成部分。
在对一个设计实体定义了外部界面后,一旦其内部开发完成后,其他的设计就可以直接调用这个实体。
这种将设计实体分成内外部分的概念是VHDL系统设计的基本点。
由于VHDL语言易读和结构化,所以易于修改设计,在硬件电路的设计过程中主要的设计文件使用VHDL来编写源代码。
VHDL具有多层次的设计描述功能,既可以描述系统级电路,又可以描述门级电路。
VHDL支持预定义的和自定义的数据类型,给硬件描述带来较大的自由度,使设计人员能够方便地创建高层次的系统模型。
VHDL对设计的描述具有相对独立性,设计者可以不懂硬件的结构,也不必管理最终设计实现的目标器件是什么,而进行独立的设计。
本次课程设计用的就是VHDL语言编写程序,实现整体模块中的各种功能。
1.2.3.开发软件xilinx
本次课程设计中使用的Spartan-3E开发板就是由xilinx公司最新推出的低成本FPGA,是基于Spartan-3/3L的,对其性能和成本进一步优化。
这款产品成本低廉,总体性能指标不是很优秀,适合低成本应用场合,是Xilinx未来几年在低端FPGA市场上的主要产品。
1.3.设计目标
播放器的功能可以有很多,基本功能就有从SD卡读取文件,通过扬声器播放音乐,通过调节按钮调节音量等。
还可以有多个扩展功能,如通过LED显示歌曲的歌曲名、演唱者、播放时间等相关信息,快进后退,暂停等。
甚至可以实现一些较高级别的创新功能,如通过语音识别实现MP3的密码保护功能。
这是一个发展空间很大的课题,研究者可以根据自己的能力水平和兴趣爱好自由发展。
本次课程设计中,我们完成了预置音乐的播放,暂停,音符显示,播放模式控制,播放时间显示,暂停及重新播放控制,快进及回放控制,快速及慢放控制,VGA显示乐谱彩条,键盘敲击电子琴,音量调节功能。
Ø预置音乐的播放:
把音乐的曲谱写在程序里面,通过对不同音符的发音频率进行分析,把不同的音符以不同频率的脉冲形式输出,接到扬声器发出声音。
Ø暂停:
音乐是通过不断输送的时钟脉冲一个一个连续不断的实现输出的,使时钟脉冲停止就达到了是音乐播放暂停的功能。
Ø重置:
将音乐乐谱置为零即可。
Ø音符LED显示:
把音符的简谱代码存放在程序中,在音符频率输出的同时也通过LED灯把音符的简谱代码显示出来。
Ø播放模式控制:
通过一个拨码开关,实现单曲播放和循环播放模式的切换。
Ø播放时间显示:
在乐曲开始播放的同时启动计时器,并将时间显示在数码管上,随着乐谱的播放而递增,当暂停是时间停止计数,重置时将时间清零。
Ø快进及回放控制:
通过快进按键和回放按键控制,当快进按键按下时将乐谱以3个音节递增,回放按键按下时以3个音节递减。
Ø快放及慢放控制:
通过快放和慢放两个拨码开关,分别实现快放慢放,快放时每个音节时间播放3个音节,慢放时每3个音节播放1个音节,即实现了快放和慢放功能。
ØVGA彩条显示音节:
在显示器上画出7条彩条分别对应着7个音调,当对应音调被播放时,显示器上对应的彩条显示高亮。
Ø键盘接口实现电子琴:
通过键盘接口实现电子琴,主要是坚挺键盘,当键盘按下1~7按键时分别对应7个音调,并播放出来,即实现了电子琴功能。
Ø音量调节:
把输出的声音经过一个集成运算放大电路,通过可调电阻对音量进行调节。
1.4.关键技术
按照EDA开发流程,采用VHDL硬件描述语言开发,从系统的整体出发对硬件演奏电路的功能进行分析并划分为多个功能模块,完成各个功能模块的设计以及实现,最后通过系统结构的整体设计实现预先设置乐曲的播放功能。
再把播放功能模块的输出经过一个集成运算放大电路实现音量调节功能。
需要完成的设计如下:
Ø找出不同音符的发音频率,寻找最佳待分频频率,计算分频数和分频预置数,制作乐谱查找表。
乐谱查找表里应当有:
不同音符的发音频率,该发音频率相对于基准频率的分频系数和分频预置数。
Ø预置曲谱。
定义一个转换规则,将音乐音符转换为代码预置在程序里。
Ø对预置的曲谱码在乐谱查表码里进行查找,找出相应音符对应频率的分频预置数。
Ø根据查找到的分频预置数对待分频频率进行分频并输出。
Ø通过集成运放电路实现音量调节。
Ø将输出连接到扬声器,播放音乐。
Ø通过不同拨码开关及按键的状态控制模式状态。
Ø通过键盘监听得到按下的按键,如果按下的是1到7,就产生相应的音调,通过查表查到预置数,然后送到进行分频播放。
Ø通过显示屏画出彩条,利用产生的音调信号作为控制信号,送到VGA模块,使相应的彩条高亮。
1.5.考核指标
1.是否能正常播放两首乐曲,音节易于分辨,无很大噪声。
2.能否正常调整系统模式,并在各个模式下都能按要求工作,各个模式下可以正常切换。
3.系统VGA显示是否正常。
4.系统电子琴功能是否能正常接听按键,并播放相应的音调,无较大延时和抖动。
5.系统的工作是否稳定,不会经常出现死机。
1.6.参考资料
【1】闵玉堂FPGA硬件课程设计指导书
【2】xilinxFPGA设计基础(VHDL版)李云松宋锐雷杰杜建超编著,西安电子科技大学出版社,2008-02-01
【3】电子线路设计•实验•测试(第四版)罗杰谢自美主编,电子工业出版社,2006-6
【4】FPGA应用技术及实践刘睿强陈鸿邓显林编,北京理工大学出版社,2011-01
【5】电子线路综合设计刘睿强陈鸿邓显林编,北京理工大学出版社,2011-01
1.7.元器件列表
元器件型号
单价(数量)
元器件性能
实现功能
Basay2板
1块
中低端可编程器件
本项目的所有基本功能
显示屏
1块
正常
VGA显示
键盘
1块
正常
电子琴演奏用键盘
1.8.成员列表
1.9.时间历程
内容
时间
完成人员
工作完成情况
需求分析,系统设计
第10周
正常完成,并提交开题报告
基本功能模块设计,附加模块设计,各模块实现思路及原理
第11周
正常完成,并绘制各模块框图
基本功能模块代码编写
12周到
13周
正常完成代码
基本功能模块仿真及调试
14周
正常完成调试,实现基本功能
VGA模块代码编写
15周
正常完成代码
VGA模块仿真及调试
16周
正常完成调试,实现VGA显示
键盘监听实现电子琴功能
16周
正常完成代码
键盘功能仿真和调试
17周
正常完成调试,键盘监听正常,实现电子琴弹奏功能
模块整合与调试
18周
正常完成调试,整合各个模块,实现预期功能
总结报告
19周
按时完成总结报告
1.10.系统实物图片
系统整体实物图片和能够体现作品特征的关键图片
二、系统设计
2.1系统原理
如果单纯以纯硬件的电路来实现乐曲演奏电路会复杂很多,比较难以实现。
本次课程设计采用强大的EDA工具和硬件描述语言来实现乐曲演奏。
我们知道,一首乐曲是由很多个音符组成的,而每个音符又包括音符的发音频率和发音持续时间两个基本因素。
如何把音符一个一个播放出来,就要看怎么获得音符的发音频率和发音持续时间,并利用这些数值以硬件软件相结合的方式实现乐曲的演奏。
如果我们现在知道每个音符的发音频率,利用程序使FPGA开发板上的某个引脚输出一定频率的脉冲,再连接到音响放大器,就可以发出相应音符对应的声音了。
然后再控制每个音符的发音持续时间,这样就输出了一个完整的音符。
乐曲是由一个又一个的音符组成的,利用时钟信号使音符一个接着一个输出,就完成了一首乐曲的播放,同时将每个音调信号送给显示器接口,使对应的彩条高亮,当切换到电子琴模式下时监听键盘按键,当按下1到7按键时输出相应的音调然后进行分频输出。
因此,我们需要编写程序来控制FPGA引脚输出不同音符对应的不同的音调和音长。
从FPGA引脚输出的不同频率的信号具有一定的峰值,改变这些峰值的大小可以控制音量的大小。
因此,我们需要一个调节音量的外接电路来调节音量。
2.1.1音调控制
声音是发音体震动的次数,在规定的频率数字范围内波动产生的。
因此,频率的高低决定了发出声音音调的高低。
我们一般使用的数字简谱以可动唱名法为基础,用1、2、3、4、5、6、7代表音阶中的7个基本音级,读音为do、re、mi、fa、sol、la、si,每个音级又有低音、中音和高音三种不同的音级,这些再加上休止符,一共有22个不同音符。
查阅相关资料可得到不同的音符的发音频率。
查阅资料得到音符与发音频率之间的对应关系如表3-1所示。
表2.1.1 数字简谱中的音符与频率的对应关系
音符名
频率/Hz
音符名
频率/Hz
音名符
频率/Hz
低音1
261.525
中音1
523.329
高音1
1046.502
低音2
293.664
中音2
587.329
高音2
1147.659
低音3
329.627
中音3
656.255
高音3
1318.510
低音4
349.228
中音4
698.465
高音4
1396.919
低音5
391.995
中音5
783.990
高音5
1567.981
低音6
440
中音6
880
高音6
1760
低音7
493.883
中音7
987.766
高音7
1975.537
22个不同的音符就有22种不同的频率,这些频率可以由一个基准频率进行分频得到。
只要找到一个合适的基准频率,计算得出每个音符的分频数,就可以对基准频率进行分频,得到不同的音符频率。
由于各个音符频率大多数为非整数,所以计算得到的分频系数也大多是非整数。
我们采用四舍五入的方法,可以获得为整数的分频数。
如何选择基准频率很关键。
若基准频率比较小,用他除以音符频率得到的分频系数也就比较小,这样的话进行四舍五入后误差相对而言会比较大。
若基准频率偏大,分频系数也就偏大,这会增加系统的负担。
综合考虑分频系数的准确性和大小,查阅相关资料可知,基准频率为750khz是比较合适的。
我们使用的BASYS2开发板自带50mhz的时钟频率,对50mhz的时钟频率进行分频可得到750khz的频率信号。
由于得到的750khz的频率信号是脉宽极窄的尖脉冲信号,为了提高扬声器有足够的功率发音,我们对尖脉冲信号再进行二分频,得到对称方波后再输出。
因此,在表3-2中,就是以375khz为基准频率计算了各个音符的分频数和分频预置数。
2.1.2音长控制
音符的持续时间是由乐曲的速度及每个音符的节拍数来确定。
想要控制音符的持续时间,就要知道乐曲的速度和每个音符的节拍数。
要想让系统知道现在应该播放哪个音符,而这个音符持续的时间应该是多少,就必须编写乐曲文件,在乐曲文件中音符是按地址存放的。
现在一般乐曲中,最小的节拍为1/4拍。
若定义1拍的持续时间为1秒,那么1/4拍的持续时间就为1/4秒,即0.25秒。
其他的节拍数位1/4拍得整数倍,因此他们的持续时间就为0.25秒的整数倍。
若将乐曲中每个音符的持续节拍数写进程序,我们再定义一个4hz的时钟频率,每当时钟上升沿来临时就输出1/4拍音符,若是其他1/4拍整数倍的音符就连续输出整数倍的次数。
这样,音符的发音持续时间久得到了控制。
表2.1.2各个音符的频率及其对应的分频系数(基准频率375KHz)
音符名
频率
(Hz)
分频
系数
计数
初值
音符名
频率
(Hz)
分频
系数
计数
初值
休止符
375000
0
2047
中音4
698.456
537
1510
低音1
261.525
1435
513
中音5
783.990
478
1569
低音2
293.664
1277
770
中音6
880
426
1621
低音3
329.627
1138
909
中音7
987.766
380
1667
低音4
349.228
1022
1025
高音1
1046.502
358
1689
低音5
391.995
957
1090
高音2
1147.659
327
1720
低音6
440
852
1195
高音3
1318.510
284
1763
低音7
493.883
759
1288
高音4
1396.919
268
1799
中音1
523.251
717
1330
高音5
1567.981
239
1808
中音2
587.329
638
1409
高音6
1760
213
1834
中音3
656.255
571
1476
高音7
1975.537
190
1857
2.1.3乐谱发生器
根据一定的规则将乐谱的音符转换为代码预置在程序中,利用一个乐谱码计数器做标注,每1/4拍计数一次,若一个音符占有多个1/4拍,就连续多次计数。
计数器指向当前的音符,当4hz时钟频率的上升沿来临时,计数器就加1,指向下一个1/4拍音符。
音符转为为代码按照如下规则:
休止符转换为代码0,低音1-低音7转换为代码1-7,中音1-中音7转换为代码8-14,高音1-高音7转换为15-21。
2.1.4音量控制
FPGA中没有控制频率峰值大小的功能,因此音量控制电路需要外接一个电路来完成。
音量控制电路可以是一个集成运放电路。
从本质上来看,集成运放是一种高性能的多级直接耦合放大电路。
尽管集成运放的品种繁多,内部结构各不相同,但是他们的组成原则基本一致。
组成主要包括差分输入级、中间放大级、偏置电路和输出级四个部分。
差分输入级使运放具有尽可能高的输入电阻及共模抑制比;中间放大级由多级直接耦合放大器组成,以获得足够高的电压增益;输出级可使运放具有一定幅度的输出电压、输出电流和尽可能小的输出电阻。
在输出过载时有自动保护作用以免损坏集成块;偏置电路为各级电路提供合适的静态工作点,一般采用恒流源电路为各级提供合适的静态工作点。
本次采用的电路原理图如图3-1所示,使用的芯片是NE5532。
这是一个同相放大器。
同相放大器具有输入阻抗非常高,输出阻抗很低的特点,广泛用于前置放大级。
该电路的缺点是易受干扰和精度低,所以使用的时候输出波形容易失真。
这个电路的放大倍数为
AV=1+R2/R1
通过调节滑动变阻器R2可以改变放大倍数。
将从FPGA输出的声音信号接Vin,在从Vout输出,Vout=AV×Vin,通过调节滑动变阻器,改变AV,就达到了调节音量的目的。
图2.1.4集成运放电路
2.1.5.模式控制
通过几个拨码开关的组合控制相应的模式,这里的拨码开关起到使能的作用,每次系统执行的时候都进行按键状态判断,然后进入相应的模式工作,拨码开关1功能为暂停,拨码开关2功能为快放,拨码开关3为慢放,拨码开关4为反放,系统同时在时钟的上升沿检查几个按键的状态,当按键按下时会在不同的模式下出发不同的相应,正常播放状态写按键1为重置功能,按键2为快进功能,按键3为回放功能,按键4无效。
具体过程不再赘述。
2.1.6VGA显示彩条
VGA接口通过横向扫描和纵向扫描,然后通过控制扫描各个像素点时赋予适当大小的红绿蓝分量即可画出7条绿色彩带,最后通过输入的音节信号使相应的彩条显示为高亮。
2.1.7键盘接口实现电子琴
这是一个为了实现电子琴功能的外加模块,键盘会通过固定的频率扫描键盘,每个按键经过处理后会产生一个对应的16位二进制数,取其中8位即可判断输入的是1到7中的哪个按键,然后将这个数进行转换为乐谱码,然后给乐谱查找模块找到预置数,送给分频模块进行分频,最后送给扬声器输出声音。
乐谱码查找和分频与预置乐曲过程相同,不再赘述。
2.2方案论证
1)在FPGA设计中,全局的清零和置位信号必须经过全局的清零和置位管脚输入,因为他们属于全局的资源,扇输出能力大,使用普通的IO管脚不能保证工作可靠性能稳定,易产生毛刺。
在此设计中故采用同步置位的办法来代替异步清零。
2)在此次设计中采用代码预置歌曲的音符与节拍频率实现乐曲播放功能,该方法虽不会产生硬件错误,但代码控制时钟频率与节拍易产生延迟从而造成严重乐曲失真,并且操作复杂,需要事先人为查曲音符并转换为相对应的频率。
其实为了更方便快捷,可以利用外部FLASH存储器(SD)卡和LCD面板,通过该面板显示一些相关参数,仅需将MP3音乐置入SD卡中即可,同时也可以上传或下载到电脑中。
但由于本次项目开发人员都是第一次接触FPGA,并没有硬件基础与VHDL设计基础,对FPGA的通信不甚理解,故只能退而求其次采用稍显笨拙的办法。
2.3系统架构
整个系统的主要功能是实现预置乐谱的播放,LED显示时钟信息,拨码开关实现乐曲相关控制功能,发光二极管显示当前音符信息,并外部扩展扬声器,VGA显示,电子琴键盘弹奏等。
其物理结构图如下所示:
2.3.1键盘系统
通过PS/2接口与basay2板相连,
为总系统提供电子琴键盘设计。
2.3.2VGA系统
通过VGA接口与Basay2板
相连,提供键盘按键显示及乐
曲音阶显示。
2.3.3扬声器系统
通过Basay扩展接b2与Basay
板相连,将预置音乐通过扬声器
功率放大达到音响放大的效果
2.3.4I/O系统
通过Basys用户I/O接口为总系
统提供数码管时钟显示、拨码
开关实现乐曲相关操作、LED
实现当前音阶信息提供服务。
2.3.5时钟控制系统
通过Basys核心振荡器提供的
系统时钟,通过分频实现对整个
系统的时序控制,并与拨码开
关等IO接口配合使用实现功
能扩展。
2.3.6总系统
为前述各个系统间的物理接口提供平台,并与软件相配合为用户提供开发平台。
三、系统模块设计
整个系统的主要功能是实现预置乐谱的播放,按照功能进行细分,又可以把系统分为以下7个模块:
时钟分频模块、乐谱发生模块、乐谱码查表模块、数控分频模块、音量调节模块、VGA显示模块、键盘接口模块。
3.1顶层模块
3.1.1顶层模块原理框图
3.1.2顶层模块电路图
3.2时钟分频[DCM1]模块:
3.2.1功能描述
控制系统时序,并为乐曲播放提供相关控制功能。
3.2.2工作流程
在乐谱发生模块和数控分频模块分别用到了4hz和750khz的时钟频率。
BASYS2开发板内部时钟为50Mhz,因此我们需要一个时钟分频模块对开发板的内部时钟进行分频,经过分频后得到4hz和750khz的时钟频率,再分别送到乐谱发生模块和数控分频模块。
他的输入为50mhz时钟频率和reset信号,输出为4hz和750khz的时钟频率。
3.2.3元件符号
输入信号:
系统时钟,暂停信号,
快放使能信号,慢放使能信号。
输出信号:
375KHZ时钟,
4Hz时钟。
3.2.4软件实现