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

下载本文档

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

文档简介

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(陕西理工学院 电信工程系 电子信息工程专业 0

3、7X 班,陕西 汉中 723000)指导教师:XXX 摘 要 设计一种利用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 Univ

4、ersity of Technology,Hanzhong 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

5、 the last in different experiment development box on EDA hardware implementation. Keywords: FPGA;VHDL;coloured lamp;EDA hardware implementation目录引言11 系统设计方案11.1系统设计要求11.2系统组成21.2.1软件组成21.2.2硬件组成22 软件设计22.1软件设计的理论基础22.2.1顶层电路设计42.2.2音乐节拍和音调发生器NOTETABS模块52.2.3音乐谱对应分频预制数查表电路TONETABA模块62.2.4音乐符数控11分频SPE

6、AKERA模块82.2.5乐曲演奏音符数据文件music梁祝102.2.6 LPM-ROM的定制102.2.7整体举例说明122.3 VHDL程序的仿真与调试122.3.1音乐节拍和音调发生器NOTETABS模块的仿真122.3.2音乐谱对应分频预制数查表电路TONETABA的仿真132.3.3音乐符数控11分频SPEAKERA模块的仿真132.3.4完整电路仿真133 硬件设计143.1输入端153.2输出端15心得体会17致谢17参考文献18附录A 完整程序19附录B 硬件电路实物图25英文文献及翻译26 陕西理工学院毕业论文(设计)引言 FPGA(FieldProgrammable Ga

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

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

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

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

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

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

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

14、则分频系数过小,四舍五入取整后的误差较大。若基准频率过高,虽然可以减少频率的相对误差,但分频结构将变大。实际上应该综合考虑这两个方面的因素,在尽量减少误差的前提下,选取合适的基准频率。为提高输出信号的驱动能力,以使扬声器有足够的功率发音,需要再通过一个分频器将原来的分频器输出脉冲均衡为对称方波(占空比为1/2),但这时的频率是原来的1/2。下表中各音符的分频系数就是从750KHz的基准频率二分频得到的375KHz频率基准上计算得到的。由于最大的分频系数是1274,故分频器采用11位二进制计数器能满足要求,乐曲中的休止符,只要将分频系数设为0,此时扬声器就不会发出声音,如表2.14。表2.1 各

15、音符的频率及其对应的分频系数音符名 频率(Hz) 分频系数 计数初值 音符名 频率(Hz) 分频系数 计数初值休止符低音1低音2低音3低音4低音5低音6低音7中音1中音2中音3375000249.349330.396370.92386.598394.737495.376555.56588.697638.84724.5740127411351011970950757675637587505204777391210361077119712901372141014801542中音4中音5中音6中音7高音1高音2高音3高音4高音5高音6高音7796.178882.353989.4461136.3631

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

17、出节拍的速度就慢,演奏的速度自然低。 (4)乐谱发生器本文将乐谱中的音符数据存储在LPM-ROM中,如梁祝乐曲中的第一个音符为“3”,此音在逻辑中停留了4个时钟节拍,即1秒的时间,相应地,音符“3”就要在LPM-ROM中连续的四个地址上都存储。当一个4Hz的时钟到来时,相应的从LPM-ROM中输出第一个音符“3”。 (5)彩灯将乐谱发生器的输出端接上LED灯模拟彩灯,LED灯会随着音乐的变化开始闪烁,因为实验箱上的灯是低电平亮,所以LED灯灭的是输出音调,而灯的闪烁速度则是按照音乐节奏。2.2软件模块设计2.2.1顶层电路设计 (1)顶层电路模块图图2.1顶层电路模块图 (2)顶层电路VHDL

18、程序 LIBRARY IEEE;-硬件演奏电路顶层设计 USE IEEE.STD_LOGIC_1164.ALL; ENTITY Songer IS PORT(CLK12MHZ:IN 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 No

19、teTabs-原件U1例换化 PORT(clk:IN STD_LOGIC; ToneIndex:OUT STD_LOGIC_VECTOR(3 DOWNTO O); END COMPONENT; 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

20、-元件U3例换化 PORT(clk:IN STD_LOGIC; Tone:IN STD_LOGIC_VECTOR(10 DOWNTO 0); SpkS:OUT STD_LOGIC); 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(Inde

21、x=>ToneIndex,Tone=>Tone,COED=>CODE1,HIGH=>HIGH1); u3:Speakera PORT MAP(clk=>CLK12MHZ,Tone=>Tone,SpkS=>SPKOUT); END; 2.2.2音乐节拍和音调发生器NOTETABS模块 (1)音乐节拍和音调发生器NOTETABS模块生成图,如图2.2图2.2音乐节拍和音调发生器NOTETABS模块 在NOTETABS中设置了一个8位二进制计数器,作为音符数据ROM的地址发生器。这个计数器的计数频率选为4Hz,即每一计数器的停留时间为0.25秒,恰为当全音符

22、设为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 NoteTabs IS PORT(clk:IN STD_LOGIC;-音乐节拍时钟4HZ ToneIndex:OUT STD_LOGIC_VECTOR (3 DOWNTO O); E

23、ND; 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 (7 DOWNTO 0);-8位二进制计数器 BEGIN CNT8:PROCESS(clk,Counter,sel,rst) BEGIN IF(clk'EVENT AND

24、 clk='1')and(Counter=256 or rst='0') then Counter<="00000000"Counter<=Counter+1; END IF; IF(clk'EVENT AND clk='1')and(sel='0')then Counter<="10010000"Counter<=Counter+1; END IF; END PROCESS; u1:MUSIC PORT MAP(address=>Counter,q=&

25、gt;ToneIndex,clock=>clk); END2.2.3音乐谱对应分频预制数查表电路TONETABA模块 (1)音乐谱对应分频预制数查表电路TONETABA模块生成图,如图2.3图2.3音乐谱对应分频预制数查表电路TONETABA模块音符的持续时间需根据乐曲的速度及每个音符的节拍数来确定,模块TONETABA的功能首先是为SPEAKERA提供决定所发音符的分频预制数,而此数在SPEAKERA输入口停留的时间即为此音符的节拍值。模块TONETABA是乐谱简谱码对应的分频预制数查表电路,其中设置了梁祝乐曲全部音符所对应的分频预制数,共13个,每一音符的停留时间由音乐节拍和音调发生

26、器模块NOTETABS的clk的输入频率决定,在此为4Hz。这13个值的输出,由对应于TONETBAB的4位输入值Index3.0确定,而Index3.0最多有16种可选值。输向TONETABA中Index3.0的值ToneIndex3.0的输出值与持续的时间由模块NOTETABS决定。 (2)音乐谱对应分频预制数查表电路TONETABA模块VHDL程序设计 LIBRARY IEEE;-音乐谱对应分频预制数查表电路模块 USE IEEE.STD_LOGIC_1164.ALL; ENTITY ToneTaba IS PORT(Index:IN STD_LOGIC_VECTOR(3 DOWNTO

27、O);-4位预制数查表 CODE:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); HIGH:OUT STD_LOGIC;-音乐高8度指示 Tone:OUT STD_LOGIC_VECTOR(10 DOWNTO 0);-音乐符对应分频11位 END; ARCHITECTURE one OF ToneTaba IS BEGIN Search:PROCESS(Index) BEGIN CASE Index IS-译码电路,查表方式,控制音调的预制数13组频率 WHEN"0000"=>Tone<="11111111111"CODE

28、<="0000"HIGH<='0'-2047 WHEN"0001"=>Tone<="01100000101"CODE<="0001"HIGH<='0'-773 WHEN"0010"=>Tone<="01110010000"CODE<="0010"HIGH<='0'-912 WHEN"0011"=>Tone<="

29、;10000001100"CODE<="0011"HIGH<='0'-1036 WHEN"0101"=>Tone<="10010101101"CODE<="0101"HIGH<='0'-1197 WHEN"0110"=>Tone<="10100001010"CODE<="0110"HIGH<='0'-1290 WHEN"0111&

30、quot;=>Tone<="10101011100"CODE<="0111"HIGH<='0'-1372 WHEN"1000"=>Tone<="10110000010"CODE<="0001"HIGH<='1'-1410 WHEN"1001"=>Tone<="10111001000"CODE<="0010"HIGH<='1&#

31、39;-1480 WHEN"1010"=>Tone<="11000000110"CODE<="0011"HIGH<='1'-1542 WHEN"1100"=>Tone<="11001010110"CODE<="0101"HIGH<='1'-1622 WHEN"1101"=>Tone<="11010000100"CODE<="011

32、0"HIGH<='1'-1668 WHEN"1111"=>Tone<="11011000000"CODE<="0001"HIGH<='1'-1728 WHEN OTHERS=>NULL; END CASE; END PROCESS; END;2.2.4音乐符数控11分频SPEAKERA模块 (1)音乐符数控11分频SPEAKERA模块生成图,如图2.4图2.4音乐符数控11分频SPEAKERA模块 音符的频率可由SPEAKERA获得,这是一个数控分频器,由其

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

34、L程序设计 LIBRARY IEEE;-音乐符数控分频电路模块 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

35、 DivideCLK:PROCESS(clk) VARIABLE Count4:STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN PreCLK<='0'-将CLK进行16分频,PreCLK为CLK的16分频 IF Count4>11 THEN PreCLK<='1'Count4:="0000" ELSIF clk'EVENT AND clk='1'THEN Count4:=Count4+1; END IF; END PROCESS; GenSpkS:PROCESS(PreCLK,

36、Tone)-11位可预置计数器 VARIABLE Count11:STD_LOGIC_VECTOR(10 DOWNTO 0); BEGIN IF PreCLK'EVENT AND PreCLK='1'THEN IF Count11=16#7FF# THEN Count11:=Tone;FullSpkS<='1' ELSE Count11:=Count11+1;FullSpkS<='0'END IF; END IF; END PROCESS; DelaySpkS:PROCESS(FullSpkS)-将输出再2分频,展宽脉冲,使扬

37、声器有足够功率发音 VARIABLE Count2:STD_LOGIC; BEGIN IF FullSpkS'EVENT AND FullSpkS='1'THEN Count2:=NOT Count2; IF Count2='1'THEN SpkS<='1' ELSE SpkS<='0'END IF; END IF; END PROCESS; END;2.2.5乐曲演奏音符数据文件music梁祝 WIDTH=4;-乐曲演奏数据,输出位宽4 DEPTH=256;-256个4位数据点 Address_radix=d

38、ec;-地址信号用十进制数表示 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; 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; 3

39、9: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; 74: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:

40、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; 120:6; 121:8; 122:6; 123:5; 124:3; 125:5; 126:6; 127:8; 128:5; 129:5; 130:5; 131:5; 132

41、: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菜单上选择Text Editor File命令,进入文本编辑器,然后输入以上格式的数据文件,以后缀.mif保存,记住保存路径,本设计中的路径为“e:/zw/music_dat

42、a.mif”。2.2.6LPM-ROM的定制 (1)LPM-ROM定制的基本步骤3 进入MAX+PlusII,选菜单File MegaWizard Plug-In Manager,选择“ Creat a new .”,然后按“Next”键,选择LPM-ROM,最后在Browse下的栏中键入路径与输出文件名“e:/zw/music_data.vhd”。 单击“Next”键,选择ROM数据为宽度为4,地址线宽度为256,。 通过“Browse”钮,找到ROM中的加载文件路径与输出文件名:“e:/zw/music_data.vhd”。 (2)定制好的ROM文件VHDL程序如下 LIBRARY IEE

43、E; 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 GENERIC(lpm_width :NATURAL; lpm_widthad :NA

44、TURAL; 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 q<=sub_wire0(3 DOWNTO 0); lpm_rom_component:lpm_rom GENERIC MAP(LPM_WIDTH=>4; LPM_WIDTHAD=>

45、8; LPM_ADDRESS_CONTROL=>"REGISTERED" LPM_OUTDATA=>"UNREGISTERED" LPM_FILE=>"e:/zw/music_data.mif"); PORT MAP(address=>address; inclock=>inclock; q=>sub_wire0); END SYN; (3)ROM模块生成图,如图2.5图2.5 ROM模块2.2.7整体举例说明 例如:NOTETABS在上述的VHDL逻辑描述中,梁祝乐曲的第一个音符为“3”此音在逻辑

46、中停留了4个时钟节拍,即1秒的时间,相应地,所对应的“3”音符分频预制数值为1036,在SPEAKERA的输入端停留了1秒。随着NOTETABS中的计数器按4Hz的时钟速率作加法计数时,即随地址递增时,音符数据模块ROM中的音符数据将从ROM中通过ToneIndex3.0端口输向TONETABA模块,梁祝乐曲就开始连续自然地演奏起来。2.3 VHDL程序的仿真与调试 在MAX+PlusII仿真环境中,将各个模块的程序分别编译,然后分别建立波形文件,选择FLEX10K系列EPF10K10LC84-4型号为目标芯片分别进行仿真,仿真波形图如下。2.3.1 音乐节拍和音调发生器NOTETABS模块的

47、仿真 音乐节拍和音调发生器NOTETABS模块仿真波形如图2.6。图2.6音乐节拍和音调发生器NOTETABS模块的仿真波形图2.3.2 音乐谱对应分频预制数查表电路TONETABA模块的仿真 音乐谱对应分频预制数查表电路TONETABA模块仿真波形如图2.7。图2.7音乐谱对应分频预制数查表电路TONETABA模块的仿真波形2.3.3 音乐符数控11分频SPEAKERA模块的仿真 音乐符数控11分频SPEAKERA模块仿真波形如图2.8。2.8音乐符数控11分频SPEAKERA模块的仿真波形图因为时钟信号为12MHz,很密,为了能看见SpkS的输出波形,将整个仿真图缩放,故clk与Tone变

48、成色带。2.3.4 完整电路仿真 完整电路仿真波形如图2.9。图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实物图 图3.2 EPF10K10LC84-4管脚图 (1)本设计使用FLEX10K系列的EPF10K10LC84-4芯片,将编译仿真成功的程序下载到芯片中,使其实现音

49、乐演奏。其中,自行锁定管脚,7、8、9、10为CODE输出,即为简谱码显示;11管脚为HIGH输出,表示高音;16管脚为SPKOUT输出,连接蜂鸣器;1管脚为时钟信号8Hz,提供节奏频率;43管脚为时钟信号12MHz,提供音调频率。 (2)LED灯分别连在7、8、9、10、11管脚上,用来表示输出音调的简谱码以及标记高音,可以实现随音调变化闪烁。 (3)蜂鸣器连接到16管脚,实现乐曲输出。 (4)给整体电路加上+5V电源,使整个电路工作,实现音乐输出的同时,LED灯随之闪烁。3.1输入端本设计输入端给芯片EPF10K10LC84-4接入时钟信号,分别为12MHz和8Hz,用来提供音调发声频率频率和乐曲节奏,其中,12MHz时钟信号由数字信号发生器提供,8Hz时钟信号由实验箱提供。本设计使用GEXIN.FPGA/P844实验箱,箱体内部配有48MHz晶振作为系统的时钟源,如图3.3所示,为得到一

温馨提示

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

最新文档

评论

0/150

提交评论