




已閱讀5頁,還剩41頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
基于FPGA音樂硬件演奏電路設(shè)計目 錄摘 要I1 系統(tǒng)設(shè)計總述11.1 設(shè)計要求11.2 系統(tǒng)組成12 總體程序設(shè)計42.1 頂層模塊設(shè)計流程圖42.2 頂層電路VHDL程序設(shè)計43 單元模塊程序設(shè)計63.1 音樂節(jié)拍和音調(diào)發(fā)生器模塊63.2 音樂譜對應(yīng)分頻預(yù)置數(shù)查表電路模塊73.3 音樂譜對應(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 心得體會20參考文獻(xiàn)21摘 要根據(jù)國家教委與專業(yè)教學(xué)委員會對教育機(jī)構(gòu)的要求,為培養(yǎng)適應(yīng)我國21世紀(jì)國民經(jīng)濟(jì)發(fā)展需要的電子設(shè)置人才;同時基于國家教委面向21世紀(jì)電工電子課程體系改革和電工電子工科教學(xué)基地建設(shè)兩項教學(xué)改革研究成果。要求高等??茖W(xué)校學(xué)生能夠自己動手完成簡單數(shù)字器件的設(shè)計。這不但反應(yīng)了我國當(dāng)前在電子電路的實驗教學(xué)體系、內(nèi)容和方法上的改革思路和教學(xué)水平的提高,更重要的是在加強(qiáng)以傳統(tǒng)電子設(shè)計方法為基礎(chǔ)的工程設(shè)計訓(xùn)練的同時,使學(xué)生能夠盡快掌握現(xiàn)代電子設(shè)計自動化技術(shù)的新方法、新工具和新手段系統(tǒng)的、科學(xué)的培養(yǎng)了學(xué)生的實際動手能力、理論聯(lián)系實際的能力、工程設(shè)計能力,創(chuàng)新能力,提高了學(xué)生對基礎(chǔ)實驗的興趣。本次設(shè)計在EDA開發(fā)平臺QUARTUS II 6.0上利用VHDL語言設(shè)計數(shù)控分頻器電路,利用數(shù)控分頻的原理設(shè)計音樂硬件演奏電路,并定制LPM-ROM存儲音樂數(shù)據(jù),以“梁?!焙汀霸铝链砦业男摹眱墒讟非鸀槔瑢⒁魳窋?shù)據(jù)存儲到LPM-ROM,就達(dá)到了以純硬件的手段來實現(xiàn)樂曲的演奏效果。只要修改LPM-ROM所存儲的音樂數(shù)據(jù),將其換成其他樂曲的音樂數(shù)據(jù),再重新定制LPM-ROM,連接到程序中就可以實現(xiàn)其它樂曲的演奏。本設(shè)計采用的是武漢理工大學(xué)的開放設(shè)計實驗箱,F(xiàn)PGA目標(biāo)芯片型號為Altera公司的Cyclone系列中的EP1C3T144C8N。芯片配置成功后即可進(jìn)行硬件測試:選擇實驗電路結(jié)構(gòu)圖,發(fā)音輸出接SPEAKER,當(dāng)樂曲一遍演奏完成后,樂曲發(fā)生器能自動從頭開始循環(huán)演奏。關(guān)鍵詞: FPGA/CPLD,音樂硬件演奏電路,VHDL語言設(shè)計,QUARTUS II 6.0I1 系統(tǒng)設(shè)計總述1.1 設(shè)計要求這是一種運(yùn)用純硬件實現(xiàn)樂曲播放的電路,比運(yùn)用微處理器實現(xiàn)樂曲播放更加復(fù)雜。它運(yùn)用了強(qiáng)大功能的EDA工具開放設(shè)計試驗箱和硬件描述語言VHDL。本課題以歌曲媽媽的吻來實現(xiàn)樂曲播放電路的功能。(1)順序播放樂曲功能:當(dāng)電路開始工作時,如果存儲器中有多首樂曲,那么演奏電路將從頭到尾順序播放這些樂曲。(2)循環(huán)播放樂曲功能:當(dāng)演奏完后一首樂曲時,將自動返回到第一首歌曲開始播放,反復(fù)不止,直到關(guān)閉電源電路停止工作為止。(3)樂曲簡譜顯示功能:當(dāng)演奏電路播放樂曲時,能夠?qū)?dāng)前播放的音符通過一列發(fā)光二極管以二進(jìn)制的形式予以顯示。(4)樂曲高音顯示功能:如果電路正在播放高音音符,那么將有一個發(fā)光二極管點亮來顯示。(5)音量大小可調(diào)功能:運(yùn)用EDA實驗箱上的數(shù)字功率放大器LM386N,對數(shù)控分頻器輸出的音頻信號予以處理,輸出大小連續(xù)可調(diào)的音頻信號到揚(yáng)聲器。1.2 系統(tǒng)組成(1)音樂硬件演奏電路基本原理 硬件電路的發(fā)聲原理,聲音的頻譜范圍約在幾十到幾千赫茲,若能利用程序來控制FPGA芯片某個引腳輸出一定頻率的矩形波,接上揚(yáng)聲器就能發(fā)出相應(yīng)頻率的聲音。樂曲中的每一音符對應(yīng)著一個確定的頻率,要想FPGA發(fā)出不同音符的音調(diào),實際上只要控制它輸出相應(yīng)音符的頻率即可。樂曲都是由一連串的音符組成,因此按照樂曲的樂譜依次輸出這些音符所對應(yīng)的頻,就可以在揚(yáng)聲器上連續(xù)地發(fā)出各個音符的音調(diào)。而要準(zhǔn)確地演奏出一首樂曲,僅僅讓揚(yáng)聲器能夠發(fā)生是不夠的,還必須準(zhǔn)確地控制樂曲的節(jié)奏,即樂曲中每個音符的發(fā)生頻率及其持續(xù)時間是樂曲能夠連續(xù)演奏的兩個關(guān)鍵因素。(2)音符頻率的獲得多個不同頻率的信號可通過對某個基準(zhǔn)頻率進(jìn)行分頻器獲得。由于各個音符的頻率多為非整數(shù),而分頻系數(shù)又不能為小數(shù),故必須將計算機(jī)得到的分頻系數(shù)四舍五入取整。若基準(zhǔn)頻率過低,則分頻系數(shù)過小,四舍五入取整后的誤差較大。若基準(zhǔn)頻率過高,雖然可以減少頻率的相對誤差,但分頻結(jié)構(gòu)將變大。實際上應(yīng)該綜合考慮這兩個方面的因素,在盡量減少誤差的前提下,選取合適的基準(zhǔn)頻率。本設(shè)計中選取750KHz的基準(zhǔn)頻率。由于現(xiàn)有的高頻時鐘脈沖信號的頻率為12MHz,故需先對其進(jìn)行16分頻,才能獲得750KHz的基準(zhǔn)頻率。對基準(zhǔn)頻率分頻后的輸出信號是一些脈寬極窄的尖脈沖信號(占空比=1/分頻系數(shù))。為提高輸出信號的驅(qū)動能力,以使揚(yáng)聲器有足夠的功率發(fā)音,需要再通過一個分頻器將原來的分頻器的輸出脈沖均衡為對稱方波(占空比=1/2),但這時的頻率將是原來的1/2。下表中各音符的分頻系數(shù)就是從750KHz的基準(zhǔn)頻率二分頻得到的375KHz頻率基礎(chǔ)上計算得到的。由于最大分頻系數(shù)是1274,故分頻器采用11位二進(jìn)制計數(shù)器能滿足要求,樂曲中的休止符,只要將分頻系數(shù)設(shè)為0,即初始值=211-1=2047,此時揚(yáng)聲器不會發(fā)聲。表1 各個音符的頻率及其對應(yīng)的分頻系數(shù)(基準(zhǔn)頻率375KHz)音符名頻 率(Hz)分頻系數(shù)計數(shù)初值音符名頻率(Hz)分頻系數(shù)計數(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è)計中的梁祝和月亮代表我的心的樂曲,最小的節(jié)拍為1/4拍,若將1拍的時間定為1秒,則只需要提供一個4Hz的時鐘頻率即可產(chǎn)生1/4拍的時長(0.25秒),對于其它占用時間較長的節(jié)拍(必為1/4拍的整數(shù)倍)則只需要將該音符連續(xù)輸出相應(yīng)的次數(shù)即可。計數(shù)時鐘信號作為輸出音符快慢的控制信號,時鐘快時輸出節(jié)拍速度就快,演奏的速度也就快,時鐘慢時輸出節(jié)拍的速度就慢,演奏的速度自然降低。(4)樂譜發(fā)生器本文將樂譜中的音符數(shù)據(jù)存儲在LPM-ROM中,如“梁祝”樂曲中的第一個音符為“3”,此音在邏輯中停留了4個時鐘節(jié)拍,即1秒的時間,相應(yīng)地,音符“3”就要在LPM-ROM中連續(xù)的四個地址上都存儲。當(dāng)一個4Hz的時鐘來時,相應(yīng)地就從LPM-ROM中輸出一個音符數(shù)據(jù)。(5)音樂硬件演奏電路總體設(shè)計流程當(dāng)一個4Hz的時鐘脈沖來到時,樂譜發(fā)生器模塊輸出一個音符數(shù)據(jù)給分頻系數(shù)模塊,分頻系數(shù)模塊輸出此音符相應(yīng)的分頻系數(shù),將分頻系數(shù)送給數(shù)控分頻器模塊,當(dāng)12MHz的時鐘脈沖來到時,數(shù)控分頻器就根據(jù)分頻系數(shù)輸出相應(yīng)的頻率(即此音符所對應(yīng)的發(fā)生頻率)給揚(yáng)聲器,揚(yáng)聲器就可發(fā)出對應(yīng)音符的聲音來.連續(xù)的4Hz的時鐘脈沖就將樂譜發(fā)生器里所存儲的音符數(shù)據(jù)一個接一個的送給了分頻系數(shù)模塊,再經(jīng)過數(shù)控分頻模塊,最后揚(yáng)聲器一個接一個的發(fā)出音符數(shù)據(jù)所對應(yīng)的聲音來。曲子也就流暢的播放出來了,當(dāng)樂曲一遍演奏完成后,樂曲發(fā)生器能自動從頭開始循環(huán)演奏,按下SEL鍵時播放第二首歌,按下RST鍵時從頭開始播放歌曲。音樂硬件演奏電路主要是用VHDL語言來設(shè)計,并利用Quartus6.0軟件工具來編譯、測試和仿真,音樂硬件演奏電路設(shè)計總體設(shè)計方框圖如下圖所示。圖1.1 音樂硬件演奏電路設(shè)計總體設(shè)計方框圖 2 總體程序設(shè)計2.1 頂層模塊設(shè)計流程圖圖2.1 頂層模塊設(shè)計流程圖2.2 頂層電路VHDL程序設(shè)計LIBRARY IEEE; - 硬件演奏電路頂層設(shè)計USE IEEE.STD_LOGIC_1164.ALL;ENTITY Songer ISPORT ( CLK12MHZ : IN STD_LOGIC; -音調(diào)頻率信號 CLK8HZ : IN STD_LOGIC; -節(jié)拍頻率用于控制音長(節(jié)拍)的時鐘頻率; SEL : IN STD_LOGIC;-音樂選擇鍵 RST : IN STD_LOGIC;-復(fù)位鍵 CODE1 : OUT STD_LOGIC_VECTOR (3 DOWNTO 0);- 簡譜碼輸出顯示 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ù)傳遞映射語句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ù)頂層原理圖,共分為music模塊、地址發(fā)生器模塊、分頻預(yù)置數(shù)模塊、十六進(jìn)制模塊、數(shù)控分頻模塊這五個模塊。music模塊存放樂曲中的音符數(shù)據(jù),地址發(fā)生器模塊作為music模塊中所定制的音符數(shù)據(jù)ROM的地址發(fā)生器,分頻預(yù)置數(shù)模塊提供分頻預(yù)置數(shù)即給數(shù)控分頻模塊提供計數(shù)初值,十六進(jìn)制模塊對12MHz的時鐘脈沖進(jìn)行16分頻,得到750KHz的頻率,給數(shù)控分頻模塊提供時鐘脈沖。數(shù)控分頻模塊根據(jù)分頻預(yù)置數(shù)輸出各個音符所對應(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è)計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é)拍時鐘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)制計數(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è)置了一個8位二進(jìn)制計數(shù)器(計數(shù)最大值為256),作為音符數(shù)據(jù)ROM的地址發(fā)生器。每來一個時鐘脈沖信號(Clk),8位二進(jìn)制計數(shù)器就計數(shù)一次,ROM文件中的地址也就隨著遞增,音符數(shù)據(jù)ROM中的音符也就一個接一個連續(xù)的取出來了。在地址發(fā)生器的VHDL設(shè)計中,這個計數(shù)器的計數(shù)頻率選為4Hz,即每一計數(shù)值的停留時間為0.25秒,恰為當(dāng)全音符設(shè)為1秒,四四拍的4分音符持續(xù)時間。例如,地址發(fā)生器在以下的VHDL邏輯描述中,“梁?!睒非牡谝粋€音符為“3”,此音在邏輯中停留了4個時鐘節(jié)拍,即1秒時間。那么相應(yīng)隨著程序4中的計數(shù)器按4Hz的時鐘頻率作加法計數(shù)時,即隨地址遞增時,將從音符數(shù)據(jù)ROM中將連續(xù)取出4個音符“3”通過toneindex3.0端口輸向分頻預(yù)置數(shù)模塊。這樣梁祝樂曲中的音符就一個接一個的通過toneindex3.0端口輸向分頻預(yù)置數(shù)模塊。3.2 音樂譜對應(yīng)分頻預(yù)置數(shù)查表電路模塊(1) 音樂譜分頻預(yù)置數(shù)模塊圖3.3 音樂譜分頻預(yù)置數(shù)模塊 (2) 音樂譜對應(yīng)分頻預(yù)制數(shù)查表電路VHDL程序設(shè)計音樂譜分頻預(yù)置數(shù)模塊是樂曲簡譜碼對應(yīng)的分頻預(yù)置數(shù)查表電路。它提供了每個音符所對應(yīng)的分頻預(yù)置數(shù),即給數(shù)控分頻模塊提供計數(shù)初值,這里以“梁祝”樂曲為例,列出了在這個樂曲中所用到的13個音符的分頻預(yù)置數(shù)。在這個模塊的VHDL邏輯描述中設(shè)置了四四拍樂曲中全部音符所對應(yīng)的分頻預(yù)置數(shù),共13個,每一音符的停留時間由音樂節(jié)拍和地址發(fā)生器模塊的時鐘(Clk)的輸入頻率決定,在此為4Hz。這13個值的輸出由程序3的4位輸入值index3.0確定。輸向程序4中index3.0的值又由地址發(fā)生器模塊的輸出toneindex3.0的輸出值和持續(xù)時間決定。模塊的功能是輸出各個音符所對應(yīng)的分頻預(yù)置數(shù),即當(dāng)index是“0000”,tone輸出為2047,即休止符的分頻預(yù)置數(shù);當(dāng)index是“0101”時, tone輸出為1197即低音5的分頻預(yù)置數(shù);當(dāng)index是“1111”時, tone輸出為1728即高音1的分頻預(yù)置數(shù)等等其它狀態(tài)時,tone分別輸出相應(yīng)音符的分頻預(yù)置數(shù)。分頻預(yù)置數(shù)模塊的VHDL設(shè)計程序如下:LIBRARY IEEE;-音樂譜對應(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) );-音樂符對應(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 音樂譜對應(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è)計音符的頻率由數(shù)控分頻模塊獲得,這是一個數(shù)控分頻電路。它是由一個初值可變的加法計數(shù)器構(gòu)成。該計數(shù)器的模為2047,當(dāng)計數(shù)器記滿時,計數(shù)器產(chǎn)生一個溢出信號FULL,此溢出信號就是用作發(fā)音的頻率信號。在計數(shù)器的輸入端給定不同的初值,而此預(yù)置數(shù)就是表1中的計數(shù)初值,就可得到不同音符的發(fā)音頻率信號。它計滿時所需要的計數(shù)初值可由下式來表示。計數(shù)初值(Tone)=2047-分頻系數(shù)而分頻系數(shù)又可有下式來求:分頻系數(shù)=基準(zhǔn)頻率/音符的發(fā)生頻率低音時Tone值小,分頻系數(shù)大,溢出信號周期長,揚(yáng)聲器發(fā)出的聲音低,Tone隨音樂的樂譜變化大,自動控制分頻比,實現(xiàn)了數(shù)控分頻,發(fā)生信號的頻率與音調(diào)Tone成正比。這就是利用數(shù)控分頻器自動演奏音樂的原理。時鐘(Clk)端輸入的是在十六進(jìn)制模塊里對12MHz的信號進(jìn)行16分頻得到的750KHz,750KHz的信號根據(jù)分頻預(yù)置數(shù)模塊中所提供的計數(shù)初值,分別得出相應(yīng)音符頻率的兩倍值。此時從數(shù)控分頻器中出來的輸出信號是脈寬極窄的脈沖式信號,為了有利于驅(qū)動揚(yáng)聲器,需另加一個D觸發(fā)器以均衡其占空比,這時的頻率就變?yōu)樵瓉淼?/2,剛好就是相應(yīng)音符的頻率。數(shù)控分頻模塊中對Clk輸入信號的分頻比由11位預(yù)置數(shù)tone10.0決定。Fout的輸出頻率將決定每一個音符的音調(diào),這樣,分頻計數(shù)器的預(yù)置值tone10.0與Fout的輸出頻率就有了對應(yīng)關(guān)系。例如在分頻預(yù)置數(shù)模塊中若取tone10.0=1036,將發(fā)出音符為“3”音的信號頻率。音符的頻率由數(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)頻率信號12MHZ Tone : IN STD_LOGIC_VECTOR (10 DOWNTO 0);-音樂符對應(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ù)置計數(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能存儲4位二進(jìn)制數(shù)據(jù)共256個。(3)通過“browse” 鈕,找到ROM中的加載文件路徑和文件名:注意ROM元件的inclock是地址鎖存時鐘。(4)打開已定制的ROM文件,將它設(shè)置為工程,并確定目標(biāo)器件,進(jìn)行測試仿真波形,按照定制步驟對音符數(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ù)模塊的功能是輸出各個音符所對應(yīng)的分頻預(yù)置數(shù),由上面的仿真波形圖可看到若當(dāng)index是“0000”,tone輸出為2047,即休止符的分頻預(yù)置數(shù);當(dāng)index是“0101”時,tone輸出為1197即低音5的分頻預(yù)置數(shù);當(dāng)index是“1111”時, tone輸出為1728即高音1的分頻預(yù)置數(shù)等等其它狀態(tài)時,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的值,對輸入時鐘信號Clk的頻率進(jìn)行分頻,得到想要的音符的發(fā)聲頻率其時鐘(Clk)端輸入的是在十六進(jìn)制模塊里對12MHz的信號進(jìn)行16分頻得到的750KHz,750KHz的信號根據(jù)分頻預(yù)置數(shù)模塊中所提供的計數(shù)初值,分別得出相應(yīng)音符頻率的兩倍值。此時從數(shù)控分頻器中出來的輸出信號是脈寬極窄的脈沖式信號,為了有利于驅(qū)動揚(yáng)聲器,需另加一個D觸發(fā)器以均衡其占空比,這時的頻率就變?yōu)樵瓉淼?/2,剛好就是相應(yīng)音符的頻率。在clk端輸入一具有較高頻率的信號(這里是12MHz)的信號,通過分頻后由cout輸出。這里是對12MHz的信號進(jìn)行16分頻得到750KHz的信號。750KHz的時鐘脈沖信號是給數(shù)控分頻模塊提供時鐘信號。數(shù)控分頻模塊中對Clk輸入信號的分頻比由11位預(yù)置數(shù)tone10.0決定。spkout的輸出頻率將決定每一個音符的音調(diào),這樣,分頻計數(shù)器的預(yù)置tone10.0與Fout的輸出頻率就有了對應(yīng)關(guān)系。若在分頻預(yù)置數(shù)模塊中若取 tone10.0=1036,將發(fā)出音符為“3”音的信號頻率。在這個仿真波形圖中,Tone的值可設(shè)為6c0(即高音1的分頻預(yù)置數(shù)1728),Clk的頻率為750KHz,spkout輸出的脈沖信號的周期為849.9291us(即1176.568Hz),接近高音1的發(fā)聲頻率。由表中可知高音1的分頻系數(shù)為319,即對輸入時鐘Clk進(jìn)行319次分頻就可得高音1的發(fā)聲頻率,因此這個程序?qū)崿F(xiàn)了模塊的功能。4.4 擴(kuò)大此音樂硬件演奏電路的通用性前面所設(shè)計的電路只能演奏“梁祝”曲子,但是在實際應(yīng)用中,若能將電路實用于各種曲子的演奏,它的實用性和應(yīng)用范圍就會擴(kuò)大許多。這里主要通過修改分頻預(yù)置數(shù)模塊的程序,使其實用于各種曲子的演奏。另外要使更改樂曲方便,主要通過重新設(shè)置音符數(shù)據(jù)文件,再對其進(jìn)行LPM-ROM定制。在前面的VHDL設(shè)計中,我們只能通過程序輸出“梁?!鼻又械?3個音符的分頻預(yù)置數(shù)(即計數(shù)初值),但是在其它的樂曲中可能會用到另外的那些音符,因此對程序進(jìn)行修改完善它的功能,使其能輸出另外那些音符的分頻預(yù)置數(shù)。把修改的程序代替原來此模塊的程序連入頂層文件后,要使所設(shè)計的音樂硬件演奏電路可隨意更改曲子,只要修改音符數(shù)據(jù)文件,在那些連續(xù)的地址上存儲曲子中相應(yīng)的音符,再對音符數(shù)據(jù)文件進(jìn)行ROM定制,最后連接到整個電路中即可實現(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);-音樂符對應(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 心得體會課程設(shè)計是針對某一理論課程的要求,對學(xué)生進(jìn)行綜合性實踐訓(xùn)練的實踐教學(xué)環(huán)節(jié),可以提高學(xué)生運(yùn)用課程中所學(xué)的理論知識與實踐緊密結(jié)合,獨立地解決實際問題的能力。在這次課程設(shè)計過程中使我從中學(xué)到許多以前在課本和課堂上所無法學(xué)到的,特別是在課程設(shè)計過程中查找資料的過程中從中學(xué)到許多以前在課本和課堂上所無法學(xué)到的并從中體會到許多的樂趣,從而豐富了自己,使自己無論是上課時還是在課余都感到很充實。在本次課程設(shè)計的過程中,曾得到過老師與幾位同學(xué)的悉心指導(dǎo)與幫助,才使得我們的設(shè)計非常圓滿的完成,在此對他們表示我們最衷心的感謝,謝謝你們!因?qū)W習(xí)知識的能力和時間有限,并且此次EDA課程設(shè)計對于我們來說還只是初體驗,因此在本次的課程設(shè)計過程中,難免存在錯誤,懇請老師給以批評指正,并再次感謝曾幫助過我們的老師和幾位同學(xué)。 參考文獻(xiàn)1 潘松EDA技術(shù)實用教程北京:科學(xué)教育出版社.20062 Quartus Semiconductor data books. Quartus Semiconductor Corporation. 20013 杭州康芯電子有限公司GW48-PK3實驗系統(tǒng)說明書杭州康芯電子有限公司2006附錄1 音樂演奏電路VHDL源程序程序1:4Hz時鐘發(fā)生器模塊程序CLK4Hzlibrary ieee;use ieee.std_logic_1164
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 模具買賣合同協(xié)議書模板
- 模板銷售出租合同協(xié)議
- 唱片約合同協(xié)議
- 售樓處沙盤出售合同協(xié)議
- 商標(biāo)授權(quán)轉(zhuǎn)讓合同協(xié)議
- 微送外賣平臺合同協(xié)議
- 欠錢用房頂賬合同協(xié)議
- 總代理電子煙合同協(xié)議
- 商場銷售合同附加協(xié)議
- 商城果品轉(zhuǎn)讓合同協(xié)議
- 河南省普通高中2024-2025學(xué)年高三下學(xué)期學(xué)業(yè)水平選擇性模擬考試(四)歷史試題(原卷版+解析版)
- 一例盆腔臟器脫垂全盆底重建術(shù)患者的護(hù)理
- 旅游消費(fèi)者決策
- 企業(yè)員工環(huán)保培訓(xùn)
- 快手賬號轉(zhuǎn)讓合同范例
- 幼兒園教學(xué)課件《神奇的色彩女王 》課件
- 信息不對稱論文
- 話劇《林黛玉進(jìn)賈府》
- 妊娠期高血壓綜合征-ppt課件
- 《電力工程》PPT精品課程課件全冊課件匯總
- 高強(qiáng)螺栓螺母墊圈重量一覽表
評論
0/150
提交評論