基于CPLD FPGA的音樂播放器.doc_第1頁
基于CPLD FPGA的音樂播放器.doc_第2頁
基于CPLD FPGA的音樂播放器.doc_第3頁
基于CPLD FPGA的音樂播放器.doc_第4頁
基于CPLD FPGA的音樂播放器.doc_第5頁
已閱讀5頁,還剩11頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

科信學(xué)院電子應(yīng)用系統(tǒng)(三級項目)設(shè)計說明書(2015/2016學(xué)年第二學(xué)期)題 目 : 基于CPLD/FPGA的音樂播放器 _ _ 專業(yè)班級 : 電子信息工程13級1班 學(xué) 號: 130072115 學(xué)生姓名 : 張雨馨 指導(dǎo)教師 : 賈東立、李麗宏、馬永強、董克儉 設(shè)計周數(shù) : 3周 設(shè)計成績 : 2016年7月8日目錄1.概述.2 1.1課題研究背景.2 1.2課題研究意義.2 1.3關(guān)于VHDL.2 1.3課題目的.22.總體設(shè)計.3 2.1設(shè)計題目.3 2.2設(shè)計任務(wù).3 2.3設(shè)計要求.3 2.4設(shè)計方案.3 2.5系統(tǒng)設(shè)計框圖.43.系統(tǒng)硬件設(shè)計.4 3.1原理圖.4 3.2音樂演奏電路原理.5 3.3音調(diào)的控制音符頻率的獲得.5 3.4樂曲節(jié)奏的控制音長的控制.6 3.5PCB板圖.64.系統(tǒng)設(shè)計說明.7 4.1流程圖.7 4.2程序代碼.75電路運行測試.12 5.1測試過程.12 5.2運行效果圖.136.課程設(shè)計遇到的問題.137.總結(jié).138.參考文獻.141.概述1.1課題研究背景隨著科學(xué)技術(shù)的進步,電子器件和電子系統(tǒng)設(shè)計方法日新月異,電子設(shè)計自動化技術(shù)正是適應(yīng)了現(xiàn)代電子產(chǎn)品設(shè)計的要求,吸收了多學(xué)科最新成果,而形成的一門新技術(shù)?,F(xiàn)如今,掌握EDA技術(shù)是電子信息類專業(yè)的學(xué)生工程技術(shù)人員所必備的基本能力和技能。順應(yīng)電子技術(shù)的發(fā)展趨勢,可編程邏輯器件和eda技術(shù)使設(shè)計方法發(fā)生了質(zhì)的變化。應(yīng)用EDA開發(fā)平臺,采用可編程邏輯器件CPLD/FPGA使硬件的功能可通過編程來實現(xiàn),這種新的基于芯片的設(shè)計方法能夠設(shè)計者有更多機會充分發(fā)揮創(chuàng)造性思維,實現(xiàn)多種復(fù)雜數(shù)字邏輯系統(tǒng)的功能,將原來由電路板完成的工作放到芯片的設(shè)計中進行,減少了連線和體積,提高了集成度,降低了干擾,大大減輕了電路設(shè)計PCB設(shè)計的工作量和難度,增強了設(shè)計的靈活性,有效地提高了工作效率,增加了系統(tǒng)的可靠性和穩(wěn)定性,提高了技術(shù)指標(biāo)。傳統(tǒng)電子電路的設(shè)計,首先要對系統(tǒng)進行分析,然后按功能對系統(tǒng)進行劃分,接下來就要選定特定芯片,焊接成pcb電路板,最后對成本pcb電路板進行調(diào)。這樣的設(shè)計沒有靈活性可言,達(dá)成的系統(tǒng)需要的芯片種類多且數(shù)目大,而且對于電路圖的設(shè)計和電路板的設(shè)計都需要很大的工作量,工作難度也很高。然而,隨著可編程器件和eda技術(shù)的發(fā)展,傳統(tǒng)設(shè)計的劣勢被克服,采用可編程邏輯器件基于芯片的設(shè)計方法,其間的內(nèi)部邏輯和引腳可以由設(shè)計者自行決定,大大提高了設(shè)計的靈活性,工作效率,將系統(tǒng)集成在一個芯片上的設(shè)計,使系統(tǒng)具有體積。1.2課題研究意義各種電子產(chǎn)品迅速地進入了我們的生活,我們處在一個被電子產(chǎn)品身處包圍的時代,在一個普通老百姓的家里,衣食住行,每一個產(chǎn)品的誕生都離不開EDA技術(shù), 從彩色電視機到智能冰箱,到全自動洗衣機,電飯煲到微波爐,電磁爐,電子琴,再到個人隨身用的手機,mp3音樂播放器,都需要EDA技術(shù)提供支持。1.3關(guān)于VHDLVHDL是一種硬件描述語言,所以對電子電路和系統(tǒng)的行為進行描述,基于這種描述,結(jié)合相關(guān)的軟件工具,可以得到所期望的實際電路與系統(tǒng)。VHDL是非常高速集成電路硬件描述語言, 是可以描述硬件電路的功能、信號連接問題關(guān)系及定時關(guān)系的語言,它能比電路原理圖有效的表達(dá)硬件電路的特性。使用VHDL語言,可以借鑒,自上至下的將設(shè)計內(nèi)容細(xì)化,最后完成系統(tǒng)硬件的整體設(shè)計。使用,VHDL語言描述的電路,可以進行綜合和仿真,然而,值得注意的是,盡管所有VHDL代碼都是可以仿真的,但并不是所有的代碼都能綜合。VHDL被廣泛使用的基本原因在于它是一種標(biāo)準(zhǔn)語言,是與工具和工藝無關(guān)的,從而可以方便的進行移植和重用。VHDL兩個最直接的應(yīng)用領(lǐng)域是可編程邏輯器件和專用集成電路,其中可編程邏輯器件包括復(fù)雜可編程邏輯器件和現(xiàn)場可編程門陣列。關(guān)于VHDL最后要說明的是: 與常規(guī)的順序執(zhí)行的計算機程序不同,VHDL從根本上講是并發(fā)執(zhí)行的。VHDL中,只有在進程,函數(shù)和過程內(nèi)部的語句才是,順序執(zhí)行的。1.4課題目的本設(shè)計是一個音樂播放器。設(shè)計目的是為了學(xué)習(xí)利用可編程邏輯器件CPLD/FPGA,來設(shè)計電子應(yīng)用系統(tǒng)。學(xué)習(xí)和鞏固VHDL知識,使對已學(xué)過的基礎(chǔ)知識能有更深入的理解,學(xué)習(xí)QUARTUS II工具軟件的應(yīng)用,學(xué)會獨立思考、獨立思考、獨立工作,以及提高對所學(xué)應(yīng)用基本理論分析和解決實際問題的能力。2.總體設(shè)計2.1設(shè)計題目基于CPLD/FPGA的音樂播放器2.2設(shè)計任務(wù)1)根據(jù)技術(shù)要求和現(xiàn)有開發(fā)環(huán)境,分析設(shè)計題目。2)設(shè)計系統(tǒng)實現(xiàn)方案。3)設(shè)計并繪制原理圖。4)畫出功能模塊的程序流程圖。5)編寫實現(xiàn)程序。6)結(jié)合硬件調(diào)試、修改并完善程序。7)編寫課程設(shè)計報告。2.3設(shè)計要求利用開發(fā)板結(jié)合外圍設(shè)計電路,實現(xiàn)基于, CPLDFPGA的音樂播放器設(shè)計,并通過數(shù)碼管顯示聲、光報警。2.4設(shè)計方案1)使用Quartus II建立工程。2)用VHDL語言編譯、改正。3)分配引腳,重新編譯。4)下載,運行、修改。2.5系統(tǒng)設(shè)計框圖 系統(tǒng)設(shè)計框圖如圖1所示:晶振鍵盤按鈕MAX IIEPM240T100蜂鳴器數(shù)碼管圖1-系統(tǒng)設(shè)計框圖3.硬件設(shè)計3.1原理圖 原理圖如圖2所示:圖2-原理圖3.2音樂演奏電路原理先介紹一下硬件電路的發(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é)奏,既樂曲中每個音符的發(fā)聲頻率及其持續(xù)時間是樂曲能夠連續(xù)演奏的兩個關(guān)鍵因素。3.3音調(diào)的控制音符頻率的獲得頻率的高低決定了音調(diào)的高低,計算出簡譜中從低音一到高音一之間每個音名對應(yīng)的頻率,所有不同頻率的信號都是從同一個基準(zhǔn)頻率分頻得到的。多個不同頻率的信號可通過對某個基準(zhǔn)頻率進行分頻器獲得。由于各個音符的頻率多為非整數(shù)而分頻系數(shù)又不能為小數(shù),故必須將計算機得到的分頻系數(shù),四舍五入取整。若基準(zhǔn)頻率過低,則分頻系數(shù)過小,四舍五入取整后的誤差較大。若基準(zhǔn)頻率過高,雖然可以減少頻率的相對誤差,但分頻結(jié)構(gòu)將變大。實際上應(yīng)用綜合考慮這兩個方面的因素在盡量減少誤差的前提下,選取合適的基準(zhǔn)頻率。因此,要想FPGA發(fā)出不同音符的音調(diào),實際上只要控制它輸出相應(yīng)音符的頻率即可。3.4樂曲節(jié)奏的控制音長的控制音符的持續(xù)時間需要根據(jù)樂曲的速度及每個音符的節(jié)拍數(shù)來確定。因此,在想控制音符的音長,就必須知道樂曲的速度和每個音符所對應(yīng)的節(jié)拍數(shù),在這個設(shè)計中所播放的樂曲的最短的音符為四分音符,如果將全音符的持續(xù)時間設(shè)為1秒鐘的話,那么一拍所應(yīng)該持續(xù)的時間為0.25秒,則只需要在提供一個四赫茲的時間頻率即可產(chǎn)生四分音符的時長。要想讓系統(tǒng)知道現(xiàn)在應(yīng)該播放哪個音符,而這個音符持續(xù)的時間應(yīng)該是多少?就必須編寫樂曲文件,在樂曲文件中音符是按地址存放的,當(dāng)系統(tǒng)工作時就按四赫茲的頻率依次讀取簡譜,當(dāng)系統(tǒng)讀到某個音符的簡譜時就對應(yīng)發(fā)這個音符的音調(diào),持續(xù)時間為0.25秒,而如果在曲譜文件中這個音符為三拍音長,只要將該音符連續(xù)書寫3遍,這時系統(tǒng)獨院取文件的時候就會連續(xù)讀到3次,也就會發(fā)3個0.25秒的音長,這時我們聽上去就會持續(xù)了三排時間,通過這樣一個簡單的操作就可以控制音樂的音長了。3.5PCB板圖 PCB板圖如圖3所示:圖3-PCB板圖4.系統(tǒng)設(shè)計說明4.1流程圖 流程圖如圖4所示:主程序開始初始化歌曲顯示在數(shù)碼管依據(jù)按鍵碼播放該曲目是否有按鍵NY圖4-流程圖4.2程序代碼LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;PACKAGE MYPACKAGE ISTYPE led is ARRAY (0 TO 9) OF STD_LOGIC_VECTOR(7 DOWNTO 0); TYPE lednum is ARRAY (0 TO 7) OF integer range 0 to 15; CONSTANT datamode:led:=(XC0,XF9,XA4,XB0,X99,X92,X82,XF8,X80,X90); -數(shù)碼管字模 0 1 2 3 4 5 6 7 8 9COMPONENT Buzzer IS PORT (clk : IN std_logic; pitch :in integer range 0 to 20;Buzzer : BUFFER std_logic; key1,key2,key3,key4 :in STD_LOGIC); END COMPONENT; END MYPACKAGE;LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;LIBRARY WORK;USE WORK.MYPACKAGE.ALL;ENTITY music IS PORT ( clk : IN STD_LOGIC ;seg : out STD_LOGIC_vector (7 downto 0); posi : OUT STD_LOGIC_vector( 7 downto 0); key1,key2,key3,key4 : in STD_LOGIC;Buzzer1 : BUFFER std_logic ); END ENTITY music;ARCHITECTURE TESTAND OF music IS TYPE led is ARRAY (0 TO 9) OF STD_LOGIC_VECTOR(7 DOWNTO 0); TYPE lednum is ARRAY (7 downTO 0) OF integer range 0 to 15; signal datamod:led:=(XC0,XF9,XA4,XB0,X99,X92,X82,XF8,X80,X90); signal stop:std_logic:=1; SIGNAL data : lednum:=(1,0,0,0,0,0,0,0); SIGNAL data2 : lednum:=(2,0,0,0,0,0,0,0); SIGNAL data3 : lednum:=(3,0,0,0,0,0,0,0); TYPE musicpp is ARRAY (0 TO 63) OF integer range 0 to 20;-個數(shù),范圍 signal music1:musicpp:=( 10,10,10,10,11,11,12,12,10,10,10,10,9,9,9,9,8,8,8,8,9,9, 10,10,10,10,10,10,7,7,7,7,6,6,10,10,9,9,9,9,6,6, 10,10,9,9,9,9,6,6,10,10,9,9,9,8,8,8,8,8,8,8,8,8);-chongerfei signal music2:musicpp:=(10,10,12,13,10,10,10,8,9,9,9,8,9,9,10,12,10,10, 10,10,9,9,9,9,10,9,9,8,6,5,5,5,8,8, 8,9,10,10,10,9,10,9,10,12,9,9,9,9,9,10,10,10,9,10,9,10,12,9,9,9,9,9,9,9);-tianmimi signal music3:musicpp:=(12,12,12,10,12,15,15,15,15,13,13,15,15,12,12,12,12,12,12,8,9,10,10, 9,8,9,9,9,9,12,12,10,12,15,15,15,12,13,13,15,15,12,12,12, 12,12,12,9,10,11,11,11,7,7,8,8,8,8,8,8,8,8,8,8);-songbieSIGNAL data1 : lednum:=(0,0,0,0,0,0,0,1); signal pitch:integer range 0 to 20;signal zt:integer range 0 to 3; BEGIN process (clk) -用于顯示 variable count:integer range 0 to 65535; variable position:std_logic_vector (7 downto 0):=11111110; variable i:integer range 0 to 7; begin if clkevent and clk=1 then if count65535 then count:=count+1; else count:=0; i:=i+1; position:=position(6 downto 0) & position(7); if zt=1 then seg =datamod(data(i); end if; if zt=2 then seg =datamod(data2(i); end if; if zt=3 then seg =datamod(data3(i);end if; posi=position; end if; end if; end process; process (clk) -音樂播放 variable count:integer range 0 to 16777215:=0; variable i:integer range 0 to 63:=0; begin if(clkevent and clk=1)then count:=count+1; if count=0 then i:=i+1; if zt=1 then pitch=music1(i); end if; if zt=2 then pitch=music2(i); end if ; if zt=3 then pitch=music3(i); end if ; end if ; if data1(0)9 then data1(0)=data1(0)+1; else data1(0)=0;data1(1)=data1(1)+1; end if; if i=63 then data1(0)=0; data1(1)=0;i:=0; end if; end if; end process; process (key3,key2,key1) begin if( key3=0) then zt=3; end if; if( key2=0) then zt=2 ; end if; if(key1=0) then zt=1 ; end if; end process; u1:Buzzer PORT MAP(clk,pitch,buzzer1,key1,key2,key3,key4); END TESTAND; Library ieee;use ieee.std_logic_1164.all;ENTITY Buzzer IS PORT (clk : IN std_logic; pitch :in integer range 0 to 20;Buzzer : BUFFER std_logic;key1,key2,key3,key4 :in STD_LOGIC ); END Buzzer;ARCHITECTURE translated OF Buzzer ISTYPE pitchclass IS ARRAY(0 TO 21) OF INTEGER RANGE 0 to 101214 ;-音階頻率對照表constant pitchtable :pitchclass:=( 0,75815, 71581, 63775, 56818,50838,47755,42553, 37907, 35790, 31887, 28409,25419,23877,21276, 18953, 17895, 15948, 14204,12209,11988,10638 ); signal stop:std_logic:=1; BEGIN Process(clk,pitch) variable count:integer range 0 to 101214; Begin if(key4=0) then stop=not stop;end if;if pitchtable(pitch)/=0 then if(clkevent and clk=1)then count:=count+1; if(count=pitchtable(pitch) and stop=1 then count:=0; Buzzer=not Buzzer; end if; end if; else Buzzer=0; end if;if(stop=0) then Buzzer=1;end if;End Process;END translated;5電路運行測試5.1測試過程程序?qū)腴_發(fā)板,按K1播放第一首歌,按K2播放第二首歌,按K3播放第三首歌,按K4,停止播放歌曲。5.2運行效果圖 運行效果圖如圖5所示: 圖5-成品效果圖6.課程設(shè)計遇到的問題1)剛開始編程沒有清晰思路,和流程圖作參考,編程出現(xiàn)很多錯誤。2)在畫電路原理圖過程中,在庫里找一些器件時,因不知道它的對應(yīng)的英文,因此還要一個一個的去找,浪費了大量時間。3)隨著樂譜的復(fù)雜程度加大,會加大編程的繁雜度,只能把將要演奏的樂譜存放在人為開辟的存儲空間里,這樣只需要在相應(yīng)地址中讀出音符即可。7.總結(jié)不知不覺間課程設(shè)計就接近尾聲了,快要結(jié)束了,而VHDL是一門實用性非常強的編程語言,課程設(shè)計加深了我們對課程的理解,培養(yǎng)我們綜合運用所學(xué)知識,通過這次設(shè)計讓我更加深入了解CPLD/FPGA,不但使我對所學(xué)課程的內(nèi)容有一個系統(tǒng)的了解,更是讓我們有發(fā)現(xiàn)、提出、分析和解決實際問題,鍛煉實踐能力的重要能力。雖然在做課程設(shè)計以前已經(jīng)系統(tǒng)的把VHDL語言課本認(rèn)真的復(fù)習(xí)了一下,但是在剛開始時還是一頭霧水,不知道該應(yīng)該從哪里下手。幸好在小組成員的相互努力下有條不紊的進行下去了,最終我發(fā)現(xiàn)設(shè)計程序重要的是要有一個清晰的思路,重中之重是嚴(yán)謹(jǐn)。剛開

溫馨提示

  • 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

提交評論