📄 music_freq.vhd
字号:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY MUSIC_FREQ IS
PORT ( Index : IN STD_LOGIC_VECTOR(6 DOWNTO 0);
HOLD_SW : IN STD_LOGIC;
MUSIC_CODE : OUT INTEGER RANGE 0 TO 15;
SW_DISP : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
TONE_HL : OUT STD_LOGIC;
MUSIC_FREQ_OUT : OUT INTEGER RANGE 0 TO 16#7FF# );
END;
ARCHITECTURE a OF MUSIC_FREQ IS
SIGNAL HOLD_SW_TEMP : STD_LOGIC_VECTOR(1 DOWNTO 0);
BEGIN
first: PROCESS(HOLD_SW)
BEGIN
IF HOLD_SW'EVENT AND HOLD_SW = '1' THEN HOLD_SW_TEMP <= HOLD_SW_TEMP + 1;
END IF;
SW_DISP <= '0'&'0'& HOLD_SW_TEMP;
END PROCESS first;
second : PROCESS(Index)
BEGIN
IF HOLD_SW_TEMP = "00" THEN
CASE Index IS -- 译码电路,查表方式,控制音调的预置数
WHEN "0000001" => MUSIC_FREQ_OUT <= 773; MUSIC_CODE <= 1; TONE_HL <= '0';
WHEN "0000010" => MUSIC_FREQ_OUT <= 912; MUSIC_CODE <= 2; TONE_HL <= '0';
WHEN "0000100" => MUSIC_FREQ_OUT <= 1036; MUSIC_CODE <= 3; TONE_HL <= '0';
WHEN "0001000" => MUSIC_FREQ_OUT <= 1116; MUSIC_CODE <= 4; TONE_HL <= '0';
WHEN "0010000" => MUSIC_FREQ_OUT <= 1197; MUSIC_CODE <= 5; TONE_HL <= '0';
WHEN "0100000" => MUSIC_FREQ_OUT <= 1290; MUSIC_CODE <= 6; TONE_HL <= '0';
WHEN "1000000" => MUSIC_FREQ_OUT <= 1372; MUSIC_CODE <= 7; TONE_HL <= '0';
WHEN OTHERS => MUSIC_FREQ_OUT <= 2047; MUSIC_CODE <= 0; TONE_HL <= '0';
END CASE;
ELSIF HOLD_SW_TEMP = "01" THEN
CASE Index IS -- 译码电路,查表方式,控制音调的预置数
WHEN "0000001" => MUSIC_FREQ_OUT <= 1410; MUSIC_CODE <= 1; TONE_HL <= '1';
WHEN "0000010" => MUSIC_FREQ_OUT <= 1490; MUSIC_CODE <= 2; TONE_HL <= '1';
WHEN "0000100" => MUSIC_FREQ_OUT <= 1560; MUSIC_CODE <= 3; TONE_HL <= '1';
WHEN "0001000" => MUSIC_FREQ_OUT <= 1600; MUSIC_CODE <= 4; TONE_HL <= '1';
WHEN "0010000" => MUSIC_FREQ_OUT <= 1622; MUSIC_CODE <= 5; TONE_HL <= '1';
WHEN "0100000" => MUSIC_FREQ_OUT <= 1650; MUSIC_CODE <= 6; TONE_HL <= '1';
WHEN "1000000" => MUSIC_FREQ_OUT <= 1690; MUSIC_CODE <= 7; TONE_HL <= '1';
WHEN OTHERS => MUSIC_FREQ_OUT <= 2047; MUSIC_CODE <= 0; TONE_HL <= '1';
END CASE;
ELSIF HOLD_SW_TEMP = "10" THEN
CASE Index IS -- 译码电路,查表方式,控制音调的预置数
WHEN "0000001" => MUSIC_FREQ_OUT <= 1730; MUSIC_CODE <= 1; TONE_HL <= '1';
WHEN "0000010" => MUSIC_FREQ_OUT <= 1750; MUSIC_CODE <= 2; TONE_HL <= '1';
WHEN "0000100" => MUSIC_FREQ_OUT <= 1770; MUSIC_CODE <= 3; TONE_HL <= '1';
WHEN "0001000" => MUSIC_FREQ_OUT <= 1790; MUSIC_CODE <= 4; TONE_HL <= '1';
WHEN "0010000" => MUSIC_FREQ_OUT <= 1815; MUSIC_CODE <= 5; TONE_HL <= '1';
WHEN "0100000" => MUSIC_FREQ_OUT <= 1830; MUSIC_CODE <= 6; TONE_HL <= '1';
WHEN "1000000" => MUSIC_FREQ_OUT <= 1930; MUSIC_CODE <= 7; TONE_HL <= '1';
WHEN OTHERS => MUSIC_FREQ_OUT <= 2047; MUSIC_CODE <= 0; TONE_HL <= '1';
END CASE;
ELSE
CASE Index IS -- 译码电路,查表方式,控制音调的预置数
WHEN "0000001" => MUSIC_FREQ_OUT <= 100; MUSIC_CODE <= 1; TONE_HL <= '1';
WHEN "0000010" => MUSIC_FREQ_OUT <= 200; MUSIC_CODE <= 2; TONE_HL <= '1';
WHEN "0000100" => MUSIC_FREQ_OUT <= 300; MUSIC_CODE <= 3; TONE_HL <= '1';
WHEN "0001000" => MUSIC_FREQ_OUT <= 400; MUSIC_CODE <= 4; TONE_HL <= '1';
WHEN "0010000" => MUSIC_FREQ_OUT <= 500; MUSIC_CODE <= 5; TONE_HL <= '1';
WHEN "0100000" => MUSIC_FREQ_OUT <= 600; MUSIC_CODE <= 6; TONE_HL <= '1';
WHEN "1000000" => MUSIC_FREQ_OUT <= 700; MUSIC_CODE <= 7; TONE_HL <= '1';
WHEN OTHERS => MUSIC_FREQ_OUT <= 2047; MUSIC_CODE <= 0; TONE_HL <= '1';
END CASE;
END IF;
END PROCESS second;
END a;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -