樂曲硬件演奏電路設(shè)計verilog_第1頁
樂曲硬件演奏電路設(shè)計verilog_第2頁
樂曲硬件演奏電路設(shè)計verilog_第3頁
樂曲硬件演奏電路設(shè)計verilog_第4頁
樂曲硬件演奏電路設(shè)計verilog_第5頁
已閱讀5頁,還剩8頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、EDA技術(shù)及創(chuàng)新實踐(設(shè)計報告)題 目: 樂曲硬件演奏電路設(shè)計 姓 名: 漩渦鳴人 學(xué) 院: 數(shù)理與信息工程學(xué)院 專 業(yè): 電子科學(xué)與技術(shù) 班 級: 112 學(xué) 號: 1886*20 指導(dǎo)教師: 湯大智 2014年6 月1、 設(shè)計目的及要求實驗?zāi)康模?、 理解音樂演奏的原理及分頻器的原理與使用。2、 了解怎樣控制音調(diào)的高低變化和音長,從而完成樂曲的自動循環(huán)演奏。3、 培養(yǎng)自主學(xué)習(xí)、正確分析和解決問題的能力 。要求:利用分頻器設(shè)計硬件樂曲演奏電路;能通過數(shù)碼管顯示動態(tài)效果;通過一個開關(guān)實現(xiàn)兩首樂曲的切換;在音樂播放的同時,會有l(wèi)ed流水燈的閃爍。二、設(shè)計原理樂曲演奏的原理是這樣的:組成樂曲的每個

2、音符的頻率值(音調(diào))及其持續(xù)的時間(音長)是樂曲能連續(xù)演奏所需的兩個基本數(shù)據(jù),因此只要控制輸出到揚聲器的激勵信號頻率的高低和持續(xù)的時間,就可以使揚聲器發(fā)出連續(xù)的樂曲聲。圖1、頂層模塊圖其中,樂譜產(chǎn)生電路用來控制音樂的音調(diào)和音長。控制音調(diào)通過設(shè)置計數(shù)器的預(yù)置數(shù)來實現(xiàn),預(yù)置不同的數(shù)值可以使計數(shù)器產(chǎn)生不同頻率的信號,從而產(chǎn)生不同的音調(diào)??刂埔糸L是通過控制計數(shù)器預(yù)置數(shù)的停留時間來實現(xiàn)的,預(yù)置數(shù)停留的時間越長,則該音符演奏的時間越長。每個音符的演奏時間都是0.25s的整數(shù)倍,對于節(jié)拍較長的音符,如2分音符,在記譜時將該音名連續(xù)記錄兩次即可。1、音調(diào)的控制頻率的高低決定了音調(diào)的高低。音樂的十二平均率規(guī)定:

3、每兩個8度音(如簡譜中的中音1與高音1)之間的頻率相差一倍。在兩個8度音之間,又可分為12個半音,每兩個半音的頻率比為122。 另外,音名A(簡譜中的低音6)的頻率為440Hz,音名B到C之間、E到F之間為半音,其余為全音4。由此可以計算出簡譜中從低音1至高音1之間每個音名對應(yīng)的頻率,如表2所示:表2簡譜中的音名與頻率的關(guān)系音名頻率/Hz音名頻率/Hz音名頻率/Hz低音1261.6中音1523.3高音11046.5低音2293.7中音2587.3高音21174.7低音3329.6中音3659.3高音31318.5低音4349.2中音4698.5高音41396.9低音5392中音578

4、4高音51568低音6440中音6880高音61760低音7493.9中音7987.8高音71975.5所有不同頻率的信號都是從同一個基準(zhǔn)頻率分頻得到的。由于音階頻率多為非整數(shù),而分頻系數(shù)又不能為小數(shù),故必須將計算得到的分頻數(shù)四舍五入取整。若基準(zhǔn)頻率過低,則由于分頻比太小,四舍五入取整后的誤差較大;若基準(zhǔn)頻率過高,雖然誤差變小,但分頻數(shù)將變大。實際的設(shè)計綜合考慮這兩方面的因素,在盡量減小頻率誤差的前提下取合適的基準(zhǔn)頻率。本例中選取6MHz為基準(zhǔn)頻率。若無6MHz的基準(zhǔn)頻率,則可以先分頻得到6MHz,或換一個新的基準(zhǔn)頻率。實際上,只要各個音名間的相對頻率關(guān)系不變,演奏出的樂曲聽起來都不會&quo

5、t;走調(diào)"。本例需要演奏的是梁祝樂曲,該樂曲各音階頻率及相應(yīng)的分頻比如表2所示。為了減小輸出的偶次諧波分量,最后輸出到揚聲器的波形應(yīng)為對稱方波,因此在到達(dá)揚聲器之前,有一個二分頻的分頻器。表2中的分頻比就是從6MHz頻率二分頻得到的3MHz頻率基礎(chǔ)上計算得出的。由于最大的分頻系數(shù)為9102,故采用14位二進(jìn)制計數(shù)器分頻可滿足需要。在表2中,除給出了分頻比以外,還給出了對應(yīng)于各個音階頻率時計數(shù)器不同的預(yù)置數(shù)。對于不同的分頻系數(shù),只要加載不同的預(yù)置數(shù)即可。采用加載預(yù)置數(shù)實現(xiàn)分頻的方法比采用反饋復(fù)零法節(jié)省資源,實現(xiàn)起來也容易一些,如表3所示:表3各音階頻率對應(yīng)的分頻比及預(yù)置數(shù)音名分頻比預(yù)置

6、數(shù)音名分頻比預(yù)置數(shù)低音391027281中音2511111272低音576538730中音3455211831低音668189565中音5382712556低音7607310310中音6340912974中音1573610647高音1286713516此外,對于樂曲中的休止符,只要將分頻系數(shù)設(shè)為0,即初始值為2141=16383即可,此時揚聲器將不會發(fā)聲。音長的控制音符的持續(xù)時間必須根據(jù)樂曲的速度及每個音符的節(jié)拍數(shù)來確定。本例演奏的梁祝片段,最短的音符為4分音符,如果將全音符的持續(xù)時間設(shè)為1s的話,則只需要再提供一個4Hz的時鐘頻率即可產(chǎn)生4分音符的時長。三、底層模塊設(shè)計由頂層模塊圖可以看到本

7、方案分成8個模塊。1、48MHz分頻成12MHz波形分頻器,源代碼和頂層模塊如下/48mhz分成12mhz的分頻模塊module div_clk12mhz(clk_48mhz,clk_12mhz);input clk_48mhz;output clk_12mhz;reg clk_12mhz;reg 21:0 cnt;always (posedge clk_48mhz)if(cnt<1) cnt=cnt+1; / (48mhz/12mhz=4,cnt<4/2-1=1)else begin cnt=0; clk_12mhz =!clk_12mhz; endendmodule2、12MH

8、z分頻成6MHz波形分頻器,源代碼和頂層模塊如下:/12mhz分成6mhz的分頻模塊,提供給song模塊module div_clk6mhz(clk_12mhz,clk_6mhz);input clk_12mhz;output clk_6mhz;reg clk_6mhz;reg cnt;always (posedge clk_12mhz)clk_6mhz=!clk_6mhz; endmodule 3、12MHz分頻成4Hz波形分頻器,源代碼和頂層模塊如下:/12mhz分成4hz的分頻模塊,提供給song模塊module div_clk4hz(clk_12mhz,clk_4hz);input c

9、lk_12mhz;output clk_4hz;reg clk_4hz;reg 21:0 cnt;always (posedge clk_12mhz)if(cnt<1499999) cnt=cnt+1; / (12mhz/4hz=3000000,cnt<3000000/2-1=1499999)else begin cnt=0; clk_4hz =! clk_4hz; endendmodule4、12MHz分頻成1mhz波形分頻器,源代碼和頂層模塊如下:/12mhz分成1mhz的分頻模塊,提供給quma模塊module div_clk1mhz(clk_12mhz,clk_1mhz);

10、input clk_12mhz;output clk_1mhz;reg clk_1mhz;reg 21:0 cnt;always (posedge clk_12mhz)if(cnt<5) cnt=cnt+1; / (12mhz/1mhz=12,cnt<12/2-1=5)else begin cnt=0; clk_1mhz =! clk_1mhz; endendmodule 5、12MHz分頻成1khz波形分頻器,源代碼和頂層模塊如下:/12mhz分成1khz的分頻模塊,提供給quma模塊module div_clk1khz(clk_12mhz,clk_1khz);input clk

11、_12mhz;output clk_1khz;reg clk_1khz;reg 21:0 cnt;always (posedge clk_12mhz)if(cnt<5999) cnt=cnt+1; / (12mhz/1khz=12000,cnt<12000/2-1=5999)else begin cnt=0; clk_1khz =! clk_1khz; endendmodule6、 song模塊源代碼和頂層模塊如下:/音樂產(chǎn)生模塊module song(clk_6mhz,clk_4hz,speaker,high,med,low,k); input clk_6mhz,clk_4hz;

12、 input k; output speaker; output3:0 high,med,low; reg3:0 high,med,low; reg13:0 divider,origin; reg9:0 counter; reg speaker; wire carry;assign carry=(divider=16383); always (posedge clk_6mhz) begin if(carry) divider<=origin; else divider<=divider+1; endalways (posedge carry) begin speaker<=s

13、peaker;end always (posedge clk_4hz) begin case(high,med,low) 'b000000000011:origin<=7281; /低音3 'b000000000101:origin<=8730; /低音5 'b000000000110:origin<=9565; /低音6 'b000000000111:origin<=10310; /低音7 'b000000010000:origin<=10647; /中音1 'b000000100000:origin<=11

14、272; /中音2 'b000000110000:origin<=11831; /中音3 'b000001010000:origin<=12556; /中音5 'b000001100000:origin<=12974; /中音6 'b000001110000:origin<=13347; /中音7 'b000100000000:origin<=13516; /高音1 'b000000000000:origin<=16383; /休止符endcase endalways (posedge clk_4hz) if

15、(k=0) begin if(counter=149) counter<=0; else counter<=counter+1; case(counter) /記譜 0: high,med,low<='b000000000011; /低音"3" 1: high,med,low<='b000000000011; /持續(xù)4個時鐘節(jié)拍 2: high,med,low<='b000000000011; 3: high,med,low<='b000000000011; 4: high,med,low<='

16、;b000000000101; /低音"5" 5: high,med,low<='b000000000101; /發(fā)3個時鐘節(jié)拍 6: high,med,low<='b000000000101; 7: high,med,low<='b000000000110; /低音"6" 8: high,med,low<='b000000010000; /中音"1" 9: high,med,low<='b000000010000; /發(fā)3個時鐘節(jié)拍 10: high,med,lo

17、w<='b000000010000; 11: high,med,low<='b000000100000; /中音"2" 12: high,med,low<='b000000000110; /低音"6" 13: high,med,low<='b000000010000; /中音"1" 14: high,med,low<='b000000000101; /低音"5" 15: high,med,low<='b000000000101; 1

18、6: high,med,low<='b000001010000; /中音"5" 17: high,med,low<='b000001010000; /發(fā)3個時鐘節(jié)拍 18: high,med,low<='b000001010000; 19: high,med,low<='b000100000000; /高音"1" 20: high,med,low<='b000001100000; /中音"6" 21: high,med,low<='b000001010

19、000; /中音"5" 22: high,med,low<='b000000110000; /中音"3" 23: high,med,low<='b000001010000; /中音"5" 24: high,med,low<='b000000100000; /中音"2" 25: high,med,low<='b000000100000; /持續(xù)11個時鐘節(jié)拍 26: high,med,low<='b000000100000; 27: high,me

20、d,low<='b000000100000; 28: high,med,low<='b000000100000; 29: high,med,low<='b000000100000; 30: high,med,low<='b000000100000; 31: high,med,low<='b000000100000; 32: high,med,low<='b000000100000; 33: high,med,low<='b000000100000; 34: high,med,low<=

21、9;b000000100000; 35: high,med,low<='b000000110000; /中音"3" 36: high,med,low<='b000000000111; /低音"7" 37: high,med,low<='b000000000111; 38: high,med,low<='b000000000110; /低音"6" 39: high,med,low<='b000000000110; 40: high,med,low<='b

22、000000000101; /低音"5" 41: high,med,low<='b000000000101; 42: high,med,low<='b000000000101; 43: high,med,low<='b000000000110; /低音"6" 44: high,med,low<='b000000010000; /中音"1" 45: high,med,low<='b000000010000; 46: high,med,low<='b000

23、000100000; /中音"2" 47: high,med,low<='b000000100000; 48: high,med,low<='b000000000011; /低音"3" 49: high,med,low<='b000000000011; 50: high,med,low<='b000000010000; /中音"1" 51: high,med,low<='b000000010000; 52: high,med,low<='b000000

24、000110; /低音"6" 53: high,med,low<='b000000000101; /低音"5" 54: high,med,low<='b000000000110; /低音"6" 55: high,med,low<='b000000010000; /中音"1" 56: high,med,low<='b000000000101; /低音"5" 57: high,med,low<='b000000000101; /持

25、續(xù)8個時鐘節(jié)拍 58: high,med,low<='b000000000101; 59: high,med,low<='b000000000101; 60: high,med,low<='b000000000101; 61: high,med,low<='b000000000101; 62: high,med,low<='b000000000101; 63: high,med,low<='b000000000101; 64: high,med,low<='b000000110000; /中音&q

26、uot;3" 65: high,med,low<='b000000110000; /發(fā)3個時鐘節(jié)拍 66: high,med,low<='b000000110000; 67: high,med,low<='b000001010000; /中音"5" 68: high,med,low<='b000000000111; /低音"7" 69: high,med,low<='b000000000111; 70: high,med,low<='b000000100000;

27、 /中音"2" 71: high,med,low<='b000000100000; 72: high,med,low<='b000000000110; /低音"6" 73: high,med,low<='b000000010000; /中音"1" 74: high,med,low<='b000000000101; /低音"5" 75: high,med,low<='b000000000101; /持續(xù)4個時鐘節(jié)拍 76: high,med,low

28、<='b000000000101; 77: high,med,low<='b000000000101; 78: high,med,low<='b000000000000; /休止符 79: high,med,low<='b000000000000; 80: high,med,low<='b000000000011; /低音"3" 81: high,med,low<='b000000000101; /低音"5" 82: high,med,low<='b0000

29、00000101; 83: high,med,low<='b000000000011; /低音"3" 84: high,med,low<='b000000000101; /低音"5" 85: high,med,low<='b000000000110; /低音"6" 86: high,med,low<='b000000000111; /低音"7" 87: high,med,low<='b000000100000; /中音"2"

30、88: high,med,low<='b000000000110; /低音"6" 89: high,med,low<='b000000000110; /持續(xù)6個時鐘節(jié)拍 90: high,med,low<='b000000000110; 91: high,med,low<='b000000000110; 92: high,med,low<='b000000000110; 93: high,med,low<='b000000000110; 94: high,med,low<='b

31、000000000101; /低音"5" 95: high,med,low<='b000000000110; /低音"6" 96: high,med,low<='b000000010000; /中音"1" 97: high,med,low<='b000000010000; /發(fā)3個時鐘節(jié)拍 98: high,med,low<='b000000010000; 99: high,med,low<='b000000100000; /中音"2" 100:

32、 high,med,low<='b000001010000; /中音"5" 101: high,med,low<='b000001010000; 102: high,med,low<='b000000110000; /中音"3" 103: high,med,low<='b000000110000; 104: high,med,low<='b000000100000; /中音"2" 105: high,med,low<='b000000100000; 1

33、06: high,med,low<='b000000110000; /中音"3" 107: high,med,low<='b000000100000; /中音"2" 108: high,med,low<='b000000010000; /中音"1" 109: high,med,low<='b000000010000; 110: high,med,low<='b000000000110; /低音"6" 111: high,med,low<=&

34、#39;b000000000101; /低音"5" 112: high,med,low<='b000000000011; /低音"3" 113: high,med,low<='b000000000011; /持續(xù)4個時鐘節(jié)拍 114: high,med,low<='b000000000011; 115: high,med,low<='b000000000011; 116: high,med,low<='b000000010000; /中音"1" 117: high,

35、med,low<='b000000010000; /持續(xù)4個時鐘節(jié)拍 118: high,med,low<='b000000010000; 119: high,med,low<='b000000010000; 120: high,med,low<='b000000000110; /低音"6" 121: high,med,low<='b000000010000; /中音"1" 122: high,med,low<='b000000000110; /低音"6&quo

36、t; 123: high,med,low<='b000000000101; /低音"5" 124: high,med,low<='b000000000011; /低音"3" 125: high,med,low<='b000000000101; /低音"5" 126: high,med,low<='b000000000110; /低音"6" 127: high,med,low<='b000000010000; /中音"1" 12

37、8: high,med,low<='b000000000101; /低音"5" 129: high,med,low<='b000000000101; /持續(xù)6個時鐘節(jié)拍 130: high,med,low<='b000000000101; 131: high,med,low<='b000000000101; 132: high,med,low<='b000000000101; 133: high,med,low<='b000000000101; 134: high,med,low<=&

38、#39;b000000110000; /中音"3" 135: high,med,low<='b000001010000; /中音"5" 136: high,med,low<='b000000100000; /中音"2" 137: high,med,low<='b000000110000; /中音"3" 138: high,med,low<='b000000100000; /中音"2" 139: high,med,low<='b

39、000000010000; /中音"1" 140: high,med,low<='b000000000111; /低音"7" 141: high,med,low<='b000000000111; 142: high,med,low<='b000000000110; /低音"6" 143: high,med,low<='b000000000110; 144: high,med,low<='b000000000101; /低音"5" 145: hig

40、h,med,low<='b000000000101; /持續(xù)8個時鐘節(jié)拍 146: high,med,low<='b000000000101; 147: high,med,low<='b000000000101; 148: high,med,low<='b000000000101; 149: high,med,low<='b000000000101;endcaseendelse if( k=1)begin if(counter=149) counter<=0; /計時,以實現(xiàn)循環(huán)演奏 else counter<=

41、counter+1; case(counter) /記譜 0: high,med,low<='b000000110000; /中音"3" 1: high,med,low<='b000000110000; /持續(xù)2個時鐘節(jié)拍 2: high,med,low<='b000000100000; /中音2 3: high,med,low<='b000000100000; /持續(xù)2個時鐘節(jié)拍 4: high,med,low<='b000000110000; /中音"3" 5: high,med,

42、low<='b000000110000; /發(fā)10個時鐘節(jié)拍 6: high,med,low<='b000000110000; 7: high,med,low<='b000000110000; 8: high,med,low<='b000000110000; 9: high,med,low<='b000000110000; 10: high,med,low<='b000000110000; 11: high,med,low<='b000000110000; 12: high,med,low<

43、='b000000110000; 13: high,med,low<='b000000110000; 14: high,med,low<='b000000100000; /中音2 15: high,med,low<='b000000100000; /持續(xù)2個時鐘節(jié)拍 16: high,med,low<='b000000110000; /中音"3" 17: high,med,low<='b000000110000; /發(fā)2個時鐘節(jié)拍 18: high,med,low<='b000000

44、100000; /中音2 19: high,med,low<='b000000100000; /中音2 20: high,med,low<='b000000010000; /中音"1" 21: high,med,low<='b000000010000; 22: high,med,low<='b000000010000; 23: high,med,low<='b000000010000; 24: high,med,low<='b000000010000; 25: high,med,low<

45、;='b000000010000; 26: high,med,low<='b000000010000; 27: high,med,low<='b000000010000; 28: high,med,low<='b000000010000; 29: high,med,low<='b000000010000; 30: high,med,low<='b000000010000; 31: high,med,low<='b000000010000; 32: high,med,low<='b00000

46、0000110;/低6 33: high,med,low<='b000000000110; 34: high,med,low<='b000000010000; /中音"1" 35: high,med,low<='b000000010000; 36: high,med,low<='b000000100000; /中2 有6個 37: high,med,low<='b000000100000; 38: high,med,low<='b000000100000; 39: high,med,low&

47、lt;='b000000100000; 40: high,med,low<='b000000100000; 41: high,med,low<='b000000100000; 42: high,med,low<='b000000110000; /中音3 43: high,med,low<='b000000110000; 44: high,med,low<='b000000100000; /中音"2" 45: high,med,low<='b000000100000; 46: high

48、,med,low<='b000000010000; /中音"1" 47: high,med,low<='b000000010000; 48: high,med,low<='b000000000110; /低音"6" 49: high,med,low<='b000000000110; 50: high,med,low<='b000000010000; /中音"1" 51: high,med,low<='b000000010000; 52: high,me

49、d,low<='b000000000101; /低音"5" 53: high,med,low<='b000000000101; /低音"5" 54: high,med,low<='b000000000101; 55: high,med,low<='b000000000101; 56: high,med,low<='b000000000101; /低音"5" 57: high,med,low<='b000000000101; 58: high,med,l

50、ow<='b000000000101; 59: high,med,low<='b000000000101; 60: high,med,low<='b000000000101; 61: high,med,low<='b000000000101; 62: high,med,low<='b000000000101; 63: high,med,low<='b000000000101; 64: high,med,low<='b000000000101; 65: high,med,low<='b

51、000000000101; 66: high,med,low<='b000000000101; 67: high,med,low<='b000000000101; 68: high,med,low<='b000000110000; /中音"3" 69: high,med,low<='b000000110000; 70: high,med,low<='b000000100000; /中音"2" 71: high,med,low<='b000000100000; 72: hi

52、gh,med,low<='b000000110000; /中音"3" 73: high,med,low<='b000000110000; /中音"3" 74: high,med,low<='b000000110000; /中音"3" 75: high,med,low<='b000000110000; /中音"3" 76: high,med,low<='b000000110000; /中音"3" 77: high,med,low

53、<='b000000110000; /中音"3" 78: high,med,low<='b000000110000; /中音"3" 79: high,med,low<='b000000110000; /中音"3" 80: high,med,low<='b000000110000; /中音"3" 81: high,med,low<='b000000110000; /中音"3" 82: high,med,low<='b000000100000; /中音"2" 83: high,med,low<='b000000100000; 84: high,med,low<='b000000110000; /中音"3" 85: high,med,low<='b000000110000; /中

溫馨提示

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

最新文檔

評論

0/150

提交評論