




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、蘭花草樂曲硬件演奏電路設(shè)計(jì)專業(yè):電子信息工程 學(xué)號(hào):2010012145 姓名:程營(yíng)前言樂曲演奏廣泛應(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)簡(jiǎn)譜碼輸出顯示在數(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é)拍的速度就慢,演奏的速度自然降低。簡(jiǎn)譜音符和頻率關(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è)模塊組成,分別為spea
9、kera模塊、tonetaba模塊、notetabs模塊。(1)speakera是數(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ì)
10、clk輸入信號(hào)的分頻比由11位預(yù)置數(shù)tone10.0決定。spkout的輸出頻率將決定每一音符的音調(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 (
11、10 downto 0); spks : out std_logic );end;architecture one of speakera is signal preclk, fullspks : std_logic;begindivideclk : process(clk) variable count4: std_logic_vector (3 downto 0) ; beginpreclk<=0 if count4>11 then preclk <=1; count4:= "0000" elsif clk'event and clk =
12、39;1' then count4:=count4+1;end if;end process;待添加的隱藏文字內(nèi)容1genspks : process(preclk, tone)- 11位可預(yù)置計(jì)數(shù)器 variable count11 : std_logic_vector (10 downto 0); begin if preclk'event and preclk = '1' then if count11 = 16#7ff# then count11 := tone ; fullspks <= '1' else count11 := c
13、ount11 + 1; fullspks <= '0' end if;end if;end process;delayspks : process(fullspks)-將輸出再2分頻,展寬脈沖,使揚(yáng)聲器有足夠功率發(fā)音 variable count2 : std_logic;beginif fullspks'event and fullspks = '1' then count2 := not count2;if count2 = '1' then spks <= '1'else spks <= '
14、0' end if;end if;end process;end;2.3.2 tonetaba模塊tonetabaindex3:0highcode3:0tone10:0 tonetaba模塊實(shí)體圖音符的持續(xù)時(shí)間需根據(jù)樂曲的速度及每個(gè)音符的節(jié)拍數(shù)來確定,tonetaba的功能首先是為speakera提供決定所發(fā)音符的分頻預(yù)置數(shù),而此數(shù)在speakera輸入口停留的時(shí)間即為此音符的節(jié)拍值。tonetaba模塊是樂曲簡(jiǎn)譜碼對(duì)應(yīng)的分頻預(yù)置數(shù)查找表電路,其中設(shè)置了樂曲全部音符對(duì)應(yīng)的分頻預(yù)置數(shù),每一個(gè)音符的停留時(shí)間由音樂節(jié)拍和音調(diào)發(fā)生器模塊notetabs的clk輸入頻率決定。分頻預(yù)置數(shù)的輸出對(duì)應(yīng)
15、4位輸入值index3.0確定,而當(dāng)樂曲全部分頻預(yù)置數(shù)不止16個(gè)時(shí),可以用5位輸入值index4.0。輸向tonetaba中的index3.0的值toneindex3.0的輸出值與持續(xù)的時(shí)間由notetabs模塊覺定。程序如下library ieee;use ieee.std_logic_1164.all;entity tonetaba isport(index: in std_logic_vector (3 downto 0);code: out std_logic_vector (3 downto 0);high: out std_logic;tone: out std_logic_vec
16、tor (10 downto 0);end;architecture one of tonetaba isbeginsearch:process(index)begincase index iswhen "0000"=> tone<="11111111111"code <="0000" high <= 0;when "0011"=> tone<="10000001100"code <="0011" high <= 0;when
17、"0101"=> tone<="10010101101"code <="0101" high <= 0;when "0110"=> tone<="10100001010"code <="0110" high <= 0;when "0111"=> tone<="10101011100"code <="0111" high <= 0;when &qu
18、ot;1000"=> tone<="10110000010"code <="0001" high <= 1;when "1001"=> tone<="10111001000"code <="0001" high <= 1;when "1010"=> tone<="11000000110"code <="0011" high <= 1;when "
19、1011"=> tone<="11000101011"code <="0100" high <= 1;when "1100"=> tone<="11001010110"code <="0101" high <= 1;when "1101"=> tone<="11010000100"code <="0110" high <= 1;when others=&g
20、t; null;end case;end process;end;2.3.3 notetabs模塊notetabsclktoneindex(3:0) notetabs模塊實(shí)體圖在notetabs中設(shè)置了一個(gè)8位二進(jìn)制計(jì)數(shù)器,作為音符數(shù)據(jù)rom的地址發(fā)生器,計(jì)數(shù)最大值為138,如果樂曲比較長(zhǎng)的話可以用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端口輸
21、向tonetaba模塊,樂曲就開始自然地演奏起來。程序如下library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity notetabs 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_l
22、ogic;q: out std_logic_vector(3 downto 0);end component;signal counter: std_logic_vector(7 downto 0)begincnt8:process(clk,counter)beginif counter1=128 then counter <= "00000000"elsif (clkevent and clk='1') then counter <= counter +1;end if;end process; u1:music port map(addres
23、s=>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”鍵,選擇lpm-rom;最后在browse下的欄中鍵入路徑與輸出文件名。(2) 單擊“next”鍵,選擇rom數(shù)據(jù)位寬度為4,地址線寬為2
24、56,即設(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定制。定制的宏模塊如下圖所示:01234567066101010101010810101010101099168889887724666600003213131313131313134013131313131312124810101212121211115610101010000064101013131313121272101010101010998088998877886666333396338888771046666661
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025至2030年中國(guó)合成纖維聚酯切片數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 2025至2030年中國(guó)仿皮表盒數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 河南省周口市扶溝縣2024-2025學(xué)年九年級(jí)上學(xué)期1月期末化學(xué)試題(含答案)
- 跳水闖關(guān)考試題及答案
- 2025年軍隊(duì)文職人員招聘之軍隊(duì)文職法學(xué)能力測(cè)試試卷A卷附答案
- 2025年軍隊(duì)文職人員招聘之軍隊(duì)文職政治學(xué)全真模擬考試試卷A卷含答案
- 2019-2025年消防設(shè)施操作員之消防設(shè)備中級(jí)技能題庫(kù)檢測(cè)試卷B卷附答案
- 2024河北省中考英語真題含答案
- 郵輪切艙合同(2篇)
- 采購(gòu)追加合同范本(2篇)
- (二調(diào))武漢市2025屆高中畢業(yè)生二月調(diào)研考試 生物試卷(含標(biāo)準(zhǔn)答案)
- (一模)臨沂市2025屆高三高考第一次模擬考試政治試卷(含答案詳解)
- 2025年中考百日誓師大會(huì)校長(zhǎng)發(fā)言稿(二)
- 1.2男生女生課件(共15張)-2024-2025學(xué)年統(tǒng)編版道德與法治七年級(jí)下冊(cè)
- 2025年共青科技職業(yè)學(xué)院?jiǎn)握新殬I(yè)技能測(cè)試題庫(kù)學(xué)生專用
- Module 2 Unit 2 It will snow in Harbin.(說課稿)-2023-2024學(xué)年外研版(三起)英語六年級(jí)下冊(cè)
- 真需求-打開商業(yè)世界的萬能鑰匙
- 教學(xué)能力大賽決賽獲獎(jiǎng)-教學(xué)實(shí)施報(bào)告-(完整圖文版)
- 完整戶口本英文翻譯模板(共4頁(yè))
- 高二通用技術(shù)-經(jīng)典結(jié)構(gòu)的欣賞課件說課講解
- 數(shù)獨(dú)入門技巧宮摒除法使用
評(píng)論
0/150
提交評(píng)論