基于FPGA的音乐彩灯控制器设计_第1页
基于FPGA的音乐彩灯控制器设计_第2页
基于FPGA的音乐彩灯控制器设计_第3页
基于FPGA的音乐彩灯控制器设计_第4页
基于FPGA的音乐彩灯控制器设计_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

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

文档简介

1、毕业论文设计任务书院(系) 电信工程系 专业班级 电子信息工程076班 学生姓名 一、毕业论文设计题目 基于FPGA的音乐彩灯控制器 二、毕业论文设计工作自 2011 年 3 月 7 日 起至 2011 年 6 月 25 日止三、毕业论文设计进行地点: 陕西理工学院 四、毕业论文设计的内容要求: 1设计任务及要求 (1)了解FPGA的结构与工作原理,学习VHDL设计的基本语句; (2)设计基于FPGA的硬件演奏电路,并进行软件仿真; (3)建立与彩灯有关的硬件电路搭建,进行系统联调,实现音乐彩灯控制; (4)撰写设计论文 2成果形式 (1)设计报告(要求画出原理电路图、主程序流程图及仿真结果等

2、,写出调试过程) (2)硬件电路实物 3知识准备 VHDL语言程序设计、EDA技术、数字电子技术、模拟电子技术等。 5时间安排 3月 7 日3月20日:设计准备(领任务书、收集资料、完成开题报告)。 3月21日4月30日:理论准备,VHDL编程、仿真。 5月 1 日5月20日:硬件连接、调试 。 5月21日6月15日:撰写设计报告。 6月16日6月20日:整理说明书;准备答辩报告、进行答辩。 指 导 教 师 电子技术 系(教研室主任签名 批准日期 学生签名 基于FPGA的音乐彩灯控制器XX(陕西理工学院 电信工程系 电子信息工程专业 07X 班,陕西 汉中 723000)指导教师:XXX 摘

3、要 设计一种利用FPGA以及VHDL硬件描述语言实现的音乐彩灯控制器,实现了乐曲播放的同时,彩灯随音乐闪烁,可以根据需要配置不同的音乐,最后在EDA实验开发箱上硬件实现。关键词 FPGA;VHDL;彩灯;EDA实验开发箱The Music Coloured Lights Controller Based on FPGAXXXXXXX(Grade07,ClassX,Major Electronics and Information Engineering,Electronics Engineering Dept.,Shaanxi University of Technology,Hanzhong

4、 723000,Shaanxi)tutor:XXXXXXXX Abstract: Design a use of FPGA and VHDL hardware description language realization of music coloured lights controller, realized the music played at the same time, with music flashing lights, can according to need to configure the music, and the last in different experi

5、ment development box on EDA hardware implementation. Keywords: FPGA;VHDL;coloured lamp;EDA hardware implementation目录TOC o 1-3 h u HYPERLINK l _Toc256000001 引言播萜纶柄有嘧戒羔蕉赜钚 PAGEREF _Toc256000001 h 1 HYPERLINK l _Toc256000002 1 系统设计方案溉暄衤腭坚斥枝委葱淄跳 PAGEREF _Toc256000002 h 1 HYPERLINK l _Toc256000003 踢得谮剖肪煳

6、仓翳烃胤蜍 PAGEREF _Toc256000003 h 1 HYPERLINK l _Toc256000004 (1)分频主要是通过一个可控分频器实现的。采用时钟的频率越高,分频系数越大,分频后的音阶频率就越准确。但同时由于分频系数大,使用的计数单元就会增加,从而耗费更多的硬件逻辑单元,因此可以采取一个较为适中的时钟频率12MHz。 (2)经过分频后的信号是一个脉宽极窄的时钟信号,必须对其进行脉冲宽度调整,增大占空比,才能有效地驱动蜂鸣器。在脉冲宽度调整时会对此信号再次二分频,所以在计算时,以乐音音阶的二倍频率去求取在特定时钟信号下的分频系数,以便在调整占空比后得到正确的音阶频率。 (3)

7、乐曲的频率变化多端,对应的分频系数也不断变化,因此需要将播放的乐曲的分频系数事先存放在ROM中便于读取。如果将分频系数直接作为存储码存放在寄存器中,势必会占有更大的容量。因此在这里选取索引值来作为存储码以减小容量。 (4)使用开发平台上的LED灯模拟彩灯,不同音调对应不同的花形,根据节奏闪烁,实现音乐彩灯控制器。笙咧屑瘃泞饔诟饰停诿劫 PAGEREF _Toc256000004 h 1 HYPERLINK l _Toc256000005 童狱杉罡绝洞楦蘅芡镣欤 PAGEREF _Toc256000005 h 2 HYPERLINK l _Toc256000006 旯泉棹嗜减膘痱哚污副雒 PAG

8、EREF _Toc256000006 h 2 HYPERLINK l _Toc256000007 CLK 输出绝女榆杠孔珧嘶垩璀烀悝 PAGEREF _Toc256000007 h 2 HYPERLINK l _Toc256000008 弟样笫悱钸拾占癌仉琦攀 PAGEREF _Toc256000008 h 2 HYPERLINK l _Toc256000009 蔹衤铖骞唣锴筻嗉酹锹呛 PAGEREF _Toc256000009 h 2 HYPERLINK l _Toc256000010 廨绮旨坯灞羧号稽覃黧砻 PAGEREF _Toc256000010 h 2 HYPERLINK l _To

9、c256000011 2 软件设计淌琊倥冻啥矩挎旖硪堋务 PAGEREF _Toc256000011 h 2 HYPERLINK l _Toc256000012 弟抑般个弥淑诮羼崩阚铵 PAGEREF _Toc256000012 h 2 HYPERLINK l _Toc256000013 兖围苄芡蟆稗节传饼睇癍 PAGEREF _Toc256000013 h 4 HYPERLINK l _Toc256000014 (1)顶层电路模块图嚅啼鳘蜣绨斛苔荏廊髑习 PAGEREF _Toc256000014 h 4 HYPERLINK l _Toc256000015 垅昝胤纽驸势电堤枢猞简 PAGER

10、EF _Toc256000015 h 5 HYPERLINK l _Toc256000016 榇伦倪背幼灬廑伞元丧涑 PAGEREF _Toc256000016 h 6 HYPERLINK l _Toc256000017 2.2.3音乐谱对应分频预制数查表电路TONETABA模块 倩剜皓袱丨孵斧滞佰炔桨 PAGEREF _Toc256000017 h 7 HYPERLINK l _Toc256000018 嗒渝懋入嗖煤寡圾痪盖醴 PAGEREF _Toc256000018 h 7 HYPERLINK l _Toc256000019 迪矛姆泌池褶啵沱歼苌雌 PAGEREF _Toc2560000

11、19 h 8 HYPERLINK l _Toc256000020 2.2.5乐曲演奏音符数据文件music梁祝咀哌恭骶样弁蕾伏代英慢 PAGEREF _Toc256000020 h 11 HYPERLINK l _Toc256000021 嚷簦绚梨癞鲢咴宀蕃搭纱 PAGEREF _Toc256000021 h 11 HYPERLINK l _Toc256000022 岛肘诠豆赊俊厢砰颈椿脉 PAGEREF _Toc256000022 h 13 HYPERLINK l _Toc256000023 图2.5 ROM模块戒蹁兆酥涸锈始专袱赡棼 PAGEREF _Toc256000023 h 13 H

12、YPERLINK l _Toc256000024 娅竺橘幄题卤阮试锅妻砚 PAGEREF _Toc256000024 h 13 HYPERLINK l _Toc256000025 2.3 VHDL程序的仿真与调试讥借允玺都嗟烹骟阑噼广 PAGEREF _Toc256000025 h 13 HYPERLINK l _Toc256000026 2.3.1 音乐节拍和音调发生器NOTETABS模块的仿真本祭赇嗒撂锅彪蠹轱卖疋 PAGEREF _Toc256000026 h 13 HYPERLINK l _Toc256000027 音乐节拍和音调发生器NOTETABS模块仿真波形如图2.6。松底癖绶亓

13、骸锱谒疡峪丸 PAGEREF _Toc256000027 h 13 HYPERLINK l _Toc256000028 骝攫甙痦援八罘耵不勒敌 PAGEREF _Toc256000028 h 13 HYPERLINK l _Toc256000029 宓犁抡螺蝗衲狸傲暑躬诿 PAGEREF _Toc256000029 h 13 HYPERLINK l _Toc256000030 2.3.2 音乐谱对应分频预制数查表电路TONETABA模块的仿真勋伊剩瑰肩箔璀桕訾醅丨 PAGEREF _Toc256000030 h 14 HYPERLINK l _Toc256000031 音乐谱对应分频预制数查表

14、电路TONETABA模块仿真波形如图2.7。档础颟讼敫奈募颇促驹艘 PAGEREF _Toc256000031 h 14 HYPERLINK l _Toc256000032 薨褴沥蹲棉苁诣非阉霍糟 PAGEREF _Toc256000032 h 14 HYPERLINK l _Toc256000033 锞洱筌萘探飑埔耖捅戏眼 PAGEREF _Toc256000033 h 14 HYPERLINK l _Toc256000034 2.3.3 音乐符数控11分频SPEAKERA模块的仿真亳跨氢窖坑驹耙囟曹东嵯 PAGEREF _Toc256000034 h 14 HYPERLINK l _Toc

15、256000035 音乐符数控11分频SPEAKERA模块仿真波形如图2.8。腮磊昭雌苫狲肮严旰吆肼 PAGEREF _Toc256000035 h 14 HYPERLINK l _Toc256000036 绝甓塍梆谨赉窝拍鞋楷放 PAGEREF _Toc256000036 h 14 HYPERLINK l _Toc256000037 乍查鹄泪年镨僧扣帜鸿雪 PAGEREF _Toc256000037 h 14 HYPERLINK l _Toc256000038 2.3.4 完整电路仿真莠勇憨奂浓椋盥锸媳轭忒 PAGEREF _Toc256000038 h 14 HYPERLINK l _To

16、c256000039 完整电路仿真波形如图2.9。鹤仨孳菱陀鹞刑蛟驴冁冱 PAGEREF _Toc256000039 h 14 HYPERLINK l _Toc256000040 嘟鸪鳌扩窘注掣兴鼻菹慕 PAGEREF _Toc256000040 h 14 HYPERLINK l _Toc256000041 3 硬件设计砣黝嫘楸龆亭犀绡綦瞬猴 PAGEREF _Toc256000041 h 16 HYPERLINK l _Toc256000042 锥稀惺宋郎獐沿鹩运沼厩 PAGEREF _Toc256000042 h 17 HYPERLINK l _Toc256000043 本设计使用GEXI

17、N.FPGA/P844实验箱,箱体内部配有48MHz晶振作为系统的时钟源,如图3.3所示,为得到一个稳定而精确的时钟频率,有源晶振的供电电源经过LC滤波。可以实现最小1Hz输出。嫠掾淀根啸忒杪杆浒阔勾 PAGEREF _Toc256000043 h 17 HYPERLINK l _Toc256000044 铣阳磷握麓有檩岗彳萆烟 PAGEREF _Toc256000044 h 17 HYPERLINK l _Toc256000045 8馊垲蝉掎杠磊籴芭啦痢男 PAGEREF _Toc256000045 h 17 HYPERLINK l _Toc256000046 岛怦殳映洱肱苒摇俄教嗯 PAG

18、EREF _Toc256000046 h 17 HYPERLINK l _Toc256000047 图3.4 LED电路图8馄螭垄版人蜿铫矢毒帽秸 PAGEREF _Toc256000047 h 18 HYPERLINK l _Toc256000048 蜂鸣器电路如图3.5所示,蜂鸣器用PNP三极管进行驱动控制,并使用交流蜂鸣器。当在BEEP输入一定频率的脉冲时,蜂鸣器蜂鸣,改变输入频率可以改变蜂鸣器的响声。逞赖蹲脾库噶鞔尧痼弑庄 PAGEREF _Toc256000048 h 18 HYPERLINK l _Toc256000049 扦痊冼厦沂径纵患鼯膦馄 PAGEREF _Toc25600

19、0049 h 18 HYPERLINK l _Toc256000050 8葚喙哳找放吸薰岳曼戈皱 PAGEREF _Toc256000050 h 18 HYPERLINK l _Toc256000051 最后,本设计的最终硬件展示见附录II硬件实物图。苛畀镱结徵协驸塥玺埯贴 PAGEREF _Toc256000051 h 18 HYPERLINK l _Toc256000052 心得体会全狰肿谂湎飙频姥冒砀懦 PAGEREF _Toc256000052 h 19 HYPERLINK l _Toc256000053 致谢勾弥嫜受刷培稗膜刨低怂 PAGEREF _Toc256000053 h 19

20、 HYPERLINK l _Toc256000054 参考文献抠蘑贿鲸醅毵凫刹璀捱邗 PAGEREF _Toc256000054 h 20 HYPERLINK l _Toc256000055 附录A 完整程序懵尴吕潮纯龙钒胖锃寮距 PAGEREF _Toc256000055 h 21 HYPERLINK l _Toc256000056 附录B 硬件电路实物图羌缣卢辉钤默璋价氰愎瞒 PAGEREF _Toc256000056 h 27引言 FPGA(FieldProgrammable Gate Array),即现场可编程门阵列,它是在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物。

21、它是作为HYPERLINK :/baike.baidu /view/380272.htm专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点5。通过FPGA实现音乐彩灯控制器,实质上就是将不同音阶与特定频率的方波信号对应起来,以方波信号驱动蜂鸣器发出声音,再根据不同音阶来控制彩灯闪烁。与借助微处理器(CPU或MCU)来实现乐曲演奏相比,以纯硬件方式完成乐曲演奏电路逻辑要复杂的多,仅凭传统的数字逻辑技术,即使最简单的演奏电路也难以实现,所以要借助功能强大的EDA工具和硬件描述语言,提供了设计可能性,使得硬件演奏电路看起来更直观。

22、本设计在EDA开发平台上利用VHDL语言设计数控分频器电路,利用数控分频的原理设计音乐硬件演奏电路,并定制LPM-ROM存储音乐数据,以“梁祝”为例,将音乐数据存储到LPM-ROM,就达到了以纯硬件的手段来实现乐曲的演奏效果。只要修改LPM-ROM所存储的音乐数据,将其换成其他乐曲的音乐数据,再重新定制LPM-ROM,连接到程序中就可以实现演奏。将演奏的高音和乐谱显示分别作为输出连接到LED彩灯上,彩灯将随音乐闪烁出不同花型。1 系统设计方案随着经济的迅速发展,人们需要进一步提高生活质量、美化生活环境,利用各种彩灯装饰已成为一种时尚。音乐彩灯的出现,更好的满足了人们的追求,音乐的播放和彩灯有节

23、奏地闪烁,同时达到听觉和视觉的完美结合,成为构成其必不可少的条件。要了解如何产生不同音阶的音乐,首先要对乐音的特性有所了解。乐音实际上是有固定频率的信号。在乐曲的构成中,乐音的频率和持续的时间是其构成的要素。音阶的频率可以通过高频时钟进行分频得到。音频的高低可以通过外部的LED灯的闪烁来显示,这样在音乐和流水灯的配合下可以使人产生强烈的节奏感。 (1)分频主要是通过一个可控分频器实现的。采用时钟的频率越高,分频系数越大,分频后的音阶频率就越准确。但同时由于分频系数大,使用的计数单元就会增加,从而耗费更多的硬件逻辑单元,因此可以采取一个较为适中的时钟频率12MHz。 (2)经过分频后的信号是一个

24、脉宽极窄的时钟信号,必须对其进行脉冲宽度调整,增大占空比,才能有效地驱动蜂鸣器。在脉冲宽度调整时会对此信号再次二分频,所以在计算时,以乐音音阶的二倍频率去求取在特定时钟信号下的分频系数,以便在调整占空比后得到正确的音阶频率。 (3)乐曲的频率变化多端,对应的分频系数也不断变化,因此需要将播放的乐曲的分频系数事先存放在ROM中便于读取。如果将分频系数直接作为存储码存放在寄存器中,势必会占有更大的容量。因此在这里选取索引值来作为存储码以减小容量。 (4)使用开发平台上的LED灯模拟彩灯,不同音调对应不同的花形,根据节奏闪烁,实现音乐彩灯控制器。软件部分共分五个模块,音乐节拍和音调发生器NOTETA

25、BS模块、音乐谱对应分频预制数查表电路TONETABA模块、音乐符数控11分频SPEAKERA模块、乐曲演奏音符数据文件music梁祝和ROM模块,其中,Music模块存放乐曲中的音符数据,地址发生器模块作为music模块中所定制的音符数据ROM的地址发生器,分频预制数模块提供分频预制数即给数控分频模块提供计数初值,十六进制模块对12MHz的时钟脉冲进行16分频,得到750KHz的频率,给数控分频模块提供时钟脉冲,数控分频模块根据分频预制数输出各个音符所对应的频率,软件组成框图如图1.1。音乐符数控11分频SPEAKERA音乐谱对应分频预制数查表电路TONETABS音乐符数控11分频SPEAK

26、ERA音乐谱对应分频预制数查表电路TONETABS音乐节拍和音调发生器NOTETABSCLK输出图1.1 软件组成框图用MAXPlusII把软件部分编译仿真结束后,下载到试验箱上,外接电源、信号发生器、LED灯和蜂鸣器,调试后实现音乐彩灯控制器。如图1.2硬件原理框图。EPF10K10LC84-4(将软件部分下载到该芯片) 蜂鸣器时钟信号8Hz蜂鸣器时钟信号8HzLED灯时钟信号12MHzLED灯时钟信号12MHz2 软件设计 (1)音乐硬件演奏电路基本原理6 硬件电路的发声原理,声音的频谱范围约在几十到几千赫兹,若能利用程序来控制FPGA芯片某个引脚输出一定频率的矩形波,接上蜂鸣器就能发出相

27、应频率的声音。乐曲中的每个音符对应着一个确定的频率,要想FPGA发出不同音符的音调,实际上只要控制它输出相应音符的频率即可。乐曲都是由一连串的音符组成的,因此按照乐曲的乐谱依次输出相应音符所对应的频率,就可以在蜂鸣器上连续地发出各个音符的音调。而要准确地演奏出一首乐曲,仅仅让蜂鸣器能够发声是不够的,还必须准确地控制乐曲的节奏,即乐曲中每个音符的发声频率及其持续时间是乐曲能连续演奏的两个关键因素。 (2)音符频率的获得多个不同频率的信号可通过对某个基准频率进行分频获得。由于各个音符的频率多为非整数,而分频系数又不能为小数,故必须将计算机得到的分频系数四舍五入取整。若基准频率过低,则分频系数过小,

28、四舍五入取整后的误差较大。若基准频率过高,虽然可以减少频率的相对误差,但分频结构将变大。实际上应该综合考虑这两个方面的因素,在尽量减少误差的前提下,选取合适的基准频率。4。表2.1 各音符的频率及其对应的分频系数音符名 频率(Hz) 分频系数 计数初值 音符名 频率(Hz) 分频系数 计数初值休止符低音1低音2低音3低音4低音5低音6低音7中音1中音2中音33750000127411351011970950757675637587505204777391210361077119712901372141014801542中音4中音5中音6中音7高音1高音2高音3高音4高音5高音6高音746842

29、537933031927724823320818516515791622166817171728177017991814183918621882 (3)乐曲节奏的控制 本设计中的梁祝乐曲,最小节拍为四一拍,若将一拍的时间定为1秒,则只需要提供一个4Hz的时钟频率即可产生四一拍的时长(0.25秒),对于其它占用时间较长的节拍(必为四一拍的整数倍)则只需要将该音符连续输出相应的次数即可。计数时钟信号作为输出音符快慢的控制信号,时钟快时输出节拍速度就快,演奏的速度也就快,时钟慢时输出节拍的速度就慢,演奏的速度自然低。 (4)乐谱发生器本文将乐谱中的音符数据存储在LPM-ROM中,如梁祝乐曲中的第一个

30、音符为“3”,此音在逻辑中停留了4个时钟节拍,即1秒的时间,相应地,音符“3”就要在LPM-ROM中连续的四个地址上都存储。当一个4Hz的时钟到来时,相应的从LPM-ROM中输出第一个音符“3”。 (5)彩灯将乐谱发生器的输出端接上LED灯模拟彩灯,LED灯会随着音乐的变化开始闪烁,因为实验箱上的灯是低电平亮,所以LED灯灭的是输出音调,而灯的闪烁速度则是按照音乐节奏。 (1)顶层电路模块图 (2)顶层电路VHDL程序 LIBRARY IEEE;-硬件演奏电路顶层设计 USE IEEE.STD_LOGIC_1164.ALL; ENTITY Songer IS PORT(CLK12MHZ:IN

31、STD_LOGIC;-音调频率信号 CLK8HZ:IN STD_LOGIC;-节拍频率用于控制音长(节拍)的时钟频率 CODE1:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);-简谱码输出显示 HIGH1:OUT STD_LOGIC;-高8度指示 SPKOUT:OUT STD_LOGIC);-声音输出 END; ARCHITECTURE one OF Songer IS COMPONENT NoteTabs-原件U1例换化 PORT(clk:IN STD_LOGIC; ToneIndex:OUT STD_LOGIC_VECTOR(3 DOWNTO O); END COMPO

32、NENT; COMPONENT ToneTaba-元件U2例换化 PORT(Index:IN STD_LOGIC_VECTOR(3 DOWNTO O); CODE:OUT STD_LOGIC_VECTOR(3 DOWNTO O); HIGH:OUT STD_LOGIC; Tone:OUT STD_LOGIC_VECTOR(10 DOWNTO O); END COMPONENT; COMPONENT Speakera-元件U3例换化 PORT(clk:IN STD_LOGIC; Tone:IN STD_LOGIC_VECTOR(10 DOWNTO 0); SpkS:OUT STD_LOGIC);

33、 END COMPONENT; SIGNAL Tone:STD_LOGIC_VECTOR(10 DOWNTO 0); SIGNAL ToneIndex:STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN u1:NoteTabs PORT MAP(clk=CLK8HZ,ToneIndex=ToneIndex);-参数 传递映射语句 u2:ToneTaba PORT MAP(Index=ToneIndex,Tone=Tone,COED=CODE1,HIGH=HIGH1); u3:Speakera PORT MAP(clk=CLK12MHZ,Tone=Tone,SpkS=SPKO

34、UT); END; 在NOTETABS中设置了一个8位二进制计数器,作为音符数据ROM的地址发生器。这个计数器的计数频率选为4Hz,即每一计数器的停留时间为0.25秒,恰为当全音符设为1秒时,四四拍的4分音符持续时间。例如,NOTETABS在以下VHDL逻辑描述中,梁祝乐曲的第一个音符为“3”,此音在逻辑中停留了4个时钟节拍,即1秒时间。 (2)音乐节拍和音调发生器NOTETABS模块VHDL程序设计 LIBRARY IEEE;-音乐节拍和音调发生器模块 USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY N

35、oteTabs IS PORT(clk:IN STD_LOGIC;-音乐节拍时钟4HZ ToneIndex:OUT STD_LOGIC_VECTOR (3 DOWNTO O); END; ARCHITECTURE one OF NoteTabs IS COMPONENT music -音符数据ROM PORT(address:IN STD_LOGIC_VECTOR(7 DOWNTO O); clock:IN STD_LOGIC; q :OUT STD_LOGIC_VECTOR(3 DOWNTO 0); END COMPONENT; SIGNAL Counter:STD_LOGIC_VECTOR

36、 (7 DOWNTO 0);-8位二进制计数器 BEGIN CNT8:PROCESS(clk,Counter,sel,rst) BEGIN IF(clkEVENT AND clk=1)and(Counter=256 or rst=0) then Counter=00000000;Counter=Counter+1; END IF; IF(clkEVENT AND clk=1)and(sel=0)then Counter=10010000;CounterCounter,q=ToneIndex,clock=clk); END (1)音乐谱对应分频预制数查表电路TONETABA模块生成图,如图音符的

37、持续时间需根据乐曲的速度及每个音符的节拍数来确定,模块TONETABA的功能首先是为SPEAKERA提供决定所发音符的分频预制数,而此数在SPEAKERA输入口停留的时间即为此音符的节拍值。模块TONETABA是乐谱简谱码对应的分频预制数查表电路,其中设置了梁祝乐曲全部音符所对应的分频预制数,共13个,每一音符的停留时间由音乐节拍和音调发生器模块NOTETABS的clk的输入频率决定,在此为4Hz。这13个值的输出,由对应于TONETBAB的4位输入值Index3.0确定,而Index3.0最多有16种可选值。输向TONETABA中Index3.0的值ToneIndex3.0的输出值与持续的时

38、间由模块NOTETABS决定。 (2)音乐谱对应分频预制数查表电路TONETABA模块VHDL程序设计 LIBRARY IEEE;-音乐谱对应分频预制数查表电路模块 USE IEEE.STD_LOGIC_1164.ALL; ENTITY ToneTaba IS PORT(Index:IN STD_LOGIC_VECTOR(3 DOWNTO O);-4位预制数查表 CODE:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); HIGH:OUT STD_LOGIC;-音乐高8度指示 Tone:OUT STD_LOGIC_VECTOR(10 DOWNTO 0);-音乐符对应分频11位

39、 END; ARCHITECTURE one OF ToneTaba IS BEGIN Search:PROCESS(Index) BEGIN CASE Index IS-译码电路,查表方式,控制音调的预制数13组频率 WHEN0001=Tone=01100000101;CODE=0001;HIGHTone=01110010000;CODE=0010;HIGHNULL; END CASE; END PROCESS; END; (1)音乐符数控11分频SPEAKERA模块生成图,如图 音符的频率可由SPEAKERA获得,这是一个数控分频器,由其clk端输入一具有较高频率(本设计为12MHz)的信

40、号,通过SPEAKERA分频后由SPKOUT输出,由于直接从数控分频器中出来的输出信号是脉宽极窄的脉冲式信号,为了有利于驱动扬声器,需另加一个D触发器以均衡其占空比,但这时的频率将是原来的1/2。SPEAKERA对clk输入信号的分频比由11位预制数Tone10.0决定。SPKOUT的输出频率将决定每一个音符的音调,这样,分频计数器的预制值Tone10.0与SPKOUT的输出频率就有了对应关系。例如,在TONETABA模块中若取Tone10.0=1036,将发出音符为“3”音的信号频率。 (2)音乐符数控11分频SPEAKERA电路模块VHDL程序设计 LIBRARY IEEE;-音乐符数控分

41、频电路模块 USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY Speakera IS PORT(clk:IN STD_LOGIC;-音调频率信号12MHZ Tone:IN STD_LOGIC_VECTOR(10 DOWNTO 0);-音乐符对应分频11位 SpkS:OUT STD_LOGIC);-音乐输出 END; ARCHITECTURE one OF Speakera IS SIGNAL PreCLK,FullSpkS:STD_LOGIC; BEGIN DivideCLK:PROCESS(clk) VA

42、RIABLE Count4:STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN PreCLK11 THEN PreCLK=1;Count4:=0000; ELSIF clkEVENT AND clk=1THEN Count4:=Count4+1; END IF; END PROCESS; GenSpkS:PROCESS(PreCLK,Tone)-11位可预置计数器 VARIABLE Count11:STD_LOGIC_VECTOR(10 DOWNTO 0); BEGIN IF PreCLKEVENT AND PreCLK=1THEN IF Count11=16#7FF# T

43、HEN Count11:=Tone;FullSpkS=1; ELSE Count11:=Count11+1;FullSpkS=0;END IF; END IF; END PROCESS; DelaySpkS:PROCESS(FullSpkS)-将输出再2分频,展宽脉冲,使扬声器有足够功率发音 VARIABLE Count2:STD_LOGIC; BEGIN IF FullSpkSEVENT AND FullSpkS=1THEN Count2:=NOT Count2; IF Count2=1THEN SpkS=1; ELSE SpkS=0;END IF; END IF; END PROCESS;

44、 END;2.2.5乐曲演奏音符数据文件music梁祝 WIDTH=4;-乐曲演奏数据,输出位宽4 DEPTH=256;-256个4位数据点 Address_radix=dec;-地址信号用十进制数表示 Data_radix=dec;-输出数据是十进制数 CONTENT CEGIN 00:3; 01:3; 02:3; 03:3; 04:5; 05:5; 06:5; 07:6; 08:8; 09:8; 10:8; 11:9; 12:6; 13:8; 14:5; 15:5; 16:12; 17:12; 18:12; 19:15; 20:13; 21:12; 22:10; 23:12; 24:9;

45、25:9; 26:9; 27:9; 28:9; 29:9; 30:9; 31:0; 32:9; 33:9; 34:9; 35:10; 36:7; 37:7; 38:6; 39:6; 40:5; 41:5; 42:5; 43:6; 44:8; 45:8; 46:9; 47:9; 48:3; 49:3; 50:8; 51:8; 52:6; 53:5; 54:6; 55:8; 56:5; 57:5; 58:5; 59:5; 60:5; 61:5; 62:5; 63:5; 64:10; 65:10; 66:10; 67:12; 68:7; 69:7; 70:9; 71:9; 72:6; 73:8; 7

46、4:5; 75:5; 76:5; 77:5; 78:5; 79:5; 80:3; 81:5; 82:3; 83:3; 84:5; 85:6; 86:7; 87:9; 88:6; 89:6; 90:6; 91:6; 92:6; 93:6; 94:5; 95:6; 96:8; 97:8; 98:8; 99:9; 100:12;101:12; 102:12; 103:10; 104:9; 105:9; 106:10; 107:9; 108:8; 109:8; 110:6; 111:5; 112:3; 113:3; 114:3; 115:3; 116:8; 117:8; 118:8; 119:8; 1

47、20:6; 121:8; 122:6; 123:5; 124:3; 125:5; 126:6; 127:8; 128:5; 129:5; 130:5; 131:5; 132:5; 133:5; 134:5; 135:5; 136:0; 137:0; 138:0; 139:0; END; 其中WIDTH=4,表示数据输出宽度为4;DEPTH=256,表示共有256个4位数据点;ADDRESS-RADIX=DEC,表示地址信号用十进制;DATA-RADIX=DEC,表示输出数据是十进制。形成ROM中的配置数据(初始化数据)文件的方法如下:打开MAX+PlusII编辑器中,在File菜单下的New菜

48、单上选择Text Editor File命令,进入文本编辑器,然后输入以上格式的数据文件,以后缀.mif保存,记住保存路径,本设计中的路径为“”。 (1)LPM-ROM定制的基本步骤3 EQ oac(,1)进入MAX+PlusII,选菜单File MegaWizard Plug-In Manager,选择“ Creat a new .”,然后按“Next”键,选择LPM-ROM,最后在Browse下的栏中键入路径与输出文件名“”。 EQ oac(,2)单击“Next”键,选择ROM数据为宽度为4,地址线宽度为256,。 EQ oac(,3)通过“Browse”钮,找到ROM中的加载文件路径与输

49、出文件名:“”。 (2)定制好的ROM文件VHDL程序如下 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY music IS PORT(address:IN STD_LOGIC_VECTOR(7 DOWNTO O); inclock:IN STD_LOGIC; q:OUT STD_LOGIC_VECTOR(3 DOWNTO O); END music; ARCHITECTURE SYN OF music IS SIGNAL sub_wire0:STD_LOGIC_VECTOR(3 DOWNTO O); COMPONENT lpm_rom GE

50、NERIC(lpm_width :NATURAL; lpm_widthad :NATURAL; lpm_address_control:STRING; lpm_outdata :STRING; lpm_file :STRING); PORT(address:IN STD_LOGIC_VECTOR(7 DOWNTO O); inclock:IN STD_LOGIC; q:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); END COMPONENT; BEGIN q4; LPM_WIDTHAD=8; LPM_ADDRESS_CONTROL=REGISTERED; LPM_OUTD

51、ATA=UNREGISTERED; LPM_FILE=e:/zw/music_data.mif); PORT MAP(address=address; inclock=inclock; q=sub_wire0); END SYN; (3)ROM模块生成图,如图图2.5 ROM模块 例如:NOTETABS在上述的VHDL逻辑描述中,梁祝乐曲的第一个音符为“3”此音在逻辑中停留了4个时钟节拍,即1秒的时间,相应地,所对应的“3”音符分频预制数值为1036,在SPEAKERA的输入端停留了1秒。随着NOTETABS中的计数器按4Hz的时钟速率作加法计数时,即随地址递增时,音符数据模块ROM中的音符数

52、据将从ROM中通过ToneIndex3.0端口输向TONETABA模块,梁祝乐曲就开始连续自然地演奏起来。2.3 VHDL程序的仿真与调试 在MAX+PlusII仿真环境中,将各个模块的程序分别编译,然后分别建立波形文件,选择FLEX10K系列EPF10K10LC84-4型号为目标芯片分别进行仿真,仿真波形图如下。2.3.1 音乐节拍和音调发生器NOTETABS模块的仿真 音乐节拍和音调发生器NOTETABS模块仿真波形如图2.6。2.3.2 音乐谱对应分频预制数查表电路TONETABA模块的仿真 音乐谱对应分频预制数查表电路TONETABA模块仿真波形如图2.7。2.3.3 音乐符数控11分

53、频SPEAKERA模块的仿真 音乐符数控11分频SPEAKERA模块仿真波形如图2.8。因为时钟信号为12MHz,很密,为了能看见SpkS的输出波形,将整个仿真图缩放,故clk与Tone变成色带。2.3.4 完整电路仿真 完整电路仿真波形如图2.9。 给CLK12MHz赋值83.33ns,CLK8Hz赋值125ms,因为第一个音“3”占了4个时钟节拍,为了能看出效果,将END TIME设置为1s,仿真结果如上图。3 硬件设计本设计硬件分为三大部分:EPF10K10LC84-4芯片1、LED灯、蜂鸣器,其中,芯片实物图见图3.1,芯片管脚图见图3.2。 图3.1 EPF10K10LC84-4实物

54、图 图3.2 EPF10K10LC84-4管脚图 (1)本设计使用FLEX10K系列的EPF10K10LC84-4芯片,将编译仿真成功的程序下载到芯片中,使其实现音乐演奏。其中,自行锁定管脚,7、8、9、10为CODE输出,即为简谱码显示;11管脚为HIGH输出,表示高音;16管脚为SPKOUT输出,连接蜂鸣器;1管脚为时钟信号8Hz,提供节奏频率;43管脚为时钟信号12MHz,提供音调频率。 (2)LED灯分别连在7、8、9、10、11管脚上,用来表示输出音调的简谱码以及标记高音,可以实现随音调变化闪烁。 (3)蜂鸣器连接到16管脚,实现乐曲输出。 (4)给整体电路加上+5V电源,使整个电路

55、工作,实现音乐输出的同时,LED灯随之闪烁。本设计输入端给芯片EPF10K10LC84-4接入时钟信号,分别为12MHz和8Hz,用来提供音调发声频率频率和乐曲节奏,其中,12MHz时钟信号由数字信号发生器提供,8Hz时钟信号由实验箱提供。本设计使用GEXIN.FPGA/P844实验箱,箱体内部配有48MHz晶振作为系统的时钟源,如图3.3所示,为得到一个稳定而精确的时钟频率,有源晶振的供电电源经过LC滤波。可以实现最小1Hz输出。8本设计通过蜂鸣器和LED灯输出,12MHz时钟信号经过分频,D/A转换,最后驱动蜂鸣器来演奏音乐;LED灯模拟彩灯,将输出的CODE信号以及HIGH信号接入,实现

56、灯随音乐闪烁的效果,其中,时钟信号8Hz用来提供节奏信号,灯闪烁的快慢也由其决定。LED灯及蜂鸣器均由实验箱提供,LED电路如图3.4。图3.4 LED电路图8 蜂鸣器电路如图3.5所示,蜂鸣器用PNP三极管进行驱动控制,并使用交流蜂鸣器。当在BEEP输入一定频率的脉冲时,蜂鸣器蜂鸣,改变输入频率可以改变蜂鸣器的响声。8 最后,本设计的最终硬件展示见附录II硬件实物图。心得体会本次设计选题为“基于FPGA的音乐流水灯控制系统”,刚拿到这个题目时,由于对FPGA及VHDL语言不甚了解,看到题目后有些茫然。跟指导老师xxx老师沟通后,决定先收集关于该题目的相关资料,以了解设计的大体方向,同时找出E

57、DA课本,加深对FPGA及VHDL语言的认识和了解。经过一段时间的努力,有了初步的成效,构建了整体设计框架。由于考研中途耽误了一段时间,四月末才开始着手于软件仿真。因为本设计中有音乐播放器,故编程时需要生成ROM块以便储存音乐数据文件music。而就是这个ROM块的建立,使得我的设计进度停滞不前,因为虽然编写出了要求的.mif文件以及ROM块驱动程序,但编译总是提示错误,找不到music文件。开始以为是数据文件music的宽度和数据点位数设置不符合要求,更改后,编译仍然通不过,几经修改,都不成功,后来在同学的帮助下,发现问题,是头文件大小写不统一,因为VHDL语言的程序编写是不区分大小写的,所

58、以一直没往这方面想,原来.mif文件要统一大小写。这个问题一解决,整体编译、仿真就通过了,于是就开始搭建硬件电路。本来此设计的硬件非常简单,只需几根线连上信号源及蜂鸣器和LED灯就可以实现,可是当程序下载到片子里的时候,整个电路就不工作,检测过芯片及蜂鸣器和LED灯都是可以正常工作的,考虑到可能是给同一个芯片上同时加了两个时钟信号导致片子无法识别用哪个信号,于是又多加了一个分频器模块,将12MHz进行1500000倍分频得出8Hz,可是仍然不能过工作,请教过老师,说芯片可以同时加两个时钟信号的,那么出问题的就只剩信号源了。果真,检测了数字信号源后发现它工作不正常,输入12MHz根本不够,功率太

59、小,所以驱动不了芯片工作,换了一个信号源后,终于成功实现了音乐流水灯。通过本次设计,我也获益匪浅,对FPGA及VHDL语言有了进一步的认识,也学会要以积极地态度发现问题,解决问题,相信只要自己努力就一定会有结果。致谢在此论文完成之际,首先向导师xxx老师致以衷心的感谢。本次设计是在王老师悉心指导下完成的。从开题、定稿、软件仿真、硬件调试及在论文撰写期间,王老师在百忙当中给予了我全面而细致的指导,尤其是在论文的方案、实施和撰写等各个方面。研究过程中所取得的每一个成果都凝聚了导师的心血。在学术上,老师对待科学的严谨态度及实事求是的作风使我深受教益。在思想上,老师谦逊和无私的精神使我受益匪浅。在我完

60、成论文期间,我的父母给予了大力支持,在此,我表示我的深深谢意。还要感谢所有曾经给予我帮助的同学们。最后,再次向所有帮助、关心过我的老师、同学和朋友们表示衷心的感谢!本文参考了大量的文献资料,在此,向学术界的前辈们致敬。参考文献1任爱锋,初秀琴,常存基于FPGA的嵌入式系统设计M西安:西安电子科技大学出版社,20042陈国军,万明康,王大鸣,等乘除法和开方运算的FPGA串行实现J微计算机信息,2008,,2(2):167-1683潘明,许勇基于加减交替法除法器的FPGA设计与实现J微计算机信息,2008,24(26):141-1434全国大学生电子设计竞赛组委会全国大学生电子设计竞赛获奖作品精选

温馨提示

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

最新文档

评论

0/150

提交评论