基于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ì) (論 文)課題名稱: 基于FPGA的音樂(lè)電子琴 指導(dǎo)教師: * 系 別: 電子信息系 專 業(yè): 應(yīng)用電子技術(shù) 班 級(jí): 13應(yīng)用電子(1)班 姓 名: * 【摘要】介紹了基于FPGA的電子琴的工作原理和設(shè)計(jì)過(guò)程。用Altera公司的EP3C40Q240C8芯片為核心器件,通過(guò)運(yùn)用硬件編程語(yǔ)言VHDL描述,在Quartus II平臺(tái)上,實(shí)現(xiàn)了電子琴的手動(dòng)彈奏和自動(dòng)演奏功能。本系統(tǒng)主要由音頻發(fā)生模塊,鍵盤控制模塊和存儲(chǔ)器模塊組成。選擇手動(dòng)彈奏模式按鍵時(shí),按下音符鍵后就會(huì)選通相應(yīng)的頻率輸出;選擇自動(dòng)演奏模式按鍵時(shí),儲(chǔ)存器會(huì)將編寫好的音樂(lè)信息依次取出,去選通各個(gè)對(duì)應(yīng)的頻率輸出,實(shí)現(xiàn)自動(dòng)

2、演奏。音頻發(fā)生器由分頻器來(lái)實(shí)現(xiàn),可產(chǎn)生16個(gè)頻率,這些頻率經(jīng)放大后驅(qū)動(dòng)喇叭,從而發(fā)出聲音。目錄第一章 引言31.1課題分析31.2 VHDL語(yǔ)言和QUARTUS II環(huán)境簡(jiǎn)介41.3 FPGA簡(jiǎn)介6第二章 任務(wù)要求及原理分析92.1 任務(wù)要求92.2 任務(wù)分析92.3系統(tǒng)設(shè)計(jì)的主要組成部分12第三章 任務(wù)實(shí)施133.1 系統(tǒng)流程133.2 設(shè)計(jì)模塊133.3 Cyclone III芯片簡(jiǎn)介163.4結(jié)論17附錄181.簡(jiǎn)譜182.程序18參考資料27致謝27第一章 引言1.1課題分析電子琴因其操作簡(jiǎn)單,且能模擬各種傳統(tǒng)樂(lè)器的音色,而深受消費(fèi)者喜愛?;诳删幊踢壿嬈骷﨔PGA(FieldProg

3、rammable Logical Device)芯片,利用VHDL硬件描述語(yǔ)言設(shè)計(jì)系統(tǒng)核心部件,再配以適當(dāng)?shù)耐鈬娐?,可從琴鍵上進(jìn)行演奏也可自動(dòng)進(jìn)行樂(lè)曲演奏。隨著電子技術(shù)的高速發(fā)展,由于FPGA/CPLD具有高速、高可靠性、串并行工作方式等突出優(yōu)點(diǎn),所以在電子設(shè)計(jì)中受到廣泛的應(yīng)用,并且它代表著未來(lái)EDA設(shè)計(jì)的方向。FPGA/CPLD的設(shè)計(jì)采用了高級(jí)語(yǔ)言,例如VHDL語(yǔ)言,AHDL語(yǔ)言。從而進(jìn)一步打破了軟硬件之間的界限,加速了產(chǎn)品的開發(fā)過(guò)程,縮短了設(shè)計(jì)周期。所以采用FPGA/CPLD取代傳統(tǒng)的標(biāo)準(zhǔn)集成電路、接口電路已經(jīng)成為電子技術(shù)發(fā)展的必然趨勢(shì)。EDA(電子設(shè)計(jì)自動(dòng)化) 代表了當(dāng)今電子設(shè)計(jì)技術(shù)的

4、最新發(fā)展方向,它的基本特征是:設(shè)計(jì)人員按照“自頂向下”的設(shè)計(jì)方法,對(duì)整個(gè)系統(tǒng)進(jìn)行方案設(shè)計(jì)和功能劃分,系統(tǒng)的關(guān)鍵電路用一片或幾片集成電路(FPGA/CPLD) 實(shí)現(xiàn)。電子琴是數(shù)字電路中的一個(gè)典型應(yīng)用。在實(shí)際的硬件設(shè)計(jì)中用到的器件非常多,連線比較復(fù)雜,同時(shí)會(huì)產(chǎn)生比較大的延時(shí),從而造成測(cè)量誤差較大,可靠性不好。以EDA工具作為開發(fā)手段,運(yùn)用VHDL硬件描述語(yǔ)言將使整個(gè)系統(tǒng)大大簡(jiǎn)化,提高了電子琴整體的性能和可靠性。1.2 VHDL語(yǔ)言和QUARTUS II環(huán)境簡(jiǎn)介1.2.1 VHDL語(yǔ)言簡(jiǎn)介VHDL是超高速集成電路硬件描述語(yǔ)言,是一種用于電路設(shè)計(jì)的高級(jí)語(yǔ)言。它出現(xiàn)于80年代后期,最初是由美國(guó)國(guó)防部開發(fā)

5、出來(lái)的,是為了供美軍用來(lái)提高設(shè)計(jì)的可靠性和縮減開發(fā)周期的一種使用范圍較小的設(shè)計(jì)語(yǔ)言 。VHDL主要是應(yīng)用在數(shù)字電路的設(shè)計(jì)中。目前,它在中國(guó)的應(yīng)用多數(shù)是用在FPGA/CPLD/EPLD的設(shè)計(jì)中,同時(shí)也被一些實(shí)力較為雄厚的單位用來(lái)設(shè)計(jì)ASIC。VHDL具有多層次描述系統(tǒng)硬件功能的能力,支持自頂向下和基于庫(kù)的設(shè)計(jì)特點(diǎn)。其開發(fā)流程:在頂層用方框圖或硬件語(yǔ)言對(duì)電路的行為進(jìn)行描述后,進(jìn)行系統(tǒng)仿真驗(yàn)證和糾錯(cuò)。再用邏輯綜合優(yōu)化工具生成具體的門級(jí)邏輯電路的網(wǎng)表。然后通過(guò)適配器將網(wǎng)表文件配置于指定的目標(biāo)器件,產(chǎn)生最終下載文件或配置文件。最后把適配后生成的下載或配置文件通過(guò)編程器或編程電纜下載到具體的FPGA/CP

6、LD器件中去,以便進(jìn)行硬件調(diào)試和驗(yàn)證,而實(shí)現(xiàn)可編程的專用集成電路ASIC的設(shè)計(jì)。VHDL主要用于描述數(shù)字系統(tǒng)的結(jié)構(gòu),行為,功能和接口。除了含有許多具有硬件特征的語(yǔ)句外,VHDL的語(yǔ)言形式和描述風(fēng)格與句法是十分類似于一般的計(jì)算機(jī)高級(jí)語(yǔ)言。VHDL系統(tǒng)設(shè)計(jì)與其他硬件描述語(yǔ)言相比,VHDL具有更強(qiáng)的行為描述能力,從而決定了他成為系統(tǒng)設(shè)計(jì)領(lǐng)域最佳的硬件描述語(yǔ)言。強(qiáng)大的行為描述能力是避開具體的器件結(jié)構(gòu),從邏輯行為上描述和設(shè)計(jì)大規(guī)模電子系統(tǒng)的重要保證。1.2.2 QUARTUS 簡(jiǎn)介Quartus II可以在XP、Linux以及Unix上使用,除了可以使用Tcl腳本完成設(shè)計(jì)流程外,提供了完善的用戶圖形界面

7、設(shè)計(jì)方式。具有運(yùn)行速度快,界面統(tǒng)一,功能集中,易學(xué)易用等特點(diǎn)。Quartus II支持Altera的IP核,包含了LPM/MegaFunction宏功能模塊庫(kù),使用戶可以充分利用成熟的模塊,簡(jiǎn)化了設(shè)計(jì)的復(fù)雜性、加快了設(shè)計(jì)速度。對(duì)第三方EDA工具的良好支持也使用戶可以在設(shè)計(jì)流程的各個(gè)階段使用熟悉的第三方EDA工具。此外,Quartus II 通過(guò)和DSP Builder工具與Matlab/Simulink相結(jié)合,可以方便地實(shí)現(xiàn)各種DSP應(yīng)用系統(tǒng);支持Altera的片上可編程系統(tǒng)(SOPC)開發(fā),集系統(tǒng)級(jí)設(shè)計(jì)、嵌入式軟件開發(fā)、可編程邏輯設(shè)計(jì)于一體,是一種綜合性的開發(fā)平臺(tái)。Maxplus II 作為

8、Altera的上一代PLD設(shè)計(jì)軟件,由于其出色的易用性而得到了廣泛的應(yīng)用。目前Altera已經(jīng)停止了對(duì)Maxplus II 的更新支持,Quartus II 與之相比不僅僅是支持器件類型的豐富和圖形界面的改變。Altera在Quartus II 中包含了許多諸如SignalTap II、Chip Editor和RTL Viewer的設(shè)計(jì)輔助工具,集成了SOPC和HardCopy設(shè)計(jì)流程,并且繼承了Maxplus II 友好的圖形界面及簡(jiǎn)便的使用方法。Altera Quartus II 作為一種可編程邏輯的設(shè)計(jì)環(huán)境, 由于其強(qiáng)大的設(shè)計(jì)能力和直觀易用的接口,越來(lái)越受到數(shù)字系統(tǒng)設(shè)計(jì)者的歡迎。1.3

9、FPGA簡(jiǎn)介FPGA是英文Field Programmable Gate Array的縮寫,即現(xiàn)場(chǎng)可編程門陣列,它是在PAL、GAL、EPLD等可編程器件的基礎(chǔ)上進(jìn)一步發(fā)展的產(chǎn)物。它是作為專用集成電路(ASIC)領(lǐng)域中的一種半定制電路而出現(xiàn)的,既解決了定制電路的不足,又克服了原有可編程器件門電路數(shù)有限的缺點(diǎn)。當(dāng)今社會(huì)是數(shù)字社會(huì),數(shù)字集成電路應(yīng)用非常廣泛,其發(fā)展從電子管、晶體管、小規(guī)模集成SSI、MSI、LSI、VLSI(幾萬(wàn)門以上)到超大規(guī)模集成電路ULSI和超位集成電路GSI,其規(guī)模幾乎平均每一到兩年翻一番。集成電路的發(fā)展大大促進(jìn)了EDA的發(fā)展,先進(jìn)的EDA已從傳統(tǒng)的“自下而上”的設(shè)計(jì)方法改

10、變?yōu)椤白陨隙隆钡脑O(shè)計(jì)方法。ASIC(Application Specific Integrated Circuit)的設(shè)計(jì)與制造,已不再完全由半導(dǎo)體廠商獨(dú)立承擔(dān),系統(tǒng)設(shè)計(jì)師在實(shí)驗(yàn)室里就可以設(shè)計(jì)出合適的ASIC芯片,并且立即投入實(shí)際應(yīng)用中,這都得益于可編程邏輯器件PLD(Programmable Logic Device)的出現(xiàn)。現(xiàn)在應(yīng)用最廣泛的PLD主要是現(xiàn)場(chǎng)可編程門陣列FPGA(Field Programmable Gate Array)、復(fù)雜可編程邏輯器件CPLD(Complex Programmable Logic Device)、可擦除可編程邏輯器件EPLD(Erasable Pro

11、grammable Logic Device)。FPGA器件集成度高、體積小,具有通過(guò)用戶編程實(shí)現(xiàn)專門應(yīng)用的功能,特別適合于產(chǎn)品的樣機(jī)開發(fā)和小批量生產(chǎn)?,F(xiàn)場(chǎng)可編程門陣列FPGA是一種新型的高密度PLD,采用CMOSSRAM工藝制作,與門陣列PLD不同,其內(nèi)部由許多獨(dú)立的可編程邏輯模塊(CLB)組成,邏輯塊之間可以靈活地相互連接?,F(xiàn)場(chǎng)可編程門陣列FGPA的結(jié)構(gòu)一般分為三部分:可編程邏輯塊、可編程I/O模塊和可編程內(nèi)部連線。CLB的功能很強(qiáng),不僅能夠?qū)崿F(xiàn)邏輯函數(shù),還可以配置成RAM等復(fù)雜的形式,配置數(shù)據(jù)存放在片內(nèi)的SRAM或者熔絲圖上?;赟RAM的FPGA器件工作前需要從芯片外部加載配置數(shù)據(jù),配

12、置后的數(shù)據(jù)可以存儲(chǔ)在片外的EPROM上或者計(jì)算機(jī)上?,F(xiàn)場(chǎng)可編程門陣列FPGA允許電路設(shè)計(jì)者利用基于計(jì)算機(jī)的開發(fā)平臺(tái),經(jīng)過(guò)設(shè)計(jì)輸入、仿真、測(cè)試和校驗(yàn),直接達(dá)到預(yù)期的結(jié)果。使用FPGA器件可以大大縮短系統(tǒng)的研制周期,減少資金的投入。更吸引人的是,采用FPGA器件可以將原來(lái)的電路板級(jí)產(chǎn)品集成為芯片級(jí)產(chǎn)品,從而降低了功耗,提高了可靠性,同時(shí)還可以很方便地對(duì)設(shè)計(jì)進(jìn)行在線修改。因此,F(xiàn)PGA的出現(xiàn)受到了電子設(shè)計(jì)師的普遍歡迎,發(fā)展十分迅速。FPGA采用了邏輯單元陣列LCA(Logic Cell Array)這樣一個(gè)新概念,內(nèi)部包括可配置邏輯模塊CLB(Configurable Logic Block)、輸出

13、輸入模塊IOB(Input Output Block)和內(nèi)部連線(Interconnect)三個(gè)部分。FPGA的基本特點(diǎn)主要有: 1)采用FPGA設(shè)計(jì)ASIC電路,用戶不需要投片生產(chǎn),就能得到合用的芯片。 2)FPGA可做其它全定制或半定制ASIC電路的中試樣片。 3)FPGA內(nèi)部有豐富的觸發(fā)器和IO引腳。 4)FPGA是ASIC電路中設(shè)計(jì)周期最短、開發(fā)費(fèi)用最低、風(fēng)險(xiǎn)最小的器件之一。 5)FPGA采用高速CHMOS工藝,功耗低,可以與CMOS、TTL電平兼容。 可以說(shuō),F(xiàn)PGA芯片是小批量系統(tǒng)提高系統(tǒng)集成度、可靠性的最佳選擇之一。 FPGA是由存放在片內(nèi)RAM中的程序來(lái)設(shè)置其工作狀態(tài)的,因此,

14、工作時(shí)需要對(duì)片內(nèi)的RAM進(jìn)行編程。用戶可以根據(jù)不同的配置模式,采用不同的編程方式。加電時(shí),F(xiàn)PGA芯片將EPROM中數(shù)據(jù)讀入片內(nèi)編程RAM中,配置完成后,F(xiàn)PGA進(jìn)入工作狀態(tài)。掉電后,F(xiàn)PGA恢復(fù)成白片,內(nèi)部邏輯關(guān)系消失,因此,F(xiàn)PGA能夠反復(fù)使用。FPGA的編程無(wú)須專用的FPGA編程器,只須用通用的EPROM、PROM編程器即可。當(dāng)需要修改FPGA功能時(shí),只需換一片EPROM即可。這樣,同一片F(xiàn)PGA,不同的編程數(shù)據(jù),可以產(chǎn)生不同的電路功能。因此,F(xiàn)PGA的使用非常靈活。FPGA有多種配置模式:并行主模式為一片F(xiàn)PGA加一片EPROM的方式;主從模式可以支持一片PROM編程多片F(xiàn)PGA;串行

15、模式可以采用串行PROM編程FPGA;外設(shè)模式可以將FPGA作為微處理器的外設(shè),由微處理器對(duì)其編程。第二章 任務(wù)要求及原理分析2.1 任務(wù)要求基于FPGA的電子琴設(shè)計(jì)要求: 音樂(lè)自動(dòng)播放,存儲(chǔ)兩首歌曲,有按鍵控制選擇播放; 琴鍵演奏,含高低16個(gè)音符; 配有隨音樂(lè)節(jié)奏而閃爍變化的LED燈以及樂(lè)譜顯示。 2.2 任務(wù)分析樂(lè)曲都是由一連串的音符組成,因此按照樂(lè)曲的樂(lè)譜依次輸出這些音符所對(duì)應(yīng)的頻率,就可以在揚(yáng)聲器上連續(xù)地發(fā)出各個(gè)音符的音調(diào)。而要準(zhǔn)確地演奏出一首樂(lè)曲,僅僅讓揚(yáng)聲器能夠發(fā)聲是不夠的,還必須準(zhǔn)確地控制樂(lè)曲的節(jié)奏,即每個(gè)音符的持續(xù)時(shí)間。由此可見,樂(lè)曲中每個(gè)音符的發(fā)聲頻率及其持續(xù)時(shí)間是樂(lè)曲能夠

16、連續(xù)演奏的關(guān)鍵因素。樂(lè)曲的12平均率規(guī)定:每?jī)蓚€(gè)八度音之間的頻率相差1倍(如簡(jiǎn)譜中的中音1與高音1)。在兩個(gè)八度音之間,又可分為12個(gè)半音。另外,音符A的頻率為440Hz,音符B到C之間、E到F之間為半音,其余為全音。由此可以計(jì)算出簡(jiǎn)譜中從低音1至高音1之間每個(gè)音符的頻率,如表2-1所示。表2-1產(chǎn)生各個(gè)音符所需要的頻率可用一個(gè)分頻器實(shí)現(xiàn),由于各音符對(duì)應(yīng)的頻率多為非整數(shù),而分頻系數(shù)又不能為小數(shù),故必須將計(jì)算得到的分頻數(shù)四舍五入取整。若分頻器時(shí)鐘頻率過(guò)低,則由于分頻系數(shù)過(guò)小,四舍五入取整后的誤差較大;若時(shí)鐘頻率過(guò)高,雖然誤差變小,但分頻數(shù)將變大。實(shí)際的設(shè)計(jì)應(yīng)綜合考慮兩個(gè)方面的因素,在盡量減小頻率

17、誤差的前提下取合適的時(shí)鐘頻率。實(shí)際上,只要各個(gè)音符的相對(duì)頻率關(guān)系不變,演奏出的樂(lè)曲聽起來(lái)就不會(huì)走調(diào)。音符的持續(xù)時(shí)間須根據(jù)樂(lè)曲速度及每個(gè)音符的節(jié)拍數(shù)來(lái)確定。因此,要控制音符的音長(zhǎng),就必須知道樂(lè)曲的速度和每個(gè)音符所對(duì)應(yīng)的節(jié)拍數(shù),實(shí)驗(yàn)中所演奏的樂(lè)曲最短音符為四分音符,如果將全音符的持續(xù)時(shí)間設(shè)為1s的話那么1拍所應(yīng)該持續(xù)的時(shí)間為0.25s,則只需要提供一個(gè)4Hz的時(shí)鐘頻率即可產(chǎn)生四分音符的時(shí)長(zhǎng)。本實(shí)驗(yàn)設(shè)計(jì)的音樂(lè)電子琴選取12MHz的系統(tǒng)時(shí)鐘頻率。在數(shù)控分頻器模塊,首先對(duì)時(shí)鐘頻率進(jìn)行16分頻,得到0.75MHz的輸入頻率,然后再次分頻得到各音符的頻率。由于數(shù)控分頻器輸出的波形是脈寬極窄的脈沖波,為了更好

18、地驅(qū)動(dòng)揚(yáng)聲器發(fā)聲,在到達(dá)揚(yáng)聲器之前需要均衡占空比,從而生成各音符對(duì)應(yīng)頻率的對(duì)稱方波輸出。這個(gè)過(guò)程實(shí)際上進(jìn)行了一次二分頻,頻率變?yōu)樵瓉?lái)的二分之一,即0.375MHz。因此,分頻系數(shù)的計(jì)算可以按照下面的方法進(jìn)行。以中音1為例,對(duì)應(yīng)的頻率值為523.3Hz,它的分頻系數(shù)應(yīng)為0.375MHz523.3MHz=0.375×106Hz523.3Hz=716至于其他音符,同樣可以由上式求出對(duì)應(yīng)的分頻系數(shù),這樣利用程序就可以很輕松地得到相應(yīng)的樂(lè)聲。各音名的分頻系數(shù)如表2-2所示。音名頻率/Hz分頻系數(shù)音名頻率/Hz分頻系數(shù)低音1261.61433高音11045.5358低音2293.71277高音2

19、1174.7319低音3329.61138高音31318.5284低音4349.21074高音41396.9268低音5392960高音51568239低音6440853高音61760213低音7493.9759高音7197.5190中音1523.3716中音2587.3638表2-2至于音長(zhǎng)的控制,在自動(dòng)演奏模塊,每個(gè)樂(lè)曲的音符都是按地址存放的,播放樂(lè)曲時(shí)按4Hz的時(shí)鐘頻率依次讀取簡(jiǎn)譜,每個(gè)音符持續(xù)時(shí)間為0.25s。如果樂(lè)譜中某個(gè)音符為3拍音長(zhǎng),只要在三個(gè)連續(xù)地址上存放該音符,這時(shí)候就會(huì)發(fā)出三個(gè)0.25s的音長(zhǎng),即持續(xù)了3拍的時(shí)間,通過(guò)這樣一個(gè)簡(jiǎn)單的操作就可以控制音長(zhǎng)了。2.3系統(tǒng)設(shè)計(jì)的主要

20、組成部分本設(shè)計(jì)采用 VHDL語(yǔ)言編程設(shè)計(jì)實(shí)現(xiàn),音頻發(fā)生部分、鍵輸入部分和數(shù)碼顯示部分以外,其余全部在一片F(xiàn)PGA芯片上實(shí)現(xiàn)。其系統(tǒng)結(jié)構(gòu)如下圖2-1所示。圖2-1 音樂(lè)電子琴系統(tǒng)框圖第三章 任務(wù)實(shí)施3.1 系統(tǒng)流程本設(shè)計(jì)采用Altera公司的EDA軟件系統(tǒng)EP3C40Q240C8來(lái)完成。采用自頂向下的設(shè)計(jì)方法。圖3-1為其軟件流程圖:圖3-1 系統(tǒng)流程圖3.2 設(shè)計(jì)模塊本系統(tǒng)主要由三個(gè)功能模塊組成:自動(dòng)演奏模塊music.vhd、音階發(fā)生模塊tone.vhd和數(shù)控分頻器模塊speaker.vhd。系統(tǒng)頂層設(shè)計(jì)原理圖如圖3-2所示。該系統(tǒng)有4個(gè)輸入端口,3個(gè)輸出端口。輸入端口1、CLK:12MHz

21、系統(tǒng)時(shí)鐘輸入端口;2、handTOauto:電子琴模式控制端口,高電平為1時(shí)是按鍵彈奏模式,低電平為0時(shí)是播放預(yù)存儲(chǔ)歌曲3、Tonekey:電子琴音符輸入端口;4、Sel:播放模式下,樂(lè)曲選擇控制端口。輸出端口1、Led:音符簡(jiǎn)碼輸出LED顯示端口;2、SPKS:樂(lè)曲聲音輸出端口,輸出的是對(duì)應(yīng)各音符頻率的方波信號(hào)。3、HIGH1:音符高音指示端口。圖3-2 音樂(lè)電子琴的頂層設(shè)計(jì)原理圖3.2.1 音階發(fā)生模塊本模塊根據(jù)music模塊提供的音符,完成音符到音符的分頻系數(shù)、音頻的顯示、高低音階的譯碼。音階發(fā)生器的作用是產(chǎn)生獲得音階的分頻預(yù)置值。當(dāng)16位發(fā)聲控制輸入index中的某一位為高電平時(shí),則對(duì)

22、應(yīng)某一音階的數(shù)值將以端口tone輸出,作為獲得該音階的分頻預(yù)置值,該值作為數(shù)控分頻器的輸入,來(lái)對(duì)0.5MHz的脈沖進(jìn)行分頻,由此得到每個(gè)音階相應(yīng)的頻率,例如輸入index="0000000000000010",即對(duì)應(yīng)的按鍵是2,產(chǎn)生的分頻系數(shù)便是865由code輸出對(duì)應(yīng)該音階簡(jiǎn)譜的顯示數(shù)碼;由high輸出指示音階高8度的顯示,低電平有效。自動(dòng)演奏模塊如圖3-3所示:圖3-3 音階發(fā)生模塊3.2.2 數(shù)控分頻器模塊數(shù)控分頻模塊的目的是對(duì)基準(zhǔn)脈沖分頻,得到1,2,3,4,5,6,7七個(gè)音符對(duì)應(yīng)頻率。該模塊的VHDL描述中包含了三個(gè)進(jìn)程。首先對(duì)12MHz的基準(zhǔn)脈沖進(jìn)行分頻得到1M

23、Hz的脈沖,然后按照tone1輸入的分頻系數(shù)對(duì)1MHz的脈沖再次分頻,得到的便是所需要的頻率。而第三個(gè)進(jìn)程的作用是在音調(diào)輸出時(shí)再進(jìn)行二分頻,將脈沖展寬,以使揚(yáng)聲器有足夠功率發(fā)音。數(shù)控分頻模塊如圖3-4所示:圖3-4 數(shù)控分頻器模塊3.2.3 自動(dòng)演奏模塊自動(dòng)演奏模塊的作用是產(chǎn)生8位發(fā)聲控制輸入index,handauto為0或1時(shí)可以選擇自動(dòng)演奏或者鍵盤輸入,如果auto為0,則而由存儲(chǔ)在此模塊中的2位二進(jìn)制數(shù)來(lái)作為發(fā)聲控制輸入,由此便可自動(dòng)演奏樂(lè)曲。此模塊的VHDL語(yǔ)言中包括兩個(gè)進(jìn)程,首先是對(duì)基準(zhǔn)脈沖進(jìn)行分頻得到4Hz的脈沖,作為第二個(gè)進(jìn)程的時(shí)鐘信號(hào),它的目的是控制每個(gè)音階之間的停頓時(shí)間,此

24、處便是1/4=0.25s,第二個(gè)進(jìn)程是音樂(lè)的存儲(chǔ),可根據(jù)需要編寫不同的樂(lè)曲,在這里編寫了兩首歌曲( “兩只老虎”、 “字母歌”)。自動(dòng)演奏模塊如圖3-5所示:圖3-5 自動(dòng)演奏模塊3.3 Cyclone III芯片簡(jiǎn)介Cyclone III是Altera公司推出的一款FPGA器件, Cyclone III FPGA比競(jìng)爭(zhēng)FPGA的功耗低75%,含有5K至120K邏輯單元(LE),288個(gè)數(shù)字信號(hào)處理(DSP)乘法器,存儲(chǔ)器達(dá)到4Mbits。Cyclone III系列比前一代產(chǎn)品每邏輯單元成本降低20%,使設(shè)計(jì)人員能夠更多地在成本敏感的應(yīng)用中使用FPGA。利用臺(tái)積電(TSMC)的65nm低功耗(

25、LP)工藝,Cyclone III FPGA提供豐富的邏輯、存儲(chǔ)器和DSP功能,功耗更低。在可編程邏輯發(fā)展歷史中,Cyclone III FPGA比其他低成本FPGA系列能夠支持實(shí)現(xiàn)更多的應(yīng)用。本設(shè)計(jì)中所采用的芯片具體型號(hào)是EP3C40Q240C8。3.4結(jié)論本設(shè)計(jì)在Quartus II軟件上進(jìn)行了仿真,并在實(shí)驗(yàn)箱上進(jìn)行了實(shí)測(cè),從實(shí)際測(cè)試結(jié)果看,實(shí)現(xiàn)了程序設(shè)計(jì)的目標(biāo),達(dá)到了預(yù)期效果。該設(shè)計(jì)將的核心部分集成在可編程邏輯器件FPGA芯片上,大大簡(jiǎn)化了外部電路,較以前的傳統(tǒng)設(shè)計(jì),既減少了所用芯片的種類和數(shù)量,縮小了體積,降低了功耗,提高了系統(tǒng)的整體性能,對(duì)系統(tǒng)在使用中的故障率大為減少。此外,這種基于

26、可編程邏輯器件以VHDL 硬件描述語(yǔ)言進(jìn)行設(shè)計(jì),在電子設(shè)計(jì)的各個(gè)階段、各個(gè)層次進(jìn)行計(jì)算機(jī)模擬驗(yàn)證,保證設(shè)計(jì)過(guò)程的正確性,可降低設(shè)計(jì)成本,縮短設(shè)計(jì)周期,具有廣闊的應(yīng)用前景。附錄1.簡(jiǎn)譜2.程序2.1 音階發(fā)生模塊程序Library ieee;Use ieee.std_logic_1164.all;Use ieee.std_logic_arith.all;Use ieee.std_logic_unsigned.all;Entity TONE isPort(INDEX:in std_logic_vector(15 downto 0); 音符輸入信號(hào)TUNE_SEG:out std_logic_vec

27、tor(6 downto 0); 音符顯示信號(hào)HIGH:out std_logic; 高低音顯示信號(hào)TONE0:out integer range 0 to 2047); 音符的分頻系數(shù)End TONE;Architecture BEHAVIORAL of TONE isBeginSEARCH:process(INDEX) 此進(jìn)程完成音符到音符的分頻系數(shù)、音符的顯示、高低音階的譯碼BeginCase INDEX iswhen"0000000000000001"=>TONE0<=1433;TUNE_SEG<= "0000110"HIGH&

28、lt;='0'when"0000000000000010"=>TONE0<=1277;TUNE_SEG<= "1011011"HIGH<='0'when"0000000000000100"=>TONE0<=1138;TUNE_SEG<= "1001111"HIGH<='0'when"0000000000001000"=>TONE0<=1074;TUNE_SEG<= "110

29、0110"HIGH<='0'when"0000000000010000"=>TONE0<=960;TUNE_SEG<= "1101101"HIGH<='0'when"0000000000100000"=>TONE0<=853;TUNE_SEG<= "1111101"HIGH<='0'when"0000000001000000"=>TONE0<=759;TUNE_SEG<

30、;= "0000111"HIGH<='0'when"0000000010000000"=>TONE0<=716;TUNE_SEG<= "0000110"HIGH<='1'when"0000000100000000"=>TONE0<=358;TUNE_SEG<= "0000110"HIGH<='1'when"0000001000000000"=>TONE0<=319

31、;TUNE_SEG<= "1011011"HIGH<='1'when"0000010000000000"=>TONE0<=284;TUNE_SEG<= "1001111"HIGH<='1'when"0000100000000000"=>TONE0<=268;TUNE_SEG<= "1100110"HIGH<='1'when"0001000000000000"=>T

32、ONE0<=239;TUNE_SEG<= "1101101"HIGH<='1'when"0010000000000000"=>TONE0<=213;TUNE_SEG<= "1111101"HIGH<='1'when"0100000000000000"=>TONE0<=190;TUNE_SEG<= "0000111"HIGH<='1'when"1000000000000000

33、"=>TONE0<=638;TUNE_SEG<= "1011011"HIGH<='1'When others=>TONE0<=0;TUNE_SEG<= "0000000"HIGH<= '0'End case;End process;End BEHAVIORAL;2.2 數(shù)控分頻器模塊程序Library ieee;Use ieee.std_logic_1164.all;Use ieee.std_logic_arith.all;Use ieee.std_logic_un

34、signed.all;Entity SPEAKER isPort(CLK1:in std_logic; 系統(tǒng)時(shí)鐘12MHzTONE1:in integer range 0 to 2047; 音符分頻系數(shù)SPKS:out std_logic); 驅(qū)動(dòng)揚(yáng)聲器的音頻信號(hào)End SPEAKER;Architecture BEHAVIORAL of SPEAKER isSignal PRECLK,FULLSPKS:std_logic;beginP1:process(CLK1) 此進(jìn)程對(duì)系統(tǒng)時(shí)鐘進(jìn)行16分頻variable COUNT:integer range 0 to 16;begin if CLK1

35、'event and CLK1='1' then COUNT:=COUNT+1;if COUNT=8 then PRECLK<='1'elsif COUNT=16 then PRECLK<='0'COUNT:=0;end if; end if;end process P1;P2:process(PRECLK,TONE1) 對(duì)0.75MHz的脈沖再次分頻得到所需的音符頻率variable COUNT1:integer range 0 to 2047;begin if PRECLK'event and PRECLK=

36、9;1'then if COUNT1<TONE1 then COUNT1:=COUNT1+1;FULLSPKS<='0' else COUNT1:=0;FULLSPKS<='1' end if; end if;end process P2;P3:process(FULLSPKS) 此進(jìn)程對(duì)FULLSPK進(jìn)行二分頻variable COUNT2:std_logic:='0'begin if FULLSPKS'event and FULLSPKS='1' then COUNT2:=NOT COUNT2

37、; if count2='1' then SPKS<='1' else SPKS<='0' end if; end if;end process P3;end BEHAVIORAL;2.3 自動(dòng)演奏模塊程序Library ieee;Use ieee.std_logic_1164.all;Use ieee.std_logic_arith.all;Use ieee.std_logic_unsigned.all;entity MUSIC is port(CLK:in std_logic; HANDTOAUTO:in std_logic; T

38、ONEKEY:in std_logic_vector(15 downto 0); SEL:in std_logic; TONE_KEY_0:out std_logic_vector(15 downto 0);end MUSIC;architecture BEHAVIORAL of MUSIC iscomponent LAOHU port(CLK:in std_logic; AUTO:in std_logic; TONE_KEY2:in std_logic_vector(15 downto 0); TONE_KEY_0:out std_logic_vector(15 downto 0);end

39、component;component ABC port(CLK:in std_logic; AUTO:in std_logic; TONE_KEY2:in std_logic_vector(15 downto 0); TONE_KEY_0:out std_logic_vector(15 downto 0);end component;component MUX21 port(A,B:in std_logic_vector(15 downto 0); S:in std_logic; Y:out std_logic_vector(15 downto 0);end component;signal

40、 S1,S2:std_logic_vector(15 downto 0);begin U0:LAOHU portmap(CLK=>CLK,TONE_KEY2=>TONEKEY,TONE_KEY_0=>S1,AUTO=>HANDTOAUTO); U1:ABC port map(CLK=>CLK,TONE_KEY2=>TONEKEY,TONE_KEY_0=>S2,AUTO=>HANDTOAUTO); U2:MUX21 port map(A=>S1,B=>S2,S=>SEL,Y=>TONE_KEY_0);end BEHAVIOR

41、AL;2.5 輔助程序1、兩只老虎Library ieee;Use ieee.std_logic_1164.all;Use ieee.std_logic_arith.all;Use ieee.std_logic_unsigned.all;entity LAOHU isport(CLK,AUTO:in std_logic; 系統(tǒng)時(shí)鐘;鍵盤輸入/自動(dòng)演奏TONE_KEY2:in std_logic_vector(15 downto 0); 鍵盤輸入信號(hào)TONE_KEY_0:out std_logic_vector(15 downto 0); 音符信號(hào)輸入end LAOHU;architecture

42、 BEHAVIORAL of LAOHU issignal COUNT0:integer range 0 to 31; CHANGEsignal CLK2:std_logic;beginP1:process(CLK,AUTO) 對(duì)12MHz系統(tǒng)時(shí)鐘進(jìn)行3M的分頻,得到4Hz的信號(hào)CLK2variable COUNT:integer range 0 to 3000000;begin if AUTO='1' then COUNT:=0;CLK2<='0' elsif CLK'event and CLK='1'then COUNT:=CO

43、UNT+1; if COUNT=1500000 then CLK2<='1' elsif COUNT=3000000 then CLK2<='0'COUNT:=0; end if; end if;end process P1;P2:process (CLK2) 此進(jìn)程完成自動(dòng)演奏部分樂(lè)曲的地址累加beginif CLK2'event and CLK2='1' then if COUNT0=31 then COUNT0<=0; else COUNT0<=COUNT0+1; end if;end if;end proc

44、ess P2;P3:process(COUNT0,AUTO,TONE_KEY2)beginif AUTO='0' thencase COUNT0 is 此case語(yǔ)句存儲(chǔ)自動(dòng)演奏部分的樂(lè)曲 when 0=>TONE_KEY_0<=B"00000001_00000000" when 1=>TONE_KEY_0<=B"00000010_00000000" when 2=>TONE_KEY_0<=B"00000100_00000000" when 3=>TONE_KEY_0<=

45、B"00000001_00000000" when 4=>TONE_KEY_0<=B"00000001_00000000" when 5=>TONE_KEY_0<=B"00000010_00000000" when 6=>TONE_KEY_0<=B"00000100_00000000" when 7=>TONE_KEY_0<=B"00000001_00000000"when 8=>TONE_KEY_0<=B"00000100_

46、00000000"when 9=>TONE_KEY_0<=B"00001000_00000000"when 10=>TONE_KEY_0<=B"00010000_00000000"when 11=>TONE_KEY_0<=B"00000100_00000000"when 12=>TONE_KEY_0<=B"00001000_00000000"when 13=>TONE_KEY_0<=B"00010000_00000000"wh

47、en 14=>TONE_KEY_0<=B"00010000_00000000"when 15=>TONE_KEY_0<=B"00000001_00000000"when 16=>TONE_KEY_0<=B"00100000_00000000"when 17=>TONE_KEY_0<=B"00001000_00000000"when 18=>TONE_KEY_0<=B"00000100_00000000"when 19=>TONE_

48、KEY_0<=B"00000001_00000000"when 20=>TONE_KEY_0<=B"00010000_00000000"when 21=>TONE_KEY_0<=B"00100000_00000000"when 22=>TONE_KEY_0<=B"00010000_00000000"when 23=>TONE_KEY_0<=B"00001000_00000000"when 24=>TONE_KEY_0<=B&quo

49、t;00000100_00000000"when 25=>TONE_KEY_0<=B"00000001_00000000"when 26=>TONE_KEY_0<=B"00000100_00000000"when 27=>TONE_KEY_0<=B"00000000_00000000"when 28=>TONE_KEY_0<=B"00000001_00000000"when others=>null; end case; else TONE_KEY_0

50、<=TONE_KEY2; 鍵盤輸入音符信號(hào)輸出 end if;end process P3;end BEHAVIORAL;2、字母歌Library ieee;Use ieee.std_logic_1164.all;Use ieee.std_logic_arith.all;Use ieee.std_logic_unsigned.all;entity LAOHU isport(CLK,AUTO:in std_logic; 系統(tǒng)時(shí)鐘;鍵盤輸入/自動(dòng)演奏TONE_KEY2:in std_logic_vector(15 downto 0); 鍵盤輸入信號(hào)TONE_KEY_0:out std_log

51、ic_vector(15 downto 0); 音符信號(hào)輸入end LAOHU;architecture BEHAVIORAL of LAOHU issignal COUNT0:integer range 0 to 31; CHANGEsignal CLK2:std_logic;beginP1:process(CLK,AUTO) 對(duì)12MHz系統(tǒng)時(shí)鐘進(jìn)行3M的分頻,得到4Hz的信號(hào)CLK2variable COUNT:integer range 0 to 3000000;begin if AUTO='1' then COUNT:=0;CLK2<='0' elsif CLK'event and CLK='1'then COUNT:=COUNT+1; i

溫馨提示

  • 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)論