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

📄 songer.vhd

📁 简单的乐曲播放器,实验课程作品,使用VHDL语言编写
💻 VHD
字号:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY Songer IS
  PORT
     (CLK1MHZ :IN STD_LOGIC;          --主频1M
      CAIDENG : OUT STD_LOGIC_VECTOR(6 DOWNTO 0);  --彩灯功能
      PP   : IN STD_LOGIC;            --暂停或播放
      SHOW : OUT STD_LOGIC;           --播放模式显示
      NEXTONE : IN STD_LOGIC;         --下一首
      PREVIOUS : IN STD_LOGIC;        --本首重来
      SPKOUT: OUT STD_LOGIC;          --音频输出
      MODE  : IN STD_LOGIC;           --播放模式
      SEG:OUT STD_LOGIC_VECTOR(6 DOWNTO 0);  --歌曲序号显示
      CAT:OUT STD_LOGIC_VECTOR(5 DOWNTO 0);
      STOP: IN STD_LOGIC
      );
END;

ARCHITECTURE one OF Songer IS              
  COMPONENT NoteTabs
     PORT (  clk: IN STD_LOGIC;
            
             ToneIndex: OUT INTEGER RANGE 0 TO 15;
             PP : IN STD_LOGIC;
             NEXTONE : IN STD_LOGIC;         --下一首
             PREVIOUS : IN STD_LOGIC;        --本首重来
             MODE : IN STD_LOGIC;
             RANDOM: IN STD_LOGIC;
             SHOW : OUT STD_LOGIC;
             SEG:OUT STD_LOGIC_VECTOR(6 DOWNTO 0)
         );
  END COMPONENT;
  COMPONENT ToneTaba
    PORT ( Index: IN INTEGER RANGE 0 TO 15;
          
           CAIDENG : OUT STD_LOGIC_VECTOR(6 DOWNTO 0);
           Tone : OUT INTEGER RANGE 0 TO 16#7FF#
        );
  END COMPONENT;
  COMPONENT Speakera
    PORT(clk:IN STD_LOGIC;
Tone:IN INTEGER RANGE 0 TO 16#7FF#;
SpkS:OUT STD_LOGIC);
END COMPONENT;
SIGNAL Tone : INTEGER RANGE 0 TO 16#7FF#;
SIGNAL ToneIndex :INTEGER RANGE 0 TO 15;
SIGNAL T:STD_LOGIC;                     --分频信号

CONSTANT LENGTH:POSITIVE:=8;           
CONSTANT TAP1:POSITIVE:=8;
CONSTANT TAP2:POSITIVE:=4;
SIGNAL PRBS:STD_LOGIC;
SIGNAL PRREG:STD_LOGIC_VECTOR(LENGTH DOWNTO 0);

BEGIN
PROCESS(CLK1MHZ)                      --T分1M频为4Hz 
VARIABLE C:INTEGER RANGE 0 TO 124999;
BEGIN 
IF(CLK1MHZ'EVENT AND CLK1MHZ='1')THEN
  IF(C=124999)THEN 
       C:=0;
       T<=NOT T;
  ELSE 
       C:=C+1;
  END IF;
 END IF;
END PROCESS;



process(T,STOP)           --产生一个伪随机信号
  begin 
    if STOP='1' then 
      prreg<=(others=>'0');
      prreg(0)<='1';
    elsif T'event and T='1' then 
      prreg<=(prreg((length-1)downto 0)&
      (prreg(tap1)xor prreg(tap2)));
    end if;
  end process;
 prbs<=prreg(length);        --prbs随机为0或1

CAT<="011111";               --之让第一个7段数码管显示歌曲序号

u1: NoteTabs PORT MAP(clk=>T,MODE=>MODE,SHOW=>SHOW, ToneIndex => ToneIndex,
                      RANDOM=>PRBS,SEG=>SEG,PP=>PP,NEXTONE=>NEXTONE,PREVIOUS=>PREVIOUS);
u2: ToneTaba PORT MAP(Index=>ToneIndex, Tone=>Tone,CAIDENG=>CAIDENG);
u3: Speakera PORT MAP(clk=>CLK1MHZ,Tone=>Tone ,SpkS=>SPKOUT);


 END;

⌨️ 快捷键说明

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