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

📄 music.vhd

📁 一首VHDL自动音乐发生器程序
💻 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 + -