樂曲硬件演奏電路設(shè)計(jì)_第1頁
樂曲硬件演奏電路設(shè)計(jì)_第2頁
樂曲硬件演奏電路設(shè)計(jì)_第3頁
樂曲硬件演奏電路設(shè)計(jì)_第4頁
樂曲硬件演奏電路設(shè)計(jì)_第5頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、蘭花草樂曲硬件演奏電路設(shè)計(jì)專業(yè):電子信息工程 學(xué)號(hào):2010012145 姓名:程營前言樂曲演奏廣泛應(yīng)用于自動(dòng)答錄裝置,手機(jī)鈴聲,集團(tuán)電話,及智能儀器儀表設(shè)備。實(shí)現(xiàn)方法有許多種,在眾多的實(shí)驗(yàn)方法中,以純硬件完成樂曲演奏,隨著fpga集成度的提高,價(jià)格下降,eda設(shè)計(jì)工具更新?lián)Q代,功能日益普及與流行,使這種方案的應(yīng)用越來越多。本文分析了樂曲演奏設(shè)計(jì)中音符,頻率,節(jié)拍與編碼的相互關(guān)系,并在eda開發(fā)工具max-plus ii平臺(tái)上,采用vhdl語言及原理圖的設(shè)計(jì)方法,實(shí)現(xiàn)基于fpga片上系統(tǒng)動(dòng)態(tài)顯示可選擇多首樂譜的樂曲演奏器的設(shè)計(jì),使樂曲演奏數(shù)字電路的設(shè)計(jì)得到了更好的優(yōu)化,提高了設(shè)計(jì)得靈活性。目錄

2、目錄.1前言.11.題目分析.11.1功能要求.11.2性能指標(biāo)22.設(shè)計(jì)方案.2 2.1頂層實(shí)體描述.3 2.2模塊劃分.3 2.3模塊描述 2.3.1 speakera模塊.4 2.3.2 tonetaba模塊5 2.3.3 notetabs 模塊6 2.4頂層電路圖.83硬件測(cè)試及說明84.課程總結(jié)85.參考文獻(xiàn).81. 題目分析1.1功能要求(1)播放歌曲(2)簡譜碼輸出顯示在數(shù)碼管顯示(3)通過led燈顯示音階1.2性能指標(biāo)(1)樂曲硬件演奏電路的基本原理樂曲都是由一連串的音符組成,每一音符對(duì)應(yīng)著一個(gè)確定的頻率,按照樂曲的樂譜依次輸出這些音符所對(duì)應(yīng)的頻率,就可以在揚(yáng)聲器上連續(xù)地發(fā)出各

3、個(gè)音符的音調(diào)。我們知道,組成樂曲的每個(gè)音符的發(fā)音頻率值及其持續(xù)的時(shí)間是樂曲能連續(xù)演奏所需的兩個(gè)基本要素,所以,掌握好一首歌曲的節(jié)奏,就能完整地演奏出來。(2)音符頻率和樂曲節(jié)奏多個(gè)不同頻率的信號(hào)可通過對(duì)某個(gè)基準(zhǔn)頻率進(jìn)行分頻器獲得,本設(shè)計(jì)中選取750khz的基準(zhǔn)頻率,由于clk端輸入的是較高頻率12mhz信號(hào),可以對(duì)其進(jìn)行16分頻。計(jì)數(shù)時(shí)鐘信號(hào)作為輸出音符快慢的控制信號(hào),時(shí)鐘快時(shí)輸出節(jié)拍速度就快,演奏的速度也就快,時(shí)鐘慢時(shí)輸出節(jié)拍的速度就慢,演奏的速度自然降低。簡譜音符和頻率關(guān)系如下表所示: 表1 各音階頻率對(duì)應(yīng)的分頻值音名分頻系數(shù)初始值音名分頻系數(shù)初始值音名分頻系數(shù)初始值低音11274773中

4、音16371410高音13191728低音21135912中音25871480高音22771770低音310111036中音35051542高音32481799低音49701077中音44681579高音42331814低音59501197中音54251622高音52081839低音67571290中音63791668高音61851862低音76751372中音73301717高音716518822. 設(shè)計(jì)方案自頂向下的設(shè)計(jì)框圖樂曲硬件電路設(shè)計(jì)數(shù)控分頻器音樂節(jié)拍和音調(diào)發(fā)生器預(yù)置數(shù)查表電路2.1頂層實(shí)體描述當(dāng)一個(gè)4hz的時(shí)鐘脈沖來到時(shí),樂譜發(fā)生器模塊輸出一個(gè)音符數(shù)據(jù)給分頻系數(shù)模塊,分頻系數(shù)模塊輸

5、出此音符相應(yīng)的分頻系數(shù),將分頻系數(shù)送給數(shù)控分頻器模塊,當(dāng)12mhz的時(shí)鐘脈沖來到時(shí),數(shù)控分頻器就根據(jù)分頻系數(shù)輸出相應(yīng)的頻率(即此音符所對(duì)應(yīng)的發(fā)生頻率)給揚(yáng)聲器,揚(yáng)聲器就可發(fā)出對(duì)應(yīng)音符的聲音來.連續(xù)的4hz的時(shí)鐘脈沖就將樂譜發(fā)生器里所存儲(chǔ)的音符數(shù)據(jù)一個(gè)接一個(gè)的送給了分頻系數(shù)模塊,再經(jīng)過數(shù)控分頻模塊,最后揚(yáng)聲器一個(gè)接一個(gè)的發(fā)出音符數(shù)據(jù)所對(duì)應(yīng)的聲音來。曲子也就流暢的播放出來了,當(dāng)樂曲一遍演奏完成后,樂曲發(fā)生器能自動(dòng)從頭開始循環(huán)演奏。頂層設(shè)計(jì)程序:library ieee;use ieee.std_logic_1164.all;entity songer isport(clk12mhz:in std_

6、logic;clk8hz :in std_logic; code1 : out std_logic_vector (3 downto 0)high1: out std_logicspkout: out std_logic);endarchitecture one of songer iscomponent notetabsport(clk :in std_logic; toneindex: out std_logic_vector(3 downto 0);end component;component tonetabaport(index: in std_logic_vector (3 dow

7、nto 0);code: out std_logic_vector (3 downto 0);high: out std_logic;tone: out std_logic_vector (10 downto 0);end component;component speakera 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 tone

8、index: std_logic_vector (3 downto 0);beginu1: notetabs port map (clk=clk8hz, toneindex= toneindex);u2: tonetaba port map (index = toneindex, tone=tone,code=code1,high=high1);u3: speakera port map (clk=clk12hz, tone= tone, spks=spkout);end;2.2模塊劃分主系統(tǒng)由三個(gè)模塊組成,分別為speakera模塊、tonetaba模塊、notetabs模塊。(1)spea

9、kera是數(shù)控分頻模塊;(2)tonetaba是分頻預(yù)置數(shù)查找表電路模塊;(3)notetabs音調(diào)發(fā)生器模塊。2.3模塊描述2.3.1 speakera模塊speakeraclktone10:0spks speakera模塊實(shí)體圖音符的頻率可以由此模塊獲得,這是一個(gè)數(shù)控分頻器,由其clk端輸入一具有較高頻率的信號(hào),通過speakera分頻后由spkout輸出,由于直接從數(shù)控分頻器中出來的輸出信號(hào)是脈沖極窄的脈沖式信號(hào),為了有利于驅(qū)動(dòng)揚(yáng)聲器,需另加一個(gè)d觸發(fā)器以均衡其占空比,但這時(shí)的頻率將是原來的1/2。speakera對(duì)clk輸入信號(hào)的分頻比由11位預(yù)置數(shù)tone10.0決定。spkout的

10、輸出頻率將決定每一音符的音調(diào),這樣,分頻計(jì)數(shù)器的預(yù)置值tone10.0與spkout的輸出頻率就有了對(duì)應(yīng)關(guān)系。例如在tonetaba模塊中若取tone10.0=1036,將發(fā)出音符為“3”音的信號(hào)頻率。程序如下library ieee;library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity speakera isport ( clk : in std_logic; tone : in std_logic_vector (10 downto 0); spks : out std_logic )

11、;end;architecture one of speakera is signal preclk, fullspks : std_logic;begindivideclk : process(clk) variable count4: std_logic_vector (3 downto 0) ; beginpreclk11 then preclk =1; count4:= 0000; elsif clkevent and clk = 1 then count4:=count4+1;end if;end process;genspks : process(preclk, tone)- 11

12、位可預(yù)置計(jì)數(shù)器 variable count11 : std_logic_vector (10 downto 0); begin if preclkevent 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)聲器有足夠功率發(fā)音 variable count2 :

13、std_logic;beginif fullspksevent and fullspks = 1 then count2 := not count2;if count2 = 1 then spks = 1;else spks tone=11111111111;code =0000; high tone=10000001100;code =0011; high tone=10010101101;code =0101; high tone=10100001010;code =0110; high tone=10101011100;code =0111; high tone=10110000010;

14、code =0001; high tone=10111001000;code =0001; high tone=11000000110;code =0011; high tone=11000101011;code =0100; high tone=11001010110;code =0101; high tone=11010000100;code =0110; high null;end case;end process;end;2.3.3 notetabs模塊notetabsclktoneindex(3:0) notetabs模塊實(shí)體圖在notetabs中設(shè)置了一個(gè)8位二進(jìn)制計(jì)數(shù)器,作為音符

15、數(shù)據(jù)rom的地址發(fā)生器,計(jì)數(shù)最大值為138,如果樂曲比較長的話可以用9位,此時(shí)計(jì)數(shù)最大值為512。這個(gè)計(jì)數(shù)器的計(jì)數(shù)頻率選為4hz,即每一計(jì)數(shù)值的停留時(shí)間為0.25秒,恰為當(dāng)全音符設(shè)為1秒時(shí),四四拍的4分音符持續(xù)時(shí)間。隨著notetabs中的計(jì)數(shù)器按4hz的時(shí)鐘速率作加法計(jì)數(shù)時(shí),即隨地址值遞增時(shí),音符數(shù)據(jù)rom中的音符數(shù)據(jù)將從rom中通過toneindex3.0端口輸向tonetaba模塊,樂曲就開始自然地演奏起來。程序如下library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity notetab

16、s is port(clk :in std_logic; toneindex: out std_logic_vector(3 downto 0);end;architecture one of notetabs iscomponent musicport(address:in std_logic_vector(7 downto 0)inclock: in std_logic;q: out std_logic_vector(3 downto 0);end component;signal counter: std_logic_vector(7 downto 0)begincnt8:process

17、(clk,counter)beginif counter1=128 then counter = 00000000;elsif (clkevent and clk=1) then counter counter,q=toneindex,inclock=clk);end;在notetabs模塊中定制rom元件,首先建立.mif文件輸入音樂譜,再利用megawizard plug-in manager定制rom宏功能塊,最后加載于rom中,步驟為:(1)進(jìn)入quartusii,選菜單 tool-megawizard plug-in manager,選擇“creat a new”,然后按“next”

18、鍵,選擇lpm-rom;最后在browse下的欄中鍵入路徑與輸出文件名。(2)單擊“next”鍵,選擇rom數(shù)據(jù)位寬度為4,地址線寬為256,即設(shè)置此rom能存儲(chǔ)4位二進(jìn)制數(shù)據(jù)共256個(gè)。(3)通過“browse” 鈕,找到rom中的加載文件路徑和文件名:注意rom元件的inclock是地址鎖存時(shí)鐘。(4)打開已定制的rom文件,將它設(shè)置為工程,并確定目標(biāo)器件,進(jìn)行測(cè)試仿真波形,按照定制步驟對(duì)音符數(shù)據(jù)文件進(jìn)行rom定制。定制的宏模塊如下圖所示:012345670661010101010108101010101010991688898877246666000032131313131313131340131313131313121248101012121212111156101010100000641010131313131212721010101010109980889988778866663333963388887710466666610101129998775512066660000high1notetabsclktoneindex3:0tonetabaindex3:0highcode3:0tone10:0speakeratone10:0clkspksclk12mhzclk8hzspkout2.4頂層電路圖code3:03. 硬件測(cè)試及說明對(duì)其進(jìn)行引腳鎖定,下載到fpga上進(jìn)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論