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

📄 notetabs.vhd

📁 简单的乐曲播放器,实验课程作品,使用VHDL语言编写
💻 VHD
字号:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY NoteTabs IS
    PORT ( clk :IN STD_LOGIC;             --4Hz
           ToneIndex : OUT INTEGER RANGE 0 TO 15;   --音调
            PP : IN STD_LOGIC;             --播放或暂停
           NEXTONE : IN STD_LOGIC;         --下一首
           PREVIOUS : IN STD_LOGIC ;       --本首重来
           MODE : IN STD_LOGIC;            --播放模式
           SHOW :OUT STD_LOGIC;            --播放模式显示
           
         
           SEG:OUT STD_LOGIC_VECTOR(6 DOWNTO 0);--7段数码管输出
           RANDOM: IN STD_LOGIC
            );
END;
ARCHITECTURE one OF NoteTabs IS
  SIGNAL Counter : INTEGER RANGE 0 TO 199;
  
BEGIN
   CNT8: PROCESS(clk,PP,MODE,RANDOM,NEXTONE,PREVIOUS)
   BEGIN 
 IF(clk'EVENT AND clk='1') THEN 
    IF( NEXTONE='0' AND PREVIOUS='0' AND MODE='0' AND PP='0' ) THEN      --顺序播放模式下
       SHOW<='0';       --灯灭
       IF Counter=199 THEN Counter <=0;
       ELSE  Counter<=Counter+1;
       END IF;
    ELSIF (NEXTONE='0' AND PREVIOUS='0' AND MODE='1' AND PP='0' )THEN     --随机播放模式下
         SHOW<='1';       --灯亮
         IF Counter=69 THEN                             --每首歌完后,如果随机信号为0则播放下一首歌
             IF RANDOM='0' THEN Counter<=70;            --如果为1,则播放前一首歌。这一切都可由改变状态
             ELSIF RANDOM='1' THEN Counter<=138;        --计数器Counter来实现
             END IF;
         ELSIF Counter=137 THEN
             IF RANDOM='0' THEN Counter<=1;
             ELSIF RANDOM='1' THEN Counter<=138;
             END IF;
         ELSIF Counter=199 THEN
             IF RANDOM='0' THEN Counter<=0;
             ELSIF RANDOM='1' THEN Counter<=70;
             END IF;
         ELSE  Counter<=Counter+1;
         END IF;
    ELSIF PP='1' THEN                --如果暂停了,计数器暂停计数
             Counter<=Counter;
    ELSIF (NEXTONE='1' AND PREVIOUS='0') THEN      --选择下一首,将计数器直接改为本首歌曲的最后一个数
         IF(Counter<=69)   THEN  Counter<=69;
         ELSIF(Counter>=70 and Counter<=137)  THEN Counter<=137;
         ELSIF(Counter>=138)  THEN Counter<=199;
                  
         END IF;
    ELSIF(NEXTONE='0' AND PREVIOUS='1') THEN    --选择本首重放,将计数器改为本首开始的状态数
         IF(Counter<=69)   THEN  Counter<=0;
         ELSIF(Counter>=70 and Counter<=137)  THEN Counter<=70;
         ELSIF(Counter>=138)  THEN Counter<=138;
         END IF;
         
    END IF;
   END IF;   
   END PROCESS;


    

PROCESS(clk)                  --歌曲序号显示,通过状态数的大小判断
BEGIN 
	IF Counter<=69 THEN SEG<="0110000";
	ELSIF Counter>=70 AND Counter<=137 THEN SEG<="1101101";
	ELSIF Counter>=138 THEN  SEG<="1111001";   
	END IF;
END PROCESS;

Search : PROCESS(Counter)
  BEGIN
 CASE Counter IS
WHEN 00 =>ToneIndex <=10;  --欢乐颂
WHEN 01 =>ToneIndex <=10;
WHEN 02 =>ToneIndex <=10;
WHEN 03 =>ToneIndex <=10;

WHEN 04 =>ToneIndex <=11;
WHEN 05 =>ToneIndex <=11;
WHEN 06 =>ToneIndex <=12;
WHEN 07 =>ToneIndex <=12;

WHEN 08=>ToneIndex<=12;
WHEN 09=>ToneIndex<=12;
WHEN 10=>ToneIndex<=11;
WHEN 11=>ToneIndex<=11;

WHEN 12=>ToneIndex<=10;
WHEN 13=>ToneIndex<=10;
WHEN 14=>ToneIndex<=9;
WHEN 15=>ToneIndex<=9;

WHEN 16=>ToneIndex<=8;
WHEN 17=>ToneIndex<=8;
WHEN 18=>ToneIndex<=8;
WHEN 19=>ToneIndex<=8;

WHEN 20=>ToneIndex<=8;
WHEN 21=>ToneIndex<=8;
WHEN 22=>ToneIndex<=8;
WHEN 23=>ToneIndex<=8;

WHEN 24=>ToneIndex<=9;
WHEN 25=>ToneIndex<=9;
WHEN 26=>ToneIndex<=10;
WHEN 27=>ToneIndex<=10;

WHEN 28=>ToneIndex<=10;
WHEN 29=>ToneIndex<=10;
WHEN 30=>ToneIndex<=10;
WHEN 31=>ToneIndex<=9;

WHEN 32=>ToneIndex<=9;
WHEN 33=>ToneIndex<=9;
WHEN 34=>ToneIndex<=9;
WHEN 35=>ToneIndex<=9;

WHEN 36=>ToneIndex<=10;
WHEN 37=>ToneIndex<=10;
WHEN 38=>ToneIndex<=10;
WHEN 39=>ToneIndex<=10;

WHEN 40=>ToneIndex<=10;
WHEN 41=>ToneIndex<=10;
WHEN 42=>ToneIndex<=10;
WHEN 43=>ToneIndex<=10;

WHEN 44=>ToneIndex<=11;
WHEN 45=>ToneIndex<=11;
WHEN 46=>ToneIndex<=12;
WHEN 47=>ToneIndex<=12;

WHEN 48=>ToneIndex<=12;
WHEN 49=>ToneIndex<=12;
WHEN 50=>ToneIndex<=11;
WHEN 51=>ToneIndex<=11;

WHEN 52=>ToneIndex<=10;
WHEN 53=>ToneIndex<=10;
WHEN 54=>ToneIndex<=9;
WHEN 55=>ToneIndex<=9;

WHEN 56=>ToneIndex<=8;
WHEN 57=>ToneIndex<=8;
WHEN 58=>ToneIndex<=8;
WHEN 59=>ToneIndex<=8;

WHEN 60=>ToneIndex<=9;
WHEN 61=>ToneIndex<=9;
WHEN 62=>ToneIndex<=10;
WHEN 63=>ToneIndex<=10;

WHEN 64=>ToneIndex<=9;
WHEN 65=>ToneIndex<=9;
WHEN 66=>ToneIndex<=9;
WHEN 67=>ToneIndex<=0;


WHEN 68=>ToneIndex<=0;
WHEN 69=>ToneIndex<=0;   --第一首结束
WHEN 70=>ToneIndex<=0;   --梁祝开始
WHEN 71=>ToneIndex<=0;

WHEN 72 =>ToneIndex <=3;
WHEN 73 =>ToneIndex <=3;
WHEN 74 =>ToneIndex <=3;
WHEN 75 =>ToneIndex <=3;

WHEN 76 =>ToneIndex <=5;
WHEN 77 =>ToneIndex <=5;
WHEN 78 =>ToneIndex <=5;
WHEN 79 =>ToneIndex <=6;

WHEN 80=>ToneIndex<=8;
WHEN 81=>ToneIndex<=8;
WHEN 82=>ToneIndex<=8;
WHEN 83=>ToneIndex<=9;

WHEN 84=>ToneIndex<=6;
WHEN 85=>ToneIndex<=8;
WHEN 86=>ToneIndex<=5;
WHEN 87=>ToneIndex<=5;

WHEN 88=>ToneIndex<=12;
WHEN 89=>ToneIndex<=12;
WHEN 90=>ToneIndex<=12;
WHEN 91=>ToneIndex<=15;

WHEN 92=>ToneIndex<=13;
WHEN 93=>ToneIndex<=12;
WHEN 94=>ToneIndex<=10;
WHEN 95=>ToneIndex<=12;

WHEN 96=>ToneIndex<=9;
WHEN 97=>ToneIndex<=9;
WHEN 98=>ToneIndex<=9;
WHEN 99=>ToneIndex<=9;

WHEN 100=>ToneIndex<=9;
WHEN 101=>ToneIndex<=9;
WHEN 102=>ToneIndex<=9;
WHEN 103=>ToneIndex<=9;

WHEN 104=>ToneIndex<=9;
WHEN 105=>ToneIndex<=9;
WHEN 106=>ToneIndex<=9;
WHEN 107=>ToneIndex<=10;

WHEN 108=>ToneIndex<=7;
WHEN 109=>ToneIndex<=7;
WHEN 110=>ToneIndex<=6;
WHEN 111=>ToneIndex<=6;

WHEN 112=>ToneIndex<=5;
WHEN 113=>ToneIndex<=5;
WHEN 114=>ToneIndex<=5;
WHEN 115=>ToneIndex<=6;

WHEN 116=>ToneIndex<=8;
WHEN 117=>ToneIndex<=8;
WHEN 118=>ToneIndex<=9;
WHEN 119=>ToneIndex<=9;

WHEN 120=>ToneIndex<=3;
WHEN 121=>ToneIndex<=3;
WHEN 122=>ToneIndex<=8;
WHEN 123=>ToneIndex<=8;

WHEN 124=>ToneIndex<=6;
WHEN 125=>ToneIndex<=5;
WHEN 126=>ToneIndex<=6;
WHEN 127=>ToneIndex<=8;

WHEN 128=>ToneIndex<=5;
WHEN 129=>ToneIndex<=5;
WHEN 130=>ToneIndex<=5;
WHEN 131=>ToneIndex<=5;

WHEN 132=>ToneIndex<=5;
WHEN 133=>ToneIndex<=5;
WHEN 134=>ToneIndex<=5;
WHEN 135=>ToneIndex<=5;


WHEN 136=>ToneIndex<=0;
WHEN 137=>ToneIndex<=0;  --梁祝结束
WHEN 138=>ToneIndex<=0;  --送别开始
WHEN 139=>ToneIndex<=0;

WHEN 140=>ToneIndex<=12;
WHEN 141=>ToneIndex<=12;
WHEN 142=>ToneIndex<=12;
WHEN 143=>ToneIndex<=12;

WHEN 144=>ToneIndex<=10;
WHEN 145=>ToneIndex<=10;
WHEN 146=>ToneIndex<=12;
WHEN 147=>ToneIndex<=12;

WHEN 148=>ToneIndex<=15;
WHEN 149=>ToneIndex<=15;
WHEN 150=>ToneIndex<=15;
WHEN 151=>ToneIndex<=15;
WHEN 152=>ToneIndex<=15;
WHEN 153=>ToneIndex<=15;
WHEN 154=>ToneIndex<=15;
WHEN 155=>ToneIndex<=15;
WHEN 156=>ToneIndex<=13;
WHEN 157=>ToneIndex<=13;
WHEN 158=>ToneIndex<=13;
WHEN 159=>ToneIndex<=13;

WHEN 160=>ToneIndex<=15;
WHEN 161=>ToneIndex<=15;
WHEN 162=>ToneIndex<=15;
WHEN 163=>ToneIndex<=15;

WHEN 164=>ToneIndex<=12;
WHEN 165=>ToneIndex<=12;
WHEN 166=>ToneIndex<=12;
WHEN 167=>ToneIndex<=12;
WHEN 168=>ToneIndex<=12;
WHEN 169=>ToneIndex<=12;
WHEN 170=>ToneIndex<=12;
WHEN 171=>ToneIndex<=12;

WHEN 172=>ToneIndex<=12;
WHEN 173=>ToneIndex<=12;
WHEN 174=>ToneIndex<=12;
WHEN 175=>ToneIndex<=12;

WHEN 176=>ToneIndex<=8;
WHEN 177=>ToneIndex<=8;
WHEN 178=>ToneIndex<=9;
WHEN 179=>ToneIndex<=9;

WHEN 180=>ToneIndex<=10;
WHEN 181=>ToneIndex<=10;
WHEN 182=>ToneIndex<=10;
WHEN 183=>ToneIndex<=10;
WHEN 184=>ToneIndex<=10;
WHEN 185=>ToneIndex<=10;
WHEN 186=>ToneIndex<=10;
WHEN 187=>ToneIndex<=10;

WHEN 188=>ToneIndex<=9;
WHEN 189=>ToneIndex<=9;
WHEN 190=>ToneIndex<=8;
WHEN 191=>ToneIndex<=8;

WHEN 192=>ToneIndex<=9;
WHEN 193=>ToneIndex<=9;
WHEN 194=>ToneIndex<=9;
WHEN 195=>ToneIndex<=9;
WHEN 196=>ToneIndex<=9;
WHEN 197=>ToneIndex<=9;
WHEN 198=>ToneIndex<=9;
WHEN 199=>ToneIndex<=9;  --送别结束



     
WHEN OTHERS =>NULL;
    END CASE;
  END PROCESS;

END;

⌨️ 快捷键说明

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