版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p><b> EDA課程設(shè)計</b></p><p> 具有自動樂曲演奏功能的電子琴</p><p><b> 一、 課程設(shè)計內(nèi)容</b></p><p> ?。?)設(shè)計一個簡易的八音符電子琴,它可通過按鍵輸入來控制音響。</p><p> (2)系統(tǒng)演奏時可以選擇是手動演奏(
2、由鍵盤輸入)還是自動演奏已存入的樂曲。</p><p> (3)能夠自動演奏多首樂曲,且樂曲可重復(fù)演奏。</p><p><b> 二、課程設(shè)計原理</b></p><p> 本課程設(shè)計目的在于靈活運(yùn)用EDA技術(shù)編程實現(xiàn)一個簡易電子琴的樂曲演奏,它要求在實驗箱上構(gòu)造一個電子琴電路,不同的音階對應(yīng)不同頻率的正弦波。按下每個代表不同音階的按鍵
3、時,能夠發(fā)出對應(yīng)頻率的聲音。故系統(tǒng)可分為樂曲自動演奏模塊(AUTO)、音調(diào)發(fā)生模塊(TONE)和數(shù)控分頻模塊(FENPIN)三部分。</p><p> 三、簡易電子琴的設(shè)計過程</p><p> 1.樂曲自動演奏模塊</p><p> 樂曲自動演奏模塊的作用是產(chǎn)生8位發(fā)生控制輸入信號。當(dāng)進(jìn)行自動演奏時,由存儲在此模塊的8位二進(jìn)制數(shù)作為發(fā)聲控制輸入,從而自動演奏
4、樂曲。</p><p> LIBRARY IEEE;</p><p> USE IEEE.STD_LOGIC_1164.ALL;</p><p> USE IEEE.STD_LOGIC_ARITH.ALL;</p><p> USE IEEE.STD_LOGIC_UNSIGNED.ALL;</p><p>
5、ENTITY AUTO IS</p><p> PORT(CLK: IN STD_LOGIC; </p><p> AUTO: IN STD_LOGIC; </p><p> CLK2: BUFFER STD_LOGIC; <
6、;/p><p> INDEX2: IN STD_LOGIC_VECTOR(7 DOWNTO 0); </p><p> INDEX0: OUT STD_LOGIC_VECTOR(7 DOWNTO 0)); </p><p><b> END AUTO;</b></p><p> ARCHITECTURE BEHA
7、VIORAL OF AUTO IS</p><p> SIGNAL COUNT0:INTEGER RANGE 0 TO 31; </p><p><b> BEGIN</b></p><p> PULSE0:PROCESS(CLK,AUTO) </p><p> VARIABLE
8、 COUNT:INTEGER RANGE 0 TO 8; </p><p><b> BEGIN</b></p><p> IF AUTO='1'THEN </p><p> COUNT:=0;CLK2<='0'; &l
9、t;/p><p> ELSIF(CLK'EVENT AND CLK='1')THEN </p><p> COUNT:=COUNT+1; </p><p> IF COUNT=4 THEN </p><p> CLK2<='1'
10、;;</p><p> ELSIF COUNT=8 THEN</p><p> CLK2<='0';COUNT:=0;</p><p><b> END IF;</b></p><p><b> END IF;</b></p><p> END
11、 PROCESS;</p><p> MUSIC:PROCESS(CLK2) </p><p><b> BEGIN</b></p><p> IF(CLK2'EVENT AND CLK2='1')THEN </p><p> IF(CO
12、UNT0=31)THEN </p><p> COUNT0<=0; </p><p><b> ELSE</b></p><p> COUNT0<=COUNT0+1;</p><p><b> END IF;&
13、lt;/b></p><p><b> END IF;</b></p><p> END PROCESS;</p><p> COM1:PROCESS(COUNT0,AUTO,INDEX2)</p><p><b> BEGIN</b></p><p> IF
14、 AUTO='0'THEN </p><p> CASE COUNT0 IS </p><p> WHEN 0=>INDEX0<="00000100"; --3</p><p> WHEN 1=>INDEX0<="0000
15、0100"; --3</p><p> WHEN 2=>INDEX0<="00000100"; --3</p><p> WHEN 3=>INDEX0<="00000100"; --3</p><p> WHEN 4=>INDEX0<="00010
16、000"; --5</p><p> WHEN 5=>INDEX0<="00010000"; --5</p><p> WHEN 6=>INDEX0<="00010000"; --5</p><p> WHEN 7=>INDEX0<="001000
17、00"; --6</p><p> WHEN 8=>INDEX0<="10000000"; --8</p><p> WHEN 9=>INDEX0<="10000000"; --8</p><p> WHEN 10=>INDEX0<="100000
18、00"; --8</p><p> WHEN 11=>INDEX0<="00000100"; --3</p><p> WHEN 12=>INDEX0<="00000010"; --2</p><p> WHEN 13=>INDEX0<="0000001
19、0"; --2</p><p> WHEN 14=>INDEX0<="00000001"; --1</p><p> WHEN 15=>INDEX0<="00000001"; --1</p><p> WHEN 16=>INDEX0<="00010000
20、"; --5</p><p> WHEN 17=>INDEX0<="00010000"; --5</p><p> WHEN 18=>INDEX0<="00001000"; --4</p><p> WHEN 19=>INDEX0<="00001000&
21、quot;; --4</p><p> WHEN 20=>INDEX0<="00001000"; --4</p><p> WHEN 21=>INDEX0<="00000100"; --3</p><p> WHEN 22=>INDEX0<="00000010&q
22、uot;; --2</p><p> WHEN 23=>INDEX0<="00000010"; --2</p><p> WHEN 24=>INDEX0<="00010000"; --5</p><p> WHEN 25=>INDEX0<="00010000&qu
23、ot;; --5</p><p> WHEN 26=>INDEX0<="00001000"; --4</p><p> WHEN 27=>INDEX0<="00001000"; --4</p><p> WHEN 28=>INDEX0<="00000100&quo
24、t;; --3</p><p> WHEN 29=>INDEX0<="00000100"; --3</p><p> WHEN 30=>INDEX0<="00000010"; --2</p><p> WHEN 31=>INDEX0<="00000010"
25、;; --2</p><p> WHEN OTHERS=>NULL;</p><p><b> END CASE;</b></p><p> ELSE INDEX0<=INDEX2; </p><p><b> END IF;</b>&
26、lt;/p><p> END PROCESS;</p><p> END BEHAVIORAL;</p><p><b> 2.音調(diào)發(fā)生模塊</b></p><p> 音調(diào)發(fā)生模塊的作用是產(chǎn)生音階的分頻預(yù)置值。當(dāng)8位發(fā)聲控制輸入信號中的某一位為高電平時,則對應(yīng)某一音階的數(shù)值將輸出,該數(shù)值即為該音階的分頻預(yù)置值,分頻預(yù)
27、置值控制數(shù)控分頻模塊進(jìn)行分頻,由此得到每個音階對應(yīng)的頻率。</p><p> LIBRARY IEEE;</p><p> USE IEEE.STD_LOGIC_1164.ALL;</p><p> USE IEEE.STD_LOGIC_ARITH.ALL;</p><p> USE IEEE.STD_LOGIC_UNSIGNED.A
28、LL;</p><p> ENTITY TONE IS</p><p> PORT(INDEX: IN STD_LOGIC_VECTOR(7 DOWNTO 0); </p><p> CODE: OUT STD_LOGIC_VECTOR(6 DOWNTO 0); </p><p> HIGH: OUT STD_LOGIC;
29、 </p><p> TONE0:OUT INTEGER RANGE 0 TO 2047); </p><p><b> END TONE;</b></p><p> ARCHITECTURE ART OF TONE IS</p><p><b> BE
30、GIN</b></p><p> SEARCH:PROCESS(INDEX) </p><p><b> BEGIN</b></p><p> CASE INDEX IS</p><p> WHEN"00000001"=>TONE0<=773;CODE<=&q
31、uot;1001111";HIGH<='1'; </p><p> WHEN"00000010"=>TONE0<=912;CODE<="0010010";HIGH<='1';</p><p> WHEN"00000100"=>TONE0<=1
32、036;CODE<="0000110";HIGH<='1';</p><p> WHEN"00001000"=>TONE0<=1116;CODE<="1001100";HIGH<='1';</p><p> WHEN"00010000"=&
33、gt;TONE0<=1197;CODE<="0100100";HIGH<='1';</p><p> WHEN"00100000"=>TONE0<=1290;CODE<="0100000";HIGH<='0';</p><p> WHEN"01
34、000000"=>TONE0<=1372;CODE<="0001111";HIGH<='0';</p><p> WHEN"10000000"=>TONE0<=1410;CODE<="0000000";HIGH<='0';</p><p>
35、 WHEN OTHERS =>TONE0<=2047;CODE<="0000001";HIGH<='0';</p><p><b> END CASE;</b></p><p> END PROCESS;</p><p><b> END ART;</b&g
36、t;</p><p><b> 3. 數(shù)控分頻模塊</b></p><p> 數(shù)控分頻模塊是對時基脈沖進(jìn)行分頻,得到與0、1、2、3、4、5、6、7八個音符相對應(yīng)的頻率。該模塊主要由4個工作進(jìn)程組成。首先,根據(jù)系統(tǒng)時鐘信號的輸入得到時基脈沖以及計數(shù)器的值,而時鐘信號在AUTO模塊中便已給出,兩者之間的設(shè)置關(guān)系類似于AUTO模塊中第一個工作進(jìn)程的設(shè)置。第二個PROC
37、ESS是此模塊的核心,即由時基脈沖值轉(zhuǎn)化為音符的頻率。</p><p> LIBRARY IEEE;</p><p> USE IEEE.STD_LOGIC_1164.ALL;</p><p> USE IEEE.STD_LOGIC_ARITH.ALL;</p><p> USE IEEE.STD_LOGIC_UNSIGNED.ALL
38、;</p><p> ENTITY FENPIN IS</p><p> PORT(CLK1: IN STD_LOGIC; </p><p> TONE1: IN INTEGER RANGE 0 TO 2047; </p><p> SPKS: OUT STD_LOGIC);
39、 </p><p> END ENTITY FENPIN; </p><p> ARCHITECTURE ART OF FENPIN IS</p><p> SIGNAL PRECLK:STD_LOGIC; </p><p> SIGNAL FULLSPKS:S
40、TD_LOGIC;</p><p><b> BEGIN</b></p><p> PROCESS(CLK1)</p><p> VARIABLE COUNT:INTEGER RANGE 0 TO 8:=0; </p><p><b> BEGIN</b></p>&
41、lt;p> IF(CLK1'EVENT AND CLK1='1')THEN </p><p> COUNT:=COUNT+1; </p><p> IF COUNT=2 THEN</p><p> PRECLK<='1';</p>
42、;<p> ELSIF COUNT=4 THEN </p><p> PRECLK<='0';</p><p> COUNT:=0; </p><p> ELSE </p><p><b> END IF;&l
43、t;/b></p><p><b> END IF;</b></p><p> END PROCESS;</p><p> PROCESS(PRECLK,TONE1)</p><p> VARIABLE COUNT11:INTEGER RANGE 0 TO 2047; </p><p&g
44、t;<b> BEGIN</b></p><p> IF(PRECLK'EVENT AND PRECLK='1')THEN </p><p> IF COUNT11<TONE1 THEN </p><p> COUNT11:=COUNT11+1;</
45、p><p> FULLSPKS<='1'; </p><p><b> ELSE</b></p><p> COUNT11:=0;</p><p> FULLSPKS<='0';</p><p><b> END IF;</b
46、></p><p><b> END IF;</b></p><p> END PROCESS;</p><p> PROCESS(FULLSPKS) </p><p> VARIABLE count2:integer range 0 to 1 :=0;
47、 </p><p><b> BEGIN</b></p><p> IF (FULLSPKS'EVENT AND FULLSPKS='1') THEN </p><p> if count2=1 then count2:= 0;</p><p><b> else</b&
48、gt;</p><p> count2:=1;</p><p><b> end if;</b></p><p> IF COUNT2=1 THEN</p><p> SPKS<='1';</p><p><b> ELSE</b></p
49、><p> SPKS<='0';</p><p><b> END IF;</b></p><p><b> END IF;</b></p><p> END PROCESS;</p><p><b> END ART;</b>
50、;</p><p><b> 4.頂層設(shè)計</b></p><p> 該模塊是整個電子琴設(shè)計的核心,也是VHDL程序的主程序,前面3個源程序都是作為子程序分別實現(xiàn)電子琴的某一功能,而該模塊則通過調(diào)用子程序最終實現(xiàn)樂曲演奏的目的,奏出美妙的樂曲。</p><p> LIBRARY IEEE; </p&
51、gt;<p> USE IEEE.STD_LOGIC_1164.ALL;</p><p> USE IEEE.STD_LOGIC_ARITH.ALL;</p><p> USE IEEE.STD_LOGIC_UNSIGNED.ALL;</p><p> ENTITY DIANZIQIN IS</p><p> PORT
52、(CLK32MHZ: IN STD_LOGIC; </p><p> HANDTOAUTO: IN STD_LOGIC; </p><p> CODE1: OUT STD_LOGIC_VECTOR(6 DOWNTO 0); </p><p> INDEX1: IN STD_LOGI
53、C_VECTOR(7 DOWNTO 0); </p><p> HIGH1: OUT STD_LOGIC; </p><p> SPKOUT: OUT STD_LOGIC); </p><p><b> END;</b></p>
54、<p> ARCHITECTURE ART OF DIANZIQIN IS</p><p> COMPONENT AUTO - </p><p> PORT(CLK: IN STD_LOGIC; </p><p> AUTO:
55、 IN STD_LOGIC; </p><p> INDEX2: IN STD_LOGIC_VECTOR(7 DOWNTO 0); </p><p> INDEX0: OUT STD_LOGIC_VECTOR(7 DOWNTO 0)); </p><p> END COMPONENT;<
56、/p><p> COMPONENT TONE </p><p> PORT(INDEX: IN STD_LOGIC_VECTOR(7 DOWNTO 0);</p><p> CODE: OUT STD_LOGIC_VECTOR(6 DOWNTO 0);</p><p&g
57、t; HIGH: OUT STD_LOGIC;</p><p> TONE0: OUT INTEGER RANGE 0 TO 2047);</p><p> END COMPONENT;</p><p> COMPONENT FENPIN </p><p> POR
58、T(CLK1: IN STD_LOGIC;</p><p> TONE1: IN INTEGER RANGE 0 TO 2047;</p><p> SPKS: OUT STD_LOGIC);</p><p> END COMPONENT;</p><p> SIGNAL TONE2:INTEGER RANGE 0 TO 2047
59、; </p><p> SIGNAL INDX:STD_LOGIC_VECTOR(7 DOWNTO 0); </p><p><b> BEGIN</b></p><p> U0:AUTO PORT MAP(CLK=>CLK32MHZ,INDEX2=>INDEX1,INDEX0=>INDX,AUTO
60、=>HANDTOAUTO); </p><p> U1:TONE PORT</p><p> MAP(INDEX=>INDX,TONE0=>TONE2,CODE=>CODE1,HIGH=>HIGH1); </p><p> U2:FENPI
溫馨提示
- 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- eda課程設(shè)計硬件電子琴及自動演奏
- eda課程設(shè)計---自動電子琴
- eda_電子琴課程設(shè)計--樂曲演奏電路的設(shè)計
- eda電子琴設(shè)計
- 電子琴課程設(shè)計---電子琴的設(shè)計與實現(xiàn)
- 電子琴課程設(shè)計
- 課程設(shè)計--電子琴
- 電子琴課程設(shè)計
- 電子琴的課程設(shè)計
- 電子琴的設(shè)計 課程設(shè)計
- eda課程設(shè)計報告書--八音電子琴
- 電子琴課程設(shè)計--基于單片機(jī)的電子琴設(shè)計
- 單片機(jī)電子琴課程設(shè)計--帶存儲播放功能的簡易電子琴設(shè)計
- 微機(jī)課程設(shè)計電子琴
- 接口課程設(shè)計電子琴
- 簡易電子琴課程設(shè)計
- 電子琴課程設(shè)計--基于單片機(jī)的電子琴設(shè)計
- 簡易電子琴課程設(shè)計
- 簡易電子琴課程設(shè)計
- 電子琴課程設(shè)計報告
評論
0/150
提交評論