畢業(yè)論文-基于EDA樂曲硬件演奏電路_第1頁
畢業(yè)論文-基于EDA樂曲硬件演奏電路_第2頁
畢業(yè)論文-基于EDA樂曲硬件演奏電路_第3頁
畢業(yè)論文-基于EDA樂曲硬件演奏電路_第4頁
畢業(yè)論文-基于EDA樂曲硬件演奏電路_第5頁
已閱讀5頁,還剩28頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

沈陽工程學(xué)院課程設(shè)計(論文)PAGEPAGE20目錄摘要 IAbstract II第1章引言 11.1 EDA技術(shù)及發(fā)展歷史 1第2章VHDL語言及其應(yīng)用 22.1VHDL的應(yīng)用 2第3章樂曲硬件演奏電路 43.1基本要求 43.2原理描述 43.3樂曲硬件演奏電路的層次化設(shè)計方案 53.3.1音樂節(jié)拍發(fā)生器notetabs 53.3.2音符譯碼電路tonetaba模塊 113.3.3數(shù)控分頻模塊(speakera)設(shè)計 133.4樂曲硬件演奏電路的頂層設(shè)計和仿真 16結(jié)論 19參考文獻 20致謝 21附錄 22沈陽工程學(xué)院課程設(shè)計(論文)引言EDA技術(shù)及發(fā)展歷史隨著計算機業(yè)的發(fā)展,從80年代中期計算機應(yīng)用進入各個領(lǐng)域。在這種背景下,87、88年由美國ACCEL

Technologies

Inc推出了第一個應(yīng)用于電子線路設(shè)計軟件包——TANGO,這個軟件包開創(chuàng)了電子設(shè)計自動化(EDA)的先河。這個軟件包現(xiàn)在看來比較簡陋,但在當(dāng)時給電子線路設(shè)計帶來了設(shè)計方法和方式的革命,人們紛紛開始用計計算機來設(shè)計電子線路,直到今天在國內(nèi)許多科研單位還在使用這個軟件包。隨著電子業(yè)的飛速發(fā)展,TANGO日益顯示出其不適應(yīng)時代發(fā)展需要的弱點。為了適應(yīng)科學(xué)技術(shù)的發(fā)展,Protel

Technology公司以其強大的研發(fā)能力推出了Protel

For

Dos作為TANGO的升級版本,從此Protel這個名字在業(yè)內(nèi)日益響亮。中國科學(xué)院EDA中心是中國科學(xué)院根據(jù)其“面向國家戰(zhàn)略需求、面向世界科技前沿”的新時期辦院方針,面對中國IC設(shè)計產(chǎn)業(yè)發(fā)展對技術(shù)和人才的迫切需求,于2001年11月經(jīng)中國科學(xué)院批準(zhǔn)設(shè)立的非法人事業(yè)機構(gòu)。是中國科學(xué)院全院集成電路設(shè)計領(lǐng)域科研與教育的網(wǎng)絡(luò)化公共平臺,是中國科學(xué)院該領(lǐng)域?qū)ν鈶?zhàn)略合作的代表機構(gòu),面向全國開展技術(shù)服務(wù)。VHDL語言及其應(yīng)用20世紀(jì)80年代美國國防部開發(fā)VeryHighSpeedIntegratedCircuit—VHSIC,用于描述集成電路的結(jié)構(gòu)和功能。此后,硬件描述語言向標(biāo)準(zhǔn)化方向發(fā)展,1987年成為IEEEStandard1076,稱為VHDL語言。它也是美國國防部標(biāo)準(zhǔn)(MIL-STD-454L)。1993年該標(biāo)準(zhǔn)增修為IEEE1164標(biāo)準(zhǔn)。1996年,再次加入電路合成的標(biāo)準(zhǔn)程序和規(guī)格,成為IEEE1076.3標(biāo)準(zhǔn)。VHDL的英文全名是Very-High-SpeedIntegratedCircuitHardwareDescriptionLanguage,誕生于1982年。1987年底,VHDL被IEEE和美國國防部確認(rèn)為標(biāo)準(zhǔn)硬件描述語言。自IEEE公布了VHDL的標(biāo)準(zhǔn)版本,IEEE-1076(簡稱87版)之后,各EDA公司相繼推出了自己的VHDL設(shè)計環(huán)境,或宣布自己的設(shè)計工具可以和VHDL接口。此后VHDL在電子設(shè)計領(lǐng)域得到了廣泛的接受,并逐步取代了原有的非標(biāo)準(zhǔn)的硬件描述語言。1993年,IEEE對VHDL進行了修訂,從更高的抽象層次和系統(tǒng)描述能力上擴展VHDL的內(nèi)容,公布了新版本的VHDL,即IEEE標(biāo)準(zhǔn)的1076-1993版本,(簡稱93版)。現(xiàn)在,VHDL和Verilog作為IEEE的工業(yè)標(biāo)準(zhǔn)硬件描述語言,又得到眾多EDA公司的支持,在電子工程領(lǐng)域,已成為事實上的通用硬件描述語言。有專家認(rèn)為,在新的世紀(jì)中,VHDL于Verilog語言將承擔(dān)起大部分的數(shù)字系統(tǒng)設(shè)計任務(wù)。從宏觀的角度看,VHDL的語法構(gòu)成了程序的各組成部分;微觀上看VHDL的語法是各種語句的運用細(xì)節(jié)。本章在VHDL的特性之后,從這兩個角度簡要介紹VHDL的語法基礎(chǔ)。硬件描述語言HDL(HardwareDescriptionLanguage)誕生于1962年。HDL是用形式化的方法描述數(shù)字電路和設(shè)計數(shù)字邏輯系統(tǒng)的語言。主要用于描述離散電子系統(tǒng)的結(jié)構(gòu)和行為。與SDL(SoftwareDescriptionLanguage)相似,經(jīng)歷了從機器碼(晶體管和焊接)、匯編(網(wǎng)表)、到高級語言(HDL)的過程。VHDL的應(yīng)用VHDL主要用于描述數(shù)字系統(tǒng)的結(jié)構(gòu),行為,功能和接口。除了含有許多具有硬件特征的語句外,VHDL的語言形式和描述風(fēng)格與句法是十分類似于一般的計算機高級語言。VHDL的程序結(jié)構(gòu)特點是將一項工程設(shè)計,或稱設(shè)計實體(可以是一個元件,一個電路模塊或一個系統(tǒng))分成外部(或稱可是部分,及端口)和內(nèi)部(或稱不可視部分),既涉及實體的內(nèi)部功能和算法完成部分。在對一個設(shè)計實體定義了外部界面后,一旦其內(nèi)部開發(fā)完成后,其他的設(shè)計就可以直接調(diào)用這個實體。這種將設(shè)計實體分成內(nèi)外部分的概念是VHDL系統(tǒng)設(shè)計的基本點。VHDL是一種標(biāo)準(zhǔn)的硬件電路設(shè)計語言,目前已成為廣大電路設(shè)計人員設(shè)計數(shù)字系統(tǒng)首選的開發(fā)工具?;赩HDL硬件電路語言的編程與實際應(yīng)用技巧,VHDL硬件電路語言在微機、通信、編碼、存儲器以及電子電路等方面的具體設(shè)計應(yīng)用,具有實際的指導(dǎo)意義。關(guān)于用VHDL和原理圖輸入進行CPLD/FPGA設(shè)計的粗略比較:在設(shè)計中,如果采用原理圖輸入的設(shè)計方式是比較直觀的。你要設(shè)計的是什么,你就直接從庫中調(diào)出來用就行了。這樣比較符合人們的習(xí)慣。但是這樣做需要設(shè)計人員要在兩方面有較高的素質(zhì):

但是當(dāng)你采用VHDL等高級語言來設(shè)計時這些問題都會得到較好的解決。由于在使用VHDL等高級語言時,有專用的工具來實現(xiàn)將語言描述的電路功能轉(zhuǎn)換為實際的電路所以你就用不著對底層的電路很熟悉,也用不著對CPLD/FPGA的結(jié)構(gòu)很熟悉(因為有專用的工具針對你的描述采用相應(yīng)的器件哦)。當(dāng)你要換器件時,你只需要將原來設(shè)計好的VDHL文件在新器件的設(shè)計工具中再次實現(xiàn)就行了。樂曲硬件演奏電路基本要求利用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)生模塊電路。原理描述產(chǎn)生音樂的兩個因素是音樂頻率和音樂的持續(xù)時間,以純硬件完成演奏電路比利用微處理器來實現(xiàn)樂曲演奏要復(fù)雜的多,如果不憑借EDA工具和硬件描述語言,憑借傳統(tǒng)的數(shù)字邏輯技術(shù),即使最簡單的演奏電路也難以實現(xiàn)。樂曲硬件演奏電路系統(tǒng)主要有數(shù)控分頻器和樂曲存儲模塊組成。數(shù)控分頻器對FPGA的基準(zhǔn)頻率進行分頻,得到與各個音階對應(yīng)的頻率輸出。樂曲存儲模塊產(chǎn)生節(jié)拍控制和音階選擇信號,即在此模塊中可存放一個樂曲曲譜真值表,由一個計數(shù)器來控制此真值表的輸出,而由計數(shù)器的計數(shù)時鐘信號作為樂曲節(jié)拍控制信號。樂曲演奏電路的結(jié)構(gòu)框圖如下:時鐘電路查符查表電路音樂節(jié)拍時鐘電路查符查表電路音樂節(jié)拍產(chǎn)生電路數(shù)控分頻器基準(zhǔn)時鐘模式選擇樂曲硬件演奏電路的層次化設(shè)計方案樂曲硬件演奏電路的設(shè)計主要就是由三個部分組成的,首先為了實現(xiàn)音樂的演奏必須得得到音階的頻率和節(jié)拍,這主要就是由音樂節(jié)拍發(fā)生器和數(shù)控分頻模塊完成的,完了就是譯碼查表電路是由音符譯碼電路模塊產(chǎn)生的,樂曲硬件演奏電路可分為三個模塊,音樂節(jié)拍發(fā)生器模塊,音符譯碼電路模塊,數(shù)控分頻模塊。音樂節(jié)拍發(fā)生器notetabs該模塊將利用FPGA的片內(nèi)POM存放樂曲簡譜真值表,該計數(shù)器的計數(shù)頻率為4HZ,即每一個數(shù)值的停留時間為0.25S,也就是每個節(jié)拍是0.25S,每個節(jié)拍的頻率也是4HZ,隨著NoteTabs中計數(shù)器按4HZ的時鐘頻率做加法計數(shù)時,樂符數(shù)據(jù)叫輸向音符譯碼電路ToneTaba,所以所存的樂曲就自然的演奏起來。其VHDL源程序如下:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYNoteTabsISPORT(clk:INSTD_LOGIC;ToneIndex:OUTEND;ARCHITECTUREoneOFNoteTabsISSIGNALCounter:INTEGERBEGINCNT8:PROCESS(clk)BEGINIFCounter=138THENCounter<=0;ELSIF(clk'EVENTANDclk='1')THENCounter<=Counter+1;ENDIF;ENDPROCESS;Search:PROCESS(Counter)BEGINCASECounterIS--譯碼器,查歌曲的樂譜表,查表結(jié)果為音調(diào)表的索引值WHEN00=>ToneIndex<=3;--簡譜"3"音WHEN01=>ToneIndex<=3;--發(fā)4個時鐘節(jié)拍WHEN02=>ToneIndex<=3;WHEN03=>ToneIndex<=3;WHEN04=>ToneIndex<=5;--簡譜"5"音WHEN05=>ToneIndex<=5;--發(fā)3個時鐘節(jié)拍WHEN06=>ToneIndex<=5;WHEN07=>ToneIndex<=6;--簡譜"6"音WHEN08=>ToneIndex<=8;WHEN09=>ToneIndex<=8;WHEN10=>ToneIndex<=8;WHEN11=>ToneIndex<=9;WHEN12=>ToneIndex<=6;WHEN13=>ToneIndex<=8;WHEN14=>ToneIndex<=5;WHEN15=>ToneIndex<=5;WHEN16=>ToneIndex<=12;WHEN17=>ToneIndex<=12;WHEN18=>ToneIndex<=12;WHEN19=>ToneIndex<=15;WHEN20=>ToneIndex<=13;WHEN21=>ToneIndex<=12;WHEN22=>ToneIndex<=10;WHEN23=>ToneIndex<=12;WHEN24=>ToneIndex<=9;WHEN25=>ToneIndex<=9;WHEN26=>ToneIndex<=9;WHEN27=>ToneIndex<=9;WHEN28=>ToneIndex<=9;WHEN29=>ToneIndex<=9;WHEN30=>ToneIndex<=9;WHEN31=>ToneIndex<=0;WHEN32=>ToneIndex<=9;WHEN33=>ToneIndex<=9;WHEN34=>ToneIndex<=9;WHEN35=>ToneIndex<=10;WHEN36=>ToneIndex<=7;WHEN37=>ToneIndex<=7;WHEN38=>ToneIndex<=6;WHEN39=>ToneIndex<=6;WHEN40=>ToneIndex<=5;WHEN41=>ToneIndex<=5;WHEN42=>ToneIndex<=5;WHEN43=>ToneIndex<=6;WHEN44=>ToneIndex<=8;WHEN45=>ToneIndex<=8;WHEN46=>ToneIndex<=9;WHEN47=>ToneIndex<=9;WHEN48=>ToneIndex<=3;WHEN49=>ToneIndex<=3;WHEN50=>ToneIndex<=8;WHEN51=>ToneIndex<=8;WHEN52=>ToneIndex<=6;WHEN53=>ToneIndex<=5;WHEN54=>ToneIndex<=6;WHEN55=>ToneIndex<=8;WHEN56=>ToneIndex<=5;WHEN57=>ToneIndex<=5;WHEN58=>ToneIndex<=5;WHEN59=>ToneIndex<=5;WHEN60=>ToneIndex<=5;WHEN61=>ToneIndex<=5;WHEN62=>ToneIndex<=5;WHEN63=>ToneIndex<=5;WHEN64=>ToneIndex<=10;WHEN65=>ToneIndex<=10;WHEN66=>ToneIndex<=10;WHEN67=>ToneIndex<=12;WHEN68=>ToneIndex<=7;WHEN69=>ToneIndex<=7;WHEN70=>ToneIndex<=9;WHEN71=>ToneIndex<=9;WHEN72=>ToneIndex<=6;WHEN73=>ToneIndex<=8;WHEN74=>ToneIndex<=5;WHEN75=>ToneIndex<=5;WHEN76=>ToneIndex<=5;WHEN77=>ToneIndex<=5;WHEN78=>ToneIndex<=5;WHEN79=>ToneIndex<=5;WHEN80=>ToneIndex<=3;WHEN81=>ToneIndex<=5;WHEN82=>ToneIndex<=3;WHEN83=>ToneIndex<=3;WHEN84=>ToneIndex<=5;WHEN85=>ToneIndex<=6;WHEN86=>ToneIndex<=7;WHEN87=>ToneIndex<=9;WHEN88=>ToneIndex<=6;WHEN89=>ToneIndex<=6;WHEN90=>ToneIndex<=6;WHEN91=>ToneIndex<=6;WHEN92=>ToneIndex<=6;WHEN93=>ToneIndex<=6;WHEN94=>ToneIndex<=5;WHEN95=>ToneIndex<=6;WHEN96=>ToneIndex<=8;WHEN97=>ToneIndex<=8;WHEN98=>ToneIndex<=8;WHEN99=>ToneIndex<=9;WHEN100=>ToneIndex<=12;WHEN101=>ToneIndex<=12;WHEN102=>ToneIndex<=12;WHEN103=>ToneIndex<=10;WHEN104=>ToneIndex<=9;WHEN105=>ToneIndex<=9;WHEN106=>ToneIndex<=10;WHEN107=>ToneIndex<=9;WHEN108=>ToneIndex<=8;WHEN109=>ToneIndex<=8;WHEN110=>ToneIndex<=6;WHEN111=>ToneIndex<=5;WHEN112=>ToneIndex<=3;WHEN113=>ToneIndex<=3;WHEN114=>ToneIndex<=3;WHEN115=>ToneIndex<=3;WHEN116=>ToneIndex<=8;WHEN117=>ToneIndex<=8;WHEN118=>ToneIndex<=8;WHEN119=>ToneIndex<=8;WHEN120=>ToneIndex<=6;WHEN121=>ToneIndex<=8;WHEN122=>ToneIndex<=6;WHEN123=>ToneIndex<=5;WHEN124=>ToneIndex<=3;WHEN125=>ToneIndex<=5;WHEN126=>ToneIndex<=6;WHEN127=>ToneIndex<=8;WHEN128=>ToneIndex<=5;WHEN129=>ToneIndex<=5;WHEN130=>ToneIndex<=5;WHEN131=>ToneIndex<=5;WHEN132=>ToneIndex<=5;WHEN133=>ToneIndex<=5;WHEN134=>ToneIndex<=5;WHEN135=>ToneIndex<=5;--程序過長,部分省WHEN136=>ToneIndex<=0;--簡譜休止符à輸出WHEN137=>ToneIndex<=0;--頻率為零WHEN138=>ToneIndex<=0;WHENOTHERS=>NULL;ENDCASE;ENDPROCESS;END;隨著頻率記數(shù)器預(yù)置數(shù)記數(shù)法開始記數(shù),得到了音節(jié)的輸出頻率和節(jié)拍,每0.25S為一個周期,頻率為4HZ,音階隨著基準(zhǔn)頻率分頻得到的頻率從低音依次到高音。仿真波形如下:圖3.2音樂節(jié)拍發(fā)生器防真波形原器件符號:圖3.3音樂發(fā)生器元件符號音符譯碼電路tonetaba模塊音符譯碼電路即音調(diào)發(fā)生器實際上是一個翻譯電路,根據(jù)輸入為數(shù)控分頻模塊提供所發(fā)音符頻率的初始值,而此數(shù)控分頻模塊入口的停留時間即為此音符的節(jié)拍數(shù),以VHDL程序中僅設(shè)置了“梁?!睒非恳舴鶎?yīng)的音符頻率的初始值。//clk_4Hz:用于控制音長(節(jié)拍)的時鐘頻率;//clk_6MHz:用于產(chǎn)生各種音階頻率的基準(zhǔn)頻率;

//speaker:用于激勵揚聲器的輸出信號,本例中為方波信號;

//high,med,low:分別用于顯示高音、中音和低音音符,各驅(qū)動一個數(shù)碼管來顯示。其VHDL源程序如下:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYToneTabaISPORT(Index:ININTEGERCODE:OUTHIGH:OUTSTD_LOGIC;Tone:OUTINTEGEREND;ARCHITECTUREoneOFToneTabaISBEGINSearch:PROCESS(Index)BEGINCASEIndexIS--譯碼電路,查表方式,控制音調(diào)的預(yù)置數(shù)WHEN0=>Tone<=2047;CODE<=0;HIGH<='0';WHEN1=>Tone<=773;CODE<=1;HIGH<='0';WHEN2=>Tone<=912;CODE<=2;HIGH<='0';WHEN3=>Tone<=1036;CODE<=3;HIGH<='0';WHEN5=>Tone<=1197;CODE<=5;HIGH<='0';WHEN6=>Tone<=1290;CODE<=6;HIGH<='0';WHEN7=>Tone<=1372;CODE<=7;HIGH<='0';WHEN8=>Tone<=1410;CODE<=1;HIGH<='1';WHEN9=>Tone<=1480;CODE<=2;HIGH<='1';WHEN10=>Tone<=1542;CODE<=3;HIGH<='1';WHEN12=>Tone<=1622;CODE<=5;HIGH<='1';WHEN13=>Tone<=1668;CODE<=6;HIGH<='1';WHEN15=>Tone<=1728;CODE<=1;HIGH<='1';WHENOTHERS=>NULL;ENDCASE;ENDPROCESS;END;在源程序中Index是音樂節(jié)拍發(fā)生器輸出的音符數(shù)據(jù);TONE是為數(shù)控分頻模塊提供的音符頻率的初始值,為方便測試,特設(shè)置了一個音名代碼顯示輸出CODE和音高指示信號HUGH可以通過數(shù)碼管或LED來顯示樂曲演奏時對應(yīng)的音符和高音名。CODE輸出對應(yīng)該音階簡譜的顯示數(shù)碼1,HIGH輸出為高電平,指示音階為高,HIGH輸出為低電平時,則指示音階為中音。低音時,Tone值小,分頻比大,進位信號SPKS的周期長。圖3.4音符譯碼電路仿真波形圖3.5音樂譯碼器元件符號數(shù)控分頻模塊(speakera)設(shè)計數(shù)控分頻模塊設(shè)計采用了預(yù)置數(shù)記數(shù)法分頻,從而得到各個音階所產(chǎn)生的頻率輸出。所謂預(yù)置數(shù)記數(shù)就是先預(yù)置個數(shù),然后用休止符數(shù)減去預(yù)置數(shù)就是分頻數(shù),然后用基準(zhǔn)頻率除以分頻數(shù)就是該音階的頻率。數(shù)控分頻器對FPGA的基準(zhǔn)頻率進行分頻,得到與各個音階對應(yīng)的頻率輸出。數(shù)控分頻模塊是11位的加法計數(shù)器構(gòu)成。當(dāng)計數(shù)器計滿是,產(chǎn)生一個進位信號FULLSPKS,該信號就是用作發(fā)音的頻率信號。在即使器的預(yù)置端給定不同的初始值,其輸出將產(chǎn)生不同的頻率信號,頻率信號初值Tone就是前級音符譯碼電路的輸出。低音時,Tone值小,分頻比大,進位信號SPKS的周期長,揚聲器發(fā)出的聲音低,Tone隨音樂的樂譜而變化,自動控制分頻比,從而實現(xiàn)數(shù)控分頻,發(fā)生信號的頻率與Tone成正比,這就是利用數(shù)控分頻器演奏音樂的原理。通過分頻后其進位信號FULLSPJKS是一周期脈沖信號,為有利于驅(qū)動揚聲器,在音調(diào)輸出時再進行2分頻,將脈沖展寬,使之占空比為50%,揚聲器這樣就有足夠的發(fā)聲功率。其VHDL源程序如下:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYSpeakeraISPORT(clk:INSTD_LOGIC;Tone:ININTEGERRANGE0TO16#7FF#;SpkS:OUTSTD_LOGIC);END;ARCHITECTUREoneOFSpeakeraISSIGNALPreCLK:STD_LOGIC;SIGNALFullSpkS:STD_LOGIC;BEGINDivideCLK:PROCESS(clk)VARIABLECount4:INTEGERBEGINPreCLK<='0';--將CLK進行16分頻,PreCLK為CLK的16分頻IFCount4>11THENPreCLK<='1';Count4:=0;ELSIFclk'EVENTANDclk='1'THENCount4:=Count4+1;ENDIF;ENDPROCESS;GenSpkS:PROCESS(PreCLK,Tone)VARIABLECount11:INTEGERRANGEBEGIN--11位可預(yù)置計數(shù)器IFPreCLK'EVENTANDPreCLK='1'THENIFCount11=16#7FF#THENCount11:=Tone;FullSpkS<='1';ELSECount11:=Count11+1;FullSpkS<='0';ENDIF;ENDIF;ENDPROCESS;DelaySpkS:PROCESS(FullSpkS)VARIABLECount2:STD_LOGIC;BEGIN--將輸出再進行2分頻,將脈沖展寬,以使揚聲器有足夠功率發(fā)音IFFullSpkS'EVENTANDFullSpkS='1'THENCount2:=NOTCount2;IFCount2='1'THENSpkS<='1';ElseSpkS<='0';ENDIF;ENDIF;ENDPROCESS;END;VHDL程序的第1個進程首先對FPGA的時基脈沖Tone輸入的分頻系數(shù)進行分頻,得到所需要的音符頻率;第2個進程的作用是在音調(diào)輸出時再進行2分頻,將脈沖展寬,使揚聲器有足夠發(fā)生功率。數(shù)控分頻器仿真波形如下:圖3.6數(shù)控分頻器仿真波形圖3.7分頻器元件符號樂曲硬件演奏電路的頂層設(shè)計和仿真樂曲硬件演奏電路頂層電路分為3個模塊,音樂節(jié)拍發(fā)生器NoteTabs模塊,音符譯碼電路Tonetabs模塊,數(shù)控分頻模塊(speaker)。其頂層設(shè)計的VHDL程序如下:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYSongerIS--頂層設(shè)計PORT(CLK12MHZ:INSTD_LOGIC;--音調(diào)頻率信號CLK8HZ:INSTD_LOGIC;--節(jié)拍頻率信號CODE1:OUTHIGH1:OUTSTD_LOGIC;SPKOUT:OUTSTD_LOGIC);END;ARCHITECTUREoneOFSongerISCOMPONENTNoteTabsPORT(clk:INSTD_LOGIC;ToneIndex:OUTENDCOMPONENT;COMPONENTToneTabaPORT(Index:ININTEGERCODE:OUTHIGH:OUTSTD_LOGIC;Tone:OUTINTEGERRANGE0TO16#7FF#);--11位2進制數(shù)ENDCOMPONENT;COMPONENTSpeakeraPORT(clk:INSTD_LOGIC;Tone:ININTEGERRANGE0TO16#7FF#;--11位2進制數(shù)SpkS:OUTSTD_LOGIC);ENDCOMPONENT;SIGNALTone:INTEGERRANGESIGNALToneIndex:INTEGERBEGIN--安裝U1,U2,U3u1:NoteTabsPORTMAP(clk=>CLK8HZ,ToneIndex=>ToneIndex);u2:ToneTabaPORTMAP(Index=>ToneIndex,Tone=>Tone,CODE=>CODE1,HIGH=>HIGH1);u3:SpeakeraPORTMAP(clk=>CLK12MHZ,Tone=>Tone,SpkS=>SPKOUT);END;頂層模塊仿真波形如下:圖3.8頂層模塊仿真波形圖3.9頂層元件符號目錄摘要 IAbstract II第1章引言 11.1基本要求 11.2原理描述 1第2章樂曲硬件演奏電路的層次化設(shè)計方案 32.1音樂節(jié)拍發(fā)生器NoteTabs 32.2音符譯碼電路ToneTaba模塊 92.3數(shù)控分頻模塊(Speakera)設(shè)計 112.4樂曲硬件演奏電路的頂層設(shè)計和仿真 14結(jié)論 16致謝 17參考文獻 18附錄 19PAGEPAGE32引言基本要求利用FPGA,設(shè)計一個樂曲硬件演奏電路。演奏時可選擇鍵盤輸入樂曲或者已存入的樂曲,并配以一個小揚聲器。樂曲的12平均率規(guī)定:每2個八度音(如簡譜中的中音1與高音1)之間的頻率相差1倍。在2個八度音之間,又可分為12個半音,每2個半音的頻率比為12/2。另外,音符A(簡譜中的低音6)的頻率為440Hz,音符B到C之間、E到F之間為半音,其余為全音。由此可以計算出簡譜中從低音l至高音1之間每個音符的頻率。設(shè)計音符查找表電路模塊,時鐘模塊,數(shù)控分頻器模塊,音樂節(jié)拍產(chǎn)生模塊電路。任意選擇歌曲進行設(shè)計。原理描述產(chǎn)生音樂的兩個因素是音樂頻率和音樂的持續(xù)時間,以純硬件完成演奏電路比利用微處理器來實現(xiàn)樂曲演奏要復(fù)雜的多,如果不憑借EDA工具和硬件描述語言,憑借傳統(tǒng)的數(shù)字邏輯技術(shù),即使最簡單的演奏電路也難以實現(xiàn)。樂曲硬件演奏電路系統(tǒng)主要有數(shù)控分頻器和樂曲存儲模塊組成。數(shù)控分頻器對FPGA的基準(zhǔn)頻率進行分頻,得到與各個音階對應(yīng)的頻率輸出。樂曲存儲模塊產(chǎn)生節(jié)拍控制和音階選擇信號,即在此模塊中可存放一個樂曲曲譜真值表,由一個計數(shù)器來控制此真值表的輸出,而由計數(shù)器的計數(shù)時鐘信號作為樂曲節(jié)拍控制信號。樂曲演奏電路的結(jié)構(gòu)框圖如下:模式選擇時鐘電路數(shù)控分頻器電路模式選擇時鐘電路數(shù)控分頻器電路基準(zhǔn)時鐘音符查表電路音樂節(jié)拍發(fā)生電路手動輸入圖1.1樂曲演奏電路的結(jié)構(gòu)框圖樂曲硬件演奏電路的層次化設(shè)計方案音樂節(jié)拍發(fā)生器NoteTabs該模塊將利用FPGA的片內(nèi)POM存放樂曲簡譜真值表,該計數(shù)器的計數(shù)頻率為4HZ,即每一個數(shù)值的停留時間為0.25S,隨著NoteTabs中計數(shù)器按4HZ的時鐘頻率做加法計數(shù)時,樂符數(shù)據(jù)叫輸向音符譯碼電路ToneTaba,所以所存的樂曲就自然的演奏起來。其VHDL源程序如下:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYNoteTabsISPORT(clk:INSTD_LOGIC;ToneIndex:OUTEND;ARCHITECTUREoneOFNoteTabsISSIGNALCounter:INTEGERBEGINCNT8:PROCESS(clk)BEGINIFCounter=138THENCounter<=0;ELSIF(clk'EVENTANDclk='1')THENCounter<=Counter+1;ENDIF;ENDPROCESS;Search:PROCESS(Counter)BEGINCASECounterIS--譯碼器,查歌曲的樂譜表,查表結(jié)果為音調(diào)表的索引值WHEN00=>ToneIndex<=3;WHEN01=>ToneIndex<=3;WHEN02=>ToneIndex<=3;WHEN03=>ToneIndex<=3;WHEN04=>ToneIndex<=5;WHEN05=>ToneIndex<=5;WHEN06=>ToneIndex<=5;WHEN07=>ToneIndex<=6;WHEN08=>ToneIndex<=8;WHEN09=>ToneIndex<=8;WHEN10=>ToneIndex<=8;WHEN11=>ToneIndex<=9;WHEN12=>ToneIndex<=6;WHEN13=>ToneIndex<=8;WHEN14=>ToneIndex<=5;WHEN15=>ToneIndex<=5;WHEN16=>ToneIndex<=12;WHEN17=>ToneIndex<=12;WHEN18=>ToneIndex<=12;WHEN19=>ToneIndex<=15;WHEN20=>ToneIndex<=13;WHEN21=>ToneIndex<=12;WHEN22=>ToneIndex<=10;WHEN23=>ToneIndex<=12;WHEN24=>ToneIndex<=9;WHEN25=>ToneIndex<=9;WHEN26=>ToneIndex<=9;WHEN27=>ToneIndex<=9;WHEN28=>ToneIndex<=9;WHEN29=>ToneIndex<=9;WHEN30=>ToneIndex<=9;WHEN31=>ToneIndex<=0;WHEN32=>ToneIndex<=9;WHEN33=>ToneIndex<=9;WHEN34=>ToneIndex<=9;WHEN35=>ToneIndex<=10;WHEN36=>ToneIndex<=7;WHEN37=>ToneIndex<=7;WHEN38=>ToneIndex<=6;WHEN39=>ToneIndex<=6WHEN40=>ToneIndex<=5;WHEN41=>ToneIndex<=5;WHEN42=>ToneIndex<=5;WHEN43=>ToneIndex<=6;WHEN44=>ToneIndex<=8;WHEN45=>ToneIndex<=8;WHEN46=>ToneIndex<=9;WHEN47=>ToneIndex<=9;WHEN48=>ToneIndex<=3;WHEN49=>ToneIndex<=3;WHEN50=>ToneIndex<=8;WHEN51=>ToneIndex<=8;WHEN52=>ToneIndex<=6;WHEN53=>ToneIndex<=5;WHEN54=>ToneIndex<=6;WHEN55=>ToneIndex<=8;WHEN56=>ToneIndex<=5;WHEN57=>ToneIndex<=5;WHEN58=>ToneIndex<=5;WHEN59=>ToneIndex<=5;WHEN60=>ToneIndex<=5;WHEN61=>ToneIndex<=5;WHEN62=>ToneIndex<=5;WHEN63=>ToneIndex<=5;WHEN64=>ToneIndex<=10;WHEN65=>ToneIndex<=10;WHEN66=>ToneIndex<=10;WHEN67=>ToneIndex<=12;WHEN68=>ToneIndex<=7;WHEN69=>ToneIndex<=7;WHEN70=>ToneIndex<=9;WHEN71=>ToneIndex<=9;WHEN72=>ToneIndex<=6;WHEN73=>ToneIndex<=8;WHEN74=>ToneIndex<=5;WHEN75=>ToneIndex<=5;WHEN76=>ToneIndex<=5;WHEN77=>ToneIndex<=5;WHEN78=>ToneIndex<=5;WHEN79=>ToneIndex<=5;WHEN80=>ToneIndex<=3;WHEN81=>ToneIndex<=5;WHEN82=>ToneIndex<=3;WHEN83=>ToneIndex<=3;WHEN84=>ToneIndex<=5;WHEN85=>ToneIndex<=6;WHEN86=>ToneIndex<=7;WHEN87=>ToneIndex<=9;WHEN88=>ToneIndex<=6;WHEN89=>ToneIndex<=6;WHEN90=>ToneIndex<=6;WHEN91=>ToneIndex<=6;WHEN92=>ToneIndex<=6;WHEN93=>ToneIndex<=6;WHEN94=>ToneIndex<=5;WHEN95=>ToneIndex<=6;WHEN96=>ToneIndex<=8;WHEN97=>ToneIndex<=8;WHEN98=>ToneIndex<=8;WHEN99=>ToneIndex<=9;WHEN100=>ToneIndex<=12;WHEN101=>ToneIndex<=12;WHEN102=>ToneIndex<=12;WHEN103=>ToneIndex<=10;WHEN104=>ToneIndex<=9;WHEN105=>ToneIndex<=9;WHEN106=>ToneIndex<=10;WHEN107=>ToneIndex<=9;WHEN108=>ToneIndex<=8;WHEN109=>ToneIndex<=8;WHEN110=>ToneIndex<=6;WHEN111=>ToneIndex<=5;WHEN112=>ToneIndex<=3;WHEN113=>ToneIndex<=3;WHEN114=>ToneIndex<=3;WHEN115=>ToneIndex<=3;WHEN116=>ToneIndex<=8;WHEN117=>ToneIndex<=8;WHEN118=>ToneIndex<=8;WHEN119=>ToneIndex<=8;WHEN120=>ToneIndex<=6;WHEN121=>ToneIndex<=8;WHEN122=>ToneIndex<=6;WHEN123=>ToneIndex<=5;WHEN124=>ToneIndex<=3;WHEN125=>ToneIndex<=5;WHEN126=>ToneIndex<=6;WHEN127=>ToneIndex<=8;WHEN128=>ToneIndex<=5;WHEN129=>ToneIndex<=5;WHEN130=>ToneIndex<=5;WHEN131=>ToneIndex<=5;WHEN132=>ToneIndex<=5;WHEN133=>ToneIndex<=5;WHEN134=>ToneIndex<=5;WHEN135=>ToneIndex<=5;WHEN136=>ToneIndex<=0;WHEN137=>ToneIndex<=0;WHEN138=>ToneIndex<=0;WHENOTHERS=>NULL;ENDCASE;ENDPROCESS;END;圖2.1音樂節(jié)拍發(fā)生器元件符號圖仿真圖如下:圖2.2音樂節(jié)拍發(fā)生器仿真輸出波形音符譯碼電路ToneTaba模塊音符譯碼電路即音調(diào)發(fā)生器實際上是一個查表電路,放置21個音樂簡譜對應(yīng)的頻率表,根據(jù)該表為數(shù)控分頻模塊提供所發(fā)音符頻率的初始值,而此數(shù)控分頻模塊入口的停留時間即為此音符的節(jié)拍數(shù),以VHDL程序中僅設(shè)置了“梁?!睒非恳舴鶎?yīng)的音符頻率的初始值。其VHDL源程序如下:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYToneTabaISPORT(Index:ININTEGERCODE:OUTHIGH:OUTSTD_LOGIC;Tone:OUTINTEGEREND;ARCHITECTUREoneOFToneTabaISBEGINSearch:PROCESS(Index)BEGINCASEIndexIS--譯碼電路,查表方式,控制音調(diào)的預(yù)置數(shù)WHEN0=>Tone<=2047;CODE<=0;HIGH<='0';WHEN1=>Tone<=773;CODE<=1;HIGH<='0';WHEN2=>Tone<=912;CODE<=2;HIGH<='0';WHEN3=>Tone<=1036;CODE<=3;HIGH<='0';WHEN5=>Tone<=1197;CODE<=5;HIGH<='0';WHEN6=>Tone<=1290;CODE<=6;HIGH<='0';WHEN7=>Tone<=1372;CODE<=7;HIGH<='0';WHEN8=>Tone<=1410;CODE<=1;HIGH<='1';WHEN9=>Tone<=1480;CODE<=2;HIGH<='1';WHEN10=>Tone<=1542;CODE<=3;HIGH<='1';WHEN12=>Tone<=1622;CODE<=5;HIGH<='1';WHEN13=>Tone<=1668;CODE<=6;HIGH<='1';WHEN15=>Tone<=1728;CODE<=1;HIGH<='1';WHENOTHERS=>NULL;ENDCASE;ENDPROCESS;END;在源程序中Index是音樂節(jié)拍發(fā)生器輸出的音符數(shù)據(jù);TONE是為數(shù)控分頻模塊提供的音符頻率的初始值,為方便測試,特設(shè)置了一個音名代碼顯示輸出CODE和音高指示信號HUGH可以通過一個數(shù)碼管或LED來顯示樂曲演奏時對應(yīng)的音符和高音名。CODE輸出對應(yīng)該音階簡譜的顯示數(shù)碼1,HIGH輸出為高電平,指示音階為高,HIGH輸出為低電平時則指示音階為中音。圖2.3音符譯碼器元件符號圖仿真圖如下:圖2.4音符譯碼器仿真輸出波形2.3數(shù)控分頻模塊(Speakera)設(shè)計數(shù)控分頻器對FPGA的基準(zhǔn)頻率進行分頻,得到與各個音階對應(yīng)的頻率輸出。數(shù)控分頻模塊是11位的加法計數(shù)器構(gòu)成。當(dāng)計數(shù)器計滿是,產(chǎn)生一個進位信號FULLSPKS,該信號就是用作發(fā)音的頻率信號。在即使器的預(yù)置端給定不同的初始值,其輸出將產(chǎn)生不同的頻率信號,頻率信號初值Tone就是前級音符譯碼電路的輸出。低音時,Ton

溫馨提示

  • 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)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論