EDA樂曲硬件演奏電路設計_第1頁
EDA樂曲硬件演奏電路設計_第2頁
EDA樂曲硬件演奏電路設計_第3頁
EDA樂曲硬件演奏電路設計_第4頁
EDA樂曲硬件演奏電路設計_第5頁
已閱讀5頁,還剩17頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

1、電子系統設計課程課程設計報告題目: 樂曲硬件演奏電路設計 姓 名: 吳清清 院 系: 電力學院 專業: 電子科學與技術 學 號: 201312309 指導教師: 譚聯 完成時間: 2016 年 12 月 21 日目錄1 課程設計題目、內容與要求11.1 設計內容11.2 具體要求12 系統設計12.1 設計思路12.2 系統原理32.2.1總體框圖32.2.2工作過程32.2.3樂曲演奏的原理圖43 系統實現43.1.分頻器(FDIV)43.2.計數器CNT138T63.2.1計數器CNT138T的設計63.3.分頻預置數譯碼器F_CODE模塊73.3.1 F_CODE模塊的設計83.4 數字

2、分頻器SPKER模塊103.4.1數字分頻器SPKS模塊設計103.5選擇器choice123.6.樂譜文件ROM143.6.1樂譜文件143.6.2 LMP-ROM模塊154 系統仿真154.1計數器CNT138T的仿真154.2.分頻器FDIV164.3分頻預置數F_CODE164.4分頻器SPKER164.5樂曲ROM的數據讀取175硬件驗證175.1引腳鎖定185.2硬件連接185.2實驗現象186總結197參考書目191 課程設計題目、內容與要求1.1 設計內容 設計一個樂曲演奏電路,能夠自動播放編寫好的音樂。要求將音樂通過實驗箱上的喇叭播放出來,用發光二級管顯示出樂曲的節拍。(1)

3、完成程序的編程工作。(2)將音樂數據制成LMP_ROM文件。(3)將程序在Quartus ii軟件中進行編譯和仿真。(4)進行引腳鎖定,然后下載到實驗箱上觀察實驗結果。1.2 具體要求(1)定制音符數據ROM MUSIC,檢測音符數據已經進入ROM中;(2)所有模塊,分別仿真測試;(3)完成系統仿真調試和硬件驗證;(4)能夠將兩首音樂隨時切換。2 系統設計2.1 設計思路樂曲中的每一音符對應著一個確定的頻率,要想FPGA發出不同音符的音調,實際上只要控制它輸出相應音符的頻率即可。樂曲都是由一連串的音符組成,因此按照樂曲的樂譜依次輸出這些音符所對應的頻,就可以在揚聲器上連續地發出各個音符的音調。

4、而要準確地演奏出一首樂曲,僅僅讓揚聲器能夠發生是不夠的,還必須準確地控制樂曲的節奏,即樂曲中每個音符的發生頻率及其持續時間是樂曲能夠連續演奏的兩個關鍵因素。本次設計主要包括三個部分:(1) 音符頻率的獲得;音符頻率的獲得多個不同頻率的信號可通過對某個基準頻率進行分頻器獲得。由于各個音符的頻率多為非整數,而分頻系數又不能為小數,故必須將計算機得到的分頻系數四舍五入取整。若基準頻率過低,則分頻系數過小,四舍五入取整后的誤差較大。若基準頻率過高,雖然可以減少頻率的相對誤差,但分頻結構將變大。實際上應該綜合考慮這兩個方面的因素,在盡量減少誤差的前提下,選取合適的基準頻率。本設計中選取1MHz的基準頻率

5、,數控分頻器采用11位二進制計數器。(3) 樂曲節奏的控制 一般樂曲最小的節拍為1/4拍,若將1拍的時間定為1秒,則只需要輸出4Hz的1/4拍的時長(0.25秒),對于其它占用時間較長的節拍(必為1/4拍的整數倍)則只需要將該音符連續輸出相應的次數即可。計數時鐘信號作為輸出音符快慢的控制信號,時鐘快時輸出節拍速度就快,演奏的速度也就快,時鐘慢時輸出節拍的速度就慢,演奏的速度自然降低,因此計數器的時鐘信號應為4Hz。(3) 樂譜的發生本設計將樂譜中的音符數據存儲在LPM-ROM中,若某音在邏輯中停留了4個時鐘節拍,即1秒的時間,相應地,該音符就要在LPM-ROM中連續的四個地址上都存儲。當一個4

6、Hz的時鐘來時,相應地就從LPM-ROM中輸出一個音符數據。2.2 系統原理2.2.1總體框圖數控分頻器SPKER分頻器FDIV分頻驅動蜂鳴器 時鐘鎖相環PLL簡譜碼顯示DECL7S譯碼器F_CODE樂譜ROM計數器CNT138T 該工程由是由上圖所示的幾個模塊構成輸入的時鐘20MHZ通過鎖相環后輸出2KHZ和1KHZ的時鐘分別輸送給分頻器FDIV和計數器CNT138;FDIV將1MHZ的時鐘分頻成4HZ的時鐘。計數器CNT138T完成計數功能,138進制,每來個時鐘沿加一。樂譜ROM記錄了1首歌的樂譜。根據上一模塊計數器所計的數讀取相應地址里的數據傳遞給下一模塊。譯碼器F_CODE將選擇器所

7、選擇的歌曲rom里的地址的數據翻譯成可預置計數器SPKER和簡譜碼顯示DECL7S所需的數據。分頻驅動器也就是一個數控分頻器,完成分頻的功能,并驅動蜂鳴器。2.2.2工作過程當一個4Hz的時鐘脈沖來到時,樂譜發生器模塊輸出一個音符數據給分頻系數模塊,分頻系數模塊輸出此音符相應的分頻系數所需的初始值,將初始值送給數控分頻器模塊,當1MHz的時鐘脈沖來到時,數控分頻器就根據分頻系數輸出相應的頻率(即此音符所對應的發生頻率)給揚聲器,揚聲器就可發出對應音符的聲音來.連續的4Hz的時鐘脈沖就將樂譜發生器里所存儲的音符數據一個接一個的送給了分頻系數模塊,再經過數控分頻模塊,最后揚聲器一個接一個的發出音符

8、數據所對應的聲音來。曲子也就流暢的播放出來了。同時led數碼管會隨著音樂顯示相應的樂譜。當樂曲一遍演奏完成后,樂曲發生器能自動從頭開始循環演奏。2.2.3樂曲演奏的原理圖3 系統實現3.1.分頻器(FDIV)將鎖相環的2KHZ的時鐘分頻4Hz的時鐘,供計數器使用。(1)模塊程序module FDIV(CLK,PM);input CLK;output PM;reg8:0 Q1;reg FULL;wire RST;always(posedge CLK or posedge RST)beginif(RST)beginQ1<=0;FULL<=1;endelse beginQ1<=Q1

9、+1;FULL<=0;endendassign RST=(Q1=449);assign PM=FULL;assign DOUT=Q1;endmodule(2)模塊圖形3.2.計數器CNT138T它是一個8位二進制計數器,內部設置計數最大值為139,作為音符數據ROM的地址發生器。每來一個時鐘信號,計數器就計數一次,ROM文件中的地址也隨著增加,音符數據ROM中的音符也就一個一個的取出來。3.2.1計數器CNT138T的設計這個計數器的計數頻率即為4Hz。即每一計數值的停留時間為0.25秒,恰為當全音符設為1秒時,四四拍的4分音符持續時間。例如,“梁祝”樂曲的第一個音符為“3”,此音在邏輯

10、中停留了4個時鐘節拍,即1秒時間,相應地,所對應的“3”音符分頻預置值為11'H40C,在SPKER的輸入端停留了1秒。隨著計數器CNT138T按4Hz的時鐘速率作加法計數時,即隨地址值遞增時,音符數據ROM模塊MUSIC中的音符數據將從 ROM中通過q3.0端口輸向F_CODE模塊,“梁祝”樂曲就開始連續自然地演奏起來了。CNT138T的節拍是139,正好等于ROM中的簡譜碼數,所以可以確保循環演奏。對于其他樂曲,此計數最大值要根據情況更改。(1)模塊程序module CNT138T(CLK,CNT8);input CLK;output 7:0 CNT8;reg7:0 CNT;wir

11、e LD;always(posedge CLK or posedge LD)beginif (LD)CNT<=8'b00000000;elseCNT<=CNT+1;endassign CNT8=CNT;assign LD=(CNT=138);endmodule (2)模塊圖形3.3.分頻預置數譯碼器F_CODE模塊模塊F_CODE的功能首先是為模塊SPKER(11位分頻器)提供決定所發音符的分頻預置數,而此數在SPKER輸入口停留的時間即為此音符的節拍周期,模塊F_CODE是樂曲簡譜碼對應的分頻預置數查表電路。3.3.1 F_CODE模塊的設計程序中設置了“梁祝”樂曲全部音

12、符所對應的分頻預置數,共14個,每一音符的停留時間則由音樂節拍和音調發生查表模塊MUSIC中簡譜碼和工作時鐘inclock的頻率決定,在此為4Hz。模塊F_CODE的14個值的輸出由對應于MUSIC模塊輸出的q3.0及4位輸入值INX3.0確定,而INX3.0最多有16種可選值。輸向模塊F_CODE中INX3.0的值在SPKER中對應的輸出頻率值與持續的時間由模塊MUSIC決定。(1)模塊程序module F_CODE(INX,CODE,H,TO);input3:0 INX;output 3:0 CODE;output H;output 10:0 TO;reg10:0 TO;reg3:0 CO

13、DE;reg H;always(INX)begin case(INX) 0:begin TO<=11'H7FF;CODE<=0;H<=0;end 1:begin TO<=11'H305;CODE<=1;H<=0;end 2:begin TO<=11'H390;CODE<=2;H<=0;end 3:begin TO<=11'H40C;CODE<=3;H<=0;end 4:begin TO<=11'H45C;CODE<=4;H<=0;end 5:begin TO<

14、=11'H4AD;CODE<=5;H<=0;end 6:begin TO<=11'H50A;CODE<=6;H<=0;end 7:begin TO<=11'H55C;CODE<=7;H<=0;end 8:begin TO<=11'H582;CODE<=1;H<=1;end 9:begin TO<=11'H5C8;CODE<=2;H<=1;end10:begin TO<=11'H606;CODE<=3;H<=1;end11:begin TO<

15、=11'H640;CODE<=4;H<=1;end12:begin TO<=11'H656;CODE<=5;H<=1;end 13:begin TO<=11'H684;CODE<=6;H<=1;end14:begin TO<=11'H69A;CODE<=7;H<=1;end15:begin TO<=11'H6C0;CODE<=1;H<=1;end default:begin TO<=11'H6c0;CODE<=1;H<=1;endendcasee

16、ndendmodule(2)模塊圖形3.4 數字分頻器SPKER模塊音符的頻率由SPKER獲得,這是一個數控分頻器。3.4.1數字分頻器SPKS模塊設計它的CLK端輸入一具有較高頻率(1MHz)的時鐘,由于直接從分頻器中出來的輸出信號是脈寬極窄的信號,為了有利于驅動揚聲器,需另加一個D觸發器分頻以均衡其占空比,但這時的頻率將是原來的1/2。SPKER對CLK輸入信號的分頻比由輸入的11位預置數TN10.0決定。揚聲器的輸出頻率將決定每一音符的音調;這樣,分頻計數器的預置值TN10.0 與輸出頻率就有了對應關系,而輸出的頻率又與音樂音符的發聲有對應關系,例如在F_CODE模塊中若TN10.0=1

17、1'H40C,將由揚聲器發出音符為“3”音的信號頻率。(1)程序模塊1module SPKER(CLK,TN,SPKS);input CLK;input10:0 TN;output SPKS;reg SPKS;reg10:0 CNT11;always(posedge CLK)begin :CNT11B_LOADif(CNT11=11'h7FF)beginCNT11=TN;SPKS<=1'b1;endelsebeginCNT11=CNT11+1;SPKS<=1'b0;endendendmodule(2)模塊圖形(2)程序模塊2module SPKER(

18、CLK,TN,SPKS);input CLK;input2:0 TN;output SPKS;reg SPKS;reg2:0 CNT3;always(posedge CLK)begin if(CNT3=3'h7)beginCNT3=TN;SPKS<=1'b1;endelsebeginCNT3=CNT3+1;SPKS<=1'b0;endendendmodule3.5選擇器choice選擇器完成選擇歌曲的功能:當a的信號為1時將Q1的信號輸出當a的信號為0時將Q2的信號輸出(1)模塊程序module choice (a,b,Q1,Q2,INX);input a;

19、output b;input3:0 Q1;input3:0 Q2;output3:0INX;reg b;reg3:0 INX;always(a)begincase(a)01:begin b<=0;INX<=Q1;end 10:begin b<=1;INX<=Q2;end default:begin b<=10;INX<=Q2;end endcase endendmodule(2)模塊圖形3.6.樂譜文件ROMLpm rom0模塊里面放置的是“梁祝”的樂譜,它是利用LPM-ROM來實現的,將樂譜中相應的音符放在一個連續的地址上。他首先是編寫音符數據文件,將樂譜

20、中相應的音符放在一個連續的地址上。因為1拍的時間定為1s,提供的是4HZ的時鐘頻率(1/4拍的整數倍),則需將這個音符存儲在相應次數的連續的地址上。然后對音符數據進行ROM定制,最后對定制好的ROM文件進行測試和仿真。3.6.1樂譜文件(1)“梁祝”音樂WIDTH = 4 ; 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 ; 11: 9 ; 12: 6

21、; 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:

22、 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: 6; 89: 6;90: 6 ; 91: 6 ; 92: 6 ; 93: 6; 94: 5; 95: 6; 9

23、6: 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: 5 ;133: 5;134: 5; 135: 5;136: 0;137

24、: 0;138: 0;END ;(2)“隱形的翅膀”樂譜3.6.2 LMP-ROM模塊4 系統仿真4.1計數器CNT138T的仿真 由波形可看出,CLK為輸入時鐘信號,八位輸出二進制信號在每個時鐘上升沿加一,當計數至137時,從0開始重新計數。經分析,該模塊功能完全正確。4.2.分頻器FDIV 由波形可看出CLK為輸入2KHz的時鐘信號,PM輸出為8Hz的時鐘信號,由于紙張有限沒有打印出其全部波形。經分析該模塊功能完全正確。4.3分頻預置數F_CODE從波形上可以看到,當輸入信號INX=1000時,code顯示的是1,H為1,預置值為582,查詢程序,發現功能正確。4.4分頻器SPKER此波形仿真分析比較復雜,如果由于輸入信號為1MHz

溫馨提示

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

評論

0/150

提交評論