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

付費下載

下載本文檔

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

文檔簡介

1、電子技術(shù)課程設(shè)計 樂譜演奏電路設(shè)計 學(xué) 院:電子工程與電氣自動化學(xué)院 專業(yè)、班級:電子科學(xué)與技術(shù)(1)班 姓 名: 王志愿 學(xué) 號:12021034 指導(dǎo)教師: 常紅霞 2014年12月目錄一:設(shè)計任務(wù)要求.2 1:課程設(shè)計題目2 2:設(shè)計分析2 3:工程設(shè)計總述5二:總體框圖8三:選擇器件9四:功能模塊:(模塊圖形、程序、功能仿真圖、功能仿真圖分析)9 1:分頻器(div)9 2:計數(shù)器(notetabs)11 3:選擇模塊(choice)12 4:數(shù)據(jù)翻譯模塊(tontaba)14 5:譯碼器模塊(deled)16 6:數(shù)控分頻器模塊(speakera)17 7:樂譜數(shù)據(jù)ROM(四個模塊)

2、19 8:地址線的選擇27 9:led數(shù)碼管位選功能的解決方案28五:總體設(shè)計電路圖28六:六:結(jié)束語29 樂譜演奏電路設(shè)計摘要 設(shè)計了一種基于FPGA的樂譜演奏,該樂譜演奏由用Verilog硬件描述語言設(shè)計的核心部件和適當(dāng)?shù)耐鈬娐窐?gòu)成,可從蜂鳴器上進行演奏也可自動行樂曲演奏。 基于FPGA(現(xiàn)場可編程門陣列)芯片,利用Verilog語言,介紹了一種通用樂曲演奏電路的設(shè)計,可實現(xiàn)多個八度音階的樂曲演奏,與簡譜的對應(yīng)關(guān)系簡單,編程方便,占用資源少,通用性好,可作為IP core模塊引用,構(gòu)成復(fù)雜的SOPC系統(tǒng) 關(guān)鍵詞:樂譜演奏;現(xiàn)場可編程門陣列(FPGA);智力產(chǎn)權(quán)核(IP core);超高速

3、集成電路硬件描述語言(Verilog);樂曲 Abstract An electronic piano is designed based on FPGA,which consists of core paris that designed by using Verilog hardware description languages,as well as some periphery circuits.The musical perform ance can be donenot only by keys but also with automatic type in the electro

4、nic piano Based on FPGA,by Verilog language,this paper introduces a universal music circuit design,it can play high,middle and low multiple tonality,simple corresponding relation with simple musical notation,which programs easily using little resourceIt can be used universally for IP core in making

5、complicated SOPC system Key words:electronic piano;Field Programmable Gate Array(FPGA);Intelligence Property core(IP core) ;Very-High-Speed Integrated Circuit Hardware Description Language(Verilog);music 1、 設(shè)計任務(wù)要求1、課程設(shè)計題目 設(shè)計一個樂曲演奏電路,能夠自動播放編寫好的音樂。要求將音樂通過實驗箱上的喇叭播放出來,數(shù)碼管顯示播放至第幾首音樂。 (附加功能:本設(shè)計在題目所要求的功能全部

6、實現(xiàn)的基礎(chǔ)之上又添加了許多附加功能,所有的功能將在“工程設(shè)計總述”中闡明,特此聲明。)2、 設(shè)計分析 (1) 音樂硬件演奏電路基本原理 硬件電路的發(fā)聲原理,聲音的頻譜范圍約在幾十到幾千赫茲,若能利用程序來控制FPGA芯片某個引腳輸出一定頻率的矩形波,接上揚聲器就能發(fā)出相應(yīng)頻率的聲音。樂曲中的每一音符對應(yīng)著一個確定的頻率,要想FPGA發(fā)出不同音符的音調(diào),實際上只要控制它輸出相應(yīng)音符的頻率即可。樂曲都是由一連串的音符組成,因此按照樂曲的樂譜依次輸出這些音符所對應(yīng)的頻,就可以在揚聲器上連續(xù)地發(fā)出各個音符的音調(diào)。而要準(zhǔn)確地演奏出一首樂曲,僅僅讓揚聲器能夠發(fā)生是不夠的,還必須準(zhǔn)確地控制樂曲的節(jié)奏,即樂曲

7、中每個音符的發(fā)生頻率及其持續(xù)時間是樂曲能夠連續(xù)演奏的兩個關(guān)鍵因素。 (2) 音符頻率的獲得多個不同頻率的信號可通過對某個基準(zhǔn)頻率進行分頻器獲得。由于各個音符的頻率多為非整數(shù),而分頻系數(shù)又不能為小數(shù),故必須將計算機得到的分頻系數(shù)四舍五入取整。若基準(zhǔn)頻率過低,則分頻系數(shù)過小,四舍五入取整后的誤差較大。若基準(zhǔn)頻率過高,雖然可以減少頻率的相對誤差,但分頻結(jié)構(gòu)將變大。實際上應(yīng)該綜合考慮這兩個方面的因素,在盡量減少誤差的前提下,選取合適的基準(zhǔn)頻率。本設(shè)計中選取1MHz的基準(zhǔn)頻率。數(shù)控分頻器采用12位二進制計數(shù)器,樂曲中的休止符,只要將分頻系數(shù)設(shè)為0,即初始值=4095,此時揚聲器不會發(fā)聲。根據(jù)分頻系數(shù),可

8、計算數(shù)控分頻器得到的初始值。(語言已經(jīng)無法描述其中的原理了,程序可以說明此問題,關(guān)于初始值的解釋,請看下文給出的程序)初始值的計算公式如下:由于所設(shè)計的數(shù)控分頻計采用12MHZ作為時鐘源,并通過一次12分頻給出頻率為1MHZ的脈沖溢出信號,再對該1MHZ的溢出信號進行12位2進制碼的帶預(yù)置數(shù)進行計數(shù),并給出一個頻率隨預(yù)置數(shù)變化的脈沖信號。由于該脈沖信號不具有驅(qū)動蜂鳴器的能力,故對此脈沖信號進行2分頻以推動蜂鳴器發(fā)聲,故最終輸出信號的頻率與預(yù)置數(shù)的關(guān)系如下:其中為音階對應(yīng)的頻率。 表1 簡譜中的音名與頻率的關(guān)系音名頻率/Hz音名頻率/Hz音名頻率/Hz低音1261.63中音1532.25高音11

9、046.50低音2293.67中音2587.33高音21174.66低音3329.63中音3659.25高音31318.51低音4349.23中音4698.46高音41396.92低音5391.99中音5783.99高音51567.98低音6440中音6880高音61760低音7493.88中音7987.76高音71975.52 表2 各音階頻率對應(yīng)的分頻值音名分頻系數(shù)初始值音名分頻系數(shù)初始值音名分頻系數(shù)初始值低音17644547中音138224369高音119116280低音268101381中音234054786高音212706921低音360672124中音330345157高音3151

10、76674低音457272464中音428645327高音414326759低音551023089中音525515640高音512566935低音645453646中音622735918高音611377054低音740504141中音720256166高音710137178 (3) 樂曲節(jié)奏的控制 一般樂曲最小的節(jié)拍為1/4拍,若將1拍的時間定為1秒,則只需要輸出4Hz的1/4拍的時長(0.25秒),對于其它占用時間較長的節(jié)拍(必為1/4拍的整數(shù)倍)則只需要將該音符連續(xù)輸出相應(yīng)的次數(shù)即可。計數(shù)時鐘信號作為輸出音符快慢的控制信號,時鐘快時輸出節(jié)拍速度就快,演奏的速度也就快,時鐘慢時輸出節(jié)拍的速度

11、就慢,演奏的速度自然降低,由于最后的蜂鳴器前需加一個二分頻的程序,因此計數(shù)器的時鐘信號應(yīng)為4Hz的2倍,即8Hz。 (4) 樂譜的發(fā)生本設(shè)計將樂譜中的音符數(shù)據(jù)存儲在LPM-ROM中,若某音在邏輯中停留了4個時鐘節(jié)拍,即1秒的時間,相應(yīng)地,該音符就要在LPM-ROM中連續(xù)的四個地址上都存儲。當(dāng)一個4Hz的時鐘來時,相應(yīng)地就從LPM-ROM中輸出一個音符數(shù)據(jù)。(5) 選擇模塊 選擇模塊將用一個4位數(shù)的控制信號控制樂譜模塊數(shù)據(jù)的選擇性,用vhdl語言描述比較簡單,不在此詳述。(6) 譯碼器等其他模塊譯碼器等模塊在以前做實驗的時候做過,且原理比較簡單易懂,不再這里闡述。3、 工程設(shè)計總述 當(dāng)一個4Hz

12、的時鐘脈沖來到時,樂譜發(fā)生器模塊輸出一個音符數(shù)據(jù)給分頻系數(shù)模塊,分頻系數(shù)模塊輸出此音符相應(yīng)的分頻系數(shù)所需的初始值,將初始值送給數(shù)控分頻器模塊,當(dāng)12MHz的時鐘脈沖來到時,數(shù)控分頻器就根據(jù)分頻系數(shù)輸出相應(yīng)的頻率(即此音符所對應(yīng)的發(fā)生頻率)給揚聲器,揚聲器就可發(fā)出對應(yīng)音符的聲音來.連續(xù)的8Hz的時鐘脈沖就將樂譜發(fā)生器里所存儲的音符數(shù)據(jù)一個接一個的送給了分頻系數(shù)模塊,再經(jīng)過數(shù)控分頻模塊,最后揚聲器一個接一個的發(fā)出音符數(shù)據(jù)所對應(yīng)的聲音來。曲子也就流暢的播放出來了。同時led數(shù)碼管會隨著音樂顯示相應(yīng)的樂譜,當(dāng)樂曲一遍演奏完成后,樂曲發(fā)生器能自動從頭開始循環(huán)演奏,這時用撥碼開關(guān)選擇播放的樂曲,撥碼開關(guān)給

13、選擇器一個選擇信號,即可選擇相應(yīng)的歌曲莫開中的數(shù)據(jù)進入數(shù)據(jù)翻譯模塊,播放出相應(yīng)的歌曲,本工程選取了四首樂曲,以格雷碼的形式編碼,每次只變一位撥碼開關(guān),比較方便選擇。分別為: 0001菊花臺 0011世上只有媽媽好 0010一剪梅 0110隱形的翅膀 樂譜如下:、二、總體框圖 該工程由是個模塊構(gòu)成,其中有四個為樂譜儲存模塊ROM,如圖所示。1、 分頻器的功能是將芯片上提供的50MHz的時鐘分頻為12MHz和8Hz的時鐘,分別供計數(shù)器與分頻驅(qū)動器(數(shù)控分頻器)使用。2、 計數(shù)器完成計數(shù)功能,183進制(最長的歌曲菊花臺有183個字符)每個時鐘沿加一。3、 四個音樂模塊分別記錄了4首歌的樂譜。根據(jù)上

14、一模塊計數(shù)器所計的數(shù)讀取相應(yīng)地址里的數(shù)據(jù)傳遞給下一模塊。4、 選擇器完成選擇歌曲的功能。5、 數(shù)據(jù)翻譯模塊將選擇器所選擇的歌曲rom里的地址的數(shù)據(jù)翻譯成分頻驅(qū)動器(數(shù)控分頻器)分頻所需的控制數(shù)據(jù)、3個led燈數(shù)據(jù)(高中低音)、以及譯碼器所需的數(shù)據(jù)。6、 分頻驅(qū)動器也就是一個數(shù)控分頻器,完成分頻的功能,并驅(qū)動蜂鳴器。7、 譯碼器將樂譜數(shù)據(jù)在led數(shù)碼管上顯示。三、選擇器件1.EP2C5T144C8N芯片2.實驗箱底板電路 (包括 蜂鳴器 7段數(shù)碼管 )3.計算機四、功能模塊1.分頻器(div)將芯片上提供的50MHz的時鐘分頻為12MHz和8Hz的時鐘,分別供計數(shù)器與分頻驅(qū)動器(數(shù)控分頻器)使用

15、。(1)模塊圖形:(2)程序如下:reg 23:0 counter8Hz; reg 23:0 counter12MHz; always (negedge reset_l or posedge clk)begin /6MHz分頻 if (!reset_l) begin counter6MHz <= 24'b0; clk_6m <= 1'b0; end else begin if(counter12MHz=24'd4) begin Counter12MHz<=0; clk_12m<=clk_12m; end else begin Counter12M

16、Hz<=Counter12MHz+1; end end end always (negedge reset_l or posedge clk) begin /4Hz分頻 if (!reset_l) begin Counter8Hz <= 24'b0; clk_8hz <= 1'b0; end else begin if(Counter8Hz=24'd6519999) begin counter4Hz<=0; clk_8hz<=clk_8hz; end else begin Counter8Hz<=Counter8Hz+1; end e

17、nd end (3)仿真波形:(4) 仿真波形分析由波形可看出ckl為輸入50MHz的時鐘信號,ckl12輸出為平12MHz的時鐘信號,clk8為8Hz的時鐘信號,由于紙張有限沒有打印出其全部波形。經(jīng)分析該模塊功能完全正確。2計數(shù)器(notetabs)計數(shù)器完成計數(shù)功能,183進制(最長的歌曲菊花臺有183個字符)每個時鐘沿加一。用于選擇rom模塊中的地址。(1) 模塊圖像:(2) 程序如下:reg7:0counter1;always(posedgeclkornegedgereset_l)beginif(!reset_l)begincounter1<=8'b0;endelseif

18、(counter1=8'hff)begincounter1<=8'b0;endelsecounter1<=counter1+1'b1;end(3) 仿真波形:(4)仿真波形分析由波形可看出,CLK為輸入時鐘信號,八位輸出二進制信號在每個時鐘上升沿加一(這一點由counter7counter0可以看出,而counter1由于某某原因未能顯示出,并不影響對該模塊功能的判斷)經(jīng)分析,該模塊功能完全正確。3選擇模塊(choice)選擇器完成選擇歌曲的功能。當(dāng)a的信號為0001時將Q1的信號輸出為0011時將Q2的信號輸出為0010時將Q3的信號輸出為0110時將Q4

19、的信號輸出(1) 模塊圖像:(2) 程序如下:module music_display(input clk , input reset_l ,inputa,output reg q1,q2,q3 );reg 3:0 a;reg 4:0 q1,q2,q3; /5位寬度的信號輸出reg 13:0 start; /start為預(yù)置數(shù)reg 7:0 cnt ; /cnt為8位計數(shù)器 用于循環(huán)演奏reg 7:0 cnt_music ; /cnt為8位計數(shù)器 用于循環(huán)演always(posedgeclkornegedgereset_l)beginif(!reset_l)begina<=4'b

20、0;endelsebegincase a isWHEN "0001" => b<="0001" INDEX<=Q1;WHEN "0011" => b<="0010" INDEX<=Q2;WHEN "0010" => b<="0011" INDEX<=Q3;WHEN "0110" => b<="0100" INDEX<=Q4;WHEN OTHERS => nul

21、l;end case ;endmodule(3) 仿真波形:(4)仿真波形分析由波形可看出,當(dāng)輸入信號a為0010時輸出信號b與q3信號相同(即播放q3的音樂),輸出信號index與a相同(即音樂選取顯示與音樂選取按鍵相同)第二個波形圖,當(dāng)輸入信號為0001時,同樣可以看出這一點,因此該模塊功能完全正確。4數(shù)據(jù)翻譯模塊(tontaba):將選擇器所選擇的歌曲rom里的地址的數(shù)據(jù)翻譯成分頻驅(qū)動器(數(shù)控分頻器)分頻所需的控制數(shù)據(jù)、3個led燈數(shù)據(jù)(高中低音)、以及譯碼器所需的數(shù)據(jù)。(1) 模塊圖像:(2) 程序如下:/*-數(shù)碼管掃描 譯碼-*/timescale 1ns/100psmodulesm

22、g_display(inputclk,inputreset_l,input2:0data,output reg3:0seg_s,outputreg7:0seg);wire3:0data0;wire3:0data1;wire3:0data2;wire3:0data3;assigndata0=data/1000;assigndata1=data%1000/100;assigndata2=data%100/10;assigndata3=data%10;reg1:0case_cnt;always(posedgeclkornegedgereset_l)beginif(!reset_l)begincase

23、_cnt<=2'b0;endelsebegincase_cnt<=case_cnt+1'b1;endend/*-數(shù)碼管位選掃描-*/always(posedgeclkornegedgereset_l)beginif(!reset_l)beginseg_s<=4'b0;endelsebegincase(case_cnt1:0)2'b00:seg_s<=4'b0001; 2'b01:seg_s<=4'b0010; 2'b10:seg_s<=4'b0100; 2'b11:seg_s&l

24、t;=4'b1000; default:;endcaseendend/*-把計算出的值放入寄存器hex中準(zhǔn)備譯碼-*/reg3:0hex;always(*)begincase(case_cnt1:0)2'b00:hex<=data3;2'b01:hex<=data2;2'b10:hex<=data1;2'b11:hex<=data0;default:hex<=4'b0 ;endcaseendalways (negedge reset_l or posedge clk)beginif(!reset_l)beginseg

25、<=8'b0;endelsebegincase(hex3:0) 4'h0: seg <= 8'b11000000; 4'h1: seg <= 8'b11111001; 4'h2: seg <= 8'b10100100; 4'h3: seg <= 8'b10110000; 4'h4: seg <= 8'b10011001; 4'h5: seg <= 8'b10010010; 4'h6: seg <= 8'b10000010; 4&

26、#39;h7: seg <= 8'b11111000; 4'h8: seg <= 8'b10000000; 4'h9: seg <= 8'b10010000; 4'hA: seg <= 8'b01110111; 4'hB: seg <= 8'b01111100; 4'hC: seg <= 8'b00111001; 4'hD: seg <= 8'b01011110; 4'hE: seg <= 8'b01111001; 4'

27、hF: seg <= 8'b01110001; default:;endcaseendendendmodule(3) 仿真波形:(4)仿真波形分析由波形可看出,當(dāng)輸入信號index為00110時high0顯示1,code顯示6(即 中音6),預(yù)置初值為101010111000,查詢上文所列的表,可發(fā)現(xiàn)功能完全正確。第二個波形圖,輸入信號00010,輸出為中音2,再查預(yù)置初值,同樣可發(fā)現(xiàn)完全正確。因此該模塊功能完全正確。5.數(shù)控分頻器模塊(speakera) 不多說其功能,直接看程序。(1)模塊圖像:reg clk_12m ; reg clk_8hz; reg 23:0 count

28、er8Hz; reg 23:0 counter12MHz; always (negedge reset_l or posedge clk)begin /12MHz分頻 if (!reset_l) begin counter12MHz <= 24'b0; clk_6m <= 1'b0; end else begin if(counter12MHz=24'd4) begin Counter12MHz<=0; clk_12m<=clk_12m; end else begin Counter12MHz<=counter12MHz+1; end en

29、d end always (negedge reset_l or posedge clk) begin /4Hz分頻 if (!reset_l) begin Counter8Hz <= 24'b0; clk_8hz <= 1'b0; end else begin if(counter8Hz=24'd6519999) begin Counter8Hz<=0; clk_4hz<=clk_8hz; end else begin counter4Hz<=counter8Hz+1; end end always(posedge clk_6m or n

30、egedge reset_l )begin if (!reset_l) begin tone<=14'd16383; end else begin if(tone=14'd16383)begin tone<= start; spks<=spks; /2 分頻得到方波信號 end else begin /通過置數(shù)改變分頻比 tone<=tone+1; end end end (3)仿真波形:將波形放大來看:(4)仿真波形分析此波形仿真分析比較復(fù)雜,如果由于輸入信號為12MHz,其中的分頻系數(shù)比較大,如果直接用該模塊程序進行仿真可能導(dǎo)致仿真時間過長而失敗,因

31、此更改程序,減小其分頻系數(shù),同樣能說明問題,在此,我將12位的預(yù)置初值改為3位,得到如上的仿真波形圖,可發(fā)現(xiàn)在tone給出不同的預(yù)置初值時的分頻效果,仔細(xì)細(xì)數(shù)一下,發(fā)現(xiàn)數(shù)控分頻功能完全正確。end process;end; 6.樂譜數(shù)據(jù)ROM(四個模塊)由于儲存音樂數(shù)據(jù)。這四個模塊原理一模一樣,由于篇幅的關(guān)系,這里只給出菊花臺的仿真波形圖。并附上四首音樂的rom數(shù)據(jù)以及rom的定制過程。(1) rom數(shù)據(jù)程序:(2) always(posedge clk_4hz) /音調(diào)頻率計數(shù)數(shù) begin case(high,mid,low) /根據(jù)不同的音符,預(yù)置分頻比 12'b00000000

32、0000: start<= 16383; 12'b000000000001: start<= 4915; 12'b000000000010: start<= 6168; 12'b000000000011: start<= 7281; 12'b000000000100: start<= 7792; 12'b000000000101: start<= 8730; 12'b000000000110: start<= 9565; 12'b000000000111: start<= 10309; 12

33、'b000000010000: start<= 10650; 12'b000000100000: start<= 11275; 12'b000000110000: start<= 11833; 12'b000001000000: start<= 12088; 12'b000001010000: start<= 12556; 12'b000001100000: start<= 12974; 12'b000001110000: start<= 13346; 12'b000100000000: start<= 13516; 12'b001000000000: start<= 13829; 12'b001100000000: start<= 14108; 12'b010000000000: start<= 14235; 12'b010100000000: start<= 14470; 12'b011000000000: start<= 14678; 12'b011100000000: start<= 14864; default : start

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論