1、按 键 输 入按键输入判断ceshi按键去抖动FEN按 键 输 出SWI分频预置数ToneTabs分频器SPEAKER发出音乐spkout一)、设计思路二)、设计实现本设计实现了能发出底、中、高三个节拍的7个音阶的系统,整个系统共有3首歌曲,这三首歌曲具有顺序播放和随机切换歌曲的播放功能。能随意弹奏每首歌曲,同时具有数码管显示每个音阶所对应的阿拉伯数字,不同的节拍我们也有相应的指示灯作为区分,在低音时无指示灯亮,中音时有一个亮,高音时有两个指示灯亮。1)按键输入的判断:a.代码LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC
2、_UNSIGNED.ALL;ENTITY ceshi ISPORT(s: IN STD_LOGIC; Y:out std_logic);END ENTITY ceshi;ARCHITECTURE FUN OF ceshi ISbeginPROCESS(s)BEGIN IF s=1 THEN Y =; ELSE y0 end if; end process; END ARCHITECTURE FUN;b.波形仿真图2)按键去抖动ENTITY FEN ISPORT(CLK,KIN:IN STD_LOGIC; KOUT:OUT STD_LOGIC);END;ARCHITECTURE BHV OF F
3、EN ISSIGNAL KL,KH:STD_LOGIC_VECTOR(3 DOWNTO 0);PROCESS(CLK,KIN,KL,KH) BEGINIF CLKEVENT AND CLK= THENIF(KIN=) THEN KL=KL+1;ELSE KL=0000END IF;) THEN KH=KH+1;ELSE KH1100) THEN KOUT0111END PROCESS;3)产生节拍控制和音阶选择信号3)音乐自动播放ENTITY NOTETABS ISPORT(CLK : S : IN STD_LOGIC_VECTOR(1 DOWNTO 0); TONEINDEX : OUT S
4、TD_LOGIC_VECTOR( 4 DOWNTO 0);END ENTITY NOTETABS;ARCHITECTURE FUN OF NOTETABS ISCOMPONENT MUSIC PORT ( address : IN STD_LOGIC_VECTOR (8 DOWNTO 0); clock : IN STD_LOGIC ; q : OUT STD_LOGIC_VECTOR (4 DOWNTO 0) );END COMPONENT;SIGNAL COUNTER : STD_LOGIC_VECTOR(8 DOWNTO 0);PROCESS(CLK,COUNTER) IF (COUNT
5、ER=432) THEN COUNTER000000000 ELSIF (CLKEVENT AND CLK =) THEN COUNTER144) THEN COUNTER ELSIF(S=10 AND (COUNTER 288) THEN COUNTER432) THEN COUNTERCOUNTER,q=TONEINDEX,clock=CLK);4)二选一选择器ENTITY mux21c IS PORT(k_code,toneindex:IN STD_LOGIC_VECTOR(4 DOWNTO 0); key: index:OUT STD_LOGIC_VECTOR(4 DOWNTO 0);
6、ARCHITECTURE five OF mux21c IS BEGIN PROCESS(k_code,toneindex,key) IF key= THEN index=k_code; ELSE index=toneindex; END five;5)按键的输出ENTITY SWI ISPORT(A,B,C,D,E,F,G ,H,I,K,L,M,N,O,P,Q,R,S,T,U: Y :END ENTITY SWI;ARCHITECTURE FUN OF SWI ISSIGNAL J : STD_LOGIC_VECTOR( 19 DOWNTO 0);J Y NULL;END CASE;END
7、PROCESS P1;END ARCHITECTURE FUN;6)分频预置数的产生ENTITY ToneTaba IS PORT ( Index : IN STD_LOGIC_VECTOR (4 DOWNTO 0); CODE : OUT STD_LOGIC_VECTOR (3 DOWNTO 0); HIGH1,HIGH2 : OUT STD_LOGIC; Tone : OUT STD_LOGIC_VECTOR (10 DOWNTO 0); ARCHITECTURE one OF ToneTaba IS BEGIN Search : PROCESS(Index) CASE Index IS
8、WHEN Tone11111111111 CODE HIGH1 HIGH2 END CASE; END;7)分频器ENTITY SPEAKER IS TONE : IN STD_LOGIC_VECTOR(10 DOWNTO 0); SPKS : OUT STD_LOGIC);END ENTITY SPEAKER;ARCHITECTURE FUN OF SPEAKER ISSIGNAL PRECLK,FULLSPKS : STD_LOGIC; PROCESS(CLK) VARIABLE COUNT4 : STD_LOGIC_VECTOR(3 DOWNTO 0); PRECLK11 THEN PR
9、ECLKCOUNT4 : ELSIF CLKEVENT AND CLK = THEN COUNT4:=COUNT4+1; PROCESS(PRECLK,TONE) VARIABLE COUNT11 : STD_LOGIC_VECTOR(10 DOWNTO 0); IF PRECLKEVENT AND PRECLK = THEN IF COUNT11 = 16#7FF# THEN COUNT11 := TONE ;FULLSPKS ELSE COUNT11 := COUNT11+1;PROCESS(FULLSPKS) VARIABLE COUNT2 : IF FULLSPKSEVENT AND FULLSPKS= THEN COUNT2 := NOT COUNT2; IF COUNT2 = THEN SPKS ELSE SPKS 3、系统仿真与调试A、原理图:B、波形仿真C、PCB图:D、调试图:5、 主要参考文献1 潘松 黄继业 EDA技术实用数据VHDL版(第五版) 科学出版社 20132 曹昕燕,周凤臣.EDA技术实验与课程设计.清华大学出版社,2006.3 阎石,数学电子技术基础.高等教育出版社,2003.