VHDL编写3-8译码器-四种实现方式

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;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值