📄 music.vhd
字号:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY song IS
PORT(
clk_4MHz,clk_4Hz:IN STD_LOGIC;
digit:BUFFER STD_LOGIC_VECTOR(6 DOWNTO 0);
zero:OUT STD_LOGIC_VECTOR(4 DOWNTO 0);
speaker: out STD_LOGIC
);
END song;
ARCHITECTURE song_arch OF song IS
SIGNAL divider,origin:STD_LOGIC_VECTOR(12 DOWNTO 0);
SIGNAL counter:integer range 0 to 140;
SIGNAL count:STD_LOGIC_VECTOR(1 DOWNTO 0);
SIGNAL carrier:STD_LOGIC;
BEGIN
zero<="00000";
PROCESS(clk_4MHz)
BEGIN
IF(clk_4MHz'event AND clk_4MHz='1')THEN
IF(divider="1111111111111")THEN
carrier<='1';
divider<=origin;
ELSE
divider<=divider+'1';
carrier<='0';
END IF;
END IF;
END PROCESS;
PROCESS(carrier)
BEGIN
IF(carrier'event AND carrier='1')THEN
count<=count+'1';
IF count="0"THEN
speaker<='1';
ELSE
speaker<='0';
END IF;
END IF;
END PROCESS;
PROCESS(clk_4Hz)
BEGIN
IF(clk_4Hz'event AND clk_4Hz='1')THEN
IF(counter=140)THEN
counter<=0;
ELSE
counter<=counter+1;
END IF;
END IF;
CASE counter IS
WHEN 0=>digit<="0000011"; WHEN 1=>digit<="0000011";
WHEN 2=>digit<="0000011"; WHEN 3=>digit<="0000011";
WHEN 4=>digit<="0000101"; WHEN 5=>digit<="0000101";
WHEN 6=>digit<="0000101"; WHEN 7=>digit<="0000110";
WHEN 8=>digit<="0001000"; WHEN 9=>digit<="0001000";
WHEN 10=>digit<="0001000"; WHEN 11=>digit<="0010000";
WHEN 12=>digit<="0000110"; WHEN 13=>digit<="0001000";
WHEN 14=>digit<="0000101"; WHEN 15=>digit<="0000101";
WHEN 16=>digit<="0101000"; WHEN 17=>digit<="0101000";
WHEN 18=>digit<="0101000"; WHEN 19=>digit<="1000000";
WHEN 20=>digit<="0110000"; WHEN 21=>digit<="0101000";
WHEN 22=>digit<="0011000"; WHEN 23=>digit<="0101000";
WHEN 24=>digit<="0010000"; WHEN 25=>digit<="0010000";
WHEN 26=>digit<="0010000"; WHEN 27=>digit<="0010000";
WHEN 28=>digit<="0010000"; WHEN 29=>digit<="0010000";
WHEN 30=>digit<="0010000"; WHEN 31=>digit<="0000000";
WHEN 32=>digit<="0010000"; WHEN 33=>digit<="0010000";
WHEN 34=>digit<="0010000"; WHEN 35=>digit<="0011000";
WHEN 36=>digit<="0000111"; WHEN 37=>digit<="0000111";
WHEN 38=>digit<="0000110"; WHEN 39=>digit<="0000110";
WHEN 40=>digit<="0000101"; WHEN 41=>digit<="0000101";
WHEN 42=>digit<="0000101"; WHEN 43=>digit<="0000110";
WHEN 44=>digit<="0001000"; WHEN 45=>digit<="0001000";
WHEN 46=>digit<="0010000"; WHEN 47=>digit<="0010000";
WHEN 48=>digit<="0000011"; WHEN 49=>digit<="0000011";
WHEN 50=>digit<="0001000"; WHEN 51=>digit<="0001000";
WHEN 52=>digit<="0000110"; WHEN 53=>digit<="0000101";
WHEN 54=>digit<="0000110"; WHEN 55=>digit<="0001000";
WHEN 56=>digit<="0000101"; WHEN 57=>digit<="0000101";
WHEN 58=>digit<="0000101"; WHEN 59=>digit<="0000101";
WHEN 60=>digit<="0000101"; WHEN 61=>digit<="0000101";
WHEN 62=>digit<="0000101"; WHEN 63=>digit<="0000101";
WHEN 64=>digit<="0011000"; WHEN 65=>digit<="0011000";
WHEN 66=>digit<="0011000"; WHEN 67=>digit<="0101000";
WHEN 68=>digit<="0000111"; WHEN 69=>digit<="0000111";
WHEN 70=>digit<="0010000"; WHEN 71=>digit<="0010000";
WHEN 72=>digit<="0000110"; WHEN 73=>digit<="0001000";
WHEN 74=>digit<="0000101"; WHEN 75=>digit<="0000101";
WHEN 76=>digit<="0000101"; WHEN 77=>digit<="0000101";
WHEN 78=>digit<="0000101"; WHEN 79=>digit<="0000101";
WHEN 80=>digit<="0000011"; WHEN 81=>digit<="0000101";
WHEN 82=>digit<="0000011"; WHEN 83=>digit<="0000011";
WHEN 84=>digit<="0000101"; WHEN 85=>digit<="0000110";
WHEN 86=>digit<="0000111"; WHEN 87=>digit<="0010000";
WHEN 88=>digit<="0000110"; WHEN 89=>digit<="0000110";
WHEN 90=>digit<="0000110"; WHEN 91=>digit<="0000110";
WHEN 92=>digit<="0000110"; WHEN 93=>digit<="0000110";
WHEN 94=>digit<="0000101"; WHEN 95=>digit<="0000110";
WHEN 96=>digit<="0001000"; WHEN 97=>digit<="0001000";
WHEN 98=>digit<="0001000"; WHEN 99=>digit<="0010000";
WHEN 100=>digit<="0101000"; WHEN 101=>digit<="0101000";
WHEN 102=>digit<="0101000"; WHEN 103=>digit<="0011000";
WHEN 104=>digit<="0010000"; WHEN 105=>digit<="0010000";
WHEN 106=>digit<="0011000"; WHEN 107=>digit<="0010000";
WHEN 108=>digit<="0001000"; WHEN 109=>digit<="0001000";
WHEN 110=>digit<="0000110"; WHEN 111=>digit<="0000101";
WHEN 112=>digit<="0000011"; WHEN 113=>digit<="0000011";
WHEN 114=>digit<="0000011"; WHEN 115=>digit<="0000011";
WHEN 116=>digit<="0001000"; WHEN 117=>digit<="0001000";
WHEN 118=>digit<="0001000"; WHEN 119=>digit<="0001000";
WHEN 120=>digit<="0000110"; WHEN 121=>digit<="0001000";
WHEN 122=>digit<="0000110"; WHEN 123=>digit<="0000101";
WHEN 124=>digit<="0000011"; WHEN 125=>digit<="0000101";
WHEN 126=>digit<="0000110"; WHEN 127=>digit<="0001000";
WHEN 128=>digit<="0000101"; WHEN 129=>digit<="0000101";
WHEN 130=>digit<="0000101"; WHEN 131=>digit<="0000101";
WHEN 132=>digit<="0000101"; WHEN 133=>digit<="0000101";
WHEN 134=>digit<="0000101"; WHEN 135=>digit<="0000101";
WHEN 136=>digit<="0000000"; WHEN 137=>digit<="0000000";
WHEN 138=>digit<="0000000"; WHEN 139=>digit<="0000000";
WHEN others=>digit<="0000000";
END CASE;
CASE digit IS
WHEN "0000011"=>origin<="0100001001100"; --2124
WHEN "0000101"=>origin<="0110000010001"; --3089
WHEN "0000110"=>origin<="0111000111110"; --3646
WHEN "0000111"=>origin<="1000000101101"; --4141
WHEN "0001000"=>origin<="1000100010001"; --4369
WHEN "0010000"=>origin<="1001010110010"; --4768
WHEN "0011000"=>origin<="1010000100101"; --5157
WHEN "0101000"=>origin<="1011000001000"; --5640
WHEN "0110000"=>origin<="1011100011100"; --5918
WHEN "1000000"=>origin<="1100010001000"; --6280
WHEN others=>origin<="1111111111111"; --8191
END CASE;
END PROCESS;
END song_arch;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -