版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
.PAGE.摘要樂曲演奏廣泛用于自動答錄裝置、手機鈴聲、集團、及智能儀器儀表設(shè)備。實現(xiàn)方法有許多種,隨著FPGA集成度的提高,價格下降,EDA設(shè)計工具更新?lián)Q代,功能日益普及與流行,使這種方案的應(yīng)用越來越多。如今的數(shù)字邏輯設(shè)計者面臨日益縮短的上市時間的壓力,不得不進行上萬門的設(shè)計,同時設(shè)計者不允許以犧牲硅的效率達到保持結(jié)構(gòu)的獨特性。使用現(xiàn)今的EDA軟件工具來應(yīng)付這些問題,并不是一件簡單的事情。FPGA預(yù)裝了很多已構(gòu)造好的參數(shù)化庫單元LPM器件。通過引入支持LPM的EDA軟件工具,設(shè)計者可以設(shè)計出結(jié)構(gòu)獨立而且硅片的使用效率非常高的產(chǎn)品。本課設(shè)在EDA開發(fā)平臺上利用VHDL語言設(shè)計數(shù)控分頻器電路,利用數(shù)控分頻的原理設(shè)計樂曲硬件演奏電路,并定制LPM-ROM存儲音樂數(shù)據(jù),以"兩只老虎"樂曲為例,將音樂數(shù)據(jù)存儲到LPM-ROM,就達到了以純硬件的手段來實現(xiàn)樂曲的演奏效果。只要修改LPM-ROM所存儲的音樂數(shù)據(jù),將其換成其他樂曲的音樂數(shù)據(jù),再重新定制LPM-ROM,連接到程序中就可以實現(xiàn)其它樂曲的演奏。關(guān)鍵詞:FPGA;EDA;VHDL;音樂TOC\o"1-2"\h\u目錄設(shè)計要求11、方案論證與對比11.1方案一11.2方案二11.3綜合對比12樂曲演奏電路原理22.1音樂演奏電路原理22.2音符頻率的獲得22.3樂曲節(jié)奏的控制32.4樂譜發(fā)生器32.5樂曲演奏電路原理框圖33音樂硬件演奏電路的設(shè)計實現(xiàn)43.1地址發(fā)生器模塊43.1.1地址發(fā)生器的VHDL設(shè)計43.2分頻預(yù)置數(shù)模塊63.2.1分頻預(yù)置數(shù)模塊的VHDL設(shè)計63.3數(shù)控分頻模塊83.3.1數(shù)控分頻模塊的VHDL設(shè)計83.4music模塊10音符數(shù)據(jù)文件103.5.2LPM-ROM定制123.6頂層文件144時序仿真及下載調(diào)試過程164.1時序仿真圖164.2引腳鎖定以及下載174.3調(diào)試過程及結(jié)果175擴大樂曲硬件演奏電路的通用性185.1完善分頻預(yù)置數(shù)模塊的功能18設(shè)計總結(jié)與心得體會21參考文獻22..樂曲硬件演奏電路設(shè)計設(shè)計要求利用FPGA,設(shè)計一個樂曲硬件演奏電路。樂曲的12平均率規(guī)定:每2個八度〔如簡譜中的中音1與高音1之間的頻率相差1倍。在2個八度音之間,又可分為12個半音,每2個半音的頻率比為12/2。另外,音符A的頻率為440HZ,音符B到C之間,E到F之間為半音,其余為全音。由此可以計算出簡譜中從低音l至高音1之間每個音符的頻率。設(shè)計音符查找表電路模塊,時鐘模塊,數(shù)控分頻器模塊,音樂節(jié)拍產(chǎn)生模塊電路。1、方案論證與對比1.1方案一利用FPGA來實現(xiàn)樂曲硬件演奏電路。樂曲的12平均率規(guī)定:每2個八度〔如簡譜中的中音1與高音1之間的頻率相差1倍。在2個八度音之間,又可分為12個半音,每2個半音的頻率比為12/2。另外,音符A的頻率為440HZ,音符B到C之間,E到F之間為半音,其余為全音。由此可以計算出簡譜中從低音l至高音1之間每個音符的頻率。設(shè)計音符查找表電路模塊,時鐘模塊,數(shù)控分頻器模塊,音樂節(jié)拍產(chǎn)生模塊電路。1.2方案二制作一個純硬件電路來完成樂曲演奏。1.3綜合對比與利用微處理器來實現(xiàn)樂曲演奏相比,以純硬件完成樂曲演奏電路的邏輯要復(fù)雜得多,如果不借助于功能強大的EDA工具和硬件描述語言,僅憑傳統(tǒng)的數(shù)字邏輯技術(shù),即使最簡單的演奏電路也難以實現(xiàn)。所以選擇方案一。2樂曲演奏電路原理2.1音樂演奏電路原理圖1電路原理框圖該主系統(tǒng)由三個模塊:Songer頂層文件、div分頻器、譯碼器組成。且Songer頂層文件還包括3個子文件分別是NoteTabs,ToneTaba和Speakera,此外,我們還需建立一個名為"music"的LPM_ROM模塊與NoteTabs模塊連接。2.2音符頻率的獲得多個不同頻率的信號可通過對某個基準頻率進行分頻器獲得。由于各個音符的頻率多為非整數(shù),而分頻系數(shù)又不能為小數(shù),故必須將計算機得到的分頻系數(shù)四舍五入取整。若基準頻率過低,則分頻系數(shù)過小,四舍五入取整后的誤差較大。若基準頻率過高,雖然可以減少頻率的相對誤差,但分頻結(jié)構(gòu)將變大。實際上應(yīng)該綜合考慮這兩個方面的因素,在盡量減少誤差的前提下,選取合適的基準頻率。本文中選取750KHz的基準頻率。由于現(xiàn)有的高頻時鐘脈沖信號的頻率為12MHz,故需先對其進行16分頻,才能獲得750KHz的基準頻率。對基準頻率分頻后的輸出信號是一些脈寬極窄的尖脈沖信號〔占空比=1/分頻系數(shù)。為提高輸出信號的驅(qū)動能力,以使揚聲器有足夠的功率發(fā)音,需要再通過一個分頻器將原來的分頻器的輸出脈沖均衡為對稱方波〔占空比=1/2,但這時的頻率將是原來的1/2。由于最大分頻系數(shù)是1274,故分頻器采用11位二進制計數(shù)器才能滿足要求。2.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é)拍的速度就慢,演奏的速度自然降低。2.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ù)。2.5樂曲演奏電路原理框圖我們知道,組成樂曲的每個音符的發(fā)音頻率值及其持續(xù)的時間是樂曲能連續(xù)演奏所需的兩個基本要素,問題是如何來獲取這兩個要素所對應(yīng)的數(shù)值以及通過純硬件的手段來利用這些數(shù)值實現(xiàn)所希望樂曲的演奏效果。圖1中,模塊U1類似于彈琴人的手指;U2類似于琴鍵;U3類似于琴弦或音調(diào)發(fā)聲器。音符的頻率可以由圖1中的SPEAKERA獲得,這是一個數(shù)控分頻器。由其clk端輸入一具有較頻率〔這里是12MHz的信號,通過SPEAKERA分頻后由SPKOUT輸出,由于直接從數(shù)控分頻器中出來的輸出信號是脈寬極窄的脈沖式信號,為了有利于驅(qū)動揚聲器,需另加一個D觸發(fā)器以均衡其占空比,但這時的頻率將是原來的1/2。SPEAKERA對clk輸入信號的分頻比由11位預(yù)置數(shù)Tone[10..0]決定。SPKOUT的輸出頻率將決定每一音符的音調(diào),這樣,分頻計數(shù)器的預(yù)置值Tone[10..0]與SPKOUT的輸出頻率,就有了對應(yīng)關(guān)系。音符的持續(xù)時間須根據(jù)樂曲的速度及每個音符的節(jié)拍數(shù)來確定,圖1中模塊TONETABA的功能首先是為SPEAKERA提供決定所發(fā)音符的分頻預(yù)置數(shù),而此數(shù)在SPEAKERA輸入口停留的時間即為此音符的節(jié)拍值。輸向TONETABA中Index[3..0]的值ToneIndex[3..0]的輸出值與持續(xù)的時間由模塊NOTETABS決定。在NOTETABS中設(shè)置了一個8位二進制計數(shù)器,作為音符數(shù)據(jù)ROM的地址發(fā)生器。得到樂曲演奏電路的原理框圖如圖1所示:圖1電路原理圖3音樂硬件演奏電路的設(shè)計實現(xiàn)音樂硬件演奏電路主要是用VHDL語言來設(shè)計,并利用QuartusII軟件工具來編譯、測試和仿真。根據(jù)頂層原理圖,共分為地址發(fā)生器模塊、分頻預(yù)置數(shù)模塊、數(shù)控分頻模塊這三個模塊。而music模塊是存放樂曲中的音符數(shù)據(jù),在我們的頂層原理圖中并沒有顯示出來,地址發(fā)生器模塊作為music模塊中所定制的音符數(shù)據(jù)ROM的地址發(fā)生器,分頻預(yù)置數(shù)模塊提供分頻預(yù)置數(shù)即給數(shù)控分頻模塊提供計數(shù)初值。數(shù)控分頻模塊根據(jù)分頻預(yù)置數(shù)輸出各個音符所對應(yīng)的頻率。3.1地址發(fā)生器模塊地址發(fā)生器模塊設(shè)置了一個8位二進制計數(shù)器<計數(shù)最大值為138>,作為音符數(shù)據(jù)ROM的地址發(fā)生器。每來一個時鐘脈沖信號<Clk>,8位二進制計數(shù)器就計數(shù)一次,ROM文件中的地址也就隨著遞增,音符數(shù)據(jù)ROM中的音符也就一個接一個連續(xù)的取出來了。3.1.1地址發(fā)生器的VHDL設(shè)計這個計數(shù)器的計數(shù)頻率選為4Hz,即每一計數(shù)值的停留時間為0.25秒,恰為當(dāng)全音符設(shè)為1秒,四四拍的4分音符持續(xù)時間。例如,地址發(fā)生器在以下的VHDL邏輯描述中,"兩只老虎"樂曲的第一個音符為"3",此音在邏輯中停留了4個時鐘節(jié)拍,即1秒時間。那么相應(yīng)隨著程序中的計數(shù)器按4Hz的時鐘頻率作加法計數(shù)時,即隨地址遞增時,將從音符數(shù)據(jù)ROM中將連續(xù)取出4個音符"3"通過toneindex[3..0]端口輸向分頻預(yù)置數(shù)模塊。這樣兩只老虎樂曲中的音符就一個接一個的通過toneindex[3..0]端口輸向分頻預(yù)置數(shù)模塊。程序如下LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYNoteTabsISPORT<clk:INSTD_LOGIC;ToneIndex:OUTSTD_LOGIC_VECTOR<3DOWNTO0>>;END;ARCHITECTUREoneOFNoteTabsISCOMPONENTMUSICPORT<address:INSTD_LOGIC_VECTOR<7DOWNTO0>;inclock:INSTD_LOGIC;q:OUTSTD_LOGIC_VECTOR<3DOWNTO0>>;ENDCOMPONENT;SIGNALCounter:STD_LOGIC_VECTOR<7DOWNTO0>;BEGINCNT8:PROCESS<clk,Counter>BEGINIFCounter=138THENCounter<="00000000";ELSIF<clk'EVENTANDclk='1'>THENCounter<=Counter+1;ENDIF;ENDPROCESS;u1:MUSICPORTMAP<address=>Counter,q=>ToneIndex,inclock=>clk>;ENDone;程序的功能是每來一個時鐘,地址值遞增1,并將這個地址上所存儲的音符數(shù)據(jù)輸出。當(dāng)Clk來了一個時鐘脈沖,輸出相應(yīng)地址上的音符3,地址值遞增1;接下來的三個時鐘脈沖來時,輸出也是音符3,地址連續(xù)遞增3次;再下一個脈沖來時,輸出為音符5等等都符合模塊中的音符數(shù)據(jù)文件中的地址/數(shù)據(jù)表。3.2分頻預(yù)置數(shù)模塊分頻預(yù)置數(shù)模塊是樂曲簡譜碼對應(yīng)的分頻預(yù)置數(shù)查表電路。它提供了每個音符所對應(yīng)的分頻預(yù)置數(shù),即給數(shù)控分頻模塊提供計數(shù)初值,以"兩只老虎"樂曲為例,列出了在這個樂曲中所用到的13個音符的分頻預(yù)置數(shù)。3.2.1分頻預(yù)置數(shù)模塊的VHDL設(shè)計在這個模塊的VHDL邏輯描述中設(shè)置了"兩只老虎"樂曲中全部音符所對應(yīng)的分頻預(yù)置數(shù),共13個,每一音符的停留時間由音樂節(jié)拍和地址發(fā)生器模塊的時鐘〔Clk的輸入頻率決定,在此為4Hz。這13個值的輸出由程序的4位輸入值index[3..0]確定。輸向程序[4]中index[3..0]的值又由地址發(fā)生器模塊的輸出toneindex[3..0]的輸出值和持續(xù)時間決定。程序如下:libraryieee;useieee.std_logic_1164.all;entitytonetabaisport<index:instd_logic_vector<3downto0>;code:outstd_logic_vector<3downto0>;high:outstd_logic;tone:outstd_logic_vector<10downto0>>;endentitytonetaba;architectureoneoftonetabaisbeginsearch:process<index>begincaseindexiswhen"0001"=>tone<="01100000101";code<="0001";high<='0';--773; when"0010"=>tone<="01110010000";code<="0010";high<='0';--912; gh<='0';--1036;de<="0110";high<='1';--1290;='1';--1410;="0011";high<='1';--1542;;--1668;whenothers=>null;endcase;endprocess;endone;模塊的功能是輸出各個音符所對應(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ù)。3.3數(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ù)=基準頻率/音符的發(fā)生頻率低音時Tone值小,分頻系數(shù)大,溢出信號周期長,揚聲器發(fā)出的聲音低,Tone隨音樂的樂譜變化大,自動控制分頻比,實現(xiàn)了數(shù)控分頻,發(fā)生信號的頻率與音調(diào)Tone成正比。這就是利用數(shù)控分頻器自動演奏音樂的原理。3.3.1數(shù)控分頻模塊的VHDL設(shè)計其時鐘〔Clk端輸入的是12MHz的信號,從數(shù)控分頻器中出來的輸出信號是脈寬極窄的脈沖式信號,為了有利于驅(qū)動揚聲器,需另加一個D觸發(fā)器以均衡其占空比,這時的頻率就變?yōu)樵瓉淼?/2,剛好就是相應(yīng)音符的頻率。數(shù)控分頻模塊中對Clk輸入信號的分頻比由11位預(yù)置數(shù)tone[10..0]決定。Fout的輸出頻率將決定每一個音符的音調(diào),這樣,分頻計數(shù)器的預(yù)置值tone[10..0]與Fout的輸出頻率就有了對應(yīng)關(guān)系。例如在分頻預(yù)置數(shù)模塊中若取tone[10..0]=1036,將發(fā)出音符為"3"音的信號頻率。程序如下:useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entityspeakeraisport<clk:instd_logic;tone:instd_logic_vector<10downto0>;spks:outstd_logic>;endentityspeakera;architectureoneofspeakeraissignalpreclk,fullspks:std_logic;begindivideclk:process<clk>variablecount4:std_logic_vector<3downto0>;beginpreclk<='0';ifcount4>11thenpreclk<='1';count4:="0000";elsifclk'eventandclk='1'thencount4:=count4+1;endif;endprocess;genspks:process<preclk,tone>--11variablecount11:std_logic_vector<10downto0>;beginifpreclk'eventandpreclk='1'thenifcount11=16#7ff#thencount11:=tone;fullspks<='1';elsecount11:=count11+1;fullspks<='0';endif;endif;endprocess;delayspks:process<fullspks>variablecount2:std_logic;beginiffullspks'eventandfullspks='1'thencount2:=notcount2;ifcount2='1'thenspks<='1';elsespks<='0';endif;endif;endprocess;endone;此模塊的功能是根據(jù)初始值d的值,對輸入時鐘信號Clk的頻率進行分頻,得到想要的音符的發(fā)聲頻率。d的值設(shè)為6c0〔即高音1的分頻預(yù)置數(shù)1728,Clk的頻率為750KHz,Fout輸出的脈沖信號的周期為849.9291us〔即1176.568Hz,接近高音1的發(fā)聲頻率。由表1中可知高音1的分頻系數(shù)為319,即對輸入時鐘Clk進行319次分頻就可得高音1的發(fā)聲頻率。3.4music模塊Music模塊存放樂曲中的音符數(shù)據(jù),它是利用LPM-ROM來實現(xiàn)的,將樂譜中相應(yīng)的音符放在一個連續(xù)的地址上。它首先是編寫音符數(shù)據(jù)文件,將樂譜中相應(yīng)的音符存放在一個連續(xù)的地址上。因為1拍的時間定為1秒,提供的是4Hz的時鐘頻率〔即1/4拍的整數(shù)倍,則需將這個音符存儲在相應(yīng)次數(shù)的連續(xù)幾個地址上。然后對音符數(shù)據(jù)進行ROM定制,最后對定制好的ROM文件進行測試和仿真。3.4.1音符數(shù)據(jù)文件width=4;--"兩只老虎"樂曲演奏數(shù)據(jù)depth=256;address_radix=dec;data_radix=dec;contentbegin其中WIDTH=4,表示數(shù)據(jù)輸出為寬為4;DEPTH=256,表示共有256個4位數(shù)據(jù)點;ADDRESS-RADIX=DEC,表示地址信號用十進制;DATA-RADIX=DEC,表示輸出數(shù)據(jù)是十進制數(shù)。形成ROM中的配置數(shù)據(jù)〔初始化數(shù)據(jù)文件的方法如下:在QuartusII中編輯.mif文件。文件中的關(guān)鍵詞WIDTH設(shè)置ROM的數(shù)據(jù)寬度;DEPTH設(shè)置ROM數(shù)據(jù)的深度,即4位數(shù)據(jù)的數(shù)量,文件中設(shè)置的256等效于8位地址線寬度,初始化數(shù)據(jù)如下:圖2ROM初始化數(shù)據(jù)ADDRESS-RADIX=DEC和DATA-RADIX=DEC表示設(shè)置地址和數(shù)據(jù)的表達式格式都是十進制;地址/數(shù)據(jù)表以CONTENTBEGIN開始,以END結(jié)束;其中的地址/數(shù)據(jù)表達方式是冒號左邊寫ROM地址值,冒號右邊寫對應(yīng)此地址放置的十進制數(shù)據(jù),如46:9,表示46為地址,9為該地址中的數(shù)據(jù)。這樣每讀到一個地址,即可輸出其相應(yīng)的數(shù)據(jù)。文件編輯好后,保存時取文件名為"mucic.mif",存盤的路徑為"D:\altera\mucic"。LPM-ROM定制定制的基本步驟如下:<1>進入QuartusII,選菜單file->megawizardplug-inmanager,選擇"creatanew…",然后按"next"鍵,進入圖2所示界面。選擇LPM-ROM;最后在browse下的欄中鍵入路徑與輸出文件名:"D:\mucic.vhd",注意后綴vhd小寫。圖3選擇路徑<2>單擊"next"鍵,將出現(xiàn)圖3所示的界面,選擇ROM數(shù)據(jù)位寬度為4,地址線寬為8,即設(shè)置此ROM能存儲8位二進制數(shù)據(jù)共64個,然后進入圖4所示的窗口。〔3通過在圖4所示窗口的"browse"鈕,找ROM中的加載文件路徑和文件名:"D:\altera\QuartusII\music.mif",注意ROM元件的inclock文件名:"D:\altera\QuartusII\music.mif",注意ROM元件的inclock是地址鎖存鐘。此模塊的功能是輸出相應(yīng)地址上所存儲的音符數(shù)據(jù),當(dāng)address是0、1、2、3時,q的輸出是3;當(dāng)address是4、5、6時,q的輸出是5;當(dāng)address是7時,q的輸出是6等等都符合模塊中的音符數(shù)據(jù)文件中的地址/數(shù)據(jù)表。這里必須選擇AUTO和Dualclock:usedseparate‘input’and‘output’Clocks選項圖4芯片的選擇<4>單擊"next"鍵,將出現(xiàn)圖5所示的界面,選擇允許在線編程,地址線寬為8,即設(shè)置此ROM能存儲8位二進制數(shù)據(jù)共64個,通過在圖4所示窗口的"browse"鈕,找ROM中的加載文件路徑和文件名:"D:\altera\QuartusII\music.mif",注意ROM元件的inclock文件名:"D:\altera\QuartusII\music.mif",注意ROM元件的inclock是地址鎖存鐘,然后單擊’Next’完成LPM_ROM的定制。如下圖所示:圖5選擇是否在線編程3.6頂層文件程序如下:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYSongerISPORT<CLK12MHZ:INSTD_LOGIC;CLK8HZ:INSTD_LOGIC;CODE1:OUTSTD_LOGIC_VECTOR<3DOWNTO0>;HIGH1:OUTSTD_LOGIC;SPKOUT:OUTSTD_LOGIC>;ENDENTITYSonger;ARCHITECTUREoneOFSongerISCOMPONENTNoteTabsPORT<clk:INSTD_LOGIC;ToneIndex:OUTSTD_LOGIC_VECTOR<3DOWNTO0>>;ENDCOMPONENT;COMPONENTToneTabaPORT<Index:INSTD_LOGIC_VECTOR<3DOWNTO0>;CODE:OUTSTD_LOGIC_VECTOR<3DOWNTO0>;HIGH:OUTSTD_LOGIC;Tone:OUTSTD_LOGIC_VECTOR<10DOWNTO0>>;ENDCOMPONENT;COMPONENTSpeakeraPORT<clk:INSTD_LOGIC;Tone:OUTSTD_LOGIC_VECTOR<10DOWNTO0>;SpkS:outSTD_LOGIC>;ENDCOMPONENT;SIGNALTone:STD_LOGIC_VECTOR<10DOWNTO0>;SIGNALToneIndex:STD_LOGIC_VECTOR<3DOWNTO0>;BEGINu1:NoteTabsPORTMAP<clk=>CLK8HZ,ToneIndex=>ToneIndex>;u2:ToneTabaPORTMAP<Index=>ToneIndex,Tone=>Tone,CODE=>CODE1,HIGH=>HIGH1>;u3:SpeakeraPORTMAP<clk=>CLK12MHZ,Tone=>TONE,SpkS=>SPKOUT>;ENDone;將所編寫的頂層文件程序設(shè)為當(dāng)前工程,通過對程序進行編譯,仿真,確定工程沒有錯誤后經(jīng)過引腳鎖定就可以下載到EDA試驗箱中了。通過試驗箱上的蜂鳴器我們可以聽到"兩只老虎"的樂曲。4時序仿真及下載調(diào)試過程關(guān)于樂曲演奏電路設(shè)計的實現(xiàn)關(guān)鍵是要實現(xiàn)它的時序仿真,下面就是各部分的仿真圖示。4.1時序仿真圖圖6Notetabas的時序仿真圖圖7Tonetaba的時序仿真圖8Speakerea的時序仿真圖9Songer的時序仿真4.2引腳鎖定以及下載為實現(xiàn)所設(shè)計的功能,管腳鎖定時,選用實驗箱的模式5。鎖定管腳如下:圖10引腳鎖定4.3調(diào)試過程及結(jié)果這個樂曲硬件演奏電路的設(shè)計是仿照EDA實驗例子設(shè)計的。一開始,我們仔細研究書本例子后,按照書上的例子建立工程,并在實驗箱上下載測試實現(xiàn),兩只老虎樂曲可以播放,實驗成功。接下來,根據(jù)設(shè)計要求,我們就選了《兩只老虎》這首歌曲,把它翻譯成需要的音符數(shù)據(jù),并把它和前一首曲子放在一個數(shù)據(jù)ROM里。然后,通過地址的選擇實現(xiàn)手動和自動播放歌曲?!苍斠娗懊鎸嶒炘碜詈笙螺d在實驗箱上,進行硬件測試。5擴大樂曲硬件演奏電路的通用性前面所設(shè)計的電路只能演奏"兩只老虎"曲子,但是在實際應(yīng)用中,若能將電路實用于各種曲子的演奏,它的實用性和應(yīng)用范圍就會擴大許多。這里主要通過修改分頻預(yù)置數(shù)模塊的程序,使其實用于各種曲子的演奏。另外要使更改樂曲方便,主要通過重新設(shè)置音符數(shù)據(jù)文件,再對其進行LPM-ROM定制。5.1完善分頻預(yù)置數(shù)模塊的功能在前面的VHDL設(shè)計中,我們只能通過程序輸出"兩只老虎"曲子中的13個音符的分頻預(yù)置數(shù)〔即計數(shù)初值,但是在其它的樂曲中可能會用到另外的那些音符,因此對程序進行修改完善它的功能,使其能輸出另外那些音符的分頻預(yù)置數(shù)。程序修改如下:Libraryieee;Useieee.std_logic_1164.all;EntitytonetabaisPort<index:instd_logic_vector<4downto0>;code:outstd_logic_vector<4downto0>;high:outstd_logic;tone:outstd_logic_vector<10downto0>>;En
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年浙科版九年級歷史上冊階段測試試卷
- 2025年外研銜接版必修2歷史下冊月考試卷
- 二零二五年度高端苗木物流配送服務(wù)合同樣本4篇
- 二零二五年度南海區(qū)居住就業(yè)人才住房租賃補貼合同3篇
- 2025年度智能門牌系統(tǒng)研發(fā)與推廣合同4篇
- 2025年度內(nèi)墻乳膠漆涂裝工程綠色環(huán)保驗收合同4篇
- 2025年度文化傳播派遣工作人員服務(wù)合同范本3篇
- 二零二五年度男方婚外情證據(jù)收集與訴訟離婚服務(wù)合同4篇
- 2025年度文化旅游項目承包合同6篇
- 2025年度派駐企業(yè)行政事務(wù)管理合同范本4篇
- 優(yōu)佳學(xué)案七年級上冊歷史
- 鋁箔行業(yè)海外分析
- 紀委辦案安全培訓(xùn)課件
- 超市連鎖行業(yè)招商策劃
- 醫(yī)藥高等數(shù)學(xué)智慧樹知到課后章節(jié)答案2023年下浙江中醫(yī)藥大學(xué)
- 城市道路智慧路燈項目 投標方案(技術(shù)標)
- 初中英語-Unit2 My dream job(writing)教學(xué)設(shè)計學(xué)情分析教材分析課后反思
- 【公司利潤質(zhì)量研究國內(nèi)外文獻綜述3400字】
- 工行全國地區(qū)碼
- 新疆2022年中考物理試卷及答案
- 地暖工程監(jiān)理實施細則
評論
0/150
提交評論