基于FPGA的音樂(lè)彩燈控制器_第1頁(yè)
基于FPGA的音樂(lè)彩燈控制器_第2頁(yè)
基于FPGA的音樂(lè)彩燈控制器_第3頁(yè)
基于FPGA的音樂(lè)彩燈控制器_第4頁(yè)
基于FPGA的音樂(lè)彩燈控制器_第5頁(yè)
已閱讀5頁(yè),還剩23頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、 畢業(yè)論文設(shè)計(jì)任務(wù)書(shū)院(系) 電信工程系 專業(yè)班級(jí) 電子信息工程076班 學(xué)生姓名 一、畢業(yè)論文設(shè)計(jì)題目 基于FPGA的音樂(lè)彩燈控制器 二、畢業(yè)論文設(shè)計(jì)工作自 2011 年 3 月 7 日 起至 2011 年 6 月 25 日止三、畢業(yè)論文設(shè)計(jì)進(jìn)行地點(diǎn): 陜西理工學(xué)院 四、畢業(yè)論文設(shè)計(jì)的內(nèi)容要求: 1設(shè)計(jì)任務(wù)及要求 (1)了解FPGA的結(jié)構(gòu)與工作原理,學(xué)習(xí)VHDL設(shè)計(jì)的基本語(yǔ)句; (2)設(shè)計(jì)基于FPGA的硬件演奏電路,并進(jìn)行軟件仿真; (3)建立與彩燈有關(guān)的硬件電路搭建,進(jìn)行系統(tǒng)聯(lián)調(diào),實(shí)現(xiàn)音樂(lè)彩燈控制; (4)撰寫(xiě)設(shè)計(jì)論文 2成果形式 (1)設(shè)計(jì)報(bào)告(要求畫(huà)出原理電路圖、主程序流程圖及仿真結(jié)果

2、等,寫(xiě)出調(diào)試過(guò)程) (2)硬件電路實(shí)物 3知識(shí)準(zhǔn)備 VHDL語(yǔ)言程序設(shè)計(jì)、EDA技術(shù)、數(shù)字電子技術(shù)、模擬電子技術(shù)等。 5時(shí)間安排 3月 7 日3月20日:設(shè)計(jì)準(zhǔn)備(領(lǐng)任務(wù)書(shū)、收集資料、完成開(kāi)題報(bào)告)。 3月21日4月30日:理論準(zhǔn)備,VHDL編程、仿真。 5月 1 日5月20日:硬件連接、調(diào)試 。 5月21日6月15日:撰寫(xiě)設(shè)計(jì)報(bào)告。 6月16日6月20日:整理說(shuō)明書(shū);準(zhǔn)備答辯報(bào)告、進(jìn)行答辯。 指 導(dǎo) 教 師 系(教 研 室) 電子技術(shù) 系(教研室)主任簽名 批準(zhǔn)日期 接受論文 (設(shè)計(jì))任務(wù)開(kāi)始執(zhí)行日期 學(xué)生簽名 基于FPGA的音樂(lè)彩燈控制器XX(陜西理工學(xué)院 電信工程系 電子信息工程專業(yè) 0

3、7X 班,陜西 漢中 723000)指導(dǎo)教師:XXX 摘 要 設(shè)計(jì)一種利用FPGA以及VHDL硬件描述語(yǔ)言實(shí)現(xiàn)的音樂(lè)彩燈控制器,實(shí)現(xiàn)了樂(lè)曲播放的同時(shí),彩燈隨音樂(lè)閃爍,可以根據(jù)需要配置不同的音樂(lè),最后在EDA實(shí)驗(yàn)開(kāi)發(fā)箱上硬件實(shí)現(xiàn)。關(guān)鍵詞 FPGA;VHDL;彩燈;EDA實(shí)驗(yàn)開(kāi)發(fā)箱The Music Coloured Lights Controller Based on FPGAXXXXXXX(Grade07,ClassX,Major Electronics and Information Engineering,Electronics Engineering Dept.,Shaanxi Univ

4、ersity of Technology,Hanzhong 723000,Shaanxi)tutor:XXXXXXXX Abstract: Design a use of FPGA and VHDL hardware description language realization of music coloured lights controller, realized the music played at the same time, with music flashing lights, can according to need to configure the music, and

5、 the last in different experiment development box on EDA hardware implementation. Keywords: FPGA;VHDL;coloured lamp;EDA hardware implementation目錄引言11 系統(tǒng)設(shè)計(jì)方案11.1系統(tǒng)設(shè)計(jì)要求11.2系統(tǒng)組成21.2.1軟件組成21.2.2硬件組成22 軟件設(shè)計(jì)22.1軟件設(shè)計(jì)的理論基礎(chǔ)22.2.1頂層電路設(shè)計(jì)42.2.2音樂(lè)節(jié)拍和音調(diào)發(fā)生器NOTETABS模塊52.2.3音樂(lè)譜對(duì)應(yīng)分頻預(yù)制數(shù)查表電路TONETABA模塊62.2.4音樂(lè)符數(shù)控11分頻SPE

6、AKERA模塊82.2.5樂(lè)曲演奏音符數(shù)據(jù)文件music梁祝102.2.6 LPM-ROM的定制102.2.7整體舉例說(shuō)明122.3 VHDL程序的仿真與調(diào)試122.3.1音樂(lè)節(jié)拍和音調(diào)發(fā)生器NOTETABS模塊的仿真122.3.2音樂(lè)譜對(duì)應(yīng)分頻預(yù)制數(shù)查表電路TONETABA的仿真132.3.3音樂(lè)符數(shù)控11分頻SPEAKERA模塊的仿真132.3.4完整電路仿真133 硬件設(shè)計(jì)143.1輸入端153.2輸出端15心得體會(huì)17致謝17參考文獻(xiàn)18附錄A 完整程序19附錄B 硬件電路實(shí)物圖25英文文獻(xiàn)及翻譯26 陜西理工學(xué)院畢業(yè)論文(設(shè)計(jì))引言 FPGA(FieldProgrammable Ga

7、te Array),即現(xiàn)場(chǎng)可編程門(mén)陣列,它是在PAL、GAL、CPLD等可編程器件的基礎(chǔ)上進(jìn)一步發(fā)展的產(chǎn)物。它是作為專用集成電路(ASIC)領(lǐng)域中的一種半定制電路而出現(xiàn)的,既解決了定制電路的不足,又克服了原有可編程器件門(mén)電路數(shù)有限的缺點(diǎn)5。通過(guò)FPGA實(shí)現(xiàn)音樂(lè)彩燈控制器,實(shí)質(zhì)上就是將不同音階與特定頻率的方波信號(hào)對(duì)應(yīng)起來(lái),以方波信號(hào)驅(qū)動(dòng)蜂鳴器發(fā)出聲音,再根據(jù)不同音階來(lái)控制彩燈閃爍。與借助微處理器(CPU或MCU)來(lái)實(shí)現(xiàn)樂(lè)曲演奏相比,以純硬件方式完成樂(lè)曲演奏電路邏輯要復(fù)雜的多,僅憑傳統(tǒng)的數(shù)字邏輯技術(shù),即使最簡(jiǎn)單的演奏電路也難以實(shí)現(xiàn),所以要借助功能強(qiáng)大的EDA工具和硬件描述語(yǔ)言,提供了設(shè)計(jì)可能性,使

8、得硬件演奏電路看起來(lái)更直觀。本設(shè)計(jì)在EDA開(kāi)發(fā)平臺(tái)上利用VHDL語(yǔ)言設(shè)計(jì)數(shù)控分頻器電路,利用數(shù)控分頻的原理設(shè)計(jì)音樂(lè)硬件演奏電路,并定制LPM-ROM存儲(chǔ)音樂(lè)數(shù)據(jù),以“梁?!睘槔?,將音樂(lè)數(shù)據(jù)存儲(chǔ)到LPM-ROM,就達(dá)到了以純硬件的手段來(lái)實(shí)現(xiàn)樂(lè)曲的演奏效果。只要修改LPM-ROM所存儲(chǔ)的音樂(lè)數(shù)據(jù),將其換成其他樂(lè)曲的音樂(lè)數(shù)據(jù),再重新定制LPM-ROM,連接到程序中就可以實(shí)現(xiàn)演奏。將演奏的高音和樂(lè)譜顯示分別作為輸出連接到LED彩燈上,彩燈將隨音樂(lè)閃爍出不同花型。1 系統(tǒng)設(shè)計(jì)方案隨著經(jīng)濟(jì)的迅速發(fā)展,人們需要進(jìn)一步提高生活質(zhì)量、美化生活環(huán)境,利用各種彩燈裝飾已成為一種時(shí)尚。音樂(lè)彩燈的出現(xiàn),更好的滿足了人們

9、的追求,音樂(lè)的播放和彩燈有節(jié)奏地閃爍,同時(shí)達(dá)到聽(tīng)覺(jué)和視覺(jué)的完美結(jié)合,成為構(gòu)成其必不可少的條件。要了解如何產(chǎn)生不同音階的音樂(lè),首先要對(duì)樂(lè)音的特性有所了解。樂(lè)音實(shí)際上是有固定頻率的信號(hào)。在樂(lè)曲的構(gòu)成中,樂(lè)音的頻率和持續(xù)的時(shí)間是其構(gòu)成的要素。音階的頻率可以通過(guò)高頻時(shí)鐘進(jìn)行分頻得到。音頻的高低可以通過(guò)外部的LED燈的閃爍來(lái)顯示,這樣在音樂(lè)和流水燈的配合下可以使人產(chǎn)生強(qiáng)烈的節(jié)奏感。1.1系統(tǒng)設(shè)計(jì)要求 (1)分頻主要是通過(guò)一個(gè)可控分頻器實(shí)現(xiàn)的。采用時(shí)鐘的頻率越高,分頻系數(shù)越大,分頻后的音階頻率就越準(zhǔn)確。但同時(shí)由于分頻系數(shù)大,使用的計(jì)數(shù)單元就會(huì)增加,從而耗費(fèi)更多的硬件邏輯單元,因此可以采取一個(gè)較為適中的時(shí)鐘

10、頻率12MHz。 (2)經(jīng)過(guò)分頻后的信號(hào)是一個(gè)脈寬極窄的時(shí)鐘信號(hào),必須對(duì)其進(jìn)行脈沖寬度調(diào)整,增大占空比,才能有效地驅(qū)動(dòng)蜂鳴器。在脈沖寬度調(diào)整時(shí)會(huì)對(duì)此信號(hào)再次二分頻,所以在計(jì)算時(shí),以樂(lè)音音階的二倍頻率去求取在特定時(shí)鐘信號(hào)下的分頻系數(shù),以便在調(diào)整占空比后得到正確的音階頻率。 (3)樂(lè)曲的頻率變化多端,對(duì)應(yīng)的分頻系數(shù)也不斷變化,因此需要將播放的樂(lè)曲的分頻系數(shù)事先存放在ROM中便于讀取。如果將分頻系數(shù)直接作為存儲(chǔ)碼存放在寄存器中,勢(shì)必會(huì)占有更大的容量。因此在這里選取索引值來(lái)作為存儲(chǔ)碼以減小容量。 (4)使用開(kāi)發(fā)平臺(tái)上的LED燈模擬彩燈,不同音調(diào)對(duì)應(yīng)不同的花形,根據(jù)節(jié)奏閃爍,實(shí)現(xiàn)音樂(lè)彩燈控制器。1.2系

11、統(tǒng)組成1.2.1軟件組成軟件部分共分五個(gè)模塊,音樂(lè)節(jié)拍和音調(diào)發(fā)生器NOTETABS模塊、音樂(lè)譜對(duì)應(yīng)分頻預(yù)制數(shù)查表電路TONETABA模塊、音樂(lè)符數(shù)控11分頻SPEAKERA模塊、樂(lè)曲演奏音符數(shù)據(jù)文件music梁祝和ROM模塊,其中,Music模塊存放樂(lè)曲中的音符數(shù)據(jù),地址發(fā)生器模塊作為music模塊中所定制的音符數(shù)據(jù)ROM的地址發(fā)生器,分頻預(yù)制數(shù)模塊提供分頻預(yù)制數(shù)即給數(shù)控分頻模塊提供計(jì)數(shù)初值,十六進(jìn)制模塊對(duì)12MHz的時(shí)鐘脈沖進(jìn)行16分頻,得到750KHz的頻率,給數(shù)控分頻模塊提供時(shí)鐘脈沖,數(shù)控分頻模塊根據(jù)分頻預(yù)制數(shù)輸出各個(gè)音符所對(duì)應(yīng)的頻率,軟件組成框圖如圖1.1。音樂(lè)符數(shù)控11分頻SPEAK

12、ERA音樂(lè)譜對(duì)應(yīng)分頻預(yù)制數(shù)查表電路TONETABS音樂(lè)節(jié)拍和音調(diào)發(fā)生器NOTETABSCLK輸出圖1.1 軟件組成框圖1.2.2硬件組成用MAXPlusII把軟件部分編譯仿真結(jié)束后,下載到試驗(yàn)箱上,外接電源、信號(hào)發(fā)生器、LED燈和蜂鳴器,調(diào)試后實(shí)現(xiàn)音樂(lè)彩燈控制器。如圖1.2硬件原理框圖。EPF10K10LC84-4(將軟件部分下載到該芯片) 蜂鳴器時(shí)鐘信號(hào)8HzLED燈時(shí)鐘信號(hào)12MHz圖1.2硬件原理框圖2 軟件設(shè)計(jì)2.1軟件設(shè)計(jì)的理論基礎(chǔ) (1)音樂(lè)硬件演奏電路基本原理6 硬件電路的發(fā)聲原理,聲音的頻譜范圍約在幾十到幾千赫茲,若能利用程序來(lái)控制FPGA芯片某個(gè)引腳輸出一定頻率的矩形波,接上

13、蜂鳴器就能發(fā)出相應(yīng)頻率的聲音。樂(lè)曲中的每個(gè)音符對(duì)應(yīng)著一個(gè)確定的頻率,要想FPGA發(fā)出不同音符的音調(diào),實(shí)際上只要控制它輸出相應(yīng)音符的頻率即可。樂(lè)曲都是由一連串的音符組成的,因此按照樂(lè)曲的樂(lè)譜依次輸出相應(yīng)音符所對(duì)應(yīng)的頻率,就可以在蜂鳴器上連續(xù)地發(fā)出各個(gè)音符的音調(diào)。而要準(zhǔn)確地演奏出一首樂(lè)曲,僅僅讓蜂鳴器能夠發(fā)聲是不夠的,還必須準(zhǔn)確地控制樂(lè)曲的節(jié)奏,即樂(lè)曲中每個(gè)音符的發(fā)聲頻率及其持續(xù)時(shí)間是樂(lè)曲能連續(xù)演奏的兩個(gè)關(guān)鍵因素。 (2)音符頻率的獲得多個(gè)不同頻率的信號(hào)可通過(guò)對(duì)某個(gè)基準(zhǔn)頻率進(jìn)行分頻獲得。由于各個(gè)音符的頻率多為非整數(shù),而分頻系數(shù)又不能為小數(shù),故必須將計(jì)算機(jī)得到的分頻系數(shù)四舍五入取整。若基準(zhǔn)頻率過(guò)低,

14、則分頻系數(shù)過(guò)小,四舍五入取整后的誤差較大。若基準(zhǔn)頻率過(guò)高,雖然可以減少頻率的相對(duì)誤差,但分頻結(jié)構(gòu)將變大。實(shí)際上應(yīng)該綜合考慮這兩個(gè)方面的因素,在盡量減少誤差的前提下,選取合適的基準(zhǔn)頻率。為提高輸出信號(hào)的驅(qū)動(dòng)能力,以使揚(yáng)聲器有足夠的功率發(fā)音,需要再通過(guò)一個(gè)分頻器將原來(lái)的分頻器輸出脈沖均衡為對(duì)稱方波(占空比為1/2),但這時(shí)的頻率是原來(lái)的1/2。下表中各音符的分頻系數(shù)就是從750KHz的基準(zhǔn)頻率二分頻得到的375KHz頻率基準(zhǔn)上計(jì)算得到的。由于最大的分頻系數(shù)是1274,故分頻器采用11位二進(jìn)制計(jì)數(shù)器能滿足要求,樂(lè)曲中的休止符,只要將分頻系數(shù)設(shè)為0,此時(shí)揚(yáng)聲器就不會(huì)發(fā)出聲音,如表2.14。表2.1 各

15、音符的頻率及其對(duì)應(yīng)的分頻系數(shù)音符名 頻率(Hz) 分頻系數(shù) 計(jì)數(shù)初值 音符名 頻率(Hz) 分頻系數(shù) 計(jì)數(shù)初值休止符低音1低音2低音3低音4低音5低音6低音7中音1中音2中音3375000249.349330.396370.92386.598394.737495.376555.56588.697638.84724.5740127411351011970950757675637587505204777391210361077119712901372141014801542中音4中音5中音6中音7高音1高音2高音3高音4高音5高音6高音7796.178882.353989.4461136.3631

16、175.5491353.7901512.0971609.4421802.8842027.0272272.72746842537933031927724823320818516515791622166817171728177017991814183918621882 (3)樂(lè)曲節(jié)奏的控制 本設(shè)計(jì)中的梁祝樂(lè)曲,最小節(jié)拍為四一拍,若將一拍的時(shí)間定為1秒,則只需要提供一個(gè)4Hz的時(shí)鐘頻率即可產(chǎn)生四一拍的時(shí)長(zhǎng)(0.25秒),對(duì)于其它占用時(shí)間較長(zhǎng)的節(jié)拍(必為四一拍的整數(shù)倍)則只需要將該音符連續(xù)輸出相應(yīng)的次數(shù)即可。計(jì)數(shù)時(shí)鐘信號(hào)作為輸出音符快慢的控制信號(hào),時(shí)鐘快時(shí)輸出節(jié)拍速度就快,演奏的速度也就快,時(shí)鐘慢時(shí)輸

17、出節(jié)拍的速度就慢,演奏的速度自然低。 (4)樂(lè)譜發(fā)生器本文將樂(lè)譜中的音符數(shù)據(jù)存儲(chǔ)在LPM-ROM中,如梁祝樂(lè)曲中的第一個(gè)音符為“3”,此音在邏輯中停留了4個(gè)時(shí)鐘節(jié)拍,即1秒的時(shí)間,相應(yīng)地,音符“3”就要在LPM-ROM中連續(xù)的四個(gè)地址上都存儲(chǔ)。當(dāng)一個(gè)4Hz的時(shí)鐘到來(lái)時(shí),相應(yīng)的從LPM-ROM中輸出第一個(gè)音符“3”。 (5)彩燈將樂(lè)譜發(fā)生器的輸出端接上LED燈模擬彩燈,LED燈會(huì)隨著音樂(lè)的變化開(kāi)始閃爍,因?yàn)閷?shí)驗(yàn)箱上的燈是低電平亮,所以LED燈滅的是輸出音調(diào),而燈的閃爍速度則是按照音樂(lè)節(jié)奏。2.2軟件模塊設(shè)計(jì)2.2.1頂層電路設(shè)計(jì) (1)頂層電路模塊圖圖2.1頂層電路模塊圖 (2)頂層電路VHDL

18、程序 LIBRARY IEEE;-硬件演奏電路頂層設(shè)計(jì) USE IEEE.STD_LOGIC_1164.ALL; ENTITY Songer IS PORT(CLK12MHZ:IN STD_LOGIC;-音調(diào)頻率信號(hào) CLK8HZ:IN STD_LOGIC;-節(jié)拍頻率用于控制音長(zhǎng)(節(jié)拍)的時(shí)鐘頻率 CODE1:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);-簡(jiǎn)譜碼輸出顯示 HIGH1:OUT STD_LOGIC;-高8度指示 SPKOUT:OUT STD_LOGIC);-聲音輸出 END; ARCHITECTURE one OF Songer IS COMPONENT No

19、teTabs-原件U1例換化 PORT(clk:IN STD_LOGIC; ToneIndex:OUT STD_LOGIC_VECTOR(3 DOWNTO O); END COMPONENT; COMPONENT ToneTaba-元件U2例換化 PORT(Index:IN STD_LOGIC_VECTOR(3 DOWNTO O); CODE:OUT STD_LOGIC_VECTOR(3 DOWNTO O); HIGH:OUT STD_LOGIC; Tone:OUT STD_LOGIC_VECTOR(10 DOWNTO O); END COMPONENT; COMPONENT Speakera

20、-元件U3例換化 PORT(clk:IN STD_LOGIC; Tone:IN STD_LOGIC_VECTOR(10 DOWNTO 0); SpkS:OUT STD_LOGIC); END COMPONENT; SIGNAL Tone:STD_LOGIC_VECTOR(10 DOWNTO 0); SIGNAL ToneIndex:STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN u1:NoteTabs PORT MAP(clk=>CLK8HZ,ToneIndex=>ToneIndex);-參數(shù) 傳遞映射語(yǔ)句 u2:ToneTaba PORT MAP(Inde

21、x=>ToneIndex,Tone=>Tone,COED=>CODE1,HIGH=>HIGH1); u3:Speakera PORT MAP(clk=>CLK12MHZ,Tone=>Tone,SpkS=>SPKOUT); END; 2.2.2音樂(lè)節(jié)拍和音調(diào)發(fā)生器NOTETABS模塊 (1)音樂(lè)節(jié)拍和音調(diào)發(fā)生器NOTETABS模塊生成圖,如圖2.2圖2.2音樂(lè)節(jié)拍和音調(diào)發(fā)生器NOTETABS模塊 在NOTETABS中設(shè)置了一個(gè)8位二進(jìn)制計(jì)數(shù)器,作為音符數(shù)據(jù)ROM的地址發(fā)生器。這個(gè)計(jì)數(shù)器的計(jì)數(shù)頻率選為4Hz,即每一計(jì)數(shù)器的停留時(shí)間為0.25秒,恰為當(dāng)全音符

22、設(shè)為1秒時(shí),四四拍的4分音符持續(xù)時(shí)間。例如,NOTETABS在以下VHDL邏輯描述中,梁祝樂(lè)曲的第一個(gè)音符為“3”,此音在邏輯中停留了4個(gè)時(shí)鐘節(jié)拍,即1秒時(shí)間。 (2)音樂(lè)節(jié)拍和音調(diào)發(fā)生器NOTETABS模塊VHDL程序設(shè)計(jì) LIBRARY IEEE;-音樂(lè)節(jié)拍和音調(diào)發(fā)生器模塊 USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY NoteTabs IS PORT(clk:IN STD_LOGIC;-音樂(lè)節(jié)拍時(shí)鐘4HZ ToneIndex:OUT STD_LOGIC_VECTOR (3 DOWNTO O); E

23、ND; ARCHITECTURE one OF NoteTabs IS COMPONENT music -音符數(shù)據(jù)ROM PORT(address:IN STD_LOGIC_VECTOR(7 DOWNTO O); clock:IN STD_LOGIC; q :OUT STD_LOGIC_VECTOR(3 DOWNTO 0); END COMPONENT; SIGNAL Counter:STD_LOGIC_VECTOR (7 DOWNTO 0);-8位二進(jìn)制計(jì)數(shù)器 BEGIN CNT8:PROCESS(clk,Counter,sel,rst) BEGIN IF(clk'EVENT AND

24、 clk='1')and(Counter=256 or rst='0') then Counter<="00000000"Counter<=Counter+1; END IF; IF(clk'EVENT AND clk='1')and(sel='0')then Counter<="10010000"Counter<=Counter+1; END IF; END PROCESS; u1:MUSIC PORT MAP(address=>Counter,q=&

25、gt;ToneIndex,clock=>clk); END2.2.3音樂(lè)譜對(duì)應(yīng)分頻預(yù)制數(shù)查表電路TONETABA模塊 (1)音樂(lè)譜對(duì)應(yīng)分頻預(yù)制數(shù)查表電路TONETABA模塊生成圖,如圖2.3圖2.3音樂(lè)譜對(duì)應(yīng)分頻預(yù)制數(shù)查表電路TONETABA模塊音符的持續(xù)時(shí)間需根據(jù)樂(lè)曲的速度及每個(gè)音符的節(jié)拍數(shù)來(lái)確定,模塊TONETABA的功能首先是為SPEAKERA提供決定所發(fā)音符的分頻預(yù)制數(shù),而此數(shù)在SPEAKERA輸入口停留的時(shí)間即為此音符的節(jié)拍值。模塊TONETABA是樂(lè)譜簡(jiǎn)譜碼對(duì)應(yīng)的分頻預(yù)制數(shù)查表電路,其中設(shè)置了梁祝樂(lè)曲全部音符所對(duì)應(yīng)的分頻預(yù)制數(shù),共13個(gè),每一音符的停留時(shí)間由音樂(lè)節(jié)拍和音調(diào)發(fā)生

26、器模塊NOTETABS的clk的輸入頻率決定,在此為4Hz。這13個(gè)值的輸出,由對(duì)應(yīng)于TONETBAB的4位輸入值Index3.0確定,而Index3.0最多有16種可選值。輸向TONETABA中Index3.0的值ToneIndex3.0的輸出值與持續(xù)的時(shí)間由模塊NOTETABS決定。 (2)音樂(lè)譜對(duì)應(yīng)分頻預(yù)制數(shù)查表電路TONETABA模塊VHDL程序設(shè)計(jì) LIBRARY IEEE;-音樂(lè)譜對(duì)應(yīng)分頻預(yù)制數(shù)查表電路模塊 USE IEEE.STD_LOGIC_1164.ALL; ENTITY ToneTaba IS PORT(Index:IN STD_LOGIC_VECTOR(3 DOWNTO

27、O);-4位預(yù)制數(shù)查表 CODE:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); HIGH:OUT STD_LOGIC;-音樂(lè)高8度指示 Tone:OUT STD_LOGIC_VECTOR(10 DOWNTO 0);-音樂(lè)符對(duì)應(yīng)分頻11位 END; ARCHITECTURE one OF ToneTaba IS BEGIN Search:PROCESS(Index) BEGIN CASE Index IS-譯碼電路,查表方式,控制音調(diào)的預(yù)制數(shù)13組頻率 WHEN"0000"=>Tone<="11111111111"CODE

28、<="0000"HIGH<='0'-2047 WHEN"0001"=>Tone<="01100000101"CODE<="0001"HIGH<='0'-773 WHEN"0010"=>Tone<="01110010000"CODE<="0010"HIGH<='0'-912 WHEN"0011"=>Tone<="

29、;10000001100"CODE<="0011"HIGH<='0'-1036 WHEN"0101"=>Tone<="10010101101"CODE<="0101"HIGH<='0'-1197 WHEN"0110"=>Tone<="10100001010"CODE<="0110"HIGH<='0'-1290 WHEN"0111&

30、quot;=>Tone<="10101011100"CODE<="0111"HIGH<='0'-1372 WHEN"1000"=>Tone<="10110000010"CODE<="0001"HIGH<='1'-1410 WHEN"1001"=>Tone<="10111001000"CODE<="0010"HIGH<='1&#

31、39;-1480 WHEN"1010"=>Tone<="11000000110"CODE<="0011"HIGH<='1'-1542 WHEN"1100"=>Tone<="11001010110"CODE<="0101"HIGH<='1'-1622 WHEN"1101"=>Tone<="11010000100"CODE<="011

32、0"HIGH<='1'-1668 WHEN"1111"=>Tone<="11011000000"CODE<="0001"HIGH<='1'-1728 WHEN OTHERS=>NULL; END CASE; END PROCESS; END;2.2.4音樂(lè)符數(shù)控11分頻SPEAKERA模塊 (1)音樂(lè)符數(shù)控11分頻SPEAKERA模塊生成圖,如圖2.4圖2.4音樂(lè)符數(shù)控11分頻SPEAKERA模塊 音符的頻率可由SPEAKERA獲得,這是一個(gè)數(shù)控分頻器,由其

33、clk端輸入一具有較高頻率(本設(shè)計(jì)為12MHz)的信號(hào),通過(guò)SPEAKERA分頻后由SPKOUT輸出,由于直接從數(shù)控分頻器中出來(lái)的輸出信號(hào)是脈寬極窄的脈沖式信號(hào),為了有利于驅(qū)動(dòng)揚(yáng)聲器,需另加一個(gè)D觸發(fā)器以均衡其占空比,但這時(shí)的頻率將是原來(lái)的1/2。SPEAKERA對(duì)clk輸入信號(hào)的分頻比由11位預(yù)制數(shù)Tone10.0決定。SPKOUT的輸出頻率將決定每一個(gè)音符的音調(diào),這樣,分頻計(jì)數(shù)器的預(yù)制值Tone10.0與SPKOUT的輸出頻率就有了對(duì)應(yīng)關(guān)系。例如,在TONETABA模塊中若取Tone10.0=1036,將發(fā)出音符為“3”音的信號(hào)頻率。 (2)音樂(lè)符數(shù)控11分頻SPEAKERA電路模塊VHD

34、L程序設(shè)計(jì) LIBRARY IEEE;-音樂(lè)符數(shù)控分頻電路模塊 USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY Speakera IS PORT(clk:IN STD_LOGIC;-音調(diào)頻率信號(hào)12MHZ Tone:IN STD_LOGIC_VECTOR(10 DOWNTO 0);-音樂(lè)符對(duì)應(yīng)分頻11位 SpkS:OUT STD_LOGIC);-音樂(lè)輸出 END; ARCHITECTURE one OF Speakera IS SIGNAL PreCLK,FullSpkS:STD_LOGIC; BEGIN

35、 DivideCLK:PROCESS(clk) VARIABLE Count4:STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN PreCLK<='0'-將CLK進(jìn)行16分頻,PreCLK為CLK的16分頻 IF Count4>11 THEN PreCLK<='1'Count4:="0000" ELSIF clk'EVENT AND clk='1'THEN Count4:=Count4+1; END IF; END PROCESS; GenSpkS:PROCESS(PreCLK,

36、Tone)-11位可預(yù)置計(jì)數(shù)器 VARIABLE Count11:STD_LOGIC_VECTOR(10 DOWNTO 0); BEGIN IF PreCLK'EVENT AND PreCLK='1'THEN IF Count11=16#7FF# THEN Count11:=Tone;FullSpkS<='1' ELSE Count11:=Count11+1;FullSpkS<='0'END IF; END IF; END PROCESS; DelaySpkS:PROCESS(FullSpkS)-將輸出再2分頻,展寬脈沖,使揚(yáng)

37、聲器有足夠功率發(fā)音 VARIABLE Count2:STD_LOGIC; BEGIN IF FullSpkS'EVENT AND FullSpkS='1'THEN Count2:=NOT Count2; IF Count2='1'THEN SpkS<='1' ELSE SpkS<='0'END IF; END IF; END PROCESS; END;2.2.5樂(lè)曲演奏音符數(shù)據(jù)文件music梁祝 WIDTH=4;-樂(lè)曲演奏數(shù)據(jù),輸出位寬4 DEPTH=256;-256個(gè)4位數(shù)據(jù)點(diǎn) Address_radix=d

38、ec;-地址信號(hào)用十進(jìn)制數(shù)表示 Data_radix=dec;-輸出數(shù)據(jù)是十進(jìn)制數(shù) CONTENT CEGIN 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; 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; 3

39、9: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; 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:

40、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:6; 121:8; 122:6; 123:5; 124:3; 125:5; 126:6; 127:8; 128:5; 129:5; 130:5; 131:5; 132

41、:5; 133:5; 134:5; 135:5; 136:0; 137:0; 138:0; 139:0; END; 其中WIDTH=4,表示數(shù)據(jù)輸出寬度為4;DEPTH=256,表示共有256個(gè)4位數(shù)據(jù)點(diǎn);ADDRESS-RADIX=DEC,表示地址信號(hào)用十進(jìn)制;DATA-RADIX=DEC,表示輸出數(shù)據(jù)是十進(jìn)制。形成ROM中的配置數(shù)據(jù)(初始化數(shù)據(jù))文件的方法如下:打開(kāi)MAX+PlusII編輯器中,在File菜單下的New菜單上選擇Text Editor File命令,進(jìn)入文本編輯器,然后輸入以上格式的數(shù)據(jù)文件,以后綴.mif保存,記住保存路徑,本設(shè)計(jì)中的路徑為“e:/zw/music_dat

42、a.mif”。2.2.6LPM-ROM的定制 (1)LPM-ROM定制的基本步驟3 進(jìn)入MAX+PlusII,選菜單File MegaWizard Plug-In Manager,選擇“ Creat a new .”,然后按“Next”鍵,選擇LPM-ROM,最后在Browse下的欄中鍵入路徑與輸出文件名“e:/zw/music_data.vhd”。 單擊“Next”鍵,選擇ROM數(shù)據(jù)為寬度為4,地址線寬度為256,。 通過(guò)“Browse”鈕,找到ROM中的加載文件路徑與輸出文件名:“e:/zw/music_data.vhd”。 (2)定制好的ROM文件VHDL程序如下 LIBRARY IEE

43、E; USE IEEE.STD_LOGIC_1164.ALL; ENTITY music IS PORT(address:IN STD_LOGIC_VECTOR(7 DOWNTO O); inclock:IN STD_LOGIC; q:OUT STD_LOGIC_VECTOR(3 DOWNTO O); END music; ARCHITECTURE SYN OF music IS SIGNAL sub_wire0:STD_LOGIC_VECTOR(3 DOWNTO O); COMPONENT lpm_rom GENERIC(lpm_width :NATURAL; lpm_widthad :NA

44、TURAL; lpm_address_control:STRING; lpm_outdata :STRING; lpm_file :STRING); PORT(address:IN STD_LOGIC_VECTOR(7 DOWNTO O); inclock:IN STD_LOGIC; q:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); END COMPONENT; BEGIN q<=sub_wire0(3 DOWNTO 0); lpm_rom_component:lpm_rom GENERIC MAP(LPM_WIDTH=>4; LPM_WIDTHAD=>

45、8; LPM_ADDRESS_CONTROL=>"REGISTERED" LPM_OUTDATA=>"UNREGISTERED" LPM_FILE=>"e:/zw/music_data.mif"); PORT MAP(address=>address; inclock=>inclock; q=>sub_wire0); END SYN; (3)ROM模塊生成圖,如圖2.5圖2.5 ROM模塊2.2.7整體舉例說(shuō)明 例如:NOTETABS在上述的VHDL邏輯描述中,梁祝樂(lè)曲的第一個(gè)音符為“3”此音在邏輯

46、中停留了4個(gè)時(shí)鐘節(jié)拍,即1秒的時(shí)間,相應(yīng)地,所對(duì)應(yīng)的“3”音符分頻預(yù)制數(shù)值為1036,在SPEAKERA的輸入端停留了1秒。隨著NOTETABS中的計(jì)數(shù)器按4Hz的時(shí)鐘速率作加法計(jì)數(shù)時(shí),即隨地址遞增時(shí),音符數(shù)據(jù)模塊ROM中的音符數(shù)據(jù)將從ROM中通過(guò)ToneIndex3.0端口輸向TONETABA模塊,梁祝樂(lè)曲就開(kāi)始連續(xù)自然地演奏起來(lái)。2.3 VHDL程序的仿真與調(diào)試 在MAX+PlusII仿真環(huán)境中,將各個(gè)模塊的程序分別編譯,然后分別建立波形文件,選擇FLEX10K系列EPF10K10LC84-4型號(hào)為目標(biāo)芯片分別進(jìn)行仿真,仿真波形圖如下。2.3.1 音樂(lè)節(jié)拍和音調(diào)發(fā)生器NOTETABS模塊的

47、仿真 音樂(lè)節(jié)拍和音調(diào)發(fā)生器NOTETABS模塊仿真波形如圖2.6。圖2.6音樂(lè)節(jié)拍和音調(diào)發(fā)生器NOTETABS模塊的仿真波形圖2.3.2 音樂(lè)譜對(duì)應(yīng)分頻預(yù)制數(shù)查表電路TONETABA模塊的仿真 音樂(lè)譜對(duì)應(yīng)分頻預(yù)制數(shù)查表電路TONETABA模塊仿真波形如圖2.7。圖2.7音樂(lè)譜對(duì)應(yīng)分頻預(yù)制數(shù)查表電路TONETABA模塊的仿真波形2.3.3 音樂(lè)符數(shù)控11分頻SPEAKERA模塊的仿真 音樂(lè)符數(shù)控11分頻SPEAKERA模塊仿真波形如圖2.8。2.8音樂(lè)符數(shù)控11分頻SPEAKERA模塊的仿真波形圖因?yàn)闀r(shí)鐘信號(hào)為12MHz,很密,為了能看見(jiàn)SpkS的輸出波形,將整個(gè)仿真圖縮放,故clk與Tone變

48、成色帶。2.3.4 完整電路仿真 完整電路仿真波形如圖2.9。圖2.9完整電路仿真波形 給CLK12MHz賦值83.33ns,CLK8Hz賦值125ms,因?yàn)榈谝粋€(gè)音“3”占了4個(gè)時(shí)鐘節(jié)拍,為了能看出效果,將END TIME設(shè)置為1s,仿真結(jié)果如上圖。3 硬件設(shè)計(jì)本設(shè)計(jì)硬件分為三大部分:EPF10K10LC84-4芯片1、LED燈、蜂鳴器,其中,芯片實(shí)物圖見(jiàn)圖3.1,芯片管腳圖見(jiàn)圖3.2。 圖3.1 EPF10K10LC84-4實(shí)物圖 圖3.2 EPF10K10LC84-4管腳圖 (1)本設(shè)計(jì)使用FLEX10K系列的EPF10K10LC84-4芯片,將編譯仿真成功的程序下載到芯片中,使其實(shí)現(xiàn)音

49、樂(lè)演奏。其中,自行鎖定管腳,7、8、9、10為CODE輸出,即為簡(jiǎn)譜碼顯示;11管腳為HIGH輸出,表示高音;16管腳為SPKOUT輸出,連接蜂鳴器;1管腳為時(shí)鐘信號(hào)8Hz,提供節(jié)奏頻率;43管腳為時(shí)鐘信號(hào)12MHz,提供音調(diào)頻率。 (2)LED燈分別連在7、8、9、10、11管腳上,用來(lái)表示輸出音調(diào)的簡(jiǎn)譜碼以及標(biāo)記高音,可以實(shí)現(xiàn)隨音調(diào)變化閃爍。 (3)蜂鳴器連接到16管腳,實(shí)現(xiàn)樂(lè)曲輸出。 (4)給整體電路加上+5V電源,使整個(gè)電路工作,實(shí)現(xiàn)音樂(lè)輸出的同時(shí),LED燈隨之閃爍。3.1輸入端本設(shè)計(jì)輸入端給芯片EPF10K10LC84-4接入時(shí)鐘信號(hào),分別為12MHz和8Hz,用來(lái)提供音調(diào)發(fā)聲頻率頻率和樂(lè)曲節(jié)奏,其中,12MHz時(shí)鐘信號(hào)由數(shù)字信號(hào)發(fā)生器提供,8Hz時(shí)鐘信號(hào)由實(shí)驗(yàn)箱提供。本設(shè)計(jì)使用GEXIN.FPGA/P844實(shí)驗(yàn)箱,箱體內(nèi)部配有48MHz晶振作為系統(tǒng)的時(shí)鐘源,如圖3.3所示,為得到一

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論