LIBRARY IEEE;
USE IEEE.std_logic_1164.ALL;
USE IEEE.numeric_std.ALL;
USE IEEE.std_logic_unsigned.ALL;
ENTITY LED IS
GENERIC (LIMIT : INTEGER := 255);
PORT (
sys_clk : IN STD_LOGIC;
sys_rst_n : OUT STD_LOGIC;
MY_LED : OUT BIT_VECTOR(7 DOWNTO 0);
MY_KEY : IN STD_LOGIC_VECTOR(7 DOWNTO 0);
INPT_1, INPT_2 : IN INTEGER RANGE 0 TO LIMIT;
OUTPUT_MAX : OUT INTEGER RANGE 0 TO LIMIT
);
END ENTITY LED;
ARCHITECTURE BEV OF LED IS
SIGNAL timer_count1 : INTEGER := 0;
SIGNAL timer_count2 : INTEGER := 0;
SIGNAL buff : BIT_VECTOR(7 DOWNTO 0) := "11111110";
CONSTANT TIME_1 : INTEGER := 24000000; ---1s
CONSTANT TIME_2 : INTEGER := 12000000; ---0.5s
SIGNAL flag_delay : BOOLEAN := FALSE;
SIGNAL temp : STD_LOGIC_VECTOR(2 DOWNTO 0);
----------------------上升沿函数------------------------------
FUNCTION positive_edge(SIGNAL s : STD_LOGIC) RETURN BOOLEAN IS
BEGIN
RETURN(s'event AND s = '1');
END FUNCTION positive_edge;
BEGIN
--实现方式一
--MY_LED <= "11111110" ROL conv_integer(MY_KEY);
--实现方式二
-- decode2 : PROCESS (MY_KEY)
-- BEGIN
-- MY_LED <= (OTHERS => '1'); --对MY_LED全部赋值为1
-- MY_LED(conv_integer(MY_KEY)) <= '0'; --选择一个赋值为0,使能
-- END PROCESS; -- decode2
-- 实现方式三
-- decode3 : PROCESS (MY_KEY)
-- VARIABLE temp : STD_LOGIC_VECTOR(2 DOWNTO 0);
-- BEGIN
-- MY_LED <= "11111111";
-- temp := MY_KEY(2) & MY_KEY(1) & MY_KEY(0);
-- CASE(temp) IS
-- WHEN "000" => MY_LED(0) <= '0';
-- WHEN "001" => MY_LED(1) <= '0';
-- WHEN "010" => MY_LED(2) <= '0';
-- WHEN "011" => MY_LED(3) <= '0';
-- WHEN "100" => MY_LED(4) <= '0';
-- WHEN "101" => MY_LED(5) <= '0';
-- WHEN "110" => MY_LED(6) <= '0';
-- WHEN "111" => MY_LED(7) <= '0';
-- WHEN OTHERS => NULL;
-- END CASE;
-- END PROCESS; -- decode3
--实现方式四
temp <= MY_KEY(2) & MY_KEY(1) & MY_KEY(0);
MY_LED(0) <= '0' WHEN (temp = "000") ELSE '1';
MY_LED(1) <= '0' WHEN (temp = "001") ELSE '1';
MY_LED(2) <= '0' WHEN (temp = "010") ELSE '1';
MY_LED(3) <= '0' WHEN (temp = "011") ELSE '1';
MY_LED(4) <= '0' WHEN (temp = "100") ELSE '1';
MY_LED(5) <= '0' WHEN (temp = "101") ELSE '1';
MY_LED(6) <= '0' WHEN (temp = "110") ELSE '1';
MY_LED(7) <= '0' WHEN (temp = "111") ELSE '1';
END ARCHITECTURE BEV;
VHDL编写3-8译码器-四种实现方式
最新推荐文章于 2024-08-10 21:29:54 发布