基于FPGA的音樂播放器設計(共23頁)_第1頁
基于FPGA的音樂播放器設計(共23頁)_第2頁
基于FPGA的音樂播放器設計(共23頁)_第3頁
基于FPGA的音樂播放器設計(共23頁)_第4頁
基于FPGA的音樂播放器設計(共23頁)_第5頁
已閱讀5頁,還剩19頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上目錄專心-專注-專業(yè)第1章 緒論1.1 研究背景隨著電子技術的飛速發(fā)展,微電子技術的進步主要表現(xiàn)在大規(guī)模集成電路加工技術即半導體工藝技術的發(fā)展上,使得本征半導體的工藝水平的線寬已經(jīng)達到了60nm,并在不斷地縮小,面在硅片單位面積上,集成了更多的晶體管。集成電路設計正在不斷地向超大規(guī)模,極低功耗和超高速的方向發(fā)展,電子產(chǎn)品的功能越來越強大,體積越來越小,功耗越來越低。順應電子技術的發(fā)展趨勢,可編程邏輯器件和EDA 技術使設計方法發(fā)生了質(zhì)的變化。把以前“電路設計+硬件搭試+調(diào)試焊接”轉(zhuǎn)化為“功能設計+軟件模擬+仿真下載”。利用EDA 開發(fā)平臺,采用可編程邏輯器件CPLDF

2、PGA 使硬件的功能可通過編程來實現(xiàn),這種新的基于芯片的設計方法能夠使設計者有更多機會充分發(fā)揮創(chuàng)造性思維,實現(xiàn)多種復雜數(shù)字邏輯系統(tǒng)的功能,將原來由電路板設計完成的工作放到芯片的設計中進行,減少了連線和體積,提高了集成度,降低了干擾,大大減輕了電路設計和PCB設計的工作量和難度,增強了設計的靈活性,有效地提高了工作效率,增加了系統(tǒng)的可靠性和穩(wěn)定性,提高了技術指標。這些技術使得各種電子產(chǎn)品迅速的進入了我們的生活,我們處在一個被電子產(chǎn)品深度包圍的時代,在一個普通老百姓的家里,衣食住行,每一個產(chǎn)品的誕生都離不開EDA技術,從彩色電視機,到智能冰箱,到全自動洗衣機,電飯煲,到微波爐,電磁爐,電子琴,再到

3、個人隨身用的手機,MP3音樂播放器都需要EDA技術提供支持。本文應用VHDL硬件描述語言,設計一個樂曲硬件播放電路,它能將預先設置存儲好的樂曲自動播放出來,下面對樂曲播放電路的設計與實現(xiàn)中涉及的EDA技術,以及EDA技術中常用的開發(fā)器件CPLDFPGA可編程邏輯器件,開發(fā)語言VHDL以及開發(fā)軟件MAX+PLUSII作簡單介紹。1.2 可編程邏輯控件FPGA本設計中選用FPGA,主要是因為它與傳統(tǒng)的MCU相比有以下幾個方面的優(yōu)點:編程方式簡便先進。FPGA產(chǎn)品中部分是采用菊花鏈在系統(tǒng)編程方式的。這種先進的編程方式已成為當今世界上各類可編程器件發(fā)展的趨勢。因為它省卻了價格昂貴,操作不便的專用編程器

4、,只需要一個十分簡單的下載編程電路和一條PC機的打印機通訊線就行了。它無須編程高壓,在TTL電平下隨時可進行在線編程,并可進行所謂菊花鏈式多片串行編程。高可靠性。在高可靠應用領域,MCU的缺憾為FPGA的應用留下了很大的用武之地。這族器件盡管在功能開發(fā)上是通過EDA軟件實現(xiàn)的。但物理機制卻像一片74LS164那樣純屬硬件電路,十分可靠。通過合理設計,大多數(shù)應用中,無須考慮復雜的復位和初始化。設計中只需利用簡單的語句將閑置狀態(tài)導入同一初始入口,就能有效防止任何可能的“死機”現(xiàn)象。由于是并行工作,它的任一輸入腳都可用作類似于MCU的中斷監(jiān)測引腳,且反應速度僅為納妙級。FPGA的高可靠性還表現(xiàn)在幾乎

5、可將整個系統(tǒng)下載于同一芯片中,從而大大縮小了體積,易于管理和屏蔽。高速。FPGA的時鐘延遲可達納秒級,結(jié)合其并行工作方式,在超高速應用領域和實時測控方面有非常廣闊的應用前景。功能強大,應用廣闊。目前,FPGA的可選擇范圍很大,可根據(jù)不同的應用選用不同容量的芯片,如Lattice的ispLSI和AMD公司的MACH,最小芯片的等效邏輯門為1000門,最大達數(shù)十萬門。ALTERA和XILINX公司推出的百萬門的FPGA可實現(xiàn)幾乎任何形式的數(shù)字電路或數(shù)字系統(tǒng)的設計。隨著這類器件的廣泛應用和成本的大幅下降,以及產(chǎn)品上市速率的提高,FPGA在系統(tǒng)中的直接應用率正直逼ASIC的開發(fā)。易學易用,開發(fā)便捷。單

6、片機應用系統(tǒng)的設計對于行家里手來說是十分簡單的事。然而,對于初學者,諸如CPU的工作方式、眾多特殊寄存器的用法、中斷概念等等,著實不是一件容易的事。相比之下,FPGA應用的學習卻不需要太多的預備知識,只要稍具一點數(shù)字電路和計算機軟件設計的基礎知識,就能在短期內(nèi)掌握基本的設計方法和開發(fā)技巧。而且反過來去學用單片機,就顯得輕車熟路多了。這無疑是高技術為我們的學習提供了捷徑,站在巨人的肩膀當然能更快地獲得成功??梢灶A言,我國EDA技術的學習熱潮和FPGA的應用熱潮決不會遜色于過去10年的單片機熱潮。開發(fā)周期短。由于相應的EDA軟件功能完善而強大,仿真能力便捷而實時,開發(fā)過程形象而直觀,兼之硬件因素涉

7、及甚少,因此可以在很短時間內(nèi)完成十分復雜的系統(tǒng)設計,這是產(chǎn)品快速進入市場的最寶貴的特征。一些EDA專家預言,未來的大系統(tǒng)的FPGA設計僅僅是各類再應用邏輯與IP核(CORE)的拼裝,其設計周期僅以小時計。TI公司認為,一個ASIC百分之八十的功能可用IP核等現(xiàn)成邏輯合成。1.3 開發(fā)語言VHDLVHDL是非常高速集成電路硬件描述語言,是可以描述硬件電路的功能、信號連接關系及定時關系的語言它能比電路原理圖更有效地表示硬件電路的特性。使用VHDL語言,可以就系統(tǒng)的總體要求出發(fā),自上至下地將設計內(nèi)容細化,最后完成系統(tǒng)硬件的整體設計。VHDL語言的主要特點是:功能強大,靈活性高:VHDL語言是一種功能

8、強大的語言結(jié)構(gòu),可用簡潔明確的代碼來進行復雜控制邏輯的設計。同時VHDL語言還支持層次化的設計,支持設計庫和可重復使用的元件生成。目前,VHDL語言已成為一種設計、仿真、綜合的標準硬件描述語言。器件無關性:VHDL語言允許設計者在生成一個設計時不需要首先選擇一個具體的器件。對于同一個設計描述,可以采用多種不同器件結(jié)構(gòu)來實現(xiàn)其功能。因此設計描述階段,可以集中精力從事設計構(gòu)思。當設計、仿真通過后,指定具體的器件綜合、適配即可??梢浦残裕篤HDL語言是一種標準的語言,故采用VHDL進行的設計可以被不同的EDA工具所支持。從一個仿真工具移植到另一個仿真工具,從一個綜合工具移植到另一個綜合工具,從一個工

9、作平臺移植到另一個工作平臺。在一個EDA工具中采用的技術技巧,在其它工具中同樣可以采用。自頂向下的設計方法:傳統(tǒng)的設計方法是,自底向上的設計或平坦式設計。自底向上的設計方法是先從底層模塊設計開始,逐漸由各個模塊形成功能復雜的電路。這種設計方法優(yōu)點是很明顯的,因為它是一種層次設計電路,一般電路的子模塊都是按照結(jié)構(gòu)或功能劃分,因此這種電路層次清楚,結(jié)構(gòu)明確,便于多人合作開發(fā),同時設計文件易于存檔,易于交流。自底向上設計方法的缺點也很明顯,往往由于整體設計思路不對而使的花費幾個月的低層設計付之東流。平坦式設計是整個電路只含有一個模塊,電路的設計是平鋪直敘的,沒有結(jié)構(gòu)和功能上的劃分,因此不是層次電路的

10、設計方式。優(yōu)點是小型電路設計時可以節(jié)省時間和精力,但隨著電路復雜程度的增加,這種設計方式的缺點變的異常突出。自頂向下的設計方法是將要設計的電路進行最頂層的描述(頂層建模),然后利用EDA軟件進行頂層仿真,如果頂層設計的仿真結(jié)果滿足要求,則可以繼續(xù)將頂層劃分的模塊進行低一級的劃分并仿真,這樣一級一級設計最終將完成整個電路的設計。自頂向下的設計方法與前面兩種方法相比優(yōu)點是很明顯的。數(shù)據(jù)類型豐富:作為硬件描述語言的一種VHDL語言的數(shù)據(jù)類型非常豐富,除了VHDL語言自身預定義的十種數(shù)據(jù)類型外,在VHDL語言程序設計中還可以由用戶自定義數(shù)據(jù)類型。特別是std_logic數(shù)據(jù)類型的使用,使得VHDL語言

11、能最真實模擬電路中的復雜信號。運行庫和程序包豐富:目前支持VHDL語言的程序包很豐富,大多以庫的形式存放在特定的目錄下,用戶可隨時調(diào)用。如IEEE庫收集了std_logic_1164、std_logic_arith、std_logic_unsigned等程序包。在FPGA綜合時,還可以使用EDA軟件商提供的各種庫和程序包。而且用戶利用VHDL語言編寫的各種成果都可以以庫的形式存放,在后續(xù)的設計中可以繼續(xù)使用。建模方便:由于VHDL語言中可綜合的語句和用于仿真的語句齊備,行為描述能力強,因此VHDL語言特別適合信號建模。VHDL語言無論仿真還是綜合都是非常合適的描述語言。 VHDL語言是一種硬件

12、電路的建模描述語言,因此與普通的計算機語言有較大差別,普通計算機語言是CPU按照時鐘的節(jié)拍,一條指令執(zhí)行完后才能執(zhí)行下一條指令,因此指令執(zhí)行是有先后順序的,也即是順序執(zhí)行,而每條指令的執(zhí)行占用特定的時間。而與VHDL語言描述結(jié)果相對應的是硬件電路,它遵循硬件電路的特點,語句的執(zhí)行沒有先后順序,是并發(fā)的執(zhí)行的;而且語句的執(zhí)行不象普通軟件那樣每條指令占用一定的時間,只是遵循硬件電路自身的延遲時間。1.4 開發(fā)環(huán)境MAX+PLUSMAX+PLUS提供了全面的邏輯設計能力,包括電路圖、文本和波形的設計輸入以及編譯、邏輯綜合、仿真和定時分析以及器件編程等諸多功能。特別是在原理圖輸入等方面,MAX+PLU

13、S被公認為是最易使用、人機界面最友好的PLD 開發(fā)軟件。這樣靈活多變的輸入方式,給設計使用者帶來了極大的方便。1.5 研究思路及主要工作本文按照EDA開發(fā)流程,采用VHDL硬件描述語言開發(fā),將樂曲硬件播放電路設計進行模塊化分解,層次化設計,分成幾個單獨的結(jié)構(gòu)體,每個結(jié)構(gòu)體實現(xiàn)部分功能,最后,經(jīng)頂層文件將各單獨結(jié)構(gòu)體進行綜合,實現(xiàn)樂曲硬件播放。主要工作:根據(jù)硬件播放電路的功能進行全局分析,采用自上至下的設計方法,從系統(tǒng)總體要求出發(fā),逐步將設計內(nèi)容細化,最后完成系統(tǒng)結(jié)構(gòu)的整體設計,實現(xiàn)預先設置樂曲的播放功能。實現(xiàn)功能樂曲播放,需要完成以下設計:預置樂曲,本文選取了梁祝與歡樂頌作預置,作預置時,需要

14、將樂曲音符轉(zhuǎn)換成相應的代碼,通過計算逐一將音符轉(zhuǎn)換成代碼,通過EDA開發(fā)平臺MAX+PLUSII進行樂曲定制;為了提供樂曲發(fā)音所需要的發(fā)音頻率,編寫數(shù)控分頻器程序,對單一輸入高頻,進行預置數(shù)分頻,生成每個音符發(fā)音的相應頻率;為了給分頻提供預置數(shù),需要計算分頻預置數(shù);對每部分結(jié)構(gòu)單元逐一進行編譯,生成相應的元器件符號,并對獨立結(jié)構(gòu)單元功能進行仿真;啟動MAX+PLUSII全程編譯,生成具體輸入,輸出端口的圖形文件。啟動全程功能仿真,生成仿真波形文件。生成下載文件,在ZYE1502D實驗開發(fā)板上利用Altera公司的FLXE10KEPF10K10LC844芯片進行功能驗。第2章 系統(tǒng)設計2.1 系

15、統(tǒng)原理傳統(tǒng)數(shù)字邏輯設計方法相比,本設計借助于功能強大的EDA工具和硬件描述語言來完成,如果只以純硬件的方法完成樂曲播放電路的設計,將是難以實現(xiàn)的。本設計采用了梁祝與歡樂頌的曲子來完成。表2.1 簡譜中的音名與頻率的關系表音符名頻 率(Hz)音符名頻 率(Hz)音符名頻 率(Hz)音符名頻 率(Hz)休止符低音5394.737中音6989.446高音41609.442低音1294.349低音6495.376中音71136.363高音51802.884低音2330.396低音7555.56高音11175.549高音62027.027低音3370.92中音4796.178高音21353.790高音7

16、2272.727低音4386.598中音5882.353高音31512.097為了便于理解,首先介紹一下硬件電路的發(fā)聲原理。我們知道,聲音的頻譜范圍約在幾十到幾千赫茲,若能利用程序來控制FPGA某個引腳輸出一定頻率的矩形波,接上揚聲器就能發(fā)出相應頻率的聲音。而樂曲中的每一音符對應著一個確定的頻率,因此,要想FPGA發(fā)出不用音符的音調(diào),實際上只要控制它輸出相應音符的頻率即可(音符和頻率的關系見表2.1)。樂曲都是由一連串的音符組成,因此按照樂曲的樂譜依次輸出這些音符所對應的頻率,就可以在揚聲器上連續(xù)地發(fā)出各個音符的音調(diào)。而要準確地播放出一首樂曲,僅僅讓揚聲器能夠發(fā)聲是不夠的,還必須準確地控制樂曲

17、的節(jié)奏,即每個音符的持續(xù)時間。由此可見,樂曲中每個音符的發(fā)音頻率及其持續(xù)的時間是樂曲能夠連續(xù)播放的兩個關鍵因素。2.1.1 音調(diào)的控制頻率的高低決定了音調(diào)的高低。計算出簡譜中從低音1到高音1之間每個音名對應的頻率,所有不同頻率的信號都是從同一個基準頻率分頻得到的。由于音階頻率多為非整數(shù),而分頻系數(shù)又不能為小數(shù),因此必須將計算得到的分頻數(shù)四舍五入取整。若基準頻率過低,則由于分頻比太小,四舍五入取整后的誤差較大;若基準頻率過高,雖然誤差較小,但分頻數(shù)將變大。實際的設計應綜合考慮這兩方面的因素,在盡量減小頻率誤差的前提下取合適的基準頻率。因此,要想FPGA發(fā)出不同音符的音調(diào),實際上只要控制它輸出相應

18、音符的頻率即可。綜合考慮各因素,本文中選取12MHZ作為CLK的分頻計數(shù)器的輸入分頻信號。樂曲都是由一連串的音符組成,因此按照樂曲的樂譜依次輸出這些音符所對應的頻率,就可以在揚聲器上連續(xù)地發(fā)出各個音符的音調(diào)。2.1.2 音長的控制音符的持續(xù)時間須根據(jù)樂曲的速度及每個音符的節(jié)拍數(shù)來確定。因此,在想控制音符的音長,就必須知道樂曲的速度和每個音符所對應的節(jié)拍數(shù),在這個設計中所播放的樂曲的最短的音符為四分音符,如果將全音符的持續(xù)時間設為1s的話,那么一拍所應該持續(xù)的時間為0.25秒,則只需要再提供一個4HZ的時鐘頻率即可產(chǎn)生四分音符的時長。要想讓系統(tǒng)知道現(xiàn)在應該播放哪個音符,而這個音符持續(xù)的時間應該是

19、多少,就必須編寫樂曲文件,在樂曲文件中音符是按地址存放的,當系統(tǒng)工作時就按4Hz的頻率依次讀取簡譜,當系統(tǒng)讀到某個音符的簡譜時就對應發(fā)這個音符的音調(diào),持續(xù)時間為0.25秒,而如果在曲譜文件中這個音符為三拍音長,那又該如何控制呢?其實只要將該音符連續(xù)書寫三遍,這時系統(tǒng)讀樂曲文件的時候就會連續(xù)讀到三次,也就會發(fā)三個0.25秒的音長,這時我們聽上去就會持續(xù)了三拍的時間,通過這樣一個簡單的操作就可以控制音樂的音長了。2.2 系統(tǒng)結(jié)構(gòu)本系統(tǒng)主要由三個功能模塊組成:NOTETABS.VHD,TONETABA.VHD和 SPEAKER.VHD。第一部分NOTETABS,地址發(fā)生器,實現(xiàn)按節(jié)拍讀樂譜的功能;第

20、二部分TONETABA,查表電路,為SPEAKER提供分頻預置數(shù),實現(xiàn)樂曲譯碼輸出CODE4:0;第三部分SPEAKERA,產(chǎn)生發(fā)音頻率,實現(xiàn)樂曲播放;其結(jié)構(gòu)如圖2.1所示。圖2.1 樂曲播放電路結(jié)構(gòu)方框圖第三章 各模塊設計與仿真3.1 定制音符數(shù)據(jù)3.1.1定制音符數(shù)據(jù)ROM的mif文件為了實現(xiàn)樂曲的播放,首先需要將曲譜定制到音符數(shù)據(jù)ROM里面,然后才能按照一定的節(jié)拍從ROM中讀出曲譜。以下定制的是梁祝與歡樂頌的mif 文件(梁祝與歡樂頌的簡譜見附錄E、F)。WIDTH=5;DEPTH=256;ADDRESS_RADIX=DEC;DATA_RADIX=DEC;CONTENT BEGIN注意:

21、實用文件中是展開以下數(shù)據(jù)的,每一組占一行;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;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;

22、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:6;89:6;90:6;91:6;92:6;93:6;94:5;95:6;96:8;97:8;98:8;99:9;100:12101:12;102:12;103:10;104:9;105:9;106:10;107:9;108:8;109:8;11

23、0: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:10;131:10;132:10;133:10;134:11;135:11;136:12;137:12;138:12;139:12;140:11;141:11;142:10;143:10;144:9;145:9;146:8;147:8;148:8;149:8;150:9;151:9;152:10;153:10;154:10;155:10;156:10;

24、157:9;158:9;159:9;160:9;161:9;162:10;163:10;164:10;165:10;166:11;167:11;168:12;169:12;170:12;171:12;172:11;173:11;174:10;175:10;176:9;177:9;178:8;179:8;180:8;181:8;182:9;183:9;184:10;185:10;186:9;187:9;188:9;189:8;190:8;191:8;192:8;193:8;194:9;195:9;196:9;197:9;198:10;199:10;200:8;201:8;202:9;203:9;

25、204:10;205:11;206:10;207:10;208:8;209:8;210:9;211:9;212:10;213:11;214:10;215:10;216:8;217:8;218:8;219:8;220:9;221:9;222:5;223:5;224:10;225:10;226:10;227:10;228:10;229:10;230:11;231:11;232:12;233:12;234:12;235:12;236:11;237:11;238:10;239:10;240:9;241:9;242:8;243:8;244:8;245:8;246:9;247:9;248:10;249:1

26、0;250:9;251:9;252:9;253:8;254:8;255:8;END;其中WIDTH=5,表示數(shù)據(jù)輸出位寬為5;DEPTH=256,表示共有256個5位數(shù)據(jù)點;ADDRESS-RADIX=DEC,表示地址信號用十進制;DATA-RADIX=DEC,表示輸出數(shù)據(jù)是十進制數(shù)。形成ROM中的配置數(shù)據(jù)(初始化數(shù)據(jù))文件的方法如下:在MAX+PLUS中編輯.mif文件。首先在File菜單下的New菜單上選擇Text Editor File命令,進入文本編輯器,然后輸入以上格式的數(shù)據(jù)文件。文件中的關鍵詞WIDTH設置ROM的數(shù)據(jù)寬度;DEPTH設置ROM數(shù)據(jù)的深度,文件中設置的5即為5位數(shù)據(jù)

27、的數(shù)量,256等效于8位地址線寬度;ADDRESS-RADIX=DEC和DATA-RADIX=DEC表示設置地址和數(shù)據(jù)的表達式格式都是十進制;地址/數(shù)據(jù)表以CONTENT BEGIN開始,以END結(jié)束;其中的地址/數(shù)據(jù)表達方式是冒號左邊寫ROM地址值,冒號右邊寫對應此地址放置的十進制數(shù)據(jù),如45:8,表示45為地址,8為該地址中的數(shù)據(jù)。這樣每讀到一個地址,即可輸出其相應的數(shù)據(jù)。文件編輯好后,保存時取文件名為“songer.mif”,存盤的路徑為“c:music songer.mif”。3.1.2在MAX+PLUS下定制的LPM_ROM1)具體步驟如下:(1) 進入MAX+PLUS,選

28、菜單 TOOL->megawizard plug-in manager,選擇“creat a new”,然后按“next”鍵,選擇LPM-ROM;最后在browse下的欄中鍵入路徑與輸出文件名:c:music songer.vhd,注意后綴vhd小寫。(2) 單擊“next”鍵,選擇ROM數(shù)據(jù)位寬度為5,地址線寬為8,即設置此ROM能存儲5位二進制數(shù)據(jù)共256個。(3) 通過“ browse” 鈕,找到ROM中的加載文件路徑和文件名:c:music songer.mif注意ROM元件的inclock是地址鎖存時鐘。(4) 打開已定制的ROM文件songer.

29、vhd,將它設置為工程,并確定目標器件,進行測試仿真波形。2)定制好的ROM文件VHDL程序見附錄A。3) 已定制的ROM文件songer.vhd的仿真波形如圖3.1所示:圖3.1 songer模塊仿真波形圖4) 波形分析:此樂譜發(fā)生器模塊的功能是輸出存儲在LPM-ROM中的各個音符數(shù)據(jù),由上面的仿真波形圖可看到“梁?!睒非械牡谝粋€音符為“3”即為“00011”此音在邏輯中停留了4個時鐘,那么相應隨著程序中的地址計數(shù)器按4Hz的時鐘頻率作加法計數(shù)時,即隨地址遞增時,將從音符數(shù)據(jù)ROM中將連續(xù)取出4個音符“00011”,樂曲中的第二個音符為“5”即為“00101”此音在邏輯中停留了3個時鐘,相

30、應地,將從音符數(shù)據(jù)ROM中將連續(xù)取出3個音符“00101”等其它狀態(tài)時,仿真波形圖證明了模塊的功能。3.2 音符數(shù)據(jù)地址發(fā)生器模塊NOTETABS1)功能:NOTETABS模塊設置了一個8位二進制計數(shù)器(計數(shù)最大值為256),作為音符數(shù)據(jù)ROM的地址發(fā)生器。每來一個時鐘脈沖信號(Clk),8位二進制計數(shù)器就計數(shù)一次,ROM文件中的地址也就隨著遞增,音符數(shù)據(jù)ROM中的音符也就一個接一個連續(xù)的取出來了。在地址發(fā)生器的VHDL設計中,這個計數(shù)器的計數(shù)頻率選為4Hz,即每一計數(shù)值的停留時間為0.25秒,恰為當全音符設為1秒,四四拍的4分音符持續(xù)時間。例如,地址發(fā)生器在以下的VHDL邏輯描述中,“梁祝”

31、樂曲的第一個音符為“3”,此音在邏輯中停留了4個時鐘節(jié)拍,即1秒時間。那么相應隨著程序1中的計數(shù)器按4Hz的時鐘頻率作加法計數(shù)時,即隨地址遞增時,將從音符數(shù)據(jù)ROM中將連續(xù)取出4個音符“3”通過toneindex4.0端口輸向分頻預置數(shù)模塊。這樣梁祝樂曲中的音符就一個接一個的通過toneindex4.0端口輸向分頻預置數(shù)模塊。2)音符數(shù)據(jù)地址發(fā)生器模塊NOTETABS生成元件符號(見圖3.2):端口說明:CLK 4HZ端口:作為節(jié)拍脈沖信號輸入端口;RST端口:作為從頭開始播放歌曲脈沖信號輸入端口;SEL端口:作為播放第二首歌脈沖信號輸入端口; 圖3.2 NOTETABS生成元件符號TONEI

32、NDE4.0端口:作為音符數(shù)據(jù)地址的輸出端口;3) 對應的程序見附錄B。4) 音符數(shù)據(jù)地址發(fā)生器模塊NOTETABS的仿真波形如(圖3.3)所示:圖3.3 NOTETABS的仿真波形圖3.3 預置數(shù)查表電路模塊TONETABA1)功能:音樂預置數(shù)查表電路電路模塊是樂曲簡譜碼對應的分頻預置數(shù)查表電路。它提供了每個音符所對應的分頻預置數(shù),即給數(shù)控分頻模塊提供計數(shù)初值,這里列出了在樂曲中所用到的22個音符的分頻預置數(shù)見(表3.1)。在這個模塊的VHDL邏輯描述中設置了四四拍樂曲中全部音符所對應的分頻預置數(shù),共22個,每一音符的停留時間由音樂節(jié)拍和地址發(fā)生器模塊的時鐘(Clk)的輸入頻率決定,在此為4

33、Hz。這22個值的輸出由附錄三的程序的4位輸入值index4.0確定。輸向附錄四的程序中index4.0的值又由地址發(fā)生器模塊的輸出toneindex4.0的輸出值和持續(xù)時間決定。表3.1 各音階對應的分頻預置數(shù)關系表音符名頻 率(Hz)分頻系數(shù)計數(shù)初值音符名頻 率(Hz)分頻系數(shù)計數(shù)初值休止符02047中音4796.1784681579低音1294.3491274773中音5882.3534251622低音2330.3961135912中音6989.4463791668低音3370.9210111036中音71136.3633301717低音4386.5989701077高音11175.54

34、93191728低音5394.7379501197高音21353.7902771770低音6495.3767571290高音31512.0972481799低音7555.566751372高音41609.4422331814中音1588.6976371410高音51802.8842081839中音2638.845871480高音62027.0271851862中音3742.5745051542高音72272.72716518822) 預置數(shù)查表電路電路模塊TONETABA生成元件符號(見圖3.4):端口說明:INDEX4.0端口:作為上一級音符數(shù)據(jù)地址的輸入端;CODE4.0端口:作為音符數(shù)據(jù)

35、簡譜碼的輸出顯示端;HIGH端口:作為音符數(shù)據(jù)簡譜碼高8度的輸出顯示端; 圖3.4 TONETABA生成元件符號TONE10.0端口:作為音符數(shù)據(jù)分頻預置數(shù)的輸出端;3) 對應的程序見附錄C。4) 音符數(shù)據(jù)地址發(fā)生器模塊NOTETABA的仿真波形如(圖3.5)所示:圖3.5 NOTETABA的仿真波形圖5) 波形分析: 模塊的功能是輸出各個音符所對應的分頻預置數(shù),即當index是“00000”,tone輸出為2047,即休止符的分頻預置數(shù);當index是“00101”時, tone輸出為1197即低音5的分頻預置數(shù);當index是“01010”時, tone輸出為1542即高音1的分頻預置數(shù)等

36、等其它狀態(tài)時,tone分別輸出相應音符的12分頻預置數(shù),仿真波形圖證明了程序?qū)崿F(xiàn)了模塊的功能。3.4 發(fā)聲頻率產(chǎn)生模塊SPEAKERA1)音符的頻率由數(shù)控分頻模塊獲得,這是一個數(shù)控分頻電路。它是由一個初值可變的加法計數(shù)器構(gòu)成。該計數(shù)器的模為2047,當計數(shù)器記滿時,計數(shù)器產(chǎn)生一個溢出信號FULL,此溢出信號就是用作發(fā)音的頻率信號。在計數(shù)器的輸入端給定不同的初值,而此預置數(shù)就是表3.1中的計數(shù)初值,就可得到不同音符的發(fā)音頻率信號。它計滿時所需要的計數(shù)初值、分頻系數(shù)可由下列式子來表示。計數(shù)初值(Tone)=2047-分頻系數(shù)分頻系數(shù)=基準頻率/音符的發(fā)生頻率低音時Tone值小,分頻系數(shù)大,溢出信號

37、周期長,揚聲器發(fā)出的聲音低,Tone隨音樂的樂譜變化大,自動控制分頻比,實現(xiàn)了數(shù)控分頻,發(fā)生信號的頻率與音調(diào)Tone成正比。這就是利用數(shù)控分頻器自動播放音樂的原理。時鐘(Clk)端輸入的是在十六進制模塊里對12MHz的信號進行16分頻得到的750KHz,750KHz的信號根據(jù)分頻預置數(shù)模塊中所提供的計數(shù)初值,分別得出相應音符頻率的兩倍值。此時從數(shù)控分頻器中出來的輸出信號是脈寬極窄的脈沖式信號,為了有利于驅(qū)動揚聲器,需另加一個D觸發(fā)器以均衡其占空比,這時的頻率就變?yōu)樵瓉淼?/2,剛好就是相應音符的頻率。數(shù)控分頻模塊中對Clk輸入信號的分頻比由11位預置數(shù)tone10.0決定。SPKOUT的輸出頻

38、率將決定每一個音符的音調(diào),這樣,分頻計數(shù)器的預置值tone10.0與SPKOUT的輸出頻率就有了對應關系。2) 發(fā)聲頻率產(chǎn)生模塊SPEAKERA生成元件符號(見圖3.6):端口說明:CLK12MHZ端口:作為發(fā)音頻率初始信號輸入端口;TONE10.0端口:作為音符數(shù)據(jù)分頻預置數(shù)的輸入端;SPKS端口:作為樂曲的聲音輸出端口; 圖3.6 SPEAKERA生成元件符號3) 對應的程序見附錄D。4) 發(fā)聲頻率產(chǎn)生模塊SPEAKERA的仿真波形如(圖3.7)所示:圖3.7 SPEAKERA的仿真波形圖波形分析:Speakera 音樂符數(shù)控分頻此模塊的功能是根據(jù)初始值Tone的值,對輸入時鐘信號Clk的

39、頻率進行分頻,得到想要的音符的發(fā)聲頻率其時鐘(Clk)端輸入的是在十六進制模塊里對12MHz的信號進行16分頻得到的750KHz,750KHz的信號根據(jù)分頻預置數(shù)模塊中所提供的計數(shù)初值,分別得出相應音符頻率的兩倍值。在分頻預置數(shù)模塊中若取 tone10.0=912,將發(fā)出音符為低音2的信號頻率的發(fā)聲頻率等等其它狀態(tài),因此這個程序?qū)崿F(xiàn)了模塊的功能。3.5樂曲播放電路頂層電路根據(jù)各個模塊產(chǎn)生的元件符號,連接組成樂曲播放電路頂層文件,其頂層電路分為三個模塊,音符數(shù)據(jù)地址發(fā)生器模塊NOTETABS,預置數(shù)查表電路電路模塊TONETABA,發(fā)聲頻率產(chǎn)生模塊SPEAKERA,圖3.8所示的是頂層電路組成圖

40、。圖3.8 頂層電路組成圖第四章 硬件測試本設計目標器件選用ZYE1502D實驗開發(fā)板上利用Altera公司的FLXE10KEPF10K10LC844芯片進行功能驗證(引腳鎖定的對應關系如表4.1所示),通過EDA開發(fā)工具MAX+PLUSII對各個模塊的VHDL源程序及頂層電路進行編譯、邏輯綜合,完成電路的糾錯、驗證、仿真等各種測試工作,將設計的頂層電路組成圖music.gdf文件內(nèi)容下載到對應的配置芯片中,外接揚聲器,系統(tǒng)成功實現(xiàn)了樂曲梁祝與歡樂頌的播放,能自動從頭開始循環(huán)播放,也可隨時起停、整體復位、按鍵選擇播放方式、循環(huán)演奏以及發(fā)光管二極管動態(tài)顯示播放的音符和高8度音調(diào)。經(jīng)實際電路測試驗

41、證,達到了設計的要求。表4.1 實驗箱主板與下載板元件的連接封裝關系表器件名稱信號名端口名EPF10K10器件名稱信號名端口名EPF10K10輸出發(fā)光管LED1CODE427撥位開關KD1RST54輸出發(fā)光管LED2CODE328撥位開關KD2SEL58輸出發(fā)光管LED3CODE229輸出發(fā)光管LED8HIGH38輸出發(fā)光管LED4CODE130全局時鐘1P2.4CLK4HZ1輸出發(fā)光管LED5CODE035全局時鐘2P2.5CLK12MHZ43喇叭SPEAKSPKOUT3第五章 結(jié)束語(1) 本次基于VHDL音樂播放器的設計經(jīng)過了整體分析、模塊化分析、整體與模塊的仿真分析這樣三個步驟,硬件實

42、現(xiàn)了整體復位、按鍵選擇播放方式、循環(huán)演奏以及發(fā)光管顯示樂譜的功能。(2) 在做數(shù)控分頻器模塊的仿真時一定要處理好時序問題。(3) 本次設計可以說達到了設計要求,但尚有需要改進的地方。隨著樂譜的復雜程度加大,如果依然在音調(diào)發(fā)生器的程序中通過時鐘計數(shù)來決定音符的輸出,會加大編程的繁雜度,這時一個很好的解決辦法就是把將要演奏的樂譜存放在人為開辟的存儲空間里,這樣只需要在相應地址中讀出音符即可。(4)通過本次論文設計,讓我進一步了解了數(shù)控分頻器的工作原理和功能作用,并學會了利用LPM模塊制作ROM文件的方法,也更深一層地懂得了頂層文件通過例化語句與其他模塊結(jié)合的好處,同時對EDA實驗箱的操作有了進一步

43、的了解,熟悉掌握了EDA的文本編程設計方法和仿真波形的編輯。參考文獻1李國洪,沈明山,胡輝編.可編程器件EDA技術與實踐.機械工業(yè)出版社,2005.8.1.2潘松,黃繼業(yè)編著,EDA技術實用教程.科學出版社,2007.12.3徐志軍,徐光輝,CPLD/FPGA的開發(fā)與應用,電子工業(yè)出版社,20014譚會生,EDA技術基礎,湖南大學出版社,20045李巖,黃夫海,基于FPGA的MIDI音樂發(fā)生器設計,20106潘曉利,陳學煌,劉永志,基于MIDI模塊的音樂發(fā)生器設計【期刊論文】電子測量技術,20077沈明山.EDA技術及可編程器件應用實訓,科學出版社,2004.6(4):318-326.8劉婷婷

44、,李軍.電子設計自動化(EDA).北京師范大學出版社,2007,9(2):250-257.9趙明富,李立軍.EDA技術基礎,北京大學出版社,2007.5(5):221-224.10刑建平,曾繁泰.VHDL程序設計教程.3版.北京:清華大學出版社,2005:45-46.附錄附錄A: 定制好的ROM文件VHDL程序LIBRARY ieee;USE ieee.std_logic_1164.all;ENTITY songer ISPORT(address: IN STD_LOGIC_VECTOR (7 DOWNTO 0); inclock: IN STD_LOGIC ; q: OUT STD_LOGI

45、C_VECTOR (4 DOWNTO 0);END songer;ARCHITECTURE SYN OF songer ISSIGNAL sub_wire0: STD_LOGIC_VECTOR (4 DOWNTO 0);COMPONENT lpm_romGENERIC (lpm_width: NATURAL;lpm_widthad: NATURAL;lpm_address_control: STRING;lpm_outdata: STRING;lpm_file: STRING);PORT (address: IN STD_LOGIC_VECTOR (7 DOWNTO 0);inclock: I

46、N STD_LOGIC ; q: OUT STD_LOGIC_VECTOR (4 DOWNTO 0);END COMPONENT;BEGINq <= sub_wire0(4 DOWNTO 0);lpm_rom_component : lpm_romGENERIC MAP (LPM_WIDTH => 5,LPM_WIDTHAD => 8,LPM_ADDRESS_CONTROL => "REGISTERED",LPM_OUTDATA => "UNREGISTERED",LPM_FILE => "C:/music/

47、songer.mif")PORT MAP (address => address,inclock => inclock,q => sub_wire0);END SYN;附錄B: 音符數(shù)據(jù)地址發(fā)生器模塊NOTETABS程序LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY NoteTabs ISPORT ( clk : IN STD_LOGIC; SEL : IN STD_LOGIC; RST : IN STD_LOGIC; ToneIndex : OUT ST

48、D_LOGIC_VECTOR (4 DOWNTO 0) );END;ARCHITECTURE one OF NoteTabs ISCOMPONENT songer PORT( address : IN STD_LOGIC_VECTOR (7 DOWNTO 0); inclock : IN STD_LOGIC ; q : OUT STD_LOGIC_VECTOR (4 DOWNTO 0);END COMPONENT; SIGNAL Counter : STD_LOGIC_VECTOR (7 DOWNTO 0); SIGNAL S:STD_LOGIC_VECTOR (1 DOWNTO 0);BEG

49、IN S(1)<=rst; S(0)<=sel;CNT8 : PROCESS(clk, Counter,sel,rst) VARIABLE Coun : STD_LOGIC_VECTOR (7 DOWNTO 0);BEGINIF (clk'EVENT AND clk = '1') then CASE S IS WHEN "01"=>Coun:=""Coun:=Coun+1; WHEN "10"=>Coun:=""Coun:=Coun+1; WHEN "11&

50、quot;=> Coun:=Coun+1; WHEN OTHERS=>NULL; END CASE;END IF; Counter<=Coun;END PROCESS; u1 : songer PORT MAP(address=>Counter , q=>ToneIndex,inclock=>clk);END;附錄C: 預置數(shù)查表電路模塊TONETABA程序Library ieee;Use ieee.std_logic_1164.all;Entity tonetaba is Port( index : in std_logic_vector(4 downto

51、 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 isWhen "00000"=>tone<=""code<="00000"high<='0'When "00

52、001"=>tone<=""code<="00001"high<='0'When "00010"=>tone<=""code<="00010"high<='0'When "00011"=>tone<=""code<="00011"high<='0'When "00100"=>tone

53、<=""code<="00100"high<='0'When "00101"=>tone<=""code<="00101"high<='0'When "00110"=>tone<=""code<="00110"high<='0'When "00111"=>tone<=""c

54、ode<="00111"high<='0'When "01000"=>tone<=""code<="01000"high<='1'When "01001"=>tone<=""code<="01001"high<='1'When "01010"=>tone<=""code<="0101

55、0"high<='1'When "01011"=>tone<=""code<="01011"high<='1'When "01100"=>tone<=""code<="01100"high<='1'When "01101"=>tone<=""code<="01101"high<='1'When "01110"=>tone<=""code<="01110&qu

溫馨提示

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

評論

0/150

提交評論