EDA課設(shè)-簡(jiǎn)易電子琴_第1頁(yè)
EDA課設(shè)-簡(jiǎn)易電子琴_第2頁(yè)
EDA課設(shè)-簡(jiǎn)易電子琴_第3頁(yè)
EDA課設(shè)-簡(jiǎn)易電子琴_第4頁(yè)
EDA課設(shè)-簡(jiǎn)易電子琴_第5頁(yè)
已閱讀5頁(yè),還剩15頁(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)介

0 2 2 2 5 5 6 8 9 9 9 9 1EDA技術(shù)是以計(jì)算機(jī)為工具,設(shè)計(jì)者在EDA軟件平臺(tái)上,用硬件描述語(yǔ)言VHDL完成設(shè)提高了電路設(shè)計(jì)的效率和可操作性,減輕了設(shè)計(jì)者的勞動(dòng)強(qiáng)度。利用所學(xué)的EDA設(shè)計(jì)方法設(shè)計(jì)簡(jiǎn)易電子琴,熟練使用QUARTUSⅡ應(yīng)用軟件,進(jìn)一步學(xué)習(xí)使用VHDL語(yǔ)言、原理圖等EDA設(shè)計(jì)方法進(jìn)行綜合題目的方法。①設(shè)計(jì)一個(gè)簡(jiǎn)易的八音符電子琴,它可通過(guò)按鍵輸入來(lái)控制音響。②演奏時(shí)可以選擇是手動(dòng)演奏(由鍵盤輸入)還是自動(dòng)演奏已存入的樂(lè)曲。③能夠自動(dòng)演奏多首樂(lè)曲,且每首樂(lè)曲可重復(fù)演奏。④它由樂(lè)曲自動(dòng)演奏模塊、音調(diào)發(fā)生模塊和數(shù)控分頻模塊三部分組成。2本課程設(shè)計(jì)目的在于靈活運(yùn)用EDA技術(shù)編程實(shí)現(xiàn)一個(gè)簡(jiǎn)易電子琴的樂(lè)曲演奏,它要求階的按鍵時(shí),能夠發(fā)出對(duì)應(yīng)頻率的聲音。故系統(tǒng)可分為樂(lè)曲自動(dòng)演奏模塊(AUTO)、音調(diào)發(fā)生模塊(TONE)和數(shù)控分頻模塊(FENPIN)三部分。能,但是每個(gè)模塊又是緊密關(guān)聯(lián)的,前一個(gè)模塊的輸出很可能是后一模塊的輸入。如AUTO模塊的音符信號(hào)輸出就是TONE模塊的音符信號(hào)輸入。另外,時(shí)鐘脈沖信號(hào)在本課程設(shè)計(jì)中調(diào)發(fā)生模塊和數(shù)控分頻模塊三部分組成。.樂(lè)曲自動(dòng)演奏模塊此模塊的8位二進(jìn)制數(shù)作為發(fā)聲控制輸入,從而自動(dòng)演奏樂(lè)曲。當(dāng)確定了時(shí)鐘信號(hào)輸出的值后,在第二個(gè)PROCESS中就可以由它控制8位發(fā)聲控制輸COUNT0、AUTO和鍵盤輸入信號(hào)值INDEX2將8位的二進(jìn)制數(shù)轉(zhuǎn)化為音符信號(hào)的輸出,達(dá)到自3.音調(diào)發(fā)生模塊音調(diào)發(fā)生模塊的作用是產(chǎn)生音階的分頻預(yù)置值。當(dāng)8位發(fā)聲控制輸入信號(hào)中的某一位控制數(shù)控分頻模塊進(jìn)行分頻,由此得到每個(gè)音階對(duì)應(yīng)的頻率。該模塊的唯一輸入信號(hào)INDEX對(duì)應(yīng)就是自動(dòng)模塊中最后的輸出INDEX0,音符顯示信號(hào)CODE,高低音顯示信號(hào)HIGH和音符分頻系數(shù)都是根據(jù)音符輸入確定的。比如我們自定義輸出不同頻率的正弦波,此模塊就是將二進(jìn)制發(fā)聲信號(hào)轉(zhuǎn)化為對(duì)應(yīng)的頻率。.數(shù)控分頻模塊數(shù)控分頻模塊的作用是對(duì)時(shí)基脈沖進(jìn)行分頻,得到與0、1、2、3、4、5、6、7八個(gè)音一個(gè)工作進(jìn)程的設(shè)置。第二個(gè)PROCESS是此模塊的核心,即由時(shí)基脈沖值轉(zhuǎn)化為音符的頻當(dāng)前一個(gè)PROCESS中的FULLSPKS輸出為1時(shí),揚(yáng)聲器才有輸出,再根據(jù)計(jì)數(shù)器取值來(lái)確定4.頂層模塊頂層模塊是整個(gè)電子琴設(shè)計(jì)的核心,也是VHDL程序的主程序,前面3個(gè)源程序都是作為子程序分別實(shí)現(xiàn)電子琴的某一功能,而DIANZIQIN模塊則通過(guò)調(diào)用子程序最終實(shí)現(xiàn)樂(lè)曲演奏的目的,奏出美妙的樂(lè)曲。利用VHDL語(yǔ)言COMPONENT將三個(gè)模塊組合起來(lái),其中3個(gè)模塊和DIANZIQIN模塊的輸入輸出是一一對(duì)應(yīng)的,比如AUTO對(duì)應(yīng)HANDTOAUTO,TONE0對(duì)應(yīng)該圖描述的是DIANZIQIN模塊輸入輸出的變量表示,整個(gè)系統(tǒng)的整體組裝設(shè)計(jì)原理圖就是這4幅編輯圖按輸入輸出關(guān)系順序連接而成的。5USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_ARITH.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYAUTOISPORT(CLK:INSTD_LOGIC;AUTO:INSTD_LOGIC;CLK2:BUFFERSTD_LOGIC;INDEX2:INSTD_LOGIC_VECTOR(7DOWNTO0);INDEX0:OUTSTD_LOGIC_VECTOR(7DOWNTO0));ENDAUTO;ARCHITECTUREBEHAVIORALOFAUTOIS--系統(tǒng)時(shí)鐘信號(hào)--鍵盤輸入/自動(dòng)演奏--時(shí)鐘輸出--鍵盤輸入信號(hào)--音符信號(hào)輸出SIGNALCOUNT0:INTEGERRANGE0TO31;--定義信號(hào)計(jì)數(shù)器,有32個(gè)信號(hào)元素BEGINPULSE0:PROCESS(CLK,AUTO)VARIABLECOUNT:INTEGERRANGE0TO8;BEGINIFAUTO='1'THENCOUNT:=0;CLK2<='0';ELSIF(CLK'EVENTANDCLK='1')THENCOUNT:=COUNT+1;CLK2<='1';ELSIFCOUNT=8THENCLK2<='0';COUNT:=0;ENDPROCESS;--PULSE0工作進(jìn)程開始--定義變量計(jì)數(shù)器,從0到8--鍵盤輸入為1--輸入的時(shí)鐘信號(hào)為其他值MUSIC:PROCESS(CLK2)--MUSIC工作進(jìn)程開始BEGINIF(CLK2'EVENTANDCLK2='1')THEN IF(COUNT0=31)THEN 計(jì)數(shù)器值為31COUNT0<=0; 計(jì)數(shù)器清0ELSECOUNT0<=COUNT0+1;ENDPROCESS;COM1:PROCESS(COUNT0,AUTO,INDEX2)BEGINIFAUTO='0'THEN 鍵盤輸入為0CASECOUNT0IS--由計(jì)數(shù)器從0到31的取值判斷音符信號(hào)的8位二進(jìn)制數(shù)WHEN0=>INDEX0<="00000100";WHEN1=>INDEX0<="00000100";WHEN2=>INDEX0<="00000100";WHEN3=>INDEX0<="00000100";WHEN4=>INDEX0<="00010000";WHEN5=>INDEX0<="00010000";WHEN6=>INDEX0<="00010000";WHEN7=>INDEX0<="00100000";WHEN8=>INDEX0<="10000000";WHEN9=>INDEX0<="10000000";WHEN10=>INDEX0<="10000000";WHEN11=>INDEX0<="00000100";6WHEN12=>INDEX0<="00000010";WHEN13=>INDEX0<="00000010";WHEN14=>INDEX0<="00000001";WHEN15=>INDEX0<="00000001";WHEN16=>INDEX0<="00010000";WHEN17=>INDEX0<="00010000";WHEN18=>INDEX0<="00001000";WHEN19=>INDEX0<="00001000";WHEN20=>INDEX0<="00001000";WHEN21=>INDEX0<="00000100";WHEN22=>INDEX0<="00000010";WHEN23=>INDEX0<="00000010";WHEN24=>INDEX0<="00010000";WHEN25=>INDEX0<="00010000";WHEN26=>INDEX0<="00001000";WHEN27=>INDEX0<="00001000";WHEN28=>INDEX0<="00000100";WHEN29=>INDEX0<="00000100";WHEN30=>INDEX0<="00000010";WHEN31=>INDEX0<="00000010";WHENOTHERS=>NULL;ENDCASE;ELSEINDEX0<=INDEX2;ENDPROCESS;ENDBEHAVIORAL;--將音符信號(hào)0的值賦給音符信號(hào)2USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_ARITH.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYTONEISPORT(INDEX:INSTD_LOGIC_VECTOR(7DOWNTO0);CODE:OUTSTD_LOGIC_VECTOR(6DOWNTO0);HIGH:OUTSTD_LOGIC;TONE0:OUTINTEGERRANGE0TO2047);ENDTONE;ARCHITECTUREARTOFTONEISBEGINSEARCH:PROCESS(INDEX)BEGIN--音符輸入信號(hào)--音符顯示信號(hào)--高低音顯示信號(hào)--音符的分頻系數(shù)WHEN"00000001"=>TONE0<=773;CODE<="1001111";HIGH<='1';WHEN"00000010"=>TONE0<=912;CODE<="0010010";HIGH<='1';WHEN"00000100"=>TONE0<=1036;CODE<="0000110";HIGH<='1';WHEN"00001000"=>TONE0<=1116;CODE<="1001100";HIGH<='1';WHEN"00010000"=>TONE0<=1197;CODE<="0100100";HIGH<='1';WHEN"00100000"=>TONE0<=1290;CODE<="0100000";HIGH<='0';WHEN"01000000"=>TONE0<=1372;CODE<="0001111";HIGH<='0';WHEN"10000000"=>TONE0<=1410;CODE<="0000000";HIGH<='0';WHENOTHERS=>TONE0<=2047;CODE<="0000001";HIGH<='0';ENDCASE;ENDPROCESS;ENDART;7USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_ARITH.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYFENPINISPORT(CLK1:INSTD_LOGIC;--系統(tǒng)時(shí)鐘信號(hào)TONE1:ININTEGERRANGE0TO2047;--音符分頻SPKS:OUTSTD_LOGIC);--驅(qū)動(dòng)揚(yáng)聲器的音頻信號(hào)ENDENTITYFENPIN;ARCHITECTUREARTOFFENPINISSIGNALPRECLK:STD_LOGIC;--定義時(shí)基脈沖信號(hào)SIGNALFULLSPKS:STD_LOGIC;BEGINPROCESS(CLK1)VARIABLECOUNT:INTEGERRANGE0TO8:=0; BEGINIF(CLK1'EVENTANDCLK1='1')THEN COUNT:=COUNT+1; 判斷計(jì)數(shù)器取值為1PRECLK<='1';ELSIFCOUNT=4THEN--若計(jì)數(shù)器計(jì)4PRECLK<='0';COUNT:=0;--時(shí)基脈沖為0,計(jì)數(shù)器清零ELSEENDPROCESS;PROCESS(PRECLK,TONE1)BEGINIF(PRECLK'EVENTANDPRECLK='1')THEN PRECLK脈沖上升沿觸發(fā)IFCOUNT11<TONE1THEN 若計(jì)數(shù)器11值小于音符信號(hào)1COUNT11:=COUNT11+1;FULLSPKS<='1';--計(jì)數(shù)器加1,音頻信號(hào)為1ELSECOUNT11:=0;FULLSPKS<='0';ENDPROCESS;PROCESS(FULLSPKS) 音頻信號(hào)輸出進(jìn)程開始 定義變量計(jì)數(shù)器2,初值為0BEGINIF(FULLSPKS'EVENTANDFULLSPKS='1')THENcount2:=1;IFCOUNT2=1THENSPKS<='1';ELSESPKS<='0';ENDPROCESS;ENDART;8USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_ARITH.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYDIANZIQINISPORT(CLK32MHZ:INSTD_LOGIC;HANDTOAUTO:INSTD_LOGIC;CODE1:OUTSTD_LOGIC_VECTOR(6DOWNTO0);INDEX1:INSTD_LOGIC_VECTOR(7DOWNTO0);HIGH1:OUTSTD_LOGIC;SPKOUT:OUTSTD_LOGIC);END;ARCHITECTUREARTOFDIANZIQINISCOMPONENTAUTOPORT(CLK:INSTD_LOGIC;AUTO:INSTD_LOGIC;INDEX2:INSTD_LOGIC_VECTOR(7DOWNTO0);INDEX0:OUTSTD_LOGIC_VECTOR(7DOWNTO0));ENDCOMPONENT;COMPONENTTONE--系統(tǒng)時(shí)鐘信號(hào)--鍵盤輸入/自動(dòng)演奏信號(hào)--音符顯示信號(hào)--鍵盤輸入信號(hào)--高低音節(jié)信號(hào)--音頻信號(hào)--引用AUTO元件--輸入自動(dòng)演奏信號(hào)--輸入8位控制信號(hào)--輸出8位的音符--引用TONE元件PORT(INDEX:INSTD_LOGIC_VECTOR(7DOWNTO0);CODE:OUTSTD_LOGIC_VECTOR(6DOWNTO0);HIGH:OUTSTD_LOGIC;TONE0:OUTINTEGERRANGE0TO2047);ENDCOMPONENT;COMPONENTFENPIN--引用FENPIN元件PORT(CLK1:INSTD_LOGIC;TONE1:ININTEGERRANGESPKS:OUTSTD_LOGIC);ENDCOMPONENT;SIGNALTONE2:INTEGERRANGE0TO2047;--定義主程序音調(diào)頻率信號(hào)SIGNALINDX:STD_LOGIC

溫馨提示

  • 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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論