基于EDA的簡易電子琴設(shè)計(jì)鮑亞文_第1頁
基于EDA的簡易電子琴設(shè)計(jì)鮑亞文_第2頁
基于EDA的簡易電子琴設(shè)計(jì)鮑亞文_第3頁
基于EDA的簡易電子琴設(shè)計(jì)鮑亞文_第4頁
基于EDA的簡易電子琴設(shè)計(jì)鮑亞文_第5頁
已閱讀5頁,還剩10頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、基于EDA的簡易電子琴設(shè)計(jì)鮑亞文(安慶師范大學(xué)物理與電氣工程學(xué)院 安徽 安慶 246011)指導(dǎo)老師:鄭江云摘要:本設(shè)計(jì)是一個(gè)簡易的七音符電子琴,該電子琴可以通過按鍵輸入來控制音調(diào),也可對預(yù)置樂曲的自動(dòng)演奏,同時(shí)由數(shù)碼管顯示即時(shí)音符。系統(tǒng)的實(shí)現(xiàn)是基于EDA技術(shù),在Quartus軟件平臺上,借助FPGA目標(biāo)器件,用硬件描述語言Verilog HDL進(jìn)行編程并仿真驗(yàn)證。本設(shè)計(jì)中的電子琴可操作性好,音符顯示直觀,聲音優(yōu)美。關(guān)鍵詞:電子琴,電子設(shè)計(jì)自動(dòng)化,Verilog HDL語言引言科技發(fā)展的日新月異,催生了一系列新奇實(shí)用的電子產(chǎn)品。在這些電子產(chǎn)品中,電子琴早已成為電子樂器行列中的重要一員。電子琴是

2、人類仿制常規(guī)樂器的代表之一,其發(fā)明問世極大地豐富了人們的聽覺感受,推動(dòng)了音樂的普及和發(fā)展。在信息化與電子化交織的今天,電子琴作為社會(huì)科技與文明的產(chǎn)物,正扮演著音樂領(lǐng)域中不可或缺的角色。EDA技術(shù)的快速發(fā)展和成熟,F(xiàn)PGA等數(shù)字可編程器件的出現(xiàn)和進(jìn)步,基于EDA技術(shù)的設(shè)計(jì)也變得愈加簡單可行?;贓DA技術(shù)的設(shè)計(jì)不僅系統(tǒng)可靠性較高,而且能實(shí)現(xiàn)較為復(fù)雜的功能。運(yùn)用EDA軟件可方便地在計(jì)算機(jī)平臺上實(shí)現(xiàn)設(shè)計(jì)與仿真,本設(shè)計(jì)中的電子琴便是基于EDA技術(shù),運(yùn)用Verilog HDL語言設(shè)計(jì)完成的。1 EDA概述與音樂知識1.1 EDA技術(shù)1.1.1 EDA的發(fā)展EDA(Electronic Design Au

3、tomation,電子設(shè)計(jì)自動(dòng)化)可以認(rèn)識為在計(jì)算機(jī)工作平臺上,以EDA軟件為開發(fā)環(huán)境,以PLD器件或ASIC專用集成電路為目標(biāo)器件來設(shè)計(jì)實(shí)現(xiàn)電路系統(tǒng)的一門技術(shù)。EDA技術(shù)在逐漸進(jìn)步,其大致經(jīng)歷了3個(gè)發(fā)展階段:CAD階段(20世紀(jì)70年代至80年代初)、CAE階段(20世紀(jì)80年代初至90年代初)、EDA階段(20世紀(jì)90年代以后)。1EDA技術(shù)在進(jìn)入21世紀(jì)后,得到了不小的進(jìn)步和發(fā)展,突出表現(xiàn)在以下幾個(gè)方面:2(1)不斷推出在仿真驗(yàn)證和設(shè)計(jì)兩方面都支持標(biāo)準(zhǔn)硬件描述語言的EDA軟件,功能更加強(qiáng)大且驗(yàn)證更加高效;(2) EDA技術(shù)使得電子設(shè)計(jì)成果以自主知識產(chǎn)權(quán)(IP)的方式予以確認(rèn),提高了設(shè)計(jì)成

4、果的可重用性;(3)EDA技術(shù)使得電子領(lǐng)域各學(xué)科之間的界限更加模糊,互為包容,如模擬和數(shù)字、軟件和硬件、系統(tǒng)和器件、ASIC和FPGA等;(4)SoPC(可編程芯片系統(tǒng))進(jìn)入實(shí)用化階段;(5)高速數(shù)字信號處理算法可基于FPGA的DSP技術(shù)實(shí)現(xiàn)。1.1.2 EDA的設(shè)計(jì)流程一個(gè)完整的EDA設(shè)計(jì)流程既是自頂向下設(shè)計(jì)方法的具體實(shí)施途徑,也是EDA工具軟件本身的組成結(jié)構(gòu)。自頂向下的設(shè)計(jì),即Top-down設(shè)計(jì),這種設(shè)計(jì)方法首先從系統(tǒng)設(shè)計(jì)入手,在頂層進(jìn)行功能方框圖的劃分與結(jié)構(gòu)設(shè)計(jì)。在功能級仿真糾錯(cuò),并用硬件描述語言對高層次的系統(tǒng)行為進(jìn)行描述,然后用綜合工具將設(shè)計(jì)轉(zhuǎn)化為具體門電路網(wǎng)表。由于設(shè)計(jì)的主要仿真和

5、調(diào)試過程是在高層次完成的,這一方面有利于在早期發(fā)現(xiàn)結(jié)構(gòu)設(shè)計(jì)上的錯(cuò)誤,避免設(shè)計(jì)工作的浪費(fèi),同時(shí)也減少了邏輯功能仿真的工作量,提高了設(shè)計(jì)的一次成功率。EDA設(shè)計(jì)流程一般包括:設(shè)計(jì)輸入、綜合、布局布線、仿真、編程配置的步驟。3設(shè)計(jì)輸入原理圖HDL文本功能仿真綜合時(shí)序仿真FPGA/CPLD適配FPGA/CPLD編程下載在線測試 圖1 基于FPGA/CPLD器件的數(shù)字系統(tǒng)設(shè)計(jì)流程 (1)設(shè)計(jì)輸入(Design Entry):主要為原理圖(schematic)輸入和HDL文本編輯輸入2部分。(2)綜合(Synthesis):將高級抽象層次的設(shè)計(jì)描述自動(dòng)轉(zhuǎn)化為低層次描述。(3)布局布線:將綜合生成的電路邏輯

6、網(wǎng)表映射到具體的目標(biāo)器件,并產(chǎn)生最終的可下載文件。(4)仿真:包括功能仿真和時(shí)序仿真,對設(shè)計(jì)電路的功能的驗(yàn)證。(5)編程配置:把適配后生成的編程文件裝入到PLD器件中,CPLD器件的下載稱為編程,F(xiàn)PGA器件的下載稱為配置。1.1.3 Quartus II設(shè)計(jì)平臺和Verilog HDL語言本設(shè)計(jì)的開發(fā)工具是Quartus II,采用Verilog HDL語言編程。Quartus II適合大規(guī)模FPGA的開發(fā),是Altera繼MAX+plus II后的新一款開發(fā)工具。Quartus II提供了更優(yōu)化的綜合和適配功能,改善了對第三方仿真和分析工具的支持。它還包括了DSP Builder、SOPC

7、 Builder等開發(fā)工具,支持系統(tǒng)級的開發(fā)等。Quartus II是一款具有標(biāo)準(zhǔn)的EDA工具接口和完善的可視化設(shè)計(jì)環(huán)境的FPGA/CPLD集成開發(fā)軟件。設(shè)計(jì)輸入有多種表達(dá)方式,最常用的是原理圖方式和HDL文本方式。Verilog HDL是一種硬件描述語言(HDL:Hardware Description Language),以文本形式來描述數(shù)字系統(tǒng)硬件的結(jié)構(gòu)和行為的語言。用它可以表示邏輯電路圖、邏輯表達(dá)式,還可以表示數(shù)字邏輯系統(tǒng)所完成的邏輯功能。4Verilog HDL和VHDL是世界上流行的2種硬件描述語言,都是在20世紀(jì)80年代中期被開發(fā)出來的。Verilog HDL由GDA公司開發(fā),它

8、是在C語言的基礎(chǔ)上發(fā)展而來的,但作為一種硬件描述語言和C語言有著本質(zhì)的區(qū)別,Verilog語言概括起來有著如下的一些特點(diǎn):(1) 適用于可綜合的電路設(shè)計(jì),也適用于電路和系統(tǒng)的仿真。(2) 能在多個(gè)層次上對所設(shè)計(jì)的系統(tǒng)進(jìn)行描述,對設(shè)計(jì)的規(guī)模也沒有任何限制。(3) 行為描述和結(jié)構(gòu)描述靈活且支持混合建模。(4) 行為描述語句類似于軟件高級語言。(5) 內(nèi)置各種邏輯門和開關(guān)級元件。(6) UDP(用戶定義原語)可靈活創(chuàng)建。1.1.4 FPGA器件FPGA(Field Programmable Gate Array),現(xiàn)場可編程門陣列,是一種在采用單元型結(jié)構(gòu)的新型PLD器件。作為ASIC(專用集成電路)

9、領(lǐng)域中的一種半定制電路,F(xiàn)PGA既彌補(bǔ)了定制電路的不足,又克服了原有可編程器件門電路數(shù)有限的缺點(diǎn),成為當(dāng)前主流的PLD器件之一。FPGA使用CMOS、SRAM工藝制作,和陣列型PLD結(jié)構(gòu)不同,內(nèi)部由許多獨(dú)立的可編程邏輯單元構(gòu)成,各邏輯單元間可以靈活地相互連接,具有密度高、速度快、編程靈活、可重新配置等優(yōu)勢。1.2 電子琴與相關(guān)的音樂知識EDA技術(shù)的成熟,F(xiàn)PGA器件的發(fā)展使得基于EDA技術(shù)的電子琴設(shè)計(jì)成為可能。在計(jì)算機(jī)上運(yùn)用EDA軟件可以很方便地對所需要實(shí)現(xiàn)的電子琴進(jìn)行設(shè)計(jì)和仿真。采用傳統(tǒng)方法如單片機(jī)設(shè)計(jì)的電子琴,要求設(shè)計(jì)人員對硬件非常熟悉,且單片機(jī)制作的主控板受制版工藝、布局結(jié)構(gòu)和起器件質(zhì)量

10、等因素的影響導(dǎo)致抗干擾能力差、故障率高、不易擴(kuò)展等問題。EDA技術(shù)對于設(shè)計(jì)人員來說,修改程序可以實(shí)現(xiàn)不同的功能,對于設(shè)計(jì)周期來說節(jié)省了時(shí)間。本設(shè)計(jì)中的電子琴是通過按鍵控制發(fā)音的,系統(tǒng)演奏時(shí)能選擇手動(dòng)演奏或是自動(dòng)演奏一段預(yù)置的簡短音樂。為完成該設(shè)計(jì),需要了解一些基本的音樂知識理論。在音樂領(lǐng)域中,簡譜和五線譜是人們用來記譜的兩種記譜法,簡譜相對簡易,其又分為字母簡譜和數(shù)字簡譜。數(shù)字簡譜以1、2、3、4、5、6、7來表示音階中的7個(gè)基本音級,分別用do,re,mi,fa,sol,la,si來讀音。在一段4/4拍數(shù)字簡譜中,單獨(dú)的數(shù)字表示一個(gè)四分音符,數(shù)字下面的橫線為減時(shí)線,表示四分音符長度減半;數(shù)字

11、右面的短橫線稱為增時(shí)線,每加一條則延長一個(gè)四分音符時(shí)間;數(shù)字右面的圓點(diǎn)稱為附點(diǎn),用來延長前面音符時(shí)值的一半。如4/4拍一個(gè)四分音符(5)為1拍,則全音符(5- - -)為4拍,二分音符(5-)為2拍,八分音符(5)為半拍。在一段數(shù)字簡譜后面的豎直線為小節(jié),0為休止符。另外為了標(biāo)記簡譜中的重低音,在數(shù)字上方的圓點(diǎn)記為重音,在下方的為低音,單獨(dú)的數(shù)字則是中音。2.系統(tǒng)分析與方案設(shè)計(jì)2.1 設(shè)計(jì)思想與原理框圖揚(yáng)聲器設(shè)計(jì)思想為利用EDA技術(shù)對FPGA器件進(jìn)行配置實(shí)現(xiàn)電子琴,系統(tǒng)掃描按鍵輸入信號來選擇是手動(dòng)還是自動(dòng)演奏,采集的信號轉(zhuǎn)化為分頻預(yù)置數(shù),數(shù)控分頻器輸出不同音符的頻率給揚(yáng)聲器,并由數(shù)碼管顯示當(dāng)前

12、音符。按鍵譯碼數(shù)碼管4音調(diào)顯示置數(shù)分頻揚(yáng)聲器反饋預(yù)置計(jì)數(shù)器二分頻器CLK-6MHz數(shù)碼管123音符顯示 分頻曲譜產(chǎn)生CLK-4Hz圖2 系統(tǒng)原理框圖2.2 原理說明(1) 當(dāng)演奏者按下7個(gè)音調(diào)鍵盤后,在系統(tǒng)基準(zhǔn)時(shí)鐘6MHz下,根據(jù)鍵盤的輸入信號分頻,產(chǎn)生所需的7個(gè)不同音調(diào)的頻率并二分頻輸出給speaker,同時(shí)由數(shù)碼管HEX4顯示音調(diào)。(2) 當(dāng)自動(dòng)演奏信號auto為真時(shí),對系統(tǒng)6MHz基準(zhǔn)時(shí)鐘分頻,產(chǎn)生一個(gè)頻率為4Hz的時(shí)鐘用于譜曲的分頻比預(yù)置。6MHz時(shí)鐘使數(shù)控分頻器產(chǎn)生曲譜演奏音符的對應(yīng)頻率,再經(jīng)過一個(gè)二分頻器輸出該頻率,最后通過speaker發(fā)出該音符的聲音,同時(shí)由數(shù)碼管HEX3、 H

13、EX2和 HEX1分別顯示高中低音符。(3) 當(dāng)auto為0演奏者按下stp鍵后,speaker不發(fā)聲,輸出始終為0Hz的信號,同時(shí)音調(diào)數(shù)碼管均顯示0。3.Quartus II設(shè)計(jì)過程3.1 自動(dòng)演奏樂曲要使用電子琴完成一段音樂的演奏,音調(diào)和音長是2個(gè)最關(guān)鍵的參數(shù)。根據(jù)音樂知識,音調(diào)是由頻率控制的,音長為該音符持續(xù)時(shí)間的長短。在本設(shè)計(jì)中,樂譜產(chǎn)生電路用來控制音樂的音調(diào)和音長。本設(shè)計(jì)中曲譜的自動(dòng)演奏需要在C調(diào)中選取從低音1到高音7共21個(gè)音階,這些不同信號的頻率都可以由一個(gè)基準(zhǔn)頻率分頻得到。因?yàn)楦饕綦A的頻率為非整數(shù),而分頻系數(shù)不能為小數(shù),所以必須對分頻系數(shù)進(jìn)行四舍五入。這樣基準(zhǔn)頻率的選擇變得比較

14、重要,基準(zhǔn)頻率選擇較低,分頻系數(shù)就小,誤差大;基準(zhǔn)頻率選擇較高,誤差是小了,但是分頻系數(shù)也大。綜合考慮,選取6 MHz的基準(zhǔn)頻率是可行的。數(shù)控分頻器輸出的為脈寬極窄的脈沖式信號,為了減少輸出的偶次諧波分量,需要在數(shù)控分頻器和揚(yáng)聲器之間加一個(gè)二分頻器以均衡其占空比,保證到達(dá)揚(yáng)聲器的是對稱方波。二分頻器將基準(zhǔn)頻率二分頻,即為3MHz,計(jì)算分頻系數(shù)也就以3MHz為基準(zhǔn)頻率。分頻系數(shù)為基準(zhǔn)頻率和各音階頻率的比值,例如中音1的頻率為523Hz,分頻系數(shù)為5736,高音7的頻率為1976 Hz,分頻系數(shù)為1518。由于最大分頻系數(shù)為11450,故采用14位二進(jìn)制計(jì)數(shù)器已經(jīng)足夠。在演奏時(shí),對于不同的分頻系數(shù)

15、,只需要加載對應(yīng)的預(yù)置數(shù)。采用加載預(yù)置數(shù)的方法比反饋復(fù)零法更節(jié)省資源,實(shí)現(xiàn)起來也更加簡單。用差值法分頻,把初始值214 -1=16383和各音階的分頻系數(shù)的差值作為預(yù)置數(shù)即可發(fā)出不同頻率的音符。對于樂曲中的休止符,只要將分頻系數(shù)設(shè)為0,初始值為16383即可,此時(shí)揚(yáng)聲器不發(fā)聲。6表1 各音階頻率對應(yīng)分頻系數(shù)與預(yù)置數(shù)(由3Mhz計(jì)算得出)低音頻率/Hz分頻系數(shù)初始值中音頻率/Hz分頻系數(shù)初始值高音頻率/Hz分頻系數(shù)初始值12621145049331523573610647110462868135152294102046179258751111127221175255313830333090917

16、29436594552118313131822761410743498596778746984298120854139721471423653927653873057843827125565156819131447064406818956568034091297467601705146787494607310310798830361334771976151814865音符的持續(xù)時(shí)間由樂曲的速度及每個(gè)音符的節(jié)拍數(shù)確定。通過控制計(jì)數(shù)器預(yù)置數(shù)的停留時(shí)間,預(yù)置數(shù)的停留時(shí)間長,則音符的停留時(shí)間長。以下是生日歌的C調(diào)簡譜:圖3 生日歌簡譜簡譜中,如果將全音符的持續(xù)時(shí)間設(shè)定為1秒,則四分音符為0.25秒,只

17、需要再提供一個(gè)4Hz的時(shí)鐘頻率即可產(chǎn)生四分音符的時(shí)長。每個(gè)音符的演奏時(shí)間都是0.25的整數(shù)倍,對于節(jié)拍較長的音符,如二分音符在記譜時(shí)將該音名連續(xù)記錄2次,全音符連續(xù)記錄4次即可。在編寫樂譜程序時(shí)記音符的拍數(shù),由于二分頻器的存在,一拍就要記為連續(xù)的2個(gè)時(shí)鐘節(jié)拍。為了實(shí)現(xiàn)樂曲的循環(huán)演奏,需要再加一個(gè)時(shí)長計(jì)數(shù)器counter,當(dāng)樂曲演奏結(jié)束時(shí)能再次重新演奏。3.2 手動(dòng)按鍵演奏本設(shè)計(jì)中的電子琴且除了能自動(dòng)演奏一段預(yù)置的樂曲外,還能完成手動(dòng)演奏發(fā)出C調(diào)的7個(gè)中音 。由于自動(dòng)演奏是在人按下自動(dòng)演奏鍵以后進(jìn)行的,所以設(shè)置一個(gè)auto來控制是否自動(dòng)演奏。當(dāng)auto為真時(shí),實(shí)現(xiàn)預(yù)置樂曲的自動(dòng)演奏,否則掃描按鍵

18、由人工演奏。如果自動(dòng)演奏則按照樂譜,把musicout賦值給speaker。手動(dòng)演奏時(shí)的音調(diào)頻率同樣需要由系統(tǒng)時(shí)鐘分頻得到,設(shè)置一個(gè)i以改變分頻系數(shù),再對speaker二分頻。各個(gè)音調(diào)的分頻系數(shù)以3MHz計(jì)算得出,即為表1中從中音1到中音7的分頻系數(shù)。如中音1的分頻系數(shù)應(yīng)為5736。相應(yīng)地,中音1的輸出信號程序應(yīng)該編寫成:doo:begin if(i>=5736)beginspeaker=!speaker;tone=4'b0001;i<=0;endelsei<=i+1'd1;end3.3 音名顯示音名顯示數(shù)碼管用來顯示演奏時(shí)對應(yīng)的音符。本設(shè)計(jì)中,用數(shù)碼管HEX

19、3、HEX2、HEX1分別顯示自動(dòng)演奏時(shí)的高中低音符,其中high_7s、mid_7s和low_7s分別為高中低音顯示信號;用數(shù)碼管HEX4顯示手動(dòng)演奏時(shí)的音調(diào),tone_7s為鍵盤演奏音調(diào)信號。采用7段共陽數(shù)碼管,以a、b、c、d、e、f、g來標(biāo)記數(shù)碼管的7個(gè)LED顯示位,對各個(gè)要顯示位置加以低電平即可點(diǎn)亮。本設(shè)計(jì)中,定義輸出reg6:0 ledout為顯示信號,例如要顯示“0”,只要使ledout<=7b1000000。借助這些數(shù)碼管,能夠?qū)崿F(xiàn)演奏的動(dòng)態(tài)顯示。圖4 共陽數(shù)碼管原理圖3.4 源程序module eorgan(key,clk6m,auto,speaker,tone_7s,

20、high_7s,mid_7s,low_7s); input key,clk6m,auto; /鍵盤輸入,6M基準(zhǔn)時(shí)鐘輸入,自動(dòng)演奏 wire7:0 key; /鍵盤輸入信號 output 6:0 tone_7s; /數(shù)碼管顯示鍵盤音調(diào)output reg speaker; output 6:0 high_7s; /顯示樂曲高音音符output 6:0 mid_7s; /顯示樂曲中音音符output 6:0 low_7s; /顯示樂曲低音音符 reg20:0 i; reg clk4; reg3:0 high,mid,low,tone; /高中低音信號和鍵盤音調(diào)信號 reg13:0 divider

21、,origin; /自動(dòng)演奏分頻系數(shù)和初始值 reg carry; reg musicout; /樂譜輸出信號 reg 19:0 count20; reg7:0 counter; parameter stp=8'b10000000, /休止 doo=8'b00000001, /do re=8'b00000010, /re mi=8'b00000100, /mi fa=8'b00001000, /fa sol=8'b00010000, /sol la=8'b00100000, /la si=8'b01000000; /si alwa

22、ys (posedge clk6m) begin if(auto) speaker<=musicout; /如果automusic為真,輸出樂譜 else begin /否則判斷鍵盤key的輸入case(key) stp:beginspeaker<=0;tone=4'b0000;i<=0;enddoo:begin /doif(i>=5736)beginspeaker=!speaker;tone=4'b0001;i<=0;endelsei<=i+1'd1;endre:begin /reif(i>=5111)beginspeaker

23、=!speaker;tone=4'b0010;i<=0;endelsei<=i+1'd1;endmi:begin /miif(i>=4552)beginspeaker=!speaker;tone=4'b0011;i<=0;endelsei<=i+1'd1;endfa:begin / faif(i>=4298)beginspeaker=!speaker;tone=4'b0100;i<=0;endelsei<=i+1'd1;endsol:begin /solif(i>=3827)beginspea

24、ker=!speaker;tone=4'b0101;i<=0;endelsei<=i+1'd1;endla:begin /laif(i>=3409)beginspeaker=!speaker;tone=4'b0110;i<=0;endelsei<=i+1'd1;endsi:begin /siif(i>=3036)beginspeaker=!speaker;tone=4'b0111;i<=0;endelsei<=i+1'd1;enddefault:beginspeaker<=0;tone=4&#

25、39;b0000;i<=0;endendcase end end always (posedge clk6m) /通過置數(shù),改變分頻比begin if(divider=16383)begin carry<=1;divider<=origin;end else begin divider<=divider+1'd1;carry<=0;endend always (posedge carry) begin musicout<=musicout; /2 分頻產(chǎn)生方波信號 end always (posedge clk6m) /從6Mhz得到4hzbegin

26、 if(!auto)begin count20<=20'd0;clk4<=0;endelse if(count20=20'd750000) begin count20<=20'd0;clk4<=clk4;endelse count20<=count20+20'd1;end always (posedge clk4) /分頻比預(yù)置 begin case(high,mid,low) 'h001: origin<=4933; /低音1'h002: origin<=6179; /低音2'h003: ori

27、gin<=7294; /低音3'h004: origin<=7787; /低音4'h005: origin<=8730; /低音5'h006: origin<=9565; /低音6'h007: origin<=10310; /低音7'h010: origin<=10647; /中音1'h020: origin<=11272; /中音2'h030: origin<=11831; /中音3'h040: origin<=12085; /中音4'h050: origin<

28、=12556; /中音5'h060: origin<=12974; /中音6'h070: origin<=13347; /中音7'h100: origin<=13515; /高音1'h200: origin<=13830; /高音2'h300: origin<=14107; /高音3'h400: origin<=14236; /高音4'h500: origin<=14470; /高音5'h600: origin<=14678; /高音6'h700: origin<=14

29、865; /高音7'h000: origin<=16383; /休止 endcase end always (posedge clk4)begin if(counter=52) counter<=0; /計(jì)時(shí),以實(shí)現(xiàn)循環(huán)演奏 else counter<=counter+1'd1; case(counter) /記譜0: high,mid,low<='h050; /“祝” 1: high,mid,low<='h050; /“你”2: high,mid,low<='h060; /“生”3: high,mid,low<

30、='h060; /持續(xù)2個(gè)時(shí)鐘節(jié)拍,以下類似4: high,mid,low<='h050; /“日”5: high,mid,low<='h050; 6: high,mid,low<='h100; /“快”7: high,mid,low<='h100; 8: high,mid,low<='h070; /“樂”9: high,mid,low<='h070; 10: high,mid,low<='h070;11: high,mid,low<='h070; 12: high,mid,

31、low<='h050; /“?!?3: high,mid,low<='h050;14: high,mid,low<='h050; /“你”15: high,mid,low<='h050;16: high,mid,low<='h060; /“生”17: high,mid,low<='h060; 18: high,mid,low<='h050; /“日”19: high,mid,low<='h050; 20: high,mid,low<='h200; /“快”21: hig

32、h,mid,low<='h200;22: high,mid,low<='h100; /“樂”23: high,mid,low<='h100;24: high,mid,low<='h100; 25: high,mid,low<='h100; 26: high,mid,low<='h050; /“?!?7: high,mid,low<='h050; /“你”28: high,mid,low<='h500; /“生” 29: high,mid,low<='h500;30: h

33、igh,mid,low<='h300; /“日”31: high,mid,low<='h300;32: high,mid,low<='h100; /“快”33: high,mid,low<='h100;34: high,mid,low<='h070; /“樂” 35: high,mid,low<='h070; 36: high,mid,low<='h060; 37: high,mid,low<='h060;38: high,mid,low<='h400; /“祝”39:

34、 high,mid,low<='h400; /“你”40: high,mid,low<='h300; /“生” 41: high,mid,low<='h300;42: high,mid,low<='h100; /“日”43: high,mid,low<='h100;44: high,mid,low<='h200; /“快”45: high,mid,low<='h200;46: high,mid,low<='h100; /“樂”47: high,mid,low<='h10

35、0; 48: high,mid,low<='h100; 49: high,mid,low<='h100; 50: high,mid,low<='h100;51: high,mid,low<='h100;52: high,mid,low<='h000;endcase endled_7s u1(high,high_7s); /高音音符顯示led_7s u2(mid,mid_7s); /中音音符顯示led_7s u3(low,low_7s); /低音音符顯示 led_7s u4(tone,tone_7s); /鍵盤輸入音調(diào)顯示en

36、dmodulemodule led_7s(datain,ledout); /7段數(shù)碼管譯碼顯示模塊input 3:0 datain;output reg6:0 ledout;always begincase(datain)0:ledout<=7'b1000000;1:ledout<=7'b1111001;2:ledout<=7'b0100100;3:ledout<=7'b0110000;4:ledout<=7'b0011001;5:ledout<=7'b0010010;6:ledout<=7'b0

37、000010;7:ledout<=7'b1111000;8:ledout<=7'b0000000;9:ledout<=7'b0010000;default:ledout<=7'b1000000;endcaseendendmodule3.5 仿真結(jié)果在Quartus工程中對以上程序全編譯并新建波形仿真圖,進(jìn)行波形仿真,得到手動(dòng)和自動(dòng)演奏時(shí)的仿真波形。圖5 手動(dòng)演奏仿真波形圖圖5系手動(dòng)演奏仿真波形圖,從左至右分別是auto為0時(shí)按下中音1到中音7鍵后的波形。tone_7s顯示各鍵按下時(shí)的音調(diào),分別顯示1000000(無按鍵輸入)、111100

38、1(do)、0100100(re)、0110000(mi)、0011001(fa)、0010010(sol)、0000010(la)、1111000(si)以及stp鍵按下后的1000000。同時(shí)speaker發(fā)出不同音階的聲音,可以看到從中音1到中7隨著頻率的變高,波形的橫向?qū)挾纫苍谥饾u變窄。圖6 自動(dòng)演奏仿真波形圖一圖7 自動(dòng)演奏仿真波形圖二圖6和圖7系自動(dòng)演奏仿真波形圖,可以看出當(dāng)auto為1時(shí),開始按著預(yù)置的譜曲在演奏音樂。tone_7s一直1000000(0),high_7s,mid_7s和low_7s顯示即時(shí)的音符。當(dāng)high_7s,mid_7s和low_7s同時(shí)分別顯示:1000

39、000、0010010、1000000為中音5(“祝”和“你”各半拍), 1000000、0000010、1000000為中音6(“生”一拍), 1000000、0010010、1000000為中音5(“日”一拍), 1111001、1000000、1000000為高音1(“快”一拍), 1000000、1111000、1000000為中音7(“樂”兩拍)等。綜合以上仿真結(jié)果得出結(jié)論,這次畢業(yè)設(shè)計(jì)達(dá)到了既定的設(shè)計(jì)目標(biāo)。4.結(jié)論此次畢業(yè)設(shè)計(jì)完成,我于其中感觸如下:Verilog HDL語言和C語言雖然有著本質(zhì)的不同,但是有了C語言的學(xué)習(xí)經(jīng)驗(yàn),運(yùn)用Verilog HDL語言也不是難事。FPGA設(shè)計(jì)簡單,開發(fā)時(shí)間短,系統(tǒng)維護(hù)起來方便快捷。對于設(shè)計(jì)者來說,不需要考慮太多的硬件設(shè)計(jì),只需要自己的設(shè)計(jì)思路,編程實(shí)現(xiàn)再仿真測試即可。出于對樂譜編程的需要,我自學(xué)了音樂的一些知識理論,這在一定程度上豐富了我的課外知識。不同學(xué)科之間的知識往往互相滲透,多學(xué)多做方能登上知識巔峰。我深刻體會(huì)到學(xué)習(xí)的過程充滿辛苦與收獲,學(xué)習(xí)之路任重道遠(yuǎn),更要活到老學(xué)到老。我在此次畢業(yè)設(shè)計(jì)中遇到了不少困難,但通過查閱資料和請教導(dǎo)師得以解決,所以堅(jiān)持不懈迎難而上才能走向成功。正是由于導(dǎo)師的悉心指導(dǎo)才能讓設(shè)計(jì)過程進(jìn)行得更加順利,在

溫馨提示

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

最新文檔

評論

0/150

提交評論