EDA樂曲播放電路課程設計報告_第1頁
EDA樂曲播放電路課程設計報告_第2頁
EDA樂曲播放電路課程設計報告_第3頁
EDA樂曲播放電路課程設計報告_第4頁
EDA樂曲播放電路課程設計報告_第5頁
已閱讀5頁,還剩11頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、.目錄一.課程設計概述11.設計的題目2 2.設計要求2 3.設計構思2二.總體框圖4三.具體各功能模塊(模塊圖像,程序,波形圖像,波形分析)21.計數(shù)器模塊2 2.選擇器模塊4 3.數(shù)據(jù)翻譯模塊6 4.數(shù)控分頻模塊7 5.樂曲ROM的三個模塊10 6.頂層文件的設計12 四.總體電路圖(RLT電路圖)14 五.課程設計總結15一.課程設計概述1.設計的題目樂曲播放電路2.設計要求:學習利用數(shù)控分頻器設計硬件樂曲演奏電路,在實驗四的基礎上,改建電路的設計,增加功能自動選擇曲目,可選的歌曲不少于3首。3.設計構思(1)音樂硬件演奏電路基本原理 硬件電路的發(fā)聲原理,聲音的頻譜范圍約在幾十到幾千赫茲

2、,若能利用程序來控制FPGA芯片某個引腳輸出一定頻率的矩形波,接上揚聲器就能發(fā)出相應頻率的聲音。樂曲中的每一音符對應著一個確定的頻率,要想FPGA發(fā)出不同音符的音調,實際上只要控制它輸出相應音符的頻率即可。樂曲都是由一連串的音符組成,因此按照樂曲的樂譜依次輸出這些音符所對應的頻,就可以在揚聲器上連續(xù)地發(fā)出各個音符的音調。而要準確地演奏出一首樂曲,僅僅讓揚聲器能夠發(fā)生是不夠的,還必須準確地控制樂曲的節(jié)奏,即樂曲中每個音符的發(fā)生頻率及其持續(xù)時間是樂曲能夠連續(xù)演奏的兩個關鍵因素。(2) 音符頻率的獲得多個不同頻率的信號可通過對某個基準頻率進行分頻器獲得。由于各個音符的頻率多為非整數(shù),而分頻系數(shù)又不能

3、為小數(shù),故必須將計算機得到的分頻系數(shù)四舍五入取整。若基準頻率過低,則分頻系數(shù)過小,四舍五入取整后的誤差較大。若基準頻率過高,雖然可以減少頻率的相對誤差,但分頻結構將變大。實際上應該綜合考慮這兩個方面的因素,在盡量減少誤差的前提下,選取合適的基準頻率。本設計中選取1MHz的基準頻率。數(shù)控分頻器采用12位二進制計數(shù)器,樂曲中的休止符,只要將分頻系數(shù)設為0,即初始值=4095,此時揚聲器不會發(fā)聲。根據(jù)分頻系數(shù),可計算數(shù)控分頻器得到的初始值。(語言已經無法描述其中的原理了,程序可以說明此問題,關于初始值的解釋,請看下文給出的程序)初始值的計算公式如下:由于所設計的數(shù)控分頻計采用12MHZ作為時鐘源,并

4、通過一次12分頻給出頻率為1MHZ的脈沖溢出信號,再對該1MHZ的溢出信號進行12位2進制碼的帶預置數(shù)進行計數(shù),并給出一個頻率隨預置數(shù)變化的脈沖信號。由于該脈沖信號不具有驅動蜂鳴器的能力,故對此脈沖信號進行2分頻以推動蜂鳴器發(fā)聲(3) 樂曲節(jié)奏的控制 一般樂曲最小的節(jié)拍為1/4拍,若將1拍的時間定為1秒,則只需要輸出4Hz的1/4拍的時長(0.25秒),對于其它占用時間較長的節(jié)拍(必為1/4拍的整數(shù)倍)則只需要將該音符連續(xù)輸出相應的次數(shù)即可。計數(shù)時鐘信號作為輸出音符快慢的控制信號,時鐘快時輸出節(jié)拍速度就快,演奏的速度也就快,時鐘慢時輸出節(jié)拍的速度就慢,演奏的速度自然降低,由于最后的蜂鳴器前需加

5、一個二分頻的程序,因此計數(shù)器的時鐘信號應為4Hz的2倍,即8Hz。(4) 樂譜的發(fā)生本設計將樂譜中的音符數(shù)據(jù)存儲在LPM-ROM中,若某音在邏輯中停留了4個時鐘節(jié)拍,即1秒的時間,相應地,該音符就要在LPM-ROM中連續(xù)的四個地址上都存儲。當一個4Hz的時鐘來時,相應地就從LPM-ROM中輸出一個音符數(shù)據(jù)。(5) 選擇模塊 選擇模塊將用一個4位數(shù)的控制信號控制樂譜模塊數(shù)據(jù)的選擇性。梁祝二.總體框圖時鐘計數(shù)器數(shù)控分頻器選擇器生日快樂隱形的翅膀時鐘三.具體各功能模塊1.計數(shù)器模塊在notetabs中設置了一個8位二進制計數(shù)器(計數(shù)最大值為138),作為音符數(shù)據(jù)ROM的地址發(fā)生器。這個計數(shù)器的計數(shù)頻

6、率為4HZ,即每一計數(shù)值的停留時間為0.25秒,恰為當全音符設為1秒時,四四拍的4分音符持續(xù)的時間。例如,notetabs在以下的VHDL邏輯描述中,梁祝樂曲的第一個音符為“3”,此音在邏輯中停留了4個時鐘節(jié)拍,即1秒的時間,相應的,所對應的“3”音符分頻預制值為1036,在speakera中的輸入端停留1秒。隨著notetabs中計數(shù)器按4HZ的時鐘頻率作加法計數(shù)時,即隨地址值遞增時,音符數(shù)據(jù)ROM中的音符從ROM中通過tonelndex端口輸向tonetaba模塊,梁祝樂曲開始連續(xù)自然地演奏起來。(1)模塊圖像:(2)模塊程序library ieee;use ieee.std_logic_

7、1164.all;use ieee.std_logic_unsigned.all;entity notetabs is port (clk:in std_logic; counter:inout std_logic_vector(7 downto 0);end;architecture one of notetabs is begin cnt8:process(clk,counter) begin if counter =138 then counter <="00000000" elsif (clk'event and clk='1') th

8、en counter <=counter+1; end if; end process; end;(3)仿真波形(4)波形分析由波形可看出來,CLK為輸入時鐘信號,八位輸出二進制信號在時鐘上升沿加一,經分析,該模塊的功能正確。2.選擇模塊選擇器完成歌曲的選擇功能,當a輸入為0001時,將Q1信號輸出,對應歌曲為梁祝;當a為0010時,將Q2的信號輸出,對應的歌曲為隱形的翅膀;當a為0011時,將Q3的信號輸出,對應的歌曲為生日快樂。(1)模塊圖像(2)程序;LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSI

9、GNED.ALL; ENTITY choice IS PORT(a: IN STD_LOGIC_vector(3 downto 0); b:out STD_LOGIC_vector(3 downto 0); INDEX :OUT STD_LOGIC_vector(4 downto 0); Q1:IN STD_LOGIC_vector(4 downto 0); Q2:IN STD_LOGIC_vector(4 downto 0);Q3:IN STD_LOGIC_vector(4 downto 0); END choice; ARCHITECTURE a OF choice IS BEGIN PR

10、OCESS (a,Q1,Q2,Q3) BEGIN CASE a IS WHEN "0001" => b<="0001" INDEX<=Q1; WHEN "0011" => b<="0010" INDEX<=Q2; WHEN "0010" => b<="0011" INDEX<=Q3; WHEN OTHERS => null; END CASE; END PROCESS; END a;(3)波形圖(4)波形分析由波形分

11、析可知,當a輸入為0001時,輸出信號b與Q1信號相同,即播放第一首樂曲,此時b的信號輸出為0001,因此該模塊的功能符合要求。3.數(shù)據(jù)翻譯模塊音符的持續(xù)時間需根據(jù)樂曲的速度及每個音符的節(jié)拍數(shù)來決定。Tonetaba模塊的功能首先是為speakera提供決定所發(fā)音符的分頻預置數(shù),而此數(shù)在speakera輸入口停留的時間即為此音符的節(jié)拍值。模塊tonetaba是樂曲簡譜碼對應的分頻預置數(shù)查表電路,其中設置了三首樂曲全部音符所對應的分頻預置數(shù),每一音符的停留時間有音樂節(jié)拍和音調發(fā)生器模塊notetabs的CLK的輸入決定,在此為4HZ。(1)模塊圖像(2)程序library ieee;use ie

12、ee.std_logic_1164.all;entity tonetaba is port (index:in std_logic_vector(4 downto 0); code: out std_logic_vector (4 downto 0); high: out std_logic; tone:out std_logic_vector(10 downto 0); end; architecture one of tonetaba isbegin search:process(index) begin case index is When "00001"=>t

13、one<="01100000101"code<="00001"high<='0' When "00010"=>tone<="01110010000"code<="00010"high<='0' When "00011"=>tone<="10000001100"code<="00011"high<='0' When "

14、;00100"=>tone<="10000110101"code<="00100"high<='0' When "00101"=>tone<="10010101101"code<="00101"high<='0' When "00110"=>tone<="10100001010"code<="00110"high<='

15、;0' When "00111"=>tone<="10101011100"code<="00111"high<='0' When "01000"=>tone<="10110000010"code<="01000"high<='1' When "01001"=>tone<="10111001000"code<="01001&

16、quot;high<='1' When "01010"=>tone<="11000000110"code<="01010"high<='1' When "01011"=>tone<="11000101000"code<="01011"high<='1' When "01100"=>tone<="11001010110"cod

17、e<="01100"high<='1' When "01101"=>tone<="11010000100"code<="01101"high<='1' When "01110"=>tone<="11010110101"code<="01110"high<='1' When "01111"=>tone<="11

18、011000000"code<="10001"high<='1' When "10000"=>tone<="11011101010"code<="10010"high<='1' When "10001"=>tone<="11100000111"code<="10011"high<='1' When "10010"=>

19、;tone<="11100010110"code<="10100"high<='1' When "10011"=>tone<="11100101111"code<="10101"high<='1' When "10100"=>tone<="11101000110"code<="10110"high<='1' When &qu

20、ot;10101"=>tone<="11101011010"code<="10111"high<='1'when others =>null;end case;end process;end;(3)波形圖(4)波形分析從波形圖可看出,當輸入信號為00010,輸出為中音2,查預置初值,發(fā)現(xiàn)完全正確,因此該模塊功能正確。4.數(shù)控分頻器模塊音符的頻率由speakera模塊獲得,這是一個數(shù)控分頻器。由其CLK端輸入一具有較高頻率(這里是12HZ)的信號,通過speakera分頻后由spkout輸出,由于直接

21、從數(shù)控分頻器中出來的輸出信號是脈寬極窄的脈沖式信號,為了有利于驅動揚聲器,需另加一個D觸發(fā)器以均衡其占空比,但這時的頻率將是原來的一半。Speakera對CLK輸入信號的分頻比由11位預置數(shù)tone決定。Spkout的輸出頻率將決定每一音符的音調,這樣,分頻計數(shù)器的預制值tone與spkout的輸出頻率,就有了對應關系。例如在tonetaba模塊中若取tone=1036,將發(fā)音符為“3”音的信號頻率。(1)模塊圖像(2)程序:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity speak

22、era 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_vector (3 downto 0); begin preclk <= '0' if count4>11 then

23、 preclk <= '1' count4 := "0000" elsif clk'event and clk = '1' then count4 :=count4+1; end if; end process; genspks : process(preclk, tone) variable count11 : std_logic_vector(10 downto 0);begin if preclk'event and preclk = '1' then if count11 =16#7ff# the

24、n count11 := tone ; fullspks <= '1' else count11 := count11+1; fullspks <= '0' end if; end if; end process; delayspks : process(fullspks) variable count2 : std_logic;begin if fullspks'event and fullspks = '1' then count2 := not count2; if count2 ='1' then sp

25、ks <='1' else spks <='0' end if; end if; end process;end;(3)波形圖(4)波形分析由波形圖分析,當tone給出不同的分頻預置數(shù),觀察到分頻效果是正確的,因此該模塊的功能符合設計要求。 5.樂曲ROM的三個模塊:(1)梁祝 width = 5;depth = 256;address_radix = dec;data_radix = dec;content begin;00: 3;01: 3;02: 3;03: 3;04: 5;05: 5;06: 5;07: 6;08: 8;09: 8;10: 8

26、;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;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;6

27、6: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: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:

28、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;end;(2)生日快樂WIDTH=5; DEPTH=256; ADDRESS_RADIX=DEC; DATA_RADIX=DEC; CONTENT BEGIN 00:13; 01:13; 02:13; 03:13; 04:13; 05:13; 06:13; 07:12; 08:12; 09:10; 10:10; 11:10; 12:10; 13:12; 14:12; 15:12

29、; 16:12; 17:15; 18:15; 19:15; 20:15; 21:13; 22:13; 23:12; 24:12; 25:13; 26:13; 27:13; 28:13; 29:13; 30:13; 31:13; 32:13; 33:10; 34:10; 35:10; 36:10; 37:12; 38:12; 39:13; 40:13; 41:12; 42:12; 43:12; 44:12; 45:10; 46:10; 47:10; 48:10; 49: 8; 50: 8; 51: 6; 52: 6; 53:12; 54:12; 55:10; 56:10; 57: 9; 58:

30、9; 59: 9; 60: 9; 61: 9; 62: 9; 63: 9; 64: 9; 65: 9; 66: 9; 67: 9; 68: 9; 69: 9; 70: 9; 71:10; 72:10; 73:12; 74:12; 75:12; 76:12; 77:12; 78:12; 79:13; 80:13; 81:10; 82:10; 83:10; 84:10; 85: 9; 86: 9; 87: 9; 88: 9; 89: 8; 90: 8; 91: 8; 92: 8; 93: 8; 94: 8; 95: 8; 96: 8; 97:12; 98:12; 99:12; 100:12; 10

31、1:12; 102:12; 103:10; 104:10; 105: 9; 106: 9; 107: 8; 108: 8; 109: 6; 110: 6; 111: 8; 112: 8; 113: 5; 114: 5; 115: 5; 116: 5; 117: 5; 118: 5; 119: 5; 120: 5; 121: 5; 122: 5; 123: 5; 124: 5; 125: 0; 126: 0; 127: 0;128: 0;129: 0;130: 0;131: 0;131: 0;132: 0;133: 0;134: 0;135: 0;136: 0;137: 0;138: 0; EN

32、D;(3)隱形的翅膀WIDTH=5; DEPTH=256; ADDRESS_RADIX=DEC; DATA_RADIX=DEC; CONTENT BEGIN 00: 10; 01: 10; 02: 12; 03:12; 04:15; 05:15; 06:15; 07:15; 08:15; 09:15; 10:15; 11:15; 12:15; 13:15; 14:15; 15:15; 16:13; 17:13; 18:12; 19:12; 20:13; 21:13; 22:15; 23:15; 24:10; 25:10; 26: 9; 27: 9; 28: 8; 29: 8; 30: 8; 3

33、1: 8; 32: 8; 33: 8; 34: 8; 35:8; 36: 8; 37: 8; 38:15; 39:15; 40:15; 41:15; 42:13; 43:13; 44:12; 45:12; 46:10; 47:10; 48:9; 49:9; 50: 8; 51: 9; 52: 9; 53: 9; 54: 9; 55: 9; 56: 9; 57: 9; 58: 9; 59: 9; 60: 10; 61:10; 62:12; 63:12; 64:15; 65:15; 66:15; 67:15; 68:15; 69:15; 70:15; 71:15; 72:15; 73:15; 74

34、:15; 75:15; 76:13; 77:13; 78:12; 79:12; 80:13; 81:13; 82:15; 83:15; 84:10; 85:10; 86:9; 87:9; 88: 8; 89: 8; 90: 8; 91: 8; 92: 8; 93: 8; 94: 8; 95: 8; 96: 8; 97: 8; 98:15; 99:15; 100:15; 101:15; 102:13; 103:13; 104:12; 105:12; 106:10; 107:10; 108: 9; 109: 9; 110: 8; 111: 8; 112: 8; 113: 8; 114: 8; 11

35、5: 8; 116: 8; 117: 8; 118: 8; 119: 8; 120: 10; 121:10; 122:12; 123:12; 124:15; 125:15; 126:15; 127:15; 128:15; 129:15; 130:15; 131:15; 132:14; 133:14; 134:14; 135:14; 136:13; 137:13; 138:12; end; 6. 頂層文件的設計: library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity yinyuehe isp

36、ort (clk12MHZ:in std_logic; clk8HZ:in std_logic; code1:out std_logic_vector (4 downto 0); high1:out std_logic; a1:in std_logic_vector(3 downto 0); b1:OUT std_logic_vector(3 downto 0); spkout:out std_logic);end;architecture one of yinyuehe is component notetabs is port (clk:in std_logic; counter:inou

37、t std_logic_vector(7 downto 0); end component; component yinxingdechiban ISPORT(address: IN STD_LOGIC_VECTOR (7 DOWNTO 0);clock: IN STD_LOGIC ;q: OUT STD_LOGIC_VECTOR (4 DOWNTO 0) ); END component; component shengrikuaile ISPORT(address: IN STD_LOGIC_VECTOR (7 DOWNTO 0);clock: IN STD_LOGIC ;q: OUT S

38、TD_LOGIC_VECTOR (4 DOWNTO 0); END component ; component lianzu ISPORT(address: IN STD_LOGIC_VECTOR (7 DOWNTO 0);clock: IN STD_LOGIC ;q: OUT STD_LOGIC_VECTOR (4 DOWNTO 0); END component; component choice IS PORT(a: IN STD_LOGIC_vector(3 downto 0); b:out STD_LOGIC_vector(3 downto 0); INDEX :OUT STD_LOGIC_vector(4 downto 0); Q1:IN STD_LOGIC_vector(4 downto 0); Q2:IN STD_LOGIC_vector(4 downto 0); Q3:IN STD_LOGIC_vector(4 downto 0); END component; component tonetaba is port (index:in std_logic_vector(4 downto 0); code: o

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論