《乐曲演奏电路ppt课件.ppt》由会员分享,可在线阅读,更多相关《乐曲演奏电路ppt课件.ppt(10页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、乐曲演奏电路ppt课件 Still waters run deep.流静水深流静水深,人静心深人静心深 Where there is life,there is hope。有生命必有希望。有生命必有希望乐曲演奏电路结构乐曲演奏电路结构NoteTabsNoteTabsClk ToneIndexClk ToneIndexToneTabaToneTaba HIGH HIGHIndex CODEIndex CODE Tone ToneSpeakeraSpeakeraTone SpkSTone SpkSClk Clk 12MHz12MHz4Hz4HzU1U1U2U2U3U3LIBRARY IEEE;LI
2、BRARY IEEE;USE IEEE.STD_LODIC_1164.ALL;USE IEEE.STD_LODIC_1164.ALL;ENTITY Songer ISENTITY Songer IS PORT(clk12MHz PORT(clk12MHz,clk4Hz:IN STD_LOGIC;clk4Hz:IN STD_LOGIC;CODE1:OUT STD_LOGIC_VECTOR(3 DOWNTO 0)CODE1:OUT STD_LOGIC_VECTOR(3 DOWNTO 0)HIGH1 HIGH1,SPKOUT:OUT STD_LOGIC);SPKOUT:OUT STD_LOGIC);
3、END;END;ARCHITECTURE one OF Songer ISARCHITECTURE one OF Songer IS COMPONENT COMPONENT NoteTabsNoteTabs PORT(clk:IN STD_LOGIC;PORT(clk:IN STD_LOGIC;ToneIndex:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);ToneIndex:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);END COMPONENT;END COMPONENT;COMPONENT COMPONENT ToneTabaToneTaba P
4、ORT(Index:IN STD_LOGIC _VECTOR(3 DOWNTO 0);PORT(Index:IN STD_LOGIC _VECTOR(3 DOWNTO 0);CODE CODE:OUT STD_LOGIC_VECTOR(3 DOWNTO 0)OUT STD_LOGIC_VECTOR(3 DOWNTO 0);HIGH HIGH :OUT STD_LOGIC OUT STD_LOGIC;Tone :OUT STD_LOGIC_VECTOR(10 DOWNTO 0);Tone :OUT STD_LOGIC_VECTOR(10 DOWNTO 0);END COMPONENT;END C
5、OMPONENT;COMPONENT COMPONENT SpeakeraSpeakera PORT(clk:IN STD_LOGIC;PORT(clk:IN STD_LOGIC;Tone:IN STD_LOGIC_VECTOR(10 DOWNTO 0)Tone:IN STD_LOGIC_VECTOR(10 DOWNTO 0);Spks Spks:OUT STD_LOGIC);OUT STD_LOGIC);END COMPONENT;END COMPONENT;SIGNAL SIGNAL ToneTone:STD_LOGIC_VECTOR(10 DOWNTO 0);:STD_LOGIC_VEC
6、TOR(10 DOWNTO 0);SIGNAL SIGNAL ToneIndexToneIndex:STD_LOGIC_VECTOR(3 DOWNTO 0);:STD_LOGIC_VECTOR(3 DOWNTO 0);顶层结构描述顶层结构描述BEGINBEGIN u1 u1:NoteTabsNoteTabs PORT MAP(clk=clk4Hz PORT MAP(clk=clk4Hz,ToneIndex=ToneIndex=ToneIndexToneIndex););u2 u2:ToneTabaToneTaba PORT MAP(Index=PORT MAP(Index=ToneIndexT
7、oneIndex,Tone=Tone=ToneTone,CODE=CODE1CODE=CODE1,HIGH=HIGH1);HIGH=HIGH1);u3u3:SpeakeraSpeakera PORT MAP(clk=clk12MHz PORT MAP(clk=clk12MHz,Tone=Tone=Tone Tone,Spks=SPKOUT);Spks=SPKOUT);END;END;NoteTabsCNT8CNT8CLK CounterCLK CounterMUSICMUSICaddress qaddress qinclock inclock ToneIndexToneIndexclkclkL
8、PM_ROMLPM_ROM 计数器,计数器,计数器,计数器,0 0 138138计数。产生计数。产生计数。产生计数。产生ROMROM地址。地址。地址。地址。0.25 0.25秒为四四拍的秒为四四拍的秒为四四拍的秒为四四拍的4 4分音符分音符分音符分音符持续持续持续持续时间,确定时间,确定时间,确定时间,确定为乐曲的基本节奏单元。为乐曲的基本节奏单元。为乐曲的基本节奏单元。为乐曲的基本节奏单元。4Hz4Hz 用用用用LPM_ROMLPM_ROM定制定制定制定制MUSICMUSIC。乐乐谱谱LIBRARY IEEE;LIBRARY IEEE;USE IEEE.STD_LODIC_1164.ALL;
9、USE IEEE.STD_LODIC_1164.ALL;USE IEEE.STD_LODIC_UNSIGNED.ALL;USE IEEE.STD_LODIC_UNSIGNED.ALL;ENTITY NoteTabs ISENTITY NoteTabs IS PORT(clk:IN STD_LOGIC;PORT(clk:IN STD_LOGIC;ToneIndex:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);ToneIndex:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);END;END;ARCHITECTURE one OF NoteTabs ISAR
10、CHITECTURE one OF NoteTabs IS COMPONENT COMPONENT MUSICMUSIC -音符数据音符数据音符数据音符数据ROMROM PORT(address:IN STD_LOGIC_VECTOE(7 DOWNTO 0);PORT(address:IN STD_LOGIC_VECTOE(7 DOWNTO 0);inclock:IN STD_LOGIC;inclock:IN STD_LOGIC;q:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);q:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);END COMPONENT
11、;END COMPONENT;SIGNAL Counter:STD_LOGIC_VECTOR(7 DOWNTO 0);SIGNAL Counter:STD_LOGIC_VECTOR(7 DOWNTO 0);BEGINBEGIN CNT8CNT8:PROCESS(clk):PROCESS(clk)BEGIN BEGIN IF Counter=138 THEN Counter=00000000;IF Counter=138 THEN Counter=00000000;ELSIF(clkENVENT AND clk=1)THEN Counter=Counter+1;END IF;ELSIF(clkE
12、NVENT AND clk=1)THEN CounterCounter,q=ToneIndex,inclock=clk);PORT MAP(address=Counter,q=ToneIndex,inclock=clk);END;END;-MUSIC.MIFMUSIC.MIF文件文件文件文件WIDTH=4;-WIDTH=4;-乐曲演奏数据乐曲演奏数据乐曲演奏数据乐曲演奏数据DEPTH=256;DEPTH=256;ADDRESS_RADIX=DEC;ADDRESS_RADIX=DEC;DATA_RADIX=DEC;DATA_RADIX=DEC;CONTENT BEGIN -CONTENT BEG
13、IN -注意实用文件中要展开一下数据,每一组占一行注意实用文件中要展开一下数据,每一组占一行注意实用文件中要展开一下数据,每一组占一行注意实用文件中要展开一下数据,每一组占一行00:3;01:3;02:3;03:3;04:5;05:5;06:5;07:6;08:8;09:8;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;10:8;11:9;12:6;13:8;14:5;15:5;16:12;17:12;18:12;19:15;20:1
14、3;21:12;22:10;23:12;24:9;25:9;26:9;27:9;28:9;29:9;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;39:6;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;40:5;41:5;42:5;43:6;44:8;45:8;46:9;47:9;48:3
15、;49:3;50:8;51:8;52:6;53:5;54:6;55:8;56:5;57:5;58:5;59:5;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;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;70:9;71:9;72:6;73:8;74:5;75:5;76:5;7
16、7: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;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;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;100:12;101:12;102:12;
17、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;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;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:
18、5;133:5;134:5;135:5;136:0;137:0;138:0;130:5;131:5;132:5;133:5;134:5;135:5;136:0;137:0;138:0;END;END;NoteTabs模块设计模块设计音音音音符符符符编编编编码码码码1 12 23 34 45 56 67 7低低低低8 89 910101111121213131414中中中中1515高高高高音音音音符符符符1 12 23 34 45 56 67 7ToneTaba HIGH HIGHIndex CODEIndex CODE Tone Tone 乐谱译码输出乐谱译码输出乐谱译码输出乐谱译码输出音调显
19、示音调显示音调显示音调显示高低音指示高低音指示高低音指示高低音指示乐谱输入乐谱输入乐谱输入乐谱输入LIBRARY IEEE;LIBRARY IEEE;USE IEEE.STD_LODIC_1164.ALL;USE IEEE.STD_LODIC_1164.ALL;ENTITY ToneTaba ISENTITY ToneTaba IS PORT(Index:IN STD_LOGIC_VECTOR(3 DOWNTO 0);PORT(Index:IN STD_LOGIC_VECTOR(3 DOWNTO 0);CODE:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);CODE:OUT
20、 STD_LOGIC_VECTOR(3 DOWNTO 0);HIGH:OUT STD_LOGIC;HIGH:OUT STD_LOGIC;Tone:OUT STD_LOGIC_VECTOR(10 DOWNTO 0);Tone:OUT STD_LOGIC_VECTOR(10 DOWNTO 0);END;END;ARCHITECTURE one OF ToneTaba ISARCHITECTURE one OF ToneTaba ISBEGINBEGIN Search:PROCESS(Index)Search:PROCESS(Index)BEGIN BEGIN CASE Index IS -CASE
21、 Index IS -译码电路,查表方式,控制音调的预置数译码电路,查表方式,控制音调的预置数译码电路,查表方式,控制音调的预置数译码电路,查表方式,控制音调的预置数 WHEN0000=Tone=11111111111;CODE=0000;HIGHTone=11111111111;CODE=0000;HIGHTone=01100000101;CODE=0001;HIGHTone=01100000101;CODE=0001;HIGHTone=01110010000;CODE=0010;HIGHTone=01110010000;CODE=0010;HIGHTone=10000001100;CODE
22、=0011;HIGHTone=10000001100;CODE=0011;HIGHTone=10010101101;CODE=0101;HIGHTone=10010101101;CODE=0101;HIGHTone=10100001010;CODE=0110;HIGHTone=10100001010;CODE=0110;HIGHTone=10101011100;CODE=0111;HIGHTone=10101011100;CODE=0111;HIGHTone=10110000010;CODE=0001;HIGHTone=10110000010;CODE=0001;HIGHTone=101110
23、01000;CODE=0010;HIGHTone=10111001000;CODE=0010;HIGHTone=11000000110;CODE=0011;HIGHTone=11000000110;CODE=0011;HIGHTone=11001010110;CODE=0101;HIGHTone=11001010110;CODE=0101;HIGHTone=11010000100;CODE=0110;HIGHTone=11010000100;CODE=0110;HIGHTone=11011000000;CODE=0001;HIGHTone=11011000000;CODE=0001;HIGHN
24、ULL;WHEN OTHERS=NULL;END CASE;END CASE;END PROCESS;END PROCESS;END;END;ToneTaba模块设计模块设计低音低音低音低音“1”“1”:785Hz785Hz,对,对,对,对1MHz1MHz时钟需时钟需时钟需时钟需12741274分频。分频。分频。分频。中音中音中音中音“1”“1”:1570Hz1570Hz,对,对,对,对1MHz1MHz时钟需时钟需时钟需时钟需637637分频。分频。分频。分频。高音高音高音高音“1”“1”:3135Hz3135Hz,对,对,对,对1MHz1MHz时钟需时钟需时钟需时钟需319319分频。分频。
25、分频。分频。SpeakeraDivideCLKDivideCLKCLK PreCLKCLK PreCLKGenSpkSGenSpkSPreCLK FullSpkSPreCLK FullSpkSTone Tone DelaySpkSDelaySpkSSpkS FullSpkSSpkS FullSpkS12MHz12MHzToneToneSpkSSpkS1111位可预置计数位可预置计数位可预置计数位可预置计数器,器,器,器,ToneTone为预置为预置为预置为预置数据输入端口。数据输入端口。数据输入端口。数据输入端口。1212分频器。分频器。分频器。分频器。1MHz1MHz。Speakera模块设
26、计模块设计LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY Speakera IS PORT(clk:IN STD_LOGIC;Tone:IN STD_LOGIC_VECTOR(10 DOWNTO 0);SpkS:OUT STD_LOGIC);END;ARCHITECTURE one OF Speakera IS SIGNAL PreCLK,FullSpkS:STD_LOGIC;BEGIN DivideCLK:PROCESS(clk)VARIABLE Count4:STD_LOGIC_
27、VECTOR(3 DOWNTO 0);BEGIN PreCLK11 THEN PreCLK=1;Count4:=0000;ELSIF clkEVENT AND clk=1 THEN Count4:=Count4+1;END IF;END PROCESS;GenSpkS:PROCESS(PreCLK,Tone)-11位可预置计数器位可预置计数器 VARIABLE Count11:STD_LOGIC_VECTOR(10 DOWNTO 0);BEGIN IF PreCLKENVENT AND PreCLK=1 THEN IF Count11=16#7FF#THEN Count11:=Tone;Ful
28、lSpkS=1;ELSE Count11:=Count11+1;FullSpkS=0;END IF;END IF;END PROCESS;DelaySpkS:PROCESS(FullSpkS)VARIABLE Count2:STD_LOGIC;BEGIN IF FullSpkSEVENT AND FullSpkS=1 THEN Count2:=NOT Count2;IF Count2:=1 THEN SpkS=1;ELSE SpkS=0;END IF;END IF;END PROCESS;END;一个音调要放出多一个音调要放出多一个音调要放出多一个音调要放出多少节拍,这取决于少节拍,这取决于少节拍,这取决于少节拍,这取决于ToneTone端口的音调预端口的音调预端口的音调预端口的音调预置数持续的时间。置数持续的时间。置数持续的时间。置数持续的时间。