梁祝程序參考模板_第1頁
梁祝程序參考模板_第2頁
梁祝程序參考模板_第3頁
梁祝程序參考模板_第4頁
梁祝程序參考模板_第5頁
已閱讀5頁,還剩9頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、 梁祝 電子琴程序LIBRARY IEEE; - 硬件演奏電路頂層設計USE IEEE.STD_LOGIC_1164.ALL;ENTITY Songer IS                                   PORT (

2、   CLK12MHZ : IN STD_LOGIC;             -音調頻率信號                       CLK8HZ   : IN STD_LOGIC;  

3、0;            -節拍頻率信號               CODE1  : OUT STD_LOGIC_VECTOR (3 DOWNTO 0);- 簡譜碼輸出顯示             

4、0; HIGH1  : OUT STD_LOGIC; -高8度指示             SPKOUT   : OUT STD_LOGIC );-聲音輸出 END;ARCHITECTURE one OF Songer IS   COMPONENT NoteTabs     PORT ( clk    : IN STD_LOGIC; &#

5、160;       ToneIndex : OUT STD_LOGIC_VECTOR (3 DOWNTO 0) );    END COMPONENT;    COMPONENT ToneTaba        PORT ( Index :  IN  STD_LOGIC_VECTOR (3 DOWNTO 0) ;      &

6、#160;        CODE  : OUT  STD_LOGIC_VECTOR (3 DOWNTO 0) ;               HIGH  : OUT STD_LOGIC;               T

7、one  : OUT  STD_LOGIC_VECTOR (10 DOWNTO 0) );    END COMPONENT;    COMPONENT Speakera        PORT  ( clk  : IN STD_LOGIC;                Ton

8、e : IN STD_LOGIC_VECTOR (10 DOWNTO 0);                SpkS : OUT STD_LOGIC  );    END COMPONENT;    SIGNAL Tone : STD_LOGIC_VECTOR (10 DOWNTO 0);    SIGNAL ToneIndex : STD_LOG

9、IC_VECTOR (3 DOWNTO 0); BEGINu1 : NoteTabs  PORT MAP (clk=>CLK8HZ, ToneIndex=>ToneIndex);u2 : ToneTaba PORT MAP (Index=>ToneIndex,Tone=>Tone,CODE=>CODE1,HIGH=>HIGH1);u3 : Speakera PORT MAP(clk=>CLK12MHZ,Tone=>Tone, SpkS=>SPKOUT );END;  1 / 14LIBRARY IEE

10、E;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY NoteTabs ISPORT ( clk    : IN STD_LOGIC;        ToneIndex : OUT STD_LOGIC_VECTOR (3 DOWNTO 0) );END;ARCHITECTURE one OF NoteTabs ISCOMPONENT MUSIC      

11、;          -音符數據ROM PORT(address : IN STD_LOGIC_VECTOR (7 DOWNTO 0);   inclock : IN STD_LOGIC ;         q : OUT STD_LOGIC_VECTOR (3 DOWNTO 0);END COMPONENT;    SIGNAL Counter :  ST

12、D_LOGIC_VECTOR (7 DOWNTO 0);BEGIN    CNT8 : PROCESS(clk, Counter)    BEGIN        IF Counter=138 THEN  Counter <= "00000000"        ELSIF (clk'EVENT AND clk = '1') THEN C

13、ounter <= Counter+1; END IF;    END PROCESS; u1 : MUSIC PORT MAP(address=>Counter , q=>ToneIndex, inclock=>clk); END;LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY Speakera ISPORT (   clk  : IN STD_LOGIC;  

14、;           Tone : IN STD_LOGIC_VECTOR (10 DOWNTO 0);             SpkS : OUT STD_LOGIC  );END Speakera;ARCHITECTURE one OF Speakera IS    SIGNAL PreCLK, FullSpkS : STD_LO

15、GIC;BEGIN DivideCLK : PROCESS(clk)        VARIABLE Count4 : STD_LOGIC_VECTOR (3 DOWNTO 0) ;    BEGIN        PreCLK <= '0'  -  將CLK進行16分頻,PreCLK為CLK的16分頻      &

16、#160; IF Count4>11 THEN PreCLK <= '1'  Count4 := "0000"        ELSIF clk'EVENT AND clk = '1' THEN  Count4 := Count4 + 1;            END IF;    END PR

17、OCESS;    GenSpkS : PROCESS(PreCLK, Tone)- 11位可預置計數器        VARIABLE Count11 : STD_LOGIC_VECTOR (10 DOWNTO 0);BEGIN      IF PreCLK'EVENT AND PreCLK = '1' THEN       IF Count11 = 16#7F

18、F# THEN Count11 := Tone ; FullSpkS <= '1'             ELSE Count11 := Count11 + 1; FullSpkS <= '0' END IF;        END IF;   END PROCESS; DelaySpkS : PROCESS(FullSpkS)-將

19、輸出再2分頻,展寬脈沖,使揚聲器有足夠功率發音        VARIABLE Count2 : STD_LOGIC;BEGIN    IF FullSpkS'EVENT AND FullSpkS = '1' THEN  Count2 := NOT Count2;            IF Count2 = '1' THEN 

20、 SpkS <= '1'            ELSE SpkS <= '0'  END IF;        END IF;    END PROCESS;END; LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY ToneTaba ISPORT ( Index : 

21、; IN  STD_LOGIC_VECTOR (3 DOWNTO 0) ;           CODE  : OUT  STD_LOGIC_VECTOR (3 DOWNTO 0) ;           HIGH  : OUT STD_LOGIC;         &

22、#160; Tone  : OUT  STD_LOGIC_VECTOR (10 DOWNTO 0) );END;ARCHITECTURE one OF ToneTaba ISBEGIN    Search : PROCESS(Index)    BEGIN        CASE Index IS     - 譯碼電路,查表方式,控制音調的預置數WHEN "0000" => Ton

23、e<="11111111111" ; CODE<="0000" HIGH <='0'- 2047   WHEN "0001" => Tone<="01100000101" ; CODE<="0001" HIGH <='0'- 773;   WHEN "0010" => Tone<="01110010000" ; CODE<=&

24、quot;0010" HIGH <='0'- 912;   WHEN "0011" => Tone<="10000001100" ; CODE<="0011" HIGH <='0'-1036;   WHEN "0101" => Tone<="10010101101" ; CODE<="0101" HIGH <='0'-1197

25、;   WHEN "0110" => Tone<="10100001010" ; CODE<="0110" HIGH <='0'-1290;   WHEN "0111" => Tone<="10101011100" ; CODE<="0111" HIGH <='0'-1372;   WHEN "1000" =>

26、Tone<="10110000010" ; CODE<="0001" HIGH <='1'-1410;   WHEN "1001" => Tone<="10111001000" ; CODE<="0010" HIGH <='1'-1480;   WHEN "1010" => Tone<="11000000110" ; CODE<

27、;="0011" HIGH <='1'-1542;   WHEN "1100" => Tone<="11001010110" ; CODE<="0101" HIGH <='1'-1622;   WHEN "1101" => Tone<="11010000100" ; CODE<="0110" HIGH <='1'-1

28、668;   WHEN "1111" => Tone<="11011000000" ; CODE<="0001" HIGH <='1'-1728;   WHEN OTHERS => NULL;   END CASE;   END PROCESS;END;  - Copyright (C) 1991-2006 Altera Corporation- Your use of Altera Cor

29、poration's design tools, logic functions- and other software and tools, and its AMPP partner logic- functions, and any output files any of the foregoing- (including device programming or simulation files), and any- associated documentation or information are expressly subject- to the terms and c

30、onditions of the Altera Program License- Subscription Agreement, Altera MegaCore Function License- Agreement, or other applicable license agreement, including,- without limitation, that your use is for the sole purpose of- programming logic devices manufactured by Altera and sold by- Altera or its a

31、uthorized distributors.  Please refer to the- applicable agreement for further details.- Quartus II generated Memory Initialization File (.mif)WIDTH=4;DEPTH=256;ADDRESS_RADIX=UNS;DATA_RADIX=UNS;CONTENT BEGIN 00: 3; 01: 3; 02: 3; 03: 3; 04: 5; 05: 5; 06: 5;

32、0;07: 6; 08: 8; 09: 8; 10: 8 ; 11: 9 ; 12: 6 ; 13: 8; 14: 5; 15: 5; 16: 12; 17: 12; 18: 12; 19:15;  20:13 ; 21:12 ; 22:10 ; 23:12; 24: 9; 25: 9; 26: 9; 27: 9; 28: 9; 29: 9;  3

33、0: 9 ; 31: 0 ; 32: 9 ; 33: 9; 34: 9; 35:10; 36: 7; 37: 7; 38: 6; 39: 6;  40: 5 ; 41: 5 ; 42: 5 ; 43: 6; 44: 8; 45: 8; 46: 9; 47: 9; 48: 3; 49: 3;  50: 8 ; 51: 8 ; 52: 6 ; 53:

34、5; 54: 6; 55: 8; 56: 5; 57: 5; 58: 5; 59: 5; 60: 5 ; 61: 5 ; 62: 5 ; 63: 5; 64:10; 65:10; 66:10; 67:12; 68: 7; 69: 7; 70: 9 ; 71: 9 ; 72: 6 ; 73: 8; 74: 5; 75: 5; 76: 5; 77: 5;

35、0;78: 5; 79: 5; 80: 3 ; 81: 5 ; 82: 3 ; 83: 3; 84: 5; 85: 6; 86: 7; 87: 9; 88: 6; 89: 6; 90: 6 ; 91: 6 ; 92: 6 ; 93: 6; 94: 5; 95: 6; 96: 8; 97: 8; 98: 8; 99: 9; 100:12 ; 101:12 ; 

36、102:12 ; 103:10; 104: 9; 105: 9; 106:10; 107: 9; 108: 8; 109: 8; 110: 6 ; 111: 5 ; 112: 3 ; 113: 3; 114: 3; 115: 3; 116: 8; 117: 8; 118: 8; 119: 8; 120: 6 ; 121: 8 ; 122: 6 ; 123: 5; 124: 3;

37、 125: 5; 126: 6; 127: 8; 128: 5; 129: 5; 130: 5 ; 131: 5 ; 132: 5 ; 133: 5; 134: 5; 135: 5; 136: 0; 137: 0; 138: 0;END;Tone源程序-TONELIBRARY  IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY TONE  IS     &#

38、160;              -引導TONE 的子模塊實體部分PORT(INDEX:IN STD_LOGIC_VECTOR(7 DOWNTO 0);   -鍵盤輸入      CODE:OUT INTEGER RANGE  0 TO  15;-輸出對應的輸入音階簡譜的顯示數碼      HIGH:OUT STD_LOGIC

39、;      TONE:OUT INTEGER  RANGE  0 TO 16#7FF#); END;ARCHITECTURE  ONE OF TONE ISBEGIN         -BEGIN以下直到END為該模塊的功能描述語句 SENRCH: PROCESS(INDEX)BEGIN    CASE  INDEX  IS    &#

40、160;     -譯碼電路,查表方式,控制音調的預置數           WHEN "00000001"=>TONE<=773;CODE<=1;HIGH<='0'           WHEN "00000010"=>TONE<=912;CODE<=2;HI

41、GH<='0'           WHEN "00000100"=>TONE<=1036;CODE<=3;HIGH<='0'           WHEN "00001000"=>TONE<=1116;CODE<=4;HIGH<='0'  

42、60;         WHEN "00010000"=>TONE<=1197;CODE<=5;HIGH<='0'           WHEN "00100000"=>TONE<=1290;CODE<=6;HIGH<='0'      &

43、#160;    WHEN "01000000"=>TONE<=1372;CODE<=7;HIGH<='0'           WHEN "10000000"=>TONE<=1410;CODE<=1;HIGH<='1'           WHEN

44、 OTHERS=>TONE<=2047;CODE<=0;HIGH<='0'    END CASE; END PROCESS;            -進程語句結束END; Speaker源程序-SPEAKERLIBRARY  IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY SPEAKER  ISPORT(CLK1:IN STD_LOGIC;&#

45、160;   - 輸入時鐘脈沖    TONE1:IN INTEGER RANGE 0 TO 16#7FF#;    SPKS:OUT STD_LOGIC);END;ARCHITECTURE  ONE OF SPEAKER ISSIGNAL PRECLK,FULLSPKS:STD_LOGIC;BEGINDIVIDECLK:PROCESS(CLK1)VARIABLE COUNT4:INTEGER RANGE 0 TO 15;BEGIN     PRECLK<=&

46、#39;0'          -將CLK進行16分頻,PRECLK為CLK的16分頻       IF COUNT4>11 THEN       -開始IF語句         PRECLK<='1'      

47、 COUNT4:=0;     ELSIF CLK1'EVENT AND CLK1='1' THEN       COUNT4:=COUNT4+1;     END IF;           -IF語句結束END PROCESS;GENSPKS:PROCESS(PRECLK,TONE1)    

48、;     -11位可預置計數器VARIABLE COUNT11:INTEGER RANGE 0 TO 16#7FF#;BEGIN  IF PRECLK'EVENT AND PRECLK='1' THEN      IF COUNT11=16#7FF# THEN         COUNT11:=TONE1;       &

49、#160; FULLSPKS<='1'       ELSE         COUNT11:=COUNT11+1;         FULLSPKS<='0'        END IF;      &#

50、160;     -IF語句結束      END IF;END PROCESS;DELAYSPKS:PROCESS(FULLSPKS)          -將輸出再二分頻,展寬脈沖,使揚聲器有足夠的功率發音VARIABLE COUNT2:STD_LOGIC;BEGIN  IF FULLSPKS'EVENT AND FULLSPKS='1' THEN   

51、;         COUNT2:=NOT COUNT2;            IF COUNT2='1' THEN                 SPKS<='1'            ELSE SPKS<='0'           END IF;         END IF;   

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論