LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY AUTO IS
PORT(CLK: IN STD_LOGIC; --系统时钟信号
AUTO: IN STD_LOGIC; --键盘输入/自动演奏
CLK2: BUFFER STD_LOGIC; --时钟输出
INDEX2: IN STD_LOGIC_VECTOR(7 DOWNTO 0); --键盘输入信号
INDEX0: OUT STD_LOGIC_VECTOR(7 DOWNTO 0)); --音符信号输出
END AUTO;
ARCHITECTURE BEHAVIORAL OF AUTO IS
SIGNAL COUNT0:INTEGER RANGE 0 TO 31; --定义信号计数器,有32个信号元素
BEGIN
PULSE0:PROCESS(CLK,AUTO) --PULSE0工作进程开始
VARIABLE COUNT:INTEGER RANGE 0 TO 8; --定义变量计数器,从0到8
BEGIN
IF AUTO='1'THEN --键盘输入为1
COUNT:=0;CLK2<='0'; --计数器值为0,时钟信号2幅值为0
ELSIF(CLK'EVENT AND CLK='1')THEN --输入的时钟信号为其他值
COUNT:=COUNT+1; --计数器加1即为1
IF COUNT=4 THEN
CLK2<='1';
ELSIF COUNT=8 THEN
CLK2<='0';COUNT:=0;
END IF;
END IF;
END PROCESS;
MUSIC:PROCESS(CLK2) --MUSIC工作进程开始
BEGIN
IF(CLK2'EVENT AND CLK2='1')THEN --时钟信号2为1
IF(COUNT0=31)THEN --计数器值为31
COUNT0<=0; --计数器清0
ELSE