《硬件课程设计报告_基于FPGA预置歌曲播放器精品资料.doc》由会员分享,可在线阅读,更多相关《硬件课程设计报告_基于FPGA预置歌曲播放器精品资料.doc(37页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、华中科技大学电子与信息工程系硬件课程设计华中科技大学硬件课程设计总结报告项目名称:基于FPGA的预置乐曲播放器设计院系:华中科技大学 _小组成员: 指导老师: _时间: _【摘要】本次课程设计的项目名称是基于FPGA的预置乐曲播放器,本次设计是在BASYS2实验开发板上实现,使用xinlinx14.1软件,开发语言采用VHDL,、通过Basys开发板的拨码开关实现播放乐曲的相关功能的控制;该播放器还外接自制音箱实现放大乐曲功能,PS2键盘实现电子琴的扩展弹奏功能,并通过VGA显示电子琴琴键界面。【关键词】FPGA;Basys;xilinx;VHDL;预置音符;音乐播放;电子琴;VGA显示屏显示
2、;PS/2键盘;数码管目录【摘要】2【关键词】2一、绪论51.1.研究背景51.2.基本技术简介61.2.1.可编程逻辑器件FPGA61.2.2.硬件描述语言VHDl61.2.3.开发软件xilinx71.3.设计目标71.4.关键技术81.5.考核指标81.6.参考资料91.7.元器件列表91.8.成员列表91.9.时间历程91.10.系统实物图片10二、系统设计102.1系统原理102.1.1音调控制112.1.2音长控制122.1.3乐谱发生器122.1.4音量控制132.1.5.模式控制132.1.6 VGA 显示彩条142.1.7键盘接口实现电子琴142.2 方案论证142.3系统架
3、构142.3.1键盘系统152.3.2VGA系统152.3.3扬声器系统152.3.4 I/O系统152.3.5时钟控制系统162.3.6总系统16三、系统模块设计163.1 顶层模块173.1.1顶层模块原理框图173.1.2顶层模块电路图173.2时钟分频DCM1模块:173.2.1功能描述173.2.2工作流程173.2.3元件符号183.2.4软件实现183.2.5硬件实现183.3乐谱码发生模块:183.3.1功能描述183.3.2工作流程183.3.3元件符号183.3.4软件实现183.3.5硬件实现183.4乐谱码查表译码模块193.4.1功能描述193.4.2工作流程193.
4、4.3元件符号193.4.4软件实现193.4.5硬件实现193.5数控分频模块:193.5.1功能描述193.5.2工作流程193.5.3元件符号193.5.4软件实现203.5.5硬件实现203.6音量调节模块:203.6.1功能描述203.6.2工作流程203.6.3元件符号203.7VGA显示模块:203.7.1功能描述203.7.2工作流程203.7.3元件符号213.7.4软件实现213.7.5硬件实现213.8键盘电子琴模块:213.8.1功能描述213.8.2工作流程213.8.3元件符号213.8.4软件实现223.8.5硬件实现22四、开发环境224.1 硬件环境224.2
5、软件环境234.3系统调试与测试方法234.4模块仿真结果24五、技术报告265.1界面显示265.2操作指南265.2.1供电电源265.2.2按键功能265.2.3开关功能265.3用户体验275.4故障问题与分析275.4.1电子密码锁模块275.4.2键盘模块275.5后期计划27六、项目总结27七、心得体会28八、致谢28九、源代码清单28一、绪论1.1. 研究背景 在电子技术的飞速发展的今天,电子产品的种类越来越多,功能越来越强大,体积越来越小,功耗越来越低。随着经济的快速发展,人们对生活质量的要求也越来越高,在越来越高效率的生活条件下,人们需要来音乐来释放压力,而体型庞大的随身听
6、已经满足不了人们的需求。在此背景下,MP3应运而生。MP3播放器,顾名思义也就是可播放MP3格式的音乐播放工具。MP3发展到今天,其功能越来越多,外观越来越精致,受到了广大消费者的喜爱。但是传统的Flash存储器的成本居高不下,设计者创意受限,造成MP3播放器卖价不菲但功能单一,而利用FPGA实现的MP3播放器可以用尽可能低的成本提供尽可能多的附加性能。可编程逻辑器件和EDA技术的发展也为本次课程设计提供了一定的研究背景。EDA技术,即电子设计自动化,是以计算机为工具,设计者在EDA软件平台上,用硬件描述语言HDL完成设计文件,然后由计算机自动地完成逻辑编译、化简、分割、综合、优化、布局、布线
7、和仿真,直至对于特定目标芯片的适配编译、逻辑映射和编程下载等工作。这样,将原来的“电路设计+硬件搭试+调试焊接”转化为“功能设计+软件模拟+仿真下载”,在芯片的设计中完成对电路板的设计,减少了电路板连线,提高了系统集成度,降低了可能的干扰,增加了系统的可靠性和稳定性,提高了设计的灵活性和效率,大大提升了技术指标。MP3播放器的功能可以有很多,基本功能就有从SD卡读取文件,通过扬声器播放音乐,通过调节按钮调节音量等。还可以有多个扩展功能,如通过LED显示歌曲的歌曲名、演唱者、播放时间等相关信息,快进后退,暂停等。甚至可以实现一些较高级别的创新功能,如通过语音识别实现MP3的密码保护功能。这是一个
8、发展空间很大的课题,研究者可以根据自己的能力水平和兴趣爱好自由发展。本次课程设计中,我完成了预置音乐的播放,暂停,音符显示,播放模式控制,播放时间显示,暂停及重新播放控制,快进及回放控制,快速及慢放控制,VGA显示乐谱彩条,键盘敲击电子琴,音量调节功能。1.2. 基本技术简介1.2.1. 可编程逻辑器件FPGAFPGA(FieldProgrammable Gate Array),即现场可编程门阵列,在结构上主要分为三个部分,即可编程逻辑单元,可编程输入/输出单元和可编程连线三个部分。它采用专用的集成电路,用户不需要投片生产就可以得到合用的芯片。FPGA是ASIC电路中设计周期最短、开发费用最低
9、、风险最小的器件之一,功耗低,是小批量系统提高系统集成度、可靠性的最佳选择之一。了解利用FPGA实现电子琴的基本原理,综合运用所学知识实现一个具有多个模块的模数混合系统,为后续课程学习和工作打下基础,而且实现乐曲播放器设计业十分有趣,能够加深电子系统在音乐计数领域的作用。本次课程设计使用的是BASYS2开发板,是一个基于xinlinx Spartan-3E 可编程逻辑器件和Atmel AT90USB2 USB 控制器的电路设计和实现的平台,USB电缆提供电源和编程接口,所以他没有其他的电源供应器和编程电缆。BASYS2开发板向用户提供完整的,准备使用的,硬件适合托管范围的,基本的逻辑器件复杂控
10、制器的电路,开发板上包括I/O设备和所必须的FPGA支持电路,不需要任何其他组件就可以实现无数的电路设计。1.2.2. 硬件描述语言VHDlVHDL语言是一种超高速集成电路硬件描述语言,是用于电路设计的高级语言,事实上已成为通用的硬件描述语言。VHDL主要用于描述数字系统的结构、行为、功能和接口,他的语言形式十分类似于一般的计算机高级语言。他的程序特点是将一个设计实体分成外部和内部,外部又称可视部分,或者端口,同理,内部又称不可视部分,涉及实体的内部功能和算法完成部分。在对一个设计实体定义了外部界面后,一旦其内部开发完成后,其他的设计就可以直接调用这个实体。这种将设计实体分成内外部分的概念是V
11、HDL系统设计的基本点。由于VHDL语言易读和结构化,所以易于修改设计,在硬件电路的设计过程中主要的设计文件使用VHDL来编写源代码。VHDL具有多层次的设计描述功能,既可以描述系统级电路,又可以描述门级电路。VHDL支持预定义的和自定义的数据类型,给硬件描述带来较大的自由度,使设计人员能够方便地创建高层次的系统模型。VHDL对设计的描述具有相对独立性,设计者可以不懂硬件的结构,也不必管理最终设计实现的目标器件是什么,而进行独立的设计。本次课程设计用的就是VHDL语言编写程序,实现整体模块中的各种功能。1.2.3. 开发软件xilinx本次课程设计中使用的Spartan-3E开发板就是由xil
12、inx公司最新推出的低成本FPGA,是基于Spartan-3/3L的,对其性能和成本进一步优化。这款产品成本低廉,总体性能指标不是很优秀,适合低成本应用场合,是Xilinx未来几年在低端FPGA市场上的主要产品。1.3. 设计目标播放器的功能可以有很多,基本功能就有从SD卡读取文件,通过扬声器播放音乐,通过调节按钮调节音量等。还可以有多个扩展功能,如通过LED显示歌曲的歌曲名、演唱者、播放时间等相关信息,快进后退,暂停等。甚至可以实现一些较高级别的创新功能,如通过语音识别实现MP3的密码保护功能。这是一个发展空间很大的课题,研究者可以根据自己的能力水平和兴趣爱好自由发展。本次课程设计中,我们完
13、成了预置音乐的播放,暂停,音符显示,播放模式控制,播放时间显示,暂停及重新播放控制,快进及回放控制,快速及慢放控制,VGA显示乐谱彩条,键盘敲击电子琴,音量调节功能。 预置音乐的播放:把音乐的曲谱写在程序里面,通过对不同音符的发音频率进行分析,把不同的音符以不同频率的脉冲形式输出,接到扬声器发出声音。 暂停:音乐是通过不断输送的时钟脉冲一个一个连续不断的实现输出的,使时钟脉冲停止就达到了是音乐播放暂停的功能。 重置:将音乐乐谱置为零即可。 音符LED显示:把音符的简谱代码存放在程序中,在音符频率输出的同时也通过LED灯把音符的简谱代码显示出来。 播放模式控制:通过一个拨码开关,实现单曲播放和循
14、环播放模式的切换。 播放时间显示:在乐曲开始播放的同时启动计时器,并将时间显示在数码管上,随着乐谱的播放而递增,当暂停是时间停止计数,重置时将时间清零。 快进及回放控制:通过快进按键和回放按键控制,当快进按键按下时将乐谱以3个音节递增,回放按键按下时以3个音节递减。 快放及慢放控制:通过快放和慢放两个拨码开关,分别实现快放慢放,快放时每个音节时间播放3个音节,慢放时每3个音节播放1个音节,即实现了快放和慢放功能。 VGA彩条显示音节:在显示器上画出7条彩条分别对应着7个音调,当对应音调被播放时,显示器上对应的彩条显示高亮。 键盘接口实现电子琴:通过键盘接口实现电子琴,主要是坚挺键盘,当键盘按下
15、17按键时分别对应7个音调,并播放出来,即实现了电子琴功能。 音量调节:把输出的声音经过一个集成运算放大电路,通过可调电阻对音量进行调节。1.4. 关键技术按照EDA开发流程,采用VHDL硬件描述语言开发,从系统的整体出发对硬件演奏电路的功能进行分析并划分为多个功能模块,完成各个功能模块的设计以及实现,最后通过系统结构的整体设计实现预先设置乐曲的播放功能。再把播放功能模块的输出经过一个集成运算放大电路实现音量调节功能。需要完成的设计如下: 找出不同音符的发音频率,寻找最佳待分频频率,计算分频数和分频预置数,制作乐谱查找表。乐谱查找表里应当有:不同音符的发音频率,该发音频率相对于基准频率的分频系
16、数和分频预置数。 预置曲谱。定义一个转换规则,将音乐音符转换为代码预置在程序里。 对预置的曲谱码在乐谱查表码里进行查找,找出相应音符对应频率的分频预置数。 根据查找到的分频预置数对待分频频率进行分频并输出。 通过集成运放电路实现音量调节。 将输出连接到扬声器,播放音乐。 通过不同拨码开关及按键的状态控制模式状态。 通过键盘监听得到按下的按键,如果按下的是1到7,就产生相应的音调,通过查表查到预置数,然后送到进行分频播放。 通过显示屏画出彩条,利用产生的音调信号作为控制信号,送到VGA模块,使相应的彩条高亮。1.5. 考核指标1 是否能正常播放两首乐曲,音节易于分辨,无很大噪声。2 能否正常调整
17、系统模式,并在各个模式下都能按要求工作,各个模式下可以正常切换。3 系统VGA显示是否正常。4 系统电子琴功能是否能正常接听按键,并播放相应的音调,无较大延时和抖动。5 系统的工作是否稳定,不会经常出现死机。1.6. 参考资料【1】闵玉堂 FPGA硬件课程设计指导书【2】xilinx FPGA设计基础(VHDL版) 李云松 宋锐 雷杰 杜建超 编著,西安电子科技大学出版社,2008-02-01【3】电子线路设计实验测试(第四版) 罗杰 谢自美 主编,电子工业出版社,2006-6【4】FPGA应用技术及实践 刘睿强 陈鸿 邓显林 编,北京理工大学出版社,2011-01【5】电子线路综合设计 刘睿
18、强 陈鸿 邓显林 编,北京理工大学出版社,2011-011.7. 元器件列表元器件型号单价(数量)元器件性能实现功能Basay2板1块中低端可编程器件本项目的所有基本功能显示屏1块正常VGA显示键盘1块正常电子琴演奏用键盘1.8. 成员列表 1.9. 时间历程内容时间完成人员工作完成情况需求分析,系统设计第10周正常完成,并提交开题报告基本功能模块设计,附加模块设计,各模块实现思路及原理第11周正常完成,并绘制各模块框图基本功能模块代码编写12周到13周正常完成代码基本功能模块仿真及调试14周正常完成调试,实现基本功能VGA模块代码编写15周正常完成代码VGA模块仿真及调试16周正常完成调试,
19、实现VGA显示键盘监听实现电子琴功能16周正常完成代码键盘功能仿真和调试17周正常完成调试,键盘监听正常,实现电子琴弹奏功能模块整合与调试18周正常完成调试,整合各个模块,实现预期功能总结报告19周按时完成总结报告1.10. 系统实物图片系统整体实物图片和能够体现作品特征的关键图片二、系统设计2.1系统原理如果单纯以纯硬件的电路来实现乐曲演奏电路会复杂很多,比较难以实现。本次课程设计采用强大的EDA工具和硬件描述语言来实现乐曲演奏。我们知道,一首乐曲是由很多个音符组成的,而每个音符又包括音符的发音频率和发音持续时间两个基本因素。如何把音符一个一个播放出来,就要看怎么获得音符的发音频率和发音持续
20、时间,并利用这些数值以硬件软件相结合的方式实现乐曲的演奏。如果我们现在知道每个音符的发音频率,利用程序使FPGA开发板上的某个引脚输出一定频率的脉冲,再连接到音响放大器,就可以发出相应音符对应的声音了。然后再控制每个音符的发音持续时间,这样就输出了一个完整的音符。乐曲是由一个又一个的音符组成的,利用时钟信号使音符一个接着一个输出,就完成了一首乐曲的播放,同时将每个音调信号送给显示器接口,使对应的彩条高亮,当切换到电子琴模式下时监听键盘按键,当按下1到7按键时输出相应的音调然后进行分频输出。因此,我们需要编写程序来控制FPGA引脚输出不同音符对应的不同的音调和音长。从FPGA引脚输出的不同频率的
21、信号具有一定的峰值,改变这些峰值的大小可以控制音量的大小。因此,我们需要一个调节音量的外接电路来调节音量。2.1.1音调控制声音是发音体震动的次数,在规定的频率数字范围内波动产生的。因此,频率的高低决定了发出声音音调的高低。我们一般使用的数字简谱以可动唱名法为基础,用1、2、3、4、5、6、7代表音阶中的7个基本音级,读音为do、re、mi、fa、sol、la、si,每个音级又有低音、中音和高音三种不同的音级,这些再加上休止符,一共有22个不同音符。查阅相关资料可得到不同的音符的发音频率。查阅资料得到音符与发音频率之间的对应关系如表3-1所示。表2.1.1数字简谱中的音符与频率的对应关系音符名
22、频率/Hz音符名频率/Hz音名符频率/Hz低音1261.525中音1523.329高音11046.502低音2293.664中音2587.329高音21147.659低音3329.627中音3656.255高音31318.510低音4349.228中音4698.465高音41396.919低音5391.995中音5783.990高音51567.981低音6440中音6880高音61760低音7493.883中音7987.766高音71975.53722个不同的音符就有22种不同的频率,这些频率可以由一个基准频率进行分频得到。只要找到一个合适的基准频率,计算得出每个音符的分频数,就可以对基准频率
23、进行分频,得到不同的音符频率。由于各个音符频率大多数为非整数,所以计算得到的分频系数也大多是非整数。我们采用四舍五入的方法,可以获得为整数的分频数。如何选择基准频率很关键。若基准频率比较小,用他除以音符频率得到的分频系数也就比较小,这样的话进行四舍五入后误差相对而言会比较大。若基准频率偏大,分频系数也就偏大,这会增加系统的负担。综合考虑分频系数的准确性和大小,查阅相关资料可知,基准频率为750 khz是比较合适的。我们使用的BASYS2开发板自带50 mhz的时钟频率,对50mhz的时钟频率进行分频可得到750 khz的频率信号。由于得到的750 khz的频率信号是脉宽极窄的尖脉冲信号,为了提
24、高扬声器有足够的功率发音,我们对尖脉冲信号再进行二分频,得到对称方波后再输出。因此,在表3-2中,就是以375 khz为基准频率计算了各个音符的分频数和分频预置数。2.1.2音长控制音符的持续时间是由乐曲的速度及每个音符的节拍数来确定。想要控制音符的持续时间,就要知道乐曲的速度和每个音符的节拍数。要想让系统知道现在应该播放哪个音符,而这个音符持续的时间应该是多少,就必须编写乐曲文件,在乐曲文件中音符是按地址存放的。现在一般乐曲中,最小的节拍为1/4拍。若定义1拍的持续时间为1秒,那么1/4拍的持续时间就为1/4秒,即0.25秒。其他的节拍数位1/4拍得整数倍,因此他们的持续时间就为0.25秒的
25、整数倍。若将乐曲中每个音符的持续节拍数写进程序,我们再定义一个4hz的时钟频率,每当时钟上升沿来临时就输出1/4拍音符,若是其他1/4拍整数倍的音符就连续输出整数倍的次数。这样,音符的发音持续时间久得到了控制。表2.1.2 各个音符的频率及其对应的分频系数(基准频率375KHz)音符名频 率(Hz)分频系数计数初值音符名频 率(Hz)分频系数计数初值休止符37500002047中音4698.4565371510低音1261.5251435513中音5783.9904781569低音2293.6641277770中音68804261621低音3329.6271138909中音7987.76638
26、01667低音4349.22810221025高音11046.5023581689低音5391.9959571090高音21147.6593271720低音64408521195高音31318.5102841763低音7493.8837591288高音41396.9192681799中音1523.2517171330高音51567.9812391808中音2587.3296381409高音617602131834中音3656.2555711476高音71975.53719018572.1.3乐谱发生器根据一定的规则将乐谱的音符转换为代码预置在程序中,利用一个乐谱码计数器做标注,每1/4拍计数一
27、次,若一个音符占有多个1/4拍,就连续多次计数。计数器指向当前的音符,当4hz时钟频率的上升沿来临时,计数器就加1,指向下一个1/4拍音符。音符转为为代码按照如下规则:休止符转换为代码0,低音1-低音7转换为代码1-7,中音1-中音7转换为代码8-14,高音1-高音7转换为15-21。2.1.4音量控制FPGA中没有控制频率峰值大小的功能,因此音量控制电路需要外接一个电路来完成。音量控制电路可以是一个集成运放电路。从本质上来看,集成运放是一种高性能的多级直接耦合放大电路。尽管集成运放的品种繁多,内部结构各不相同,但是他们的组成原则基本一致。组成主要包括差分输入级、中间放大级、偏置电路和输出级四
28、个部分。差分输入级使运放具有尽可能高的输入电阻及共模抑制比;中间放大级由多级直接耦合放大器组成,以获得足够高的电压增益;输出级可使运放具有一定幅度的输出电压、输出电流和尽可能小的输出电阻。在输出过载时有自动保护作用以免损坏集成块;偏置电路为各级电路提供合适的静态工作点,一般采用恒流源电路为各级提供合适的静态工作点。本次采用的电路原理图如图3-1所示,使用的芯片是NE5532。这是一个同相放大器。同相放大器具有输入阻抗非常高,输出阻抗很低的特点,广泛用于前置放大级。该电路的缺点是易受干扰和精度低,所以使用的时候输出波形容易失真。这个电路的放大倍数为AV=1+R2/R1通过调节滑动变阻器R2可以改
29、变放大倍数。将从FPGA输出的声音信号接Vin,在从Vout输出,Vout=AVVin,通过调节滑动变阻器,改变AV,就达到了调节音量的目的。图2.1.4 集成运放电路2.1.5.模式控制通过几个拨码开关的组合控制相应的模式,这里的拨码开关起到使能的作用,每次系统执行的时候都进行按键状态判断,然后进入相应的模式工作,拨码开关1功能为暂停,拨码开关2功能为快放,拨码开关3为慢放,拨码开关4为反放,系统同时在时钟的上升沿检查几个按键的状态,当按键按下时会在不同的模式下出发不同的相应,正常播放状态写按键1为重置功能,按键2为快进功能,按键3为回放功能,按键4无效。具体过程不再赘述。2.1.6 VGA
30、 显示彩条VGA接口通过横向扫描和纵向扫描,然后通过控制扫描各个像素点时赋予适当大小的红绿蓝分量即可画出7条绿色彩带,最后通过输入的音节信号使相应的彩条显示为高亮。2.1.7键盘接口实现电子琴这是一个为了实现电子琴功能的外加模块,键盘会通过固定的频率扫描键盘,每个按键经过处理后会产生一个对应 的16位二进制数,取其中8位即可判断输入的是1到7中的哪个按键,然后将这个数进行转换为乐谱码,然后给乐谱查找模块找到预置数,送给分频模块进行分频,最后送给扬声器输出声音。乐谱码查找和分频与预置乐曲过程相同,不再赘述。2.2 方案论证1) 在FPGA设计中,全局的清零和置位信号必须经过全局的清零和置位管脚输
31、入,因为他们属于全局的资源,扇输出能力大,使用普通的IO管脚不能保证工作可靠性能稳定,易产生毛刺。在此设计中故采用同步置位的办法来代替异步清零。2) 在此次设计中采用代码预置歌曲的音符与节拍频率实现乐曲播放功能,该方法虽不会产生硬件错误,但代码控制时钟频率与节拍易产生延迟从而造成严重乐曲失真,并且操作复杂,需要事先人为查曲音符并转换为相对应的频率。其实为了更方便快捷,可以利用外部FLASH存储器(SD)卡和LCD面板,通过该面板显示一些相关参数,仅需将MP3音乐置入SD卡中即可,同时也可以上传或下载到电脑中。但由于本次项目开发人员都是第一次接触FPGA,并没有硬件基础与VHDL设计基础,对FP
32、GA的通信不甚理解,故只能退而求其次采用稍显笨拙的办法。2.3系统架构整个系统的主要功能是实现预置乐谱的播放,LED显示时钟信息,拨码开关实现乐曲相关控制功能,发光二极管显示当前音符信息,并外部扩展扬声器,VGA显示,电子琴键盘弹奏等。其物理结构图如下所示: 2.3.1键盘系统通过PS/2接口与basay2板相连,为总系统提供电子琴键盘设计。2.3.2VGA系统通过VGA接口与Basay2板相连,提供键盘按键显示及乐曲音阶显示。2.3.3扬声器系统通过Basay扩展接b2与Basay板相连,将预置音乐通过扬声器功率放大达到音响放大的效果2.3.4 I/O系统通过Basys用户I/O接口为总系统
33、提供数码管时钟显示、拨码开关实现乐曲相关操作、LED实现当前音阶信息提供服务。2.3.5时钟控制系统通过Basys核心振荡器提供的系统时钟,通过分频实现对整个系统的时序控制,并与拨码开关等IO接口配合使用实现功能扩展。2.3.6总系统为前述各个系统间的物理接口提供平台,并与软件相配合为用户提供开发平台。三、系统模块设计整个系统的主要功能是实现预置乐谱的播放,按照功能进行细分,又可以把系统分为以下7个模块:时钟分频模块、乐谱发生模块、乐谱码查表模块、数控分频模块、音量调节模块、VGA显示模块、键盘接口模块。3.1 顶层模块3.1.1顶层模块原理框图3.1.2顶层模块电路图3.2时钟分频DCM1模
34、块:3.2.1功能描述 控制系统时序,并为乐曲播放提供相关控制功能。3.2.2工作流程 在乐谱发生模块和数控分频模块分别用到了4 hz和750 khz的时钟频率。BASYS2开发板内部时钟为50 Mhz,因此我们需要一个时钟分频模块对开发板的内部时钟进行分频,经过分频后得到4 hz和750 khz的时钟频率,再分别送到乐谱发生模块和数控分频模块。他的输入为50 mhz时钟频率和reset信号,输出为4 hz和750 khz的时钟频率。3.2.3元件符号输入信号 :系统时钟,暂停信号,快放使能信号,慢放使能信号。输出信号: 375K HZ时钟,4Hz 时钟。3.2.4软件实现 CLK:系统晶振提
35、供的50MHz时钟信号。 FAST::快放按键产生的使能信号。 SLOW:慢放按键产生 的使能信号。 RST:暂停拨码开关产生的使能信号。 CLK4:供给乐谱发生模块的时钟。CLK375K:供给数控分频模块的频率信号。3.2.5硬件实现外部晶体振荡器可以产生50MHz的标准时钟,它用于给内部各个模块提供时钟基准,使各模块即独立又有序的协调工作。3.2.6详细代码见代码清单3.3乐谱码发生MusicTone模块:3.3.1功能描述主要完成乐谱发生器的功能。3.3.2工作流程该模块内存放了乐曲中的音符数据,通过一个4 hz时钟频率将音符数据一个一个地输出到下一个模块,即乐谱码查表模块。他的输入为4
36、 hz的时钟频率,输出为乐谱码。扩展复位功能开关,切歌功能开关,前进/后退功能开关等。利用原理中的节拍时钟频率4hhz上升沿控制,并对前进/后退功能设置节拍数的增减从而达到目的。此外,为节约时间与资源方便扩展,仅在代码内预置两首歌曲,故可利用STD_LOGIC简单取反达到切换。3.3.3元件符号输入信号:4Hz时钟信号,重置信号,下一首触发信号,快进触发信号,回放触发信号,播放模式控制信号。输出信号:时间重置信号,音节的音调。3.3.4软件实现CLK:系统晶振提供的50MHz时钟信号。BACKWARD::回放按键产生的使能信号。FORWARD:快进按键产生的使能信号。CLK4:乐谱发生的时钟。
37、NEXTSONG:下一首按键的使能信号RESET:重置按键的使能信号。TONEINDEX:产生的乐谱信号。RSTIME:产生的控制播放时间的暂停使能信号,当这个信号为1时,说明这时乐曲播放完毕。暂停播放时间计数。3.3.5硬件实现通过代码编写,使对应的信号和BASAY2板的端口相连,经过代码烧写在开发板内部产生可以实现预期功能的逻辑结构。3.3.6详细代码见代码清单3.4乐谱码查表译码ToneTable模块3.4.1功能描述3.4.2工作流程乐谱译码电路即音调发生器实际上是一个查表电路,放置22个音乐简谱对应的频率表,根据该表为数控分频模块提供所发音符频率的初始值,而此数在数控分频模块入口的停
38、留时间即为节拍数,原理表中已列出22个音符的相关信息。在这个模块的VHDL逻辑描述中设置了四四拍乐曲中全部音符所对应的分频预置数,共22个,每一音符的停留时间由音乐节拍和节拍时钟脉冲的输入频率4Hz决定。这22个值的输出由4位输入值ToneIndex4.0确定,该值中音符的停留时间由音乐节拍发生器中的音符数据决定。将分频预置并送到下一个模块,即数控分频模块。他的输入为乐谱码,输出为音符的分频预置数、简谱代码和高/低音。3.4.3元件符号输入信号:自动播放模式产生的音节音调,键盘手动敲击产生的音调,手动弹奏及自动播放模式使能信号。输出信号:Led控制信号,高音显示信号,音乐预置数。3.4.4软件
39、实现MIMA:暂时无效。TONEINDEX1:由系统按照自动模式下产生的乐谱信号。TONEINDEX2:电子琴模式下键盘按下产生的乐谱信号。HANDAUTO:选择自动模式还是电子琴模式的使能信号、Code:由乐谱信号经过判断产生的对应LED灯亮灭的控制信号。:TONE:由乐谱经过查表产生的分频预置数信号。HEIGHT:由乐谱信号分析判断产生的高音显示控制信号。3.4.5硬件实现拨码开关用于控制电子琴,使其在不同的工作模式下切换;IO扩展接口可以方便的连接外部扩展模块,如音量调节模块,进行音频放大,从而扩展了Basys2开发板的功能。3.4.6详细代码见代码清单3.5数控分频SPKDCM模块:3
40、.5.1功能描述3.5.2工作流程根据从乐谱码查表模块得到的分频预置数对750 khz进行分频,得到当前音符所对应的频率,把该频率从FPGA的一个引脚输出。若把输出信号连接到扬声器,可以知道输出的是音符。在这里,我们需要把他送到音量调节模块。他的输入为待分频的750 khz的时钟频率和音符的分频预置数,输出为音符所对应的频率脉冲。3.5.3元件符号输入信号:375kHz时钟信号,分频预置数输出信号:输出分频预置数对应频率的方波信号3.5.4软件实现TONE:乐谱表查找模块产生的乐谱预置数信号。CLK375K:时钟分频模块产生的375KHz频率信号,作为数控分频的基准信号。SPKOUT:数控分频
41、根据分频预置数对基准信号分频产生的频率信号,用于驱动扬声器发声。3.5.5硬件实现通过代码编写,使对应的信号和BASAY2板的端口相连,经过代码烧写在开发板内部产生可以实现预期功能的逻辑结构3.5.6详细代码见代码清单3.6音量调节模块:3.6.1功能描述在乐谱译码器将音符频率译码输出后,该模块用来将其功率放大输出3.6.2工作流程这完全是一个外接模块,由集成运放和一些电阻电容组成。对从开发板的引脚输出的声音进行音量调节。他的输入为音符所对应的频率脉冲,输出的不同音量的声音。3.6.3元件符号NE55323.7VGA显示VGACode模块:3.7.1功能描述显示电子琴界面。当播放乐曲时,界面的
42、琴键会显示当前对应的音阶,好似无人自动操作;当切换到电子琴弹奏模式时,敲击键盘预置的对应按键会实时显示在显示器上。3.7.2工作流程输入信号为乐谱码模块输出的乐谱码,以及VGA 接口的几个必要控制信号,输出为显示屏显示的红绿蓝信号大小,通过扫面过程中对红绿蓝信号大小的控制从而画出7条绿色彩条,然后通过输入的乐谱码控制彩条绿色分量增大,显示为高亮状态。3.7.3元件符号输入信号:系统时钟信号,彩条高亮控制信号。输出信号:横向扫描同步信号,纵向扫描同步信号,红色分量信号,绿色分量信号,蓝色分量信号。3.7.4软件实现Code:乐谱码查找模块产生的控制信号,用于控制彩条高亮显示。:CLK:系统提供的
43、50MHz时钟信号。RDATA:系统扫描时赋给每个像素的红色分量信号。GDATA:系统扫描时赋给每个像素的绿色分量信号。BDATA:系统扫描时赋给每个像素的蓝色分量信号。HSYNC:系统扫描时的横向扫描同步信号。VSYNC:系统扫描时的纵向扫描同步信号。3.7.5硬件实现VGA接口可连至VGA显示器,用于显示电子琴的界面以及播放器播放歌曲时单个音阶的显示。FPGA通过向VGA接口信号不断的输出不同的数据,来控制显示器显示不同的画面。3.7.6详细代码见代码清单3.8键盘电子琴KyBoard模块:3.8.1功能描述为播放器扩展琴键,提供电子琴弹奏功能3.8.2工作流程这是一个为了实现电子琴功能的
44、外加模块,键盘会通过固定的频率扫描键盘,每个按键经过处理后会产生一个对应 的16位二进制数,取其中8位即可判断输入的是1到7中的哪个按键,然后将这个数进行转换为乐谱码,然后给乐谱查找模块找到预置数,送给分频模块进行分频,最后送给扬声器输出声音。乐谱码查找和分频与预置乐曲过程相同。3.8.3元件符号输入信号:系统时钟信号,键盘时钟信号,键盘数据信号。输出信号:按键对应的音调信号。3.8.4软件实现PS/2履行一种双向同步串行协议,每次数据线上发送一位数据并且每在时钟线上发一个脉冲,数据就被读到鼠标/键盘中。键盘使用集电极开路所以无论是键盘或是主机都可以驱动两条串行总线。PS/2风格键使用按键数据通信,每个按键都有一个独立的八位二进制码。如果一直按着,每隔100ms就发送一个代码。当一个键松开时,一个“F0”代码被发送,然后原来的代码将不发送。如果键可以“转移”产生一个新的字符,然后转变字符除了发送扫描码,主机还必须确定使用哪个ASCII字符。扫描码如