資源描述:
《eda 電子琴課程設(shè)計(jì)》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、設(shè)計(jì)者:張目(12007243818)——可編程邏輯器件與VHDL課程設(shè)計(jì)基于VHDL原理圖及文本輸入法的簡單電子琴電路的設(shè)計(jì)1.1課程設(shè)計(jì)目的本課程設(shè)計(jì)主要是基于VHDL文本輸入法設(shè)計(jì)樂曲演奏電路,該系統(tǒng)基于計(jì)算機(jī)中時(shí)鐘分頻器的原理,采用自頂向下的設(shè)計(jì)方法來實(shí)現(xiàn),通過按鍵輸入來控制音響或者自動(dòng)演奏已存入的歌曲。系統(tǒng)由樂曲自動(dòng)演奏模塊、音調(diào)發(fā)生模塊和數(shù)控分頻模塊三個(gè)部分組成。系統(tǒng)實(shí)現(xiàn)是用硬件描述語言VHDL按模塊化方式進(jìn)行設(shè)計(jì),然后進(jìn)行編程、時(shí)序仿真、電路功能驗(yàn)證,奏出美妙的樂曲(當(dāng)然由于條件限制,暫不進(jìn)行功能驗(yàn)證,只進(jìn)行編程和時(shí)序仿真)。該設(shè)計(jì)最重要的一點(diǎn)就是通過按鍵控制不同的音
2、調(diào)發(fā)生,每一個(gè)音調(diào)對應(yīng)不同的頻率,從而輸出對應(yīng)頻率的聲音。1.2課程設(shè)計(jì)內(nèi)容(1)設(shè)計(jì)一個(gè)簡易的八音符電子琴,它可通過按鍵輸入來控制音響。(2)系統(tǒng)演奏時(shí)可以選擇是手動(dòng)演奏(由鍵盤輸入)還是自動(dòng)演奏已存入的樂曲。(3)能夠自動(dòng)演奏多首樂曲,且樂曲可重復(fù)演奏。1.3課程設(shè)計(jì)原理本課程設(shè)計(jì)目的在于靈活運(yùn)用EDA技術(shù)編程實(shí)現(xiàn)一個(gè)簡易電子琴的樂曲演奏,它要求在實(shí)驗(yàn)箱上構(gòu)造一個(gè)電子琴電路,不同的音階對應(yīng)不同頻率的正弦波。按下每個(gè)代表不同音階的按鍵時(shí),能夠發(fā)出對應(yīng)頻率的聲音。故系統(tǒng)可分為樂曲自動(dòng)演奏模塊(AUTO)、音調(diào)發(fā)生模塊(TONE)和數(shù)控分頻模塊(FENPIN)三部分。系統(tǒng)的整體組裝設(shè)
3、計(jì)原理圖如圖1-1所示。設(shè)計(jì)者:張目(12007243818)——可編程邏輯器件與VHDL課程設(shè)計(jì)圖1-1系統(tǒng)的整體組裝設(shè)計(jì)原理圖由于設(shè)計(jì)分模塊組成,每個(gè)單獨(dú)的模塊都是一個(gè)完整的源程序,分別實(shí)現(xiàn)不同性質(zhì)的功能,但是每個(gè)模塊又是緊密關(guān)聯(lián)的,前一個(gè)模塊的輸出很可能是后一模塊的輸入。如AUTO模塊的音符信號輸出就是TONE模塊的音符信號輸入。另外,時(shí)鐘脈沖信號在本課程設(shè)計(jì)中用的最多,用處也最大,一般情況下時(shí)鐘信號處上升沿有效,判斷和控制各個(gè)計(jì)數(shù)器計(jì)數(shù)多少。2簡易電子琴的設(shè)計(jì)過程根據(jù)系統(tǒng)設(shè)計(jì)要求,系統(tǒng)該系統(tǒng)基于計(jì)算機(jī)中時(shí)鐘分頻器的原理,設(shè)計(jì)采用自頂向下的設(shè)計(jì)方法,通過按鍵輸入來控制音響或者
4、自動(dòng)演奏已存入的歌曲。它由樂曲自動(dòng)演奏模塊、音調(diào)發(fā)生模塊和數(shù)控分頻模塊三部分組成。2.1樂曲自動(dòng)演奏模塊樂曲自動(dòng)演奏模塊的作用是產(chǎn)生8位發(fā)生控制輸入信號。當(dāng)進(jìn)行自動(dòng)演奏時(shí),由存儲(chǔ)在此模塊的8位二進(jìn)制數(shù)作為發(fā)聲控制輸入,從而自動(dòng)演奏樂曲。該模塊的VHDL源程序主要由3個(gè)工作進(jìn)程組成,分別為PULSE0,MUSIC和COM1。PULSE0的作用是根據(jù)鍵盤輸入(自動(dòng)演奏)的值(0或1)來判斷計(jì)數(shù)器COUNT以及脈沖CLK2的輸出值。部分源程序如下:PULSE0:PROCESS(CLK,AUTO)--工作進(jìn)程開始VARIABLECOUNT:INTEGERRANGE0TO8;--定義計(jì)數(shù)器變
5、量,值從0到8IFAUTO='1'THEN--鍵盤輸入為1COUNT:=0;CLK2<='0';--計(jì)數(shù)器值指0,時(shí)鐘信號為0ELSIF(CLK'EVENTANDCLK='1')THEN--時(shí)鐘輸入信號為1COUNT:=COUNT+1;--計(jì)數(shù)器加1當(dāng)確定了時(shí)鐘信號輸出的值后,在第二個(gè)PROCESS中就可以由它控制8位發(fā)聲控制輸入信號了。即CLK2的值為0時(shí),COUNT0為1。最后的COM1便是由前兩個(gè)PROCESS所確定的COUNT0、AUTO和鍵盤輸入信號值INDEX2將8位的二進(jìn)制數(shù)轉(zhuǎn)化為音符信號的輸出,達(dá)到自動(dòng)演奏的目的。部分源程序如下:IFAUTO='0'THENCASE
6、COUNT0ISWHEN0=>INDEX0<="00000100";--3設(shè)計(jì)者:張目(12007243818)——可編程邏輯器件與VHDL課程設(shè)計(jì)WHEN4=>INDEX0<="00010000";--5該模塊最主要的用途就是將輸入二進(jìn)制數(shù)轉(zhuǎn)化為發(fā)聲控制輸入,是產(chǎn)生音符的重要步驟,AUTO模塊的源程序符號編輯圖如圖3-1。圖3-1AUTO模塊的符號編輯圖2.1.1樂曲演奏模塊文本程序:--程序名稱:AUTO.VHD--程序功能:采用VHDL語言編程產(chǎn)生8位發(fā)聲控制輸入信號。--電子班張目(12007243818)--LIBRARYIEEE;USEIEEE.STD_LOGIC_11
7、64.ALL;USEIEEE.STD_LOGIC_ARITH.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYAUTOISPORT(CLK:INSTD_LOGIC;--系統(tǒng)時(shí)鐘信號AUTO:INSTD_LOGIC;--鍵盤輸入/自動(dòng)演奏CLK2:BUFFERSTD_LOGIC;--時(shí)鐘輸出INDEX2:INSTD_LOGIC_VECTOR(7DOWNTO0);--鍵盤輸入信號INDEX0:OUTSTD_LOGIC_VECTOR(7DO