COLD音乐播放器综合项目实践报告.doc_第1页
COLD音乐播放器综合项目实践报告.doc_第2页
COLD音乐播放器综合项目实践报告.doc_第3页
COLD音乐播放器综合项目实践报告.doc_第4页
COLD音乐播放器综合项目实践报告.doc_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

常州信息职业技术学院可编程逻辑器件开发应用综合项目设计报告2015 2016 学年 第 二 学期项目: 音乐播放器的设计与实现班级: 计 应 142 学号: 1408143209姓名: 顾 杉授课教师: 聂章龙制定日期: 2015 年 06 月 24 日一、总体设计(项目总体分析)1、基本功能基于Verilog HDL的音乐播放器系统是以ALTERA公司的MAX系列芯片 EPM1270T144C5为主控单元,根据音乐发生的原理,将复杂可编程逻辑器件作为发生音乐的核心器件,用高速集成电路硬件描述语言Verilog HDL编程控制音乐发生的乐谱,配合周边硬件电路,由蜂鸣器发声器件发出音乐声,实验表明,采用该方法设计的音乐发生器成本低、修改方便。基于Verilog HDL的音乐播放器实现的功能主要有在4位动态数码管上显示音乐播放的时间,在8*8点阵屏上显示相应歌曲的名字(汉语拼音或英文字母),在1位静态数码管上显示高(H)、中(Z)、低(L)音调,并且利用8个小灯的亮灭来标识相应的音符(音符是几就亮第几盏小灯),通过开始/暂停按键控制音乐的开始、暂停,通过乐曲选择按键控制音乐的选择,选择时单个数码管上显示歌曲编号,如选择“兰花草”时,显示0。交流蜂鸣器为了增加I/O口的驱动能力采用了NPN型晶体管,这样只要在基极BUZZ上输入一定频率的脉冲,蜂鸣器BUZZ就会发出悦耳的音乐。乐曲演奏的原理是这样的:组成乐曲的每个音符的频率值(音调)及其持续时间(音长)是乐曲演奏的两个基本数据。所以只要控制输出到扬声器信号的频率高低和该频率信号持续的时间就可以演奏出不同的音乐,频率的高低决定了音调的高低,而乐曲的简谱与各个音名有各自的对应关系,所有不同频率的信号都是从同一个基准频率分频得到的,由于音阶频率多为非整数,而分频系数又不能为小数,所以必须将计算得到的分频进行四舍五入取整,基准频率和分频系数应综合考虑加以选择从而保证音乐不会走调。由于蜂鸣器具有控制简单及声响悦耳的特点,在工程项目中,常用作人机接口的重要输出设备,用以发出语音提示信息,使系统更加完善和使用。蜂鸣器有交流和直流两种,直流蜂鸣器驱动简单,只要在二号引脚上加上直流电源它就会发出一定频率的声音,此时声音的音调和音量是固定的,而交流蜂鸣器在这方面则显得比较灵活,输入的声音信号的频率和音长可以由用户控制,因此输出的声响可以是多样的。简谱中的音名与频率是一一对应的,因此要发出某一声乐,只需要输出该声乐所对应的频率信号就可以了,在实验板上已经为我们准备了键盘K1K8和一个蜂鸣器BUZZ,所以完全可以用它们来实现一个简单的电子琴,为了产生一定的频率信号,我们还需要用到有源时钟clock,并且把它作为乐曲的基准频率,而所有不同的频率信号都是从这一基频分频而来的,比如在24MHz的时钟下,中音1(对应的频率值为523.3Hz)的分频系数应该是:24*10的六次方/(523.3*2)=0x5993。通过对有关蜂鸣器的设计案例的学习,基本上对分频和控制交流蜂鸣器发声有了一定的了解,所以在此基础上,设计音乐片段是对分频和蜂鸣器发声的综合应用,需要处理好各种简谱的播放顺序及音长。程序设计时应该注意按键去抖动计数,注意分模块去设计每个模块并且注意模块与模块之间的关系。在这个项目中我们还用到了汉字的显示,通过以前学习的点亮显示屏的例子,我们队LED点阵显示屏的内部结构、工作原理、驱动和编程方法有了一定的了解,同样,LED点阵显示屏可以显示汉字或字符,只是此时的汉字或字符应该以点阵的形式来表示,取点越多,汉字或字符也将越逼真,通常8*8的点阵显示屏可以用来显示一些简单的汉字。首先把要显示的(8*8)汉字用二进制代码来表示,这一过程称之为取字模。这样,在程序中才用逐行扫描的方法扫描整个点阵,当然在扫描对应行的同时在段码线输出对应的字模数据,于是该行的相应点被点亮。虽然汉字是被逐行显示的,但是由于人眼的视觉差,且只要扫描速度足够快,所以看到的将还是一个完整的汉字。由于音阶频率多为非整数,而分频系数又不能为小数,故必须将得到的分频数四舍五入取整。由于最大的分频系数为5102,故采用13位二进制计数器已能满足分频要求。在表中可以看到不同音阶对应的不同初始值。对于不同的分频系数,只要加载不同的初始值即可。采用加载初始值而不将分频输出译码反馈,可以有效地减少设计占用可编程逻辑器件的资源。“0”表 示 休 止 符,在 很 多 音 乐 中,休 止 符也 是 一 个重要的音符。对于休止符,只要将分频系数设为0,扬声器就不会发声了。总体来说,要设计好这个项目首先要可以做出输出警报声,要了解蜂鸣器引脚与ERM1270T144C5N芯片的引脚的连接关系,理解交流蜂鸣器的工作原理及外围驱动电路,其次要能做出熟悉电子琴的设计,数字电子琴的设计需要掌握时钟分频的方法,掌握键盘与不同音频的对应关系,左右要能做出音乐播放器的设计,需要掌握交流蜂鸣器的综合应用,而能把这些结合起来尤为重要,运用我们前面所学的知识把这几块结合起来,就能设计出音乐播放器综合项目。2、 功能框图开始定义输入输出量调用fenpin()模块调用jianpu()模块调用yanzou()模块调用shanshuo()模块调用xianshi()模块结束调用counttime()模块分频函数,对24MHz的信号进行分频要播放的音乐的简谱让蜂鸣器发出声音让简谱上的数字在led小灯上显示出来显示音乐名称计时函数调用: fenpin(); /分频函数,对24MHz的信号进行分频 jianpu(); /要播放的音乐的简谱yanzou(); /让蜂鸣器发出声音shanshuo (); /让简谱上的数字在led小灯上显示出来xianshi(); /显示音乐名称 counttime (sec,key,min); /计时函数3*功能模块关系图音名、频率和分频系数对照表2、 软件设计1、顶层模块(module music())(1) 定义时钟输入、键盘输入口;(2)定义声响输出口,定义位码输出口、数据输出口和数码管输出口,;(3)调用函数,分别为以下几个模块:分频模块(对24MHz的信号进行分频): fenpin(clk,k,shift,clk_4Hz,key,con,swt,sec,shiftout,shift_out); /分频函数,对24MHz的信号进行分频简谱、演奏模块(要播放的音乐的简谱、让蜂鸣器发出声音): jianpu(clk_4Hz,key,count_end,high,med,low,shiftout,shift_out);/要播放的音乐的简谱 yanzou(clk,buzzout,count_end,key); /让蜂鸣器发出声音闪烁模块(让简谱上的数字在led小灯上显示出来):shanshuo (high,med,low,out,clk,cmd,sled_reg,sl_reg,min,shiftout,shift_out);/让简谱上的数字在led小灯上显示出来显示模块(显示音乐名称):xianshi(con,swt,x,y,key,shiftout);/显示音乐名称计时模块(计时函数)counttime (sec,key,min); /计时函数2、 分频模块( fenpin();)*分频函数,对24MHz的信号进行分频:(1) 定义时钟输入和键盘输出;(2) 分频4Hz,按键延时,行扫描计数,显示名称的间隔时间;(3) 从24MHZ分频出1HZ(即周期为1S)信号,到0.5S后清零,取反1S信号;(4) 按键去抖动,按键计数。主要函数:14always(posedge clk)begin ;if(count=25d3000000)/分频4Hz;if(count1=19d240000)/按键延时;if(count2=19d24000)/行扫描计数;if(count3=24d12000000)/显示名称的间隔时间;end always ( posedge clk) /从24MHZ分频出1HZ(即周期为1S)信号 always (posedge set)/按键去抖动;always(negedge key)/按键计数;endmodule3、 简谱、演奏模块(要播放的音乐的简谱、让蜂鸣器发出声音)以1/16音符为最小计数单元,而这个音符所占用的时间理论值为0.25s,所以我们在外部接入4Hz的时钟信号给计数器,已满足正常的音乐播放要求。*音乐播放器分频模块:分频4Hz信号。(1)由基准时钟分频获得4Hz信号;(2)控制交流蜂鸣器发各种音谱声;(3)key按键按下方可计数;(4)简谱对应高中低音及其数值;*音乐播放器控制模块:控制音乐播放的音频与顺序。 (1)分频得到相应简谱的频率; (2)乐曲演奏控制。注意:always(posedge clk)begin count=count+1;if(count=count_end & key=1) /计数到指定的数值并且允许播放的时候才能发声begin count=0;buzzout=buzzout;/产生一个高低电平蜂鸣器发声endend 4、 闪烁模块(音符显示模块)(shanshuo ();)*让简谱上的数字在led小灯上显示出来,音乐名称显示模块:在8*8点阵屏上显示相应歌曲的名字(汉语拼音或英文字母)。*音符显示模块:在1位静态数码管上显示高(H)、中(Z)、低(L)音调,并且利用8个小灯的亮灭来标识相应的音符(音符是几就亮第几盏小灯)主要函数:always (count11:10) begin case(count11:10) 2h0:ledbuf=min3:0; /取秒的个位数据 2h1:ledbuf=min7:4; /取秒的十位数据 2h2:ledbuf=min11:8; /取分的个位数据 2h3:ledbuf=min15:12; /取分的十位数据endcase case(count11:10) /送对应位的位码 /扫描最高位endcase end always(ledbuf) /时间显示 begin case(ledbuf) endcase/ if(count11:10=2b10) & sec)/ sled_reg=sled_reg&8h7f; /小数点闪烁end音符显示模块程序框图:开始定义输入输出量判断是否为高音单个数码管显示L 判断是否为中音单个数码管显示Z 判断是否为中音单个数码管显示H否否是是取秒的个、十位数据取分的个、十位数据送对应位的位码扫描最高位时间显示小数点闪烁结束5、显示模块(显示音乐名称):xianshi(con,swt,x,y,key,shiftout);/显示音乐名称*音符显示模块:在1位静态数码管上显示高(H)、中(Z)、低(L)音调,并且利用8个小灯的亮灭来标识相应的音符(音符是几就亮第几盏小灯)(1) 允许播放音乐时点阵屏开始扫描;(2) 不播放音乐时点阵不扫描;(3) 显示歌名YDYAN(4) 输出对应的点阵信息;主要函数:always(con)beginif(key=1b1) /允许播放音乐时点阵屏开始扫描case(con);endcaseelsex=8hff;/不播放音乐时点阵不扫描6、计时模块(计时函数)counttime (sec,key,min); /计时函数(1) 计时处理,是否计时开始;(2) 秒加1;(3) 秒的十位数据加1;(4) 分的个位数据位加1;(5) 分的十位数据位加1。主要函数:always (posedge sec) /计时处理 begin if(key) /计时开始吗 begin min=min+1; /秒加1if(min3:0=4ha) begin min3:0=4h0; min7:4=min7:4+1; /秒的十位数据加1 if(min7:4=4h6) begin min7:4=4h0; min 11:8=min11:8+1; /分的个位数据位加1 if(min 11:8=4ha) begin min 11:8=4h0; min 15:12=min 15:12+1; /分的十位数据位加1 if(min 15:12=4ha) min 15:12=4h0;end秒加1开始定义输入输出值计时处理计时是否开始结束计时模块程序框图否否是分的个位数据加1分的十位数据加1是秒的十位数据加1否是否是否三、程序测试(调试过程中出现的错误及解决办法)本次设计采用的是Aletra公司的MAXII系列,因此,必须用QuartusII软件系列才能对该芯片进行编译、仿真、下载等功能。下载模式我们采用J T A G线的下载方式。Alter的QuartusII是业内领先的FPGA/CPLD设计软件,具有最全面的开发环境,实现无与伦比的性能表现。本次设计采用VHDL语 言 编 程 设 计。在Quartus软件中VHDL文本输入中,输入所有序,并建立相应的工程项目,直接在该软件中进行编译及仿真,编译的同时,可以显示出当前芯片容量是否够用,如果不够用,则需要对程序进行进一步优化,直到容量达到芯片标准为止。所有准备就绪后,则通过软件中的下载功能,通过J T A G端口,将程序下载到芯片中。在QuartusII软件中,通过对所设计的硬件描述语言代码进行波形仿真后,达到了预期效果,于是,我们在该软件上进行下载配置设置。在Assignments菜单下选中Devices,在Family栏选择ACEX1K,选中EPM240T100C5器件。再在Assignments菜单下选中Pins按照相应要求对管脚进行锁定。调试过程为在线调试。在通过调试中,我们发现了很多问题,现归纳如下:(1)系统调试主要是对音乐节奏时钟、控制时钟的频率和音频进行调试。其中音乐节奏时钟的调试:音乐节奏时钟理论要求时4Hz,在实际的演奏过程中频率稍微高于4Hz效果较好,通过改变R1的电阻来改变音乐节奏时钟,从而改变音乐节奏。表1是音乐节奏时钟调试过程中的记录。(2)在软件上能实现仿真的程序不一定在硬件电路上就能运行,原因有很多,这里是由于电路中的时钟频率太快,需要增加一个分频电路。(3)由于分频的运算很大,故 增 加 分 频 电 路 后,在QuartusII软件中则不能进行正确的仿真,可以直接将程序下载到电路板上去调试。(4)按键不灵:记录按键判断标志位没设置好,按键消抖没处理好。5、 编程收获与体会通过对整体的学习和编程设计,完成了音乐播放器的设计,音乐播放器的设计经过了整体分析、模块化分析,硬件实现了循环演奏以及数码管、液晶屏显示等功能,描述了其工作原理、设计思路及实现方法。实践证明,采用CPLD设计实现音乐硬件演奏电路的可靠性和可行性,而且更改乐曲比较容易,可根据需要修改程序中的音符数据,从而使电路实现任一曲子的播放。在此次设计中,所有设计要求全部实现,然而在音乐的播放质量上仍有一些瑕疵,可能是由于蜂鸣器的质量问题或者芯片内部产生信号不稳定等关系,这都有待更多的时间对整个系

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论