




已閱讀5頁(yè),還剩41頁(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)介
基于FPGA音樂硬件演奏電路設(shè)計(jì)目 錄摘 要I1 系統(tǒng)設(shè)計(jì)總述11.1 設(shè)計(jì)要求11.2 系統(tǒng)組成12 總體程序設(shè)計(jì)42.1 頂層模塊設(shè)計(jì)流程圖42.2 頂層電路VHDL程序設(shè)計(jì)43 單元模塊程序設(shè)計(jì)63.1 音樂節(jié)拍和音調(diào)發(fā)生器模塊63.2 音樂譜對(duì)應(yīng)分頻預(yù)置數(shù)查表電路模塊73.3 音樂譜對(duì)應(yīng)分頻預(yù)置數(shù)查表電路模塊93.4 樂曲演奏音符數(shù)據(jù)文件(媽媽的吻)113.5 定制音符數(shù)據(jù)的ROM文件124 VHDL音樂硬件演奏電路系統(tǒng)仿真與調(diào)試154.1 NoteTabs音樂節(jié)拍和音調(diào)發(fā)生器模塊的仿真154.2 ToneTaba分頻預(yù)置數(shù)查表模塊的仿真154.3 Speakera音樂符數(shù)控分頻模塊的仿真164.4 擴(kuò)大此音樂硬件演奏電路的通用性185 心得體會(huì)20參考文獻(xiàn)21摘 要根據(jù)國(guó)家教委與專業(yè)教學(xué)委員會(huì)對(duì)教育機(jī)構(gòu)的要求,為培養(yǎng)適應(yīng)我國(guó)21世紀(jì)國(guó)民經(jīng)濟(jì)發(fā)展需要的電子設(shè)置人才;同時(shí)基于國(guó)家教委面向21世紀(jì)電工電子課程體系改革和電工電子工科教學(xué)基地建設(shè)兩項(xiàng)教學(xué)改革研究成果。要求高等??茖W(xué)校學(xué)生能夠自己動(dòng)手完成簡(jiǎn)單數(shù)字器件的設(shè)計(jì)。這不但反應(yīng)了我國(guó)當(dāng)前在電子電路的實(shí)驗(yàn)教學(xué)體系、內(nèi)容和方法上的改革思路和教學(xué)水平的提高,更重要的是在加強(qiáng)以傳統(tǒng)電子設(shè)計(jì)方法為基礎(chǔ)的工程設(shè)計(jì)訓(xùn)練的同時(shí),使學(xué)生能夠盡快掌握現(xiàn)代電子設(shè)計(jì)自動(dòng)化技術(shù)的新方法、新工具和新手段系統(tǒng)的、科學(xué)的培養(yǎng)了學(xué)生的實(shí)際動(dòng)手能力、理論聯(lián)系實(shí)際的能力、工程設(shè)計(jì)能力,創(chuàng)新能力,提高了學(xué)生對(duì)基礎(chǔ)實(shí)驗(yàn)的興趣。本次設(shè)計(jì)在EDA開發(fā)平臺(tái)QUARTUS II 6.0上利用VHDL語(yǔ)言設(shè)計(jì)數(shù)控分頻器電路,利用數(shù)控分頻的原理設(shè)計(jì)音樂硬件演奏電路,并定制LPM-ROM存儲(chǔ)音樂數(shù)據(jù),以“梁?!焙汀霸铝链砦业男摹眱墒讟非鸀槔?,將音樂數(shù)據(jù)存儲(chǔ)到LPM-ROM,就達(dá)到了以純硬件的手段來(lái)實(shí)現(xiàn)樂曲的演奏效果。只要修改LPM-ROM所存儲(chǔ)的音樂數(shù)據(jù),將其換成其他樂曲的音樂數(shù)據(jù),再重新定制LPM-ROM,連接到程序中就可以實(shí)現(xiàn)其它樂曲的演奏。本設(shè)計(jì)采用的是武漢理工大學(xué)的開放設(shè)計(jì)實(shí)驗(yàn)箱,F(xiàn)PGA目標(biāo)芯片型號(hào)為Altera公司的Cyclone系列中的EP1C3T144C8N。芯片配置成功后即可進(jìn)行硬件測(cè)試:選擇實(shí)驗(yàn)電路結(jié)構(gòu)圖,發(fā)音輸出接SPEAKER,當(dāng)樂曲一遍演奏完成后,樂曲發(fā)生器能自動(dòng)從頭開始循環(huán)演奏。關(guān)鍵詞: FPGA/CPLD,音樂硬件演奏電路,VHDL語(yǔ)言設(shè)計(jì),QUARTUS II 6.0I1 系統(tǒng)設(shè)計(jì)總述1.1 設(shè)計(jì)要求這是一種運(yùn)用純硬件實(shí)現(xiàn)樂曲播放的電路,比運(yùn)用微處理器實(shí)現(xiàn)樂曲播放更加復(fù)雜。它運(yùn)用了強(qiáng)大功能的EDA工具開放設(shè)計(jì)試驗(yàn)箱和硬件描述語(yǔ)言VHDL。本課題以歌曲媽媽的吻來(lái)實(shí)現(xiàn)樂曲播放電路的功能。(1)順序播放樂曲功能:當(dāng)電路開始工作時(shí),如果存儲(chǔ)器中有多首樂曲,那么演奏電路將從頭到尾順序播放這些樂曲。(2)循環(huán)播放樂曲功能:當(dāng)演奏完后一首樂曲時(shí),將自動(dòng)返回到第一首歌曲開始播放,反復(fù)不止,直到關(guān)閉電源電路停止工作為止。(3)樂曲簡(jiǎn)譜顯示功能:當(dāng)演奏電路播放樂曲時(shí),能夠?qū)?dāng)前播放的音符通過一列發(fā)光二極管以二進(jìn)制的形式予以顯示。(4)樂曲高音顯示功能:如果電路正在播放高音音符,那么將有一個(gè)發(fā)光二極管點(diǎn)亮來(lái)顯示。(5)音量大小可調(diào)功能:運(yùn)用EDA實(shí)驗(yàn)箱上的數(shù)字功率放大器LM386N,對(duì)數(shù)控分頻器輸出的音頻信號(hào)予以處理,輸出大小連續(xù)可調(diào)的音頻信號(hào)到揚(yáng)聲器。1.2 系統(tǒng)組成(1)音樂硬件演奏電路基本原理 硬件電路的發(fā)聲原理,聲音的頻譜范圍約在幾十到幾千赫茲,若能利用程序來(lái)控制FPGA芯片某個(gè)引腳輸出一定頻率的矩形波,接上揚(yáng)聲器就能發(fā)出相應(yīng)頻率的聲音。樂曲中的每一音符對(duì)應(yīng)著一個(gè)確定的頻率,要想FPGA發(fā)出不同音符的音調(diào),實(shí)際上只要控制它輸出相應(yīng)音符的頻率即可。樂曲都是由一連串的音符組成,因此按照樂曲的樂譜依次輸出這些音符所對(duì)應(yīng)的頻,就可以在揚(yáng)聲器上連續(xù)地發(fā)出各個(gè)音符的音調(diào)。而要準(zhǔn)確地演奏出一首樂曲,僅僅讓揚(yáng)聲器能夠發(fā)生是不夠的,還必須準(zhǔn)確地控制樂曲的節(jié)奏,即樂曲中每個(gè)音符的發(fā)生頻率及其持續(xù)時(shí)間是樂曲能夠連續(xù)演奏的兩個(gè)關(guān)鍵因素。(2)音符頻率的獲得多個(gè)不同頻率的信號(hào)可通過對(duì)某個(gè)基準(zhǔn)頻率進(jìn)行分頻器獲得。由于各個(gè)音符的頻率多為非整數(shù),而分頻系數(shù)又不能為小數(shù),故必須將計(jì)算機(jī)得到的分頻系數(shù)四舍五入取整。若基準(zhǔn)頻率過低,則分頻系數(shù)過小,四舍五入取整后的誤差較大。若基準(zhǔn)頻率過高,雖然可以減少頻率的相對(duì)誤差,但分頻結(jié)構(gòu)將變大。實(shí)際上應(yīng)該綜合考慮這兩個(gè)方面的因素,在盡量減少誤差的前提下,選取合適的基準(zhǔn)頻率。本設(shè)計(jì)中選取750KHz的基準(zhǔn)頻率。由于現(xiàn)有的高頻時(shí)鐘脈沖信號(hào)的頻率為12MHz,故需先對(duì)其進(jìn)行16分頻,才能獲得750KHz的基準(zhǔn)頻率。對(duì)基準(zhǔn)頻率分頻后的輸出信號(hào)是一些脈寬極窄的尖脈沖信號(hào)(占空比=1/分頻系數(shù))。為提高輸出信號(hào)的驅(qū)動(dòng)能力,以使揚(yáng)聲器有足夠的功率發(fā)音,需要再通過一個(gè)分頻器將原來(lái)的分頻器的輸出脈沖均衡為對(duì)稱方波(占空比=1/2),但這時(shí)的頻率將是原來(lái)的1/2。下表中各音符的分頻系數(shù)就是從750KHz的基準(zhǔn)頻率二分頻得到的375KHz頻率基礎(chǔ)上計(jì)算得到的。由于最大分頻系數(shù)是1274,故分頻器采用11位二進(jìn)制計(jì)數(shù)器能滿足要求,樂曲中的休止符,只要將分頻系數(shù)設(shè)為0,即初始值=211-1=2047,此時(shí)揚(yáng)聲器不會(huì)發(fā)聲。表1 各個(gè)音符的頻率及其對(duì)應(yīng)的分頻系數(shù)(基準(zhǔn)頻率375KHz)音符名頻 率(Hz)分頻系數(shù)計(jì)數(shù)初值音符名頻率(Hz)分頻系數(shù)計(jì)數(shù)初值休止符37500002047中音4796.1784681579低音1294.3491274773中音5882.3534251622低音2330.3961135912中音6989.4463791668低音3370.9210111036中音71136.3633301717低音4386.5989701077高音11175.5493191728低音5394.7379501197高音21353.7902771770低音6495.3767571290高音31512.0972481799低音7555.566751372高音41609.4422331814中音1588.6976371410高音51802.8842081839中音2638.845871480高音62027.0271851862中音3742.5745051542高音72272.7271651882(3)樂曲節(jié)奏的控制 本設(shè)計(jì)中的梁祝和月亮代表我的心的樂曲,最小的節(jié)拍為1/4拍,若將1拍的時(shí)間定為1秒,則只需要提供一個(gè)4Hz的時(shí)鐘頻率即可產(chǎn)生1/4拍的時(shí)長(zhǎng)(0.25秒),對(duì)于其它占用時(shí)間較長(zhǎng)的節(jié)拍(必為1/4拍的整數(shù)倍)則只需要將該音符連續(xù)輸出相應(yīng)的次數(shù)即可。計(jì)數(shù)時(shí)鐘信號(hào)作為輸出音符快慢的控制信號(hào),時(shí)鐘快時(shí)輸出節(jié)拍速度就快,演奏的速度也就快,時(shí)鐘慢時(shí)輸出節(jié)拍的速度就慢,演奏的速度自然降低。(4)樂譜發(fā)生器本文將樂譜中的音符數(shù)據(jù)存儲(chǔ)在LPM-ROM中,如“梁祝”樂曲中的第一個(gè)音符為“3”,此音在邏輯中停留了4個(gè)時(shí)鐘節(jié)拍,即1秒的時(shí)間,相應(yīng)地,音符“3”就要在LPM-ROM中連續(xù)的四個(gè)地址上都存儲(chǔ)。當(dāng)一個(gè)4Hz的時(shí)鐘來(lái)時(shí),相應(yīng)地就從LPM-ROM中輸出一個(gè)音符數(shù)據(jù)。(5)音樂硬件演奏電路總體設(shè)計(jì)流程當(dāng)一個(gè)4Hz的時(shí)鐘脈沖來(lái)到時(shí),樂譜發(fā)生器模塊輸出一個(gè)音符數(shù)據(jù)給分頻系數(shù)模塊,分頻系數(shù)模塊輸出此音符相應(yīng)的分頻系數(shù),將分頻系數(shù)送給數(shù)控分頻器模塊,當(dāng)12MHz的時(shí)鐘脈沖來(lái)到時(shí),數(shù)控分頻器就根據(jù)分頻系數(shù)輸出相應(yīng)的頻率(即此音符所對(duì)應(yīng)的發(fā)生頻率)給揚(yáng)聲器,揚(yáng)聲器就可發(fā)出對(duì)應(yīng)音符的聲音來(lái).連續(xù)的4Hz的時(shí)鐘脈沖就將樂譜發(fā)生器里所存儲(chǔ)的音符數(shù)據(jù)一個(gè)接一個(gè)的送給了分頻系數(shù)模塊,再經(jīng)過數(shù)控分頻模塊,最后揚(yáng)聲器一個(gè)接一個(gè)的發(fā)出音符數(shù)據(jù)所對(duì)應(yīng)的聲音來(lái)。曲子也就流暢的播放出來(lái)了,當(dāng)樂曲一遍演奏完成后,樂曲發(fā)生器能自動(dòng)從頭開始循環(huán)演奏,按下SEL鍵時(shí)播放第二首歌,按下RST鍵時(shí)從頭開始播放歌曲。音樂硬件演奏電路主要是用VHDL語(yǔ)言來(lái)設(shè)計(jì),并利用Quartus6.0軟件工具來(lái)編譯、測(cè)試和仿真,音樂硬件演奏電路設(shè)計(jì)總體設(shè)計(jì)方框圖如下圖所示。圖1.1 音樂硬件演奏電路設(shè)計(jì)總體設(shè)計(jì)方框圖 2 總體程序設(shè)計(jì)2.1 頂層模塊設(shè)計(jì)流程圖圖2.1 頂層模塊設(shè)計(jì)流程圖2.2 頂層電路VHDL程序設(shè)計(jì)LIBRARY IEEE; - 硬件演奏電路頂層設(shè)計(jì)USE IEEE.STD_LOGIC_1164.ALL;ENTITY Songer ISPORT ( CLK12MHZ : IN STD_LOGIC; -音調(diào)頻率信號(hào) CLK8HZ : IN STD_LOGIC; -節(jié)拍頻率用于控制音長(zhǎng)(節(jié)拍)的時(shí)鐘頻率; SEL : IN STD_LOGIC;-音樂選擇鍵 RST : IN STD_LOGIC;-復(fù)位鍵 CODE1 : OUT STD_LOGIC_VECTOR (3 DOWNTO 0);- 簡(jiǎn)譜碼輸出顯示 HIGH1 : OUT STD_LOGIC; -高8度指示 SPKOUT : OUT STD_LOGIC );-聲音輸出END;ARCHITECTURE one OF Songer ISCOMPONENT NoteTabs-元件U1例換化 PORT ( clk : IN STD_LOGIC; SEL : IN STD_LOGIC; RST : IN STD_LOGIC; ToneIndex : OUT STD_LOGIC_VECTOR (3 DOWNTO 0) );END COMPONENT;COMPONENT ToneTaba-元件U2例換化 PORT ( Index : IN STD_LOGIC_VECTOR (3 DOWNTO 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-元件U3例換化 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 ToneIndex : STD_LOGIC_VECTOR (3 DOWNTO 0);BEGINu1 : NoteTabs PORT MAP (clk=CLK8HZ,RST=RST,SEL=SEL, ToneIndex=ToneIndex);-參數(shù)傳遞映射語(yǔ)句u2 : ToneTaba PORT MAP(Index=ToneIndex,Tone=Tone,CODE=CODE1,HIGH=HIGH1);u3 : Speakera PORT MAP(clk=CLK12MHZ,Tone=Tone, SpkS=SPKOUT);END;3 單元模塊程序設(shè)計(jì)根據(jù)頂層原理圖,共分為music模塊、地址發(fā)生器模塊、分頻預(yù)置數(shù)模塊、十六進(jìn)制模塊、數(shù)控分頻模塊這五個(gè)模塊。music模塊存放樂曲中的音符數(shù)據(jù),地址發(fā)生器模塊作為music模塊中所定制的音符數(shù)據(jù)ROM的地址發(fā)生器,分頻預(yù)置數(shù)模塊提供分頻預(yù)置數(shù)即給數(shù)控分頻模塊提供計(jì)數(shù)初值,十六進(jìn)制模塊對(duì)12MHz的時(shí)鐘脈沖進(jìn)行16分頻,得到750KHz的頻率,給數(shù)控分頻模塊提供時(shí)鐘脈沖。數(shù)控分頻模塊根據(jù)分頻預(yù)置數(shù)輸出各個(gè)音符所對(duì)應(yīng)的頻率。3.1 音樂節(jié)拍和音調(diào)發(fā)生器模塊圖3.1 音樂節(jié)拍和音調(diào)發(fā)生器模塊(1) 音樂節(jié)拍和音調(diào)發(fā)生器模塊RTL電路圖圖3.2 音樂節(jié)拍和音調(diào)發(fā)生器模塊RTL電路圖 (2) 音樂節(jié)拍和音調(diào)發(fā)生器模塊VHDL程序設(shè)計(jì)LIBRARY IEEE;-音樂節(jié)拍和音調(diào)發(fā)生器模塊USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY NoteTabs ISPORT ( clk : IN STD_LOGIC;-音樂節(jié)拍時(shí)鐘4HZ SEL : IN STD_LOGIC;-音樂選擇鍵 RST : IN STD_LOGIC;-復(fù)位鍵 ToneIndex : OUT STD_LOGIC_VECTOR (3 DOWNTO 0) );END;ARCHITECTURE one OF NoteTabs ISCOMPONENT music -音符數(shù)據(jù)ROM1PORT( address : IN STD_LOGIC_VECTOR (7 DOWNTO 0); clock : IN STD_LOGIC ; q : OUT STD_LOGIC_VECTOR (3 DOWNTO 0);END COMPONENT;SIGNAL Counter : STD_LOGIC_VECTOR (7 DOWNTO 0);-8位二進(jìn)制計(jì)數(shù)器BEGINCNT8 : PROCESS(clk, Counter,sel,rst)BEGINIF (clkEVENT AND clk = 1) and (Counter=256 or rst=0) then Counter = 00000000;Counter =Counter+1; end if; IF (clkEVENT AND clk = 1) and (sel=0) THEN Counter =10010000;Counter Counter , q=ToneIndex,clock=clk);END;(2) 地址發(fā)生器模塊地址發(fā)生器模塊設(shè)置了一個(gè)8位二進(jìn)制計(jì)數(shù)器(計(jì)數(shù)最大值為256),作為音符數(shù)據(jù)ROM的地址發(fā)生器。每來(lái)一個(gè)時(shí)鐘脈沖信號(hào)(Clk),8位二進(jìn)制計(jì)數(shù)器就計(jì)數(shù)一次,ROM文件中的地址也就隨著遞增,音符數(shù)據(jù)ROM中的音符也就一個(gè)接一個(gè)連續(xù)的取出來(lái)了。在地址發(fā)生器的VHDL設(shè)計(jì)中,這個(gè)計(jì)數(shù)器的計(jì)數(shù)頻率選為4Hz,即每一計(jì)數(shù)值的停留時(shí)間為0.25秒,恰為當(dāng)全音符設(shè)為1秒,四四拍的4分音符持續(xù)時(shí)間。例如,地址發(fā)生器在以下的VHDL邏輯描述中,“梁?!睒非牡谝粋€(gè)音符為“3”,此音在邏輯中停留了4個(gè)時(shí)鐘節(jié)拍,即1秒時(shí)間。那么相應(yīng)隨著程序4中的計(jì)數(shù)器按4Hz的時(shí)鐘頻率作加法計(jì)數(shù)時(shí),即隨地址遞增時(shí),將從音符數(shù)據(jù)ROM中將連續(xù)取出4個(gè)音符“3”通過toneindex3.0端口輸向分頻預(yù)置數(shù)模塊。這樣梁祝樂曲中的音符就一個(gè)接一個(gè)的通過toneindex3.0端口輸向分頻預(yù)置數(shù)模塊。3.2 音樂譜對(duì)應(yīng)分頻預(yù)置數(shù)查表電路模塊(1) 音樂譜分頻預(yù)置數(shù)模塊圖3.3 音樂譜分頻預(yù)置數(shù)模塊 (2) 音樂譜對(duì)應(yīng)分頻預(yù)制數(shù)查表電路VHDL程序設(shè)計(jì)音樂譜分頻預(yù)置數(shù)模塊是樂曲簡(jiǎn)譜碼對(duì)應(yīng)的分頻預(yù)置數(shù)查表電路。它提供了每個(gè)音符所對(duì)應(yīng)的分頻預(yù)置數(shù),即給數(shù)控分頻模塊提供計(jì)數(shù)初值,這里以“梁祝”樂曲為例,列出了在這個(gè)樂曲中所用到的13個(gè)音符的分頻預(yù)置數(shù)。在這個(gè)模塊的VHDL邏輯描述中設(shè)置了四四拍樂曲中全部音符所對(duì)應(yīng)的分頻預(yù)置數(shù),共13個(gè),每一音符的停留時(shí)間由音樂節(jié)拍和地址發(fā)生器模塊的時(shí)鐘(Clk)的輸入頻率決定,在此為4Hz。這13個(gè)值的輸出由程序3的4位輸入值index3.0確定。輸向程序4中index3.0的值又由地址發(fā)生器模塊的輸出toneindex3.0的輸出值和持續(xù)時(shí)間決定。模塊的功能是輸出各個(gè)音符所對(duì)應(yīng)的分頻預(yù)置數(shù),即當(dāng)index是“0000”,tone輸出為2047,即休止符的分頻預(yù)置數(shù);當(dāng)index是“0101”時(shí), tone輸出為1197即低音5的分頻預(yù)置數(shù);當(dāng)index是“1111”時(shí), tone輸出為1728即高音1的分頻預(yù)置數(shù)等等其它狀態(tài)時(shí),tone分別輸出相應(yīng)音符的分頻預(yù)置數(shù)。分頻預(yù)置數(shù)模塊的VHDL設(shè)計(jì)程序如下:LIBRARY IEEE;-音樂譜對(duì)應(yīng)分頻預(yù)制數(shù)查表電路模塊USE IEEE.STD_LOGIC_1164.ALL;ENTITY ToneTaba ISPORT ( Index : IN STD_LOGIC_VECTOR (3 DOWNTO 0) ;-4位預(yù)制數(shù)查表 CODE : OUT STD_LOGIC_VECTOR (3 DOWNTO 0) ; HIGH : OUT STD_LOGIC;-音樂高8度指示 Tone : OUT STD_LOGIC_VECTOR (10 DOWNTO 0) );-音樂符對(duì)應(yīng)分頻11位END;ARCHITECTURE one OF ToneTaba ISBEGINSearch : PROCESS(Index)BEGINCASE Index IS - 譯碼電路,查表方式,控制音調(diào)的預(yù)置數(shù)13組頻率WHEN 0000 = Tone=11111111111 ; CODE=0000; HIGH Tone=01100000101 ; CODE=0001; HIGH Tone=01110010000 ; CODE=0010; HIGH Tone=10000001100 ; CODE=0011; HIGH Tone=10010101101 ; CODE=0101; HIGH Tone=10100001010 ; CODE=0110; HIGH Tone=10101011100 ; CODE=0111; HIGH Tone=10110000010 ; CODE=0001; HIGH Tone=10111001000 ; CODE=0010; HIGH Tone=11000000110 ; CODE=0011; HIGH Tone=11001010110 ; CODE=0101; HIGH Tone=11010000100 ; CODE=0110; HIGH Tone=11011000000 ; CODE=0001; HIGH NULL;END CASE;END PROCESS;END;3.3 音樂符數(shù)控11分頻電路模塊3.3 音樂譜對(duì)應(yīng)分頻預(yù)置數(shù)查表電路模塊(1) 音樂符數(shù)控11分頻電路模塊圖3.4音樂符數(shù)控11分頻電路模塊(2) 音樂符數(shù)控11分頻電路模塊RTL電路圖圖3.4音樂符數(shù)控11分頻電路模塊RTL電路圖 (3) 音樂符數(shù)控11分頻模塊電路VHDL程序設(shè)計(jì)音符的頻率由數(shù)控分頻模塊獲得,這是一個(gè)數(shù)控分頻電路。它是由一個(gè)初值可變的加法計(jì)數(shù)器構(gòu)成。該計(jì)數(shù)器的模為2047,當(dāng)計(jì)數(shù)器記滿時(shí),計(jì)數(shù)器產(chǎn)生一個(gè)溢出信號(hào)FULL,此溢出信號(hào)就是用作發(fā)音的頻率信號(hào)。在計(jì)數(shù)器的輸入端給定不同的初值,而此預(yù)置數(shù)就是表1中的計(jì)數(shù)初值,就可得到不同音符的發(fā)音頻率信號(hào)。它計(jì)滿時(shí)所需要的計(jì)數(shù)初值可由下式來(lái)表示。計(jì)數(shù)初值(Tone)=2047-分頻系數(shù)而分頻系數(shù)又可有下式來(lái)求:分頻系數(shù)=基準(zhǔn)頻率/音符的發(fā)生頻率低音時(shí)Tone值小,分頻系數(shù)大,溢出信號(hào)周期長(zhǎng),揚(yáng)聲器發(fā)出的聲音低,Tone隨音樂的樂譜變化大,自動(dòng)控制分頻比,實(shí)現(xiàn)了數(shù)控分頻,發(fā)生信號(hào)的頻率與音調(diào)Tone成正比。這就是利用數(shù)控分頻器自動(dòng)演奏音樂的原理。時(shí)鐘(Clk)端輸入的是在十六進(jìn)制模塊里對(duì)12MHz的信號(hào)進(jìn)行16分頻得到的750KHz,750KHz的信號(hào)根據(jù)分頻預(yù)置數(shù)模塊中所提供的計(jì)數(shù)初值,分別得出相應(yīng)音符頻率的兩倍值。此時(shí)從數(shù)控分頻器中出來(lái)的輸出信號(hào)是脈寬極窄的脈沖式信號(hào),為了有利于驅(qū)動(dòng)揚(yáng)聲器,需另加一個(gè)D觸發(fā)器以均衡其占空比,這時(shí)的頻率就變?yōu)樵瓉?lái)的1/2,剛好就是相應(yīng)音符的頻率。數(shù)控分頻模塊中對(duì)Clk輸入信號(hào)的分頻比由11位預(yù)置數(shù)tone10.0決定。Fout的輸出頻率將決定每一個(gè)音符的音調(diào),這樣,分頻計(jì)數(shù)器的預(yù)置值tone10.0與Fout的輸出頻率就有了對(duì)應(yīng)關(guān)系。例如在分頻預(yù)置數(shù)模塊中若取tone10.0=1036,將發(fā)出音符為“3”音的信號(hào)頻率。音符的頻率由數(shù)控分頻模塊VHDL程序如下:LIBRARY IEEE;-音樂符數(shù)控分頻電路模塊USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY Speakera ISPORT ( clk : IN STD_LOGIC;-音調(diào)頻率信號(hào)12MHZ Tone : IN STD_LOGIC_VECTOR (10 DOWNTO 0);-音樂符對(duì)應(yīng)分頻11位 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) ; BEGIN PreCLK 11 THEN PreCLK = 1; Count4 := 0000; ELSIF clkEVENT AND clk = 1 THEN Count4 := Count4 + 1; END IF;END PROCESS;GenSpkS : PROCESS(PreCLK, Tone)- 11位可預(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 : STD_LOGIC; BEGIN IF FullSpkSEVENT AND FullSpkS = 1 THEN Count2 := NOT Count2; IF Count2 = 1 THEN SpkS = 1; ELSE SpkS megawizard plug-in manager,選擇“creat a new”,然后按“next”鍵,選擇LPM-ROM;最后在browse下的欄中鍵入路徑與輸出文件名,注意后綴vhd小寫。(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定制。定制好的ROM文件VHDL程序如下:LIBRARY ieee;USE ieee.std_logic_1164.all;ENTITY music IS PORT ( address : IN STD_LOGIC_VECTOR (7 DOWNTO 0); inclock : IN STD_LOGIC ; q : OUT STD_LOGIC_VECTOR (3 DOWNTO 0);END music;ARCHITECTURE SYN OF musicIS SIGNAL sub_wire0 : STD_LOGIC_VECTOR (3 DOWNTO 0); COMPONENT lpm_rom GENERIC ( lpm_width: NATURAL; lpm_widthad : NATURAL; lpm_address_control: STRING; lpm_outdata : STRING; lpm_file : STRING); PORT ( address : IN STD_LOGIC_VECTOR (7 DOWNTO 0); inclock : IN STD_LOGIC ; q : OUT STD_LOGIC_VECTOR (3 DOWNTO 0); END COMPONENT;BEGIN q 4, LPM_WIDTHAD = 8, LPM_ADDRESS_CONTROL = REGISTERED, LPM_OUTDATA = UNREGISTERED, LPM_FILE = G:/MUSIC/SINGER/SINGER.mif) PORT MAP ( address = address, inclock = inclock, q = sub_wire0);END SYN;4 VHDL音樂硬件演奏電路系統(tǒng)仿真與調(diào)試4.1 NoteTabs音樂節(jié)拍和音調(diào)發(fā)生器模塊的仿真(1) 波形仿真將所編寫的音樂節(jié)拍和音調(diào)模塊NoteTabs的程序設(shè)為工程,選用Altera公司的Cyclone系列中的EPIC12Q240C8為目標(biāo)芯片進(jìn)行仿真。仿真結(jié)果如下圖:圖4.1音樂節(jié)拍和音調(diào)模塊NoteTabs波形仿真4.2 ToneTaba分頻預(yù)置數(shù)查表模塊的仿真(1) 波形仿真將所編寫的分頻預(yù)置數(shù)查表模塊ToneTaba的程序設(shè)為工程,選用Altera公司的Cyclone系列中的EPIC12Q240C8為目標(biāo)芯片進(jìn)行仿真。仿真結(jié)果如下圖:圖4.2 分頻預(yù)置數(shù)查表模塊ToneTaba波形仿真(2) 模塊功能分析與調(diào)試ToneTaba分頻預(yù)置數(shù)模塊的功能是輸出各個(gè)音符所對(duì)應(yīng)的分頻預(yù)置數(shù),由上面的仿真波形圖可看到若當(dāng)index是“0000”,tone輸出為2047,即休止符的分頻預(yù)置數(shù);當(dāng)index是“0101”時(shí),tone輸出為1197即低音5的分頻預(yù)置數(shù);當(dāng)index是“1111”時(shí), tone輸出為1728即高音1的分頻預(yù)置數(shù)等等其它狀態(tài)時(shí),tone分別輸出相應(yīng)音符的分頻預(yù)置數(shù),仿真波形圖證明了程序?qū)崿F(xiàn)了模塊的功能。4.3 Speakera音樂符數(shù)控分頻模塊的仿真(1) 波形仿真將所編寫的音樂符數(shù)控分頻模塊Speakera的程序設(shè)為工程,選用Altera公司的Cyclone系列中的EPIC12Q240C8為目標(biāo)芯片進(jìn)行仿真。仿真結(jié)果如下圖:圖4.3 Speakera音樂符數(shù)控分頻模塊波形仿真(2) 模塊功能分析與調(diào)試Speakera 音樂符數(shù)控分頻此模塊的功能是根據(jù)初始值Tone的值,對(duì)輸入時(shí)鐘信號(hào)Clk的頻率進(jìn)行分頻,得到想要的音符的發(fā)聲頻率其時(shí)鐘(Clk)端輸入的是在十六進(jìn)制模塊里對(duì)12MHz的信號(hào)進(jìn)行16分頻得到的750KHz,750KHz的信號(hào)根據(jù)分頻預(yù)置數(shù)模塊中所提供的計(jì)數(shù)初值,分別得出相應(yīng)音符頻率的兩倍值。此時(shí)從數(shù)控分頻器中出來(lái)的輸出信號(hào)是脈寬極窄的脈沖式信號(hào),為了有利于驅(qū)動(dòng)揚(yáng)聲器,需另加一個(gè)D觸發(fā)器以均衡其占空比,這時(shí)的頻率就變?yōu)樵瓉?lái)的1/2,剛好就是相應(yīng)音符的頻率。在clk端輸入一具有較高頻率的信號(hào)(這里是12MHz)的信號(hào),通過分頻后由cout輸出。這里是對(duì)12MHz的信號(hào)進(jìn)行16分頻得到750KHz的信號(hào)。750KHz的時(shí)鐘脈沖信號(hào)是給數(shù)控分頻模塊提供時(shí)鐘信號(hào)。數(shù)控分頻模塊中對(duì)Clk輸入信號(hào)的分頻比由11位預(yù)置數(shù)tone10.0決定。spkout的輸出頻率將決定每一個(gè)音符的音調(diào),這樣,分頻計(jì)數(shù)器的預(yù)置tone10.0與Fout的輸出頻率就有了對(duì)應(yīng)關(guān)系。若在分頻預(yù)置數(shù)模塊中若取 tone10.0=1036,將發(fā)出音符為“3”音的信號(hào)頻率。在這個(gè)仿真波形圖中,Tone的值可設(shè)為6c0(即高音1的分頻預(yù)置數(shù)1728),Clk的頻率為750KHz,spkout輸出的脈沖信號(hào)的周期為849.9291us(即1176.568Hz),接近高音1的發(fā)聲頻率。由表中可知高音1的分頻系數(shù)為319,即對(duì)輸入時(shí)鐘Clk進(jìn)行319次分頻就可得高音1的發(fā)聲頻率,因此這個(gè)程序?qū)崿F(xiàn)了模塊的功能。4.4 擴(kuò)大此音樂硬件演奏電路的通用性前面所設(shè)計(jì)的電路只能演奏“梁?!鼻?,但是在實(shí)際應(yīng)用中,若能將電路實(shí)用于各種曲子的演奏,它的實(shí)用性和應(yīng)用范圍就會(huì)擴(kuò)大許多。這里主要通過修改分頻預(yù)置數(shù)模塊的程序,使其實(shí)用于各種曲子的演奏。另外要使更改樂曲方便,主要通過重新設(shè)置音符數(shù)據(jù)文件,再對(duì)其進(jìn)行LPM-ROM定制。在前面的VHDL設(shè)計(jì)中,我們只能通過程序輸出“梁?!鼻又械?3個(gè)音符的分頻預(yù)置數(shù)(即計(jì)數(shù)初值),但是在其它的樂曲中可能會(huì)用到另外的那些音符,因此對(duì)程序進(jìn)行修改完善它的功能,使其能輸出另外那些音符的分頻預(yù)置數(shù)。把修改的程序代替原來(lái)此模塊的程序連入頂層文件后,要使所設(shè)計(jì)的音樂硬件演奏電路可隨意更改曲子,只要修改音符數(shù)據(jù)文件,在那些連續(xù)的地址上存儲(chǔ)曲子中相應(yīng)的音符,再對(duì)音符數(shù)據(jù)文件進(jìn)行ROM定制,最后連接到整個(gè)電路中即可實(shí)現(xiàn)。程序修改如下:Library ieee;Use ieee.std_logic_1164.all;Entity tonetaba is Port( index : in std_logic_vector(4 downto 0);-5位預(yù)制數(shù)查表碼code : out std_logic_vector(4 downto 0); high : out std_logic; tone : out std_logic_vector(10 downto 0);-音樂符對(duì)應(yīng)分頻11位End;Architecture one of tonetaba isBegin Search : process(index) Begin Case index isWhen 00000=tone=11111111111;code=00000;hightone=01100000101;code=00001;hightone=01110010000;code=00010;hightone=10000001100;code=00011;hightone=10000110101;code=00100;hightone=10010101101;code=00101;hightone=10100001010;code=00110;hightone=10101011100;code=00111;hightone=10110000010;code=01000;hightone=10111001000;code=01001;hightone=11000000110;code=01010;hightone=11000101000;code=01011;hightone=11001010110;code=01100;hightone=11010000100;code=01101;hightone=11010110101;code=01110;hightone=11011000000;code=10001;hightone=11011101010;code=10010;hightone=11100000111;code=10011;hightone=11100010110;code=10100;hightone=11100101111;code=10101;hightone=11101000110;code=10110;hightone=11101011010;code=10111;high null; End case; End process;End;5 心得體會(huì)課程設(shè)計(jì)是針對(duì)某一理論課程的要求,對(duì)學(xué)生進(jìn)行綜合性實(shí)踐訓(xùn)練的實(shí)踐教學(xué)環(huán)節(jié),可以提高學(xué)生運(yùn)用課程中所學(xué)的理論知識(shí)與實(shí)踐緊密結(jié)合,獨(dú)立地解決實(shí)際問題的能力。在這次課程設(shè)計(jì)過程中使我從中學(xué)到許多以前在課本和課堂上所無(wú)法學(xué)到的,特別是在課程設(shè)計(jì)過程中查找資料的過程中從中學(xué)到許多以前在課本和課堂上所無(wú)法學(xué)到的并從中體會(huì)到許多的樂趣,從而豐富了自己,使自己無(wú)論是上課時(shí)還是在課余都感到很充實(shí)。在本次課程設(shè)計(jì)的過程中,曾得到過老師與幾位同學(xué)的悉心指導(dǎo)與幫助,才使得我們的設(shè)計(jì)非常圓滿的完成,在此對(duì)他們表示我們最衷心的感謝,謝謝你們!因?qū)W習(xí)知識(shí)的能力和時(shí)間有限,并且此次EDA課程設(shè)計(jì)對(duì)于我們來(lái)說(shuō)還只是初體驗(yàn),因此在本次的課程設(shè)計(jì)過程中,難免存在錯(cuò)誤,懇請(qǐng)老師給以批評(píng)指正,并再次感謝曾幫助過我們的老師和幾位同學(xué)。 參考文獻(xiàn)1 潘松EDA技術(shù)實(shí)用教程北京:科學(xué)教育出版社.20062 Quartus Semiconductor data books. Quartus Semiconductor Corporation. 20013 杭州康芯電子有限公司GW48-PK3實(shí)驗(yàn)系統(tǒng)說(shuō)明書杭州康芯電子有限公司2006附錄1 音樂演奏電路VHDL源程序程序1:4Hz時(shí)鐘發(fā)生器模塊程序CLK4Hzlibrary ieee;use ieee.std_logic_1164
溫馨提示
- 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ù)覽,若沒有圖紙預(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 翻譯(法語(yǔ))崗位考試試卷及答案
- 《洮藏黑山羊》地方標(biāo)準(zhǔn)編制說(shuō)明2025
- 新型膜分離技術(shù)在水處理領(lǐng)域的效能評(píng)估
- 2025年江蘇省市場(chǎng)監(jiān)督管理局下屬事業(yè)單位招聘考試筆試試題【答案】
- 硝化工藝上崗證考試題及答案(含答案)
- 消費(fèi)電子行業(yè)概況
- 2025年2月實(shí)習(xí)版主個(gè)人述職報(bào)告范文
- 2025年P(guān)M10自動(dòng)采樣器及測(cè)定儀項(xiàng)目發(fā)展計(jì)劃
- 2025年智能壓力發(fā)生器合作協(xié)議書
- 2025年實(shí)木類家具項(xiàng)目建議書
- 《思想道德與法治》學(xué)習(xí)通課后章節(jié)答案期末考試題庫(kù)2025年
- 清廉講堂活動(dòng)方案
- 家居落地活動(dòng)方案
- 2025年醫(yī)保知識(shí)考試題庫(kù)及答案:醫(yī)保信息化建設(shè)應(yīng)用法律法規(guī)試題
- 環(huán)境現(xiàn)場(chǎng)采樣培訓(xùn)
- 2025年 汕頭市公安局警務(wù)輔助人員招聘考試筆試試卷附答案
- 車輛傷害事故桌面功能演練方案、腳本
- XX公司年產(chǎn)10萬(wàn)噸陽(yáng)極銅及5萬(wàn)噸銅桿項(xiàng)目環(huán)境影響報(bào)告書
- 陜西省專業(yè)技術(shù)人員繼續(xù)教育2025公需課《黨的二十屆三中全會(huì)精神解讀與高質(zhì)量發(fā)展》20學(xué)時(shí)題庫(kù)及答案
- 財(cái)務(wù)考試試題及答案大全
- 2024-2025學(xué)年人教版數(shù)學(xué)五年級(jí)下學(xué)期期末試卷(含答案)
評(píng)論
0/150
提交評(píng)論