⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 music.vhd

📁 用CPLD做音乐发生器
💻 VHD
字号:
library ieee; 
use ieee.std_logic_1164.all; 
use ieee.std_logic_arith.all; 
use ieee.std_logic_unsigned.all; 
-------------------------------------------------------------------- 
entity music is 
port( inclk : in std_logic; --Clock Signal 
enable1 : in std_logic;---Control signal
enable2 : in std_logic;---Control signal
spk : buffer std_logic); --speaker driver 
end music ; 
-------------------------------------------------------------------- 
architecture behave of music is 
signal tone : std_logic_vector(10 downto 0); 
signal tone_count : std_logic_vector(10 downto 0); 
signal tone_index : integer range 0 to 15; 
signal clk10_count : std_logic_vector(17 downto 0); 
signal time1 : integer range 0 to 150;
signal time2 : integer range 0 to 150; 
signal clk : std_logic; 
signal clk10 : std_logic;
--------------------------------------------------------------------
begin 
	PROCESS(inclk) --generate 2Mhz clock signal 
	variable cnt1 : INTEGER RANGE 0 TO 30; 
begin 
	if (inclk='1' and inclk'event)then 
		if(cnt1=30)then
			cnt1:=0; 
		else 
			if(cnt1<15)then
				clk<='1'; 
			else
				clk<='0'; 
			end if; 
			cnt1:=cnt1+1; 
		end if;
	end if; 
end process; 
----------------------------------------------------------------------
process(clk) --generate 10hz clock signal 
begin 
if(clk'event and clk='1') then 
	clk10_count<=clk10_count+1;
	if(clk10_count=16#3fff#) then 
		clk10<=not clk10; 
	end if; 
end if; 
end process; 
----------------------------------------------------------------------
process(clk10,enable1,enable2) 
begin 
if(enable1='1' and enable2 = '0')then
	if(clk10'event and clk10='1') then 
		if(time1=150) then 
			time1<=0; 
		else 
			time1<=time1+1; 
		end if; 
	end if;
elsif(enable1='0' and enable2 = '1')then
	time1<=150;
	if(clk10'event and clk10='1') then 
		if(time2=150) then 
			time2<=0; 
		else 
			time2<=time2+1; 
		end if; 
	end if;
else
time1<=150;
time2<=150;
end if;
end process;
----------------------------------------------------------------------
process(clk10,enable1,enable2) 
begin
if(clk10'event and clk10='1') then 
	if(enable1= '1'and enable2= '0')then-------first song
		case time1 is 
		when 0=>tone_index<=1; 
		when 1=>tone_index<=1; 
		when 2=>tone_index<=1; 
		when 3=>tone_index<=1;-- 
		when 4=>tone_index<=2; 
		when 5=>tone_index<=2; 
		when 6=>tone_index<=2; 
		when 7=>tone_index<=2;-- 
		when 8=>tone_index<=3; 
		when 9=>tone_index<=3; 
		when 10=>tone_index<=3; 
		when 11=>tone_index<=3;-- 
		when 12=>tone_index<=1; 
		when 13=>tone_index<=1; 
		when 14=>tone_index<=1; 
		when 15=>tone_index<=1;-- 
		when 16=>tone_index<=1; 
		when 17=>tone_index<=1; 
		when 18=>tone_index<=1; 
		when 19=>tone_index<=1;-- 
		when 20=>tone_index<=2; 
		when 21=>tone_index<=2; 
		when 22=>tone_index<=2; 
		when 23=>tone_index<=2;-- 
		when 24=>tone_index<=3; 
		when 25=>tone_index<=3; 
		when 26=>tone_index<=3; 
		when 27=>tone_index<=3;-- 
		when 28=>tone_index<=1; 
		when 29=>tone_index<=1; 
		when 30=>tone_index<=1; 
		when 31=>tone_index<=1;-- 
		when 32=>tone_index<=3; 
		when 33=>tone_index<=3; 
		when 34=>tone_index<=3; 
		when 35=>tone_index<=3;-- 
		when 36=>tone_index<=4; 
		when 37=>tone_index<=4; 
		when 38=>tone_index<=4; 
		when 39=>tone_index<=4;-- 
		when 40=>tone_index<=5; 
		when 41=>tone_index<=5; 
		when 42=>tone_index<=5; 
		when 43=>tone_index<=5;-- 
		when 44=>tone_index<=5; 
		when 45=>tone_index<=5; 
		when 46=>tone_index<=5; 
		when 47=>tone_index<=5;-- 
		when 48=>tone_index<=3; 
		when 49=>tone_index<=3; 
		when 50=>tone_index<=3; 
		when 51=>tone_index<=3;-- 
		when 52=>tone_index<=4; 
		when 53=>tone_index<=4; 
		when 54=>tone_index<=4; 
		when 55=>tone_index<=4;-- 
		when 56=>tone_index<=5; 
		when 57=>tone_index<=5; 
		when 58=>tone_index<=5; 
		when 59=>tone_index<=5;-- 
		when 60=>tone_index<=5; 
		when 61=>tone_index<=5; 
		when 62=>tone_index<=5; 
		when 63=>tone_index<=5;---- //两只老虎两只老虎跑得快跑得快.前四句
		when 64=>tone_index<=5; 
		when 65=>tone_index<=5; 
		when 66=>tone_index<=5; 
		when 67=>tone_index<=6;-- 
		when 68=>tone_index<=5; 
		when 69=>tone_index<=5; 
		when 70=>tone_index<=5; 
		when 71=>tone_index<=4;-- 
		when 72=>tone_index<=3; 
		when 73=>tone_index<=3; 
		when 74=>tone_index<=3; 
		when 75=>tone_index<=3;-- 
		when 76=>tone_index<=1; 
		when 77=>tone_index<=1; 
		when 78=>tone_index<=1; 
		when 79=>tone_index<=1;-- //一只没有眼睛
		when 80=>tone_index<=5; 
		when 81=>tone_index<=5; 
		when 82=>tone_index<=5; 
		when 83=>tone_index<=6;-- 
		when 84=>tone_index<=5; 
		when 85=>tone_index<=5; 
		when 86=>tone_index<=5; 
		when 87=>tone_index<=4;-- 
		when 88=>tone_index<=3; 
		when 89=>tone_index<=3; 
		when 90=>tone_index<=3; 
		when 91=>tone_index<=3;-- 
		when 92=>tone_index<=1; 
		when 93=>tone_index<=1; 
		when 94=>tone_index<=1; 
		when 95=>tone_index<=1;-- //一只没有耳朵
		when 96=>tone_index<=1; 
		when 97=>tone_index<=1; 
		when 98=>tone_index<=1; 
		when 99=>tone_index<=1;-- 
		when 100=>tone_index<=5; 
		when 101=>tone_index<=5; 
		when 102=>tone_index<=5; 
		when 103=>tone_index<=5;-- 
		when 104=>tone_index<=1; 
		when 105=>tone_index<=1; 
		when 106=>tone_index<=1; 
		when 107=>tone_index<=1;-- 
		when 108=>tone_index<=1; 
		when 109=>tone_index<=1; 
		when 110=>tone_index<=1; 
		when 111=>tone_index<=1;-- //真奇怪
		when 112=>tone_index<=1; 
		when 113=>tone_index<=1; 
		when 114=>tone_index<=1; 
		when 115=>tone_index<=1;-- 
		when 116=>tone_index<=5; 
		when 117=>tone_index<=5; 
		when 118=>tone_index<=5; 
		when 119=>tone_index<=5;-- 
		when 120=>tone_index<=1; 
		when 121=>tone_index<=1; 
		when 122=>tone_index<=1; 
		when 123=>tone_index<=1;-- 
		 
		when others=>tone_index<=0; 
		end case; 
 
elsif(enable1='0'and enable2='1')then----Second song
	case time2 is 
		when 0=>tone_index<=3; 
		when 1=>tone_index<=3; 
		when 2=>tone_index<=3; 
		when 3=>tone_index<=3;-- 
		when 4=>tone_index<=5; 
		when 5=>tone_index<=5; 
		when 6=>tone_index<=5; 
		when 7=>tone_index<=6;-- 
		when 8=>tone_index<=8; 
		when 9=>tone_index<=8; 
		when 10=>tone_index<=8; 
		when 11=>tone_index<=9;-- 
		when 12=>tone_index<=6; 
		when 13=>tone_index<=8; 
		when 14=>tone_index<=5; 
		when 15=>tone_index<=5;-- 
		when 16=>tone_index<=12; 
		when 17=>tone_index<=12; 
		when 18=>tone_index<=12; 
		when 19=>tone_index<=15;-- 
		when 20=>tone_index<=13; 
		when 21=>tone_index<=12; 
		when 22=>tone_index<=10; 
		when 23=>tone_index<=12;-- 
		when 24=>tone_index<=9; 
		when 25=>tone_index<=9; 
		when 26=>tone_index<=9; 
		when 27=>tone_index<=9;-- 
		when 28=>tone_index<=9; 
		when 29=>tone_index<=9; 
		when 30=>tone_index<=0; 
		when 31=>tone_index<=0;-- 
		when 32=>tone_index<=9; 
		when 33=>tone_index<=9; 
		when 34=>tone_index<=9; 
		when 35=>tone_index<=10;-- 
		when 36=>tone_index<=7; 
		when 37=>tone_index<=7; 
		when 38=>tone_index<=6; 
		when 39=>tone_index<=6;-- 
		when 40=>tone_index<=5; 
		when 41=>tone_index<=5; 
		when 42=>tone_index<=5; 
		when 43=>tone_index<=6;-- 
		when 44=>tone_index<=8; 
		when 45=>tone_index<=8; 
		when 46=>tone_index<=9; 
		when 47=>tone_index<=9;-- 
		when 48=>tone_index<=3; 
		when 49=>tone_index<=3; 
		when 50=>tone_index<=8; 
		when 51=>tone_index<=8;-- 
		when 52=>tone_index<=6; 
		when 53=>tone_index<=5; 
		when 54=>tone_index<=6; 
		when 55=>tone_index<=8;-- 
		when 56=>tone_index<=5; 
		when 57=>tone_index<=5; 
		when 58=>tone_index<=5; 
		when 59=>tone_index<=5;-- 
		when 60=>tone_index<=5; 
		when 61=>tone_index<=5; 
		when 62=>tone_index<=0; 
		when 63=>tone_index<=0;---- 
		when 64=>tone_index<=10; 
		when 65=>tone_index<=10; 
		when 66=>tone_index<=10; 
		when 67=>tone_index<=12;-- 
		when 68=>tone_index<=7; 
		when 69=>tone_index<=7; 
		when 70=>tone_index<=9; 
		when 71=>tone_index<=9;-- 
		when 72=>tone_index<=6; 
		when 73=>tone_index<=8; 
		when 74=>tone_index<=5; 
		when 75=>tone_index<=5;-- 
		when 76=>tone_index<=5; 
		when 77=>tone_index<=5; 
		when 78=>tone_index<=5; 
		when 79=>tone_index<=5;-- 
		when 80=>tone_index<=5; 
		when 81=>tone_index<=0; 
		when 82=>tone_index<=0; 
		when 83=>tone_index<=3;-- 
		when 84=>tone_index<=5; 
		when 85=>tone_index<=3; 
		when 86=>tone_index<=5; 
		when 87=>tone_index<=5;-- 
		when 88=>tone_index<=6; 
		when 89=>tone_index<=7; 
		when 90=>tone_index<=9; 
		when 91=>tone_index<=6;-- 
		when 92=>tone_index<=6; 
		when 93=>tone_index<=6; 
		when 94=>tone_index<=6; 
		when 95=>tone_index<=6;-- 
		when 96=>tone_index<=6; 
		when 97=>tone_index<=5; 
		when 98=>tone_index<=6; 
		when 99=>tone_index<=8;-- 
		when 100=>tone_index<=8; 
		when 101=>tone_index<=8; 
		when 102=>tone_index<=9; 
		when 103=>tone_index<=12;-- 
		when 104=>tone_index<=12; 
		when 105=>tone_index<=12; 
		when 106=>tone_index<=10; 
		when 107=>tone_index<=9;-- 
		when 108=>tone_index<=9; 
		when 109=>tone_index<=10; 
		when 110=>tone_index<=9; 
		when 111=>tone_index<=8;-- 
		when 112=>tone_index<=8; 
		when 113=>tone_index<=6; 
		when 114=>tone_index<=5; 
		when 115=>tone_index<=3;-- 
		when 116=>tone_index<=3; 
		when 117=>tone_index<=3; 
		when 118=>tone_index<=3; 
		when 119=>tone_index<=8;-- 
		when 120=>tone_index<=8; 
		when 121=>tone_index<=8; 
		when 122=>tone_index<=8; 
		when 123=>tone_index<=6;-- 
		when 124=>tone_index<=8; 
		when 125=>tone_index<=6; 
		when 126=>tone_index<=5; 
		when 127=>tone_index<=3;-- 
		when 128=>tone_index<=5; 
		when 129=>tone_index<=6; 
		when 130=>tone_index<=8; 
		when 131=>tone_index<=5;-- 
		when 132=>tone_index<=5; 
		when 133=>tone_index<=5; 
		when 134=>tone_index<=5; 
		when 135=>tone_index<=5;-- 
		when 136=>tone_index<=5; 
		when 137=>tone_index<=5; 
		when 138=>tone_index<=0; 
		when 139=>tone_index<=0;-- 
		when others=>tone_index<=0; 
	end case;

else
	tone_index<=0;
end if; 
end if;
end process;
--------------------------------------------------------------
--------------------------------------------------------------
process(tone_index) 
	begin 
	case tone_index is 
	when 0=>tone<="11111111111"; --no output 
	when 1=>tone<="01100000101"; --773 
	when 2=>tone<="01110010000"; --912 
	when 3=>tone<="10000001100"; --1036 
	when 5=>tone<="10010101101"; --1197 
	when 6=>tone<="10100001010"; --1290 
	when 7=>tone<="10101011100"; --1372 
	when 8=>tone<="10110000010"; --1410 
	when 9=>tone<="10111001000"; --1480 
	when 10=>tone<="11000000110"; --1542 
	when 12=>tone<="11001010110"; --1622 
	when 13=>tone<="11010000100"; --1668 
	when 15=>tone<="11011000000"; --1728 
	when others=>tone<="11111111111"; --others:no output 

end case; 
end process;
------------------------------------------------------------------
process(clk) --control the frequence of the speaker 
begin 
if(clk'event and clk='1') then 
	if(tone_count=16#7ff#) then 
		if(tone="11111111111")then
			spk<='0';
		else
			tone_count<=tone;
			if(tone<2047) then 
				spk<=not spk; 
        	end if;
		end if; 
    else 
        tone_count<=tone_count+1; 
    end if; 
end if; 
end process; 
end behave;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -