library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
use ieee.numeric_std.all;
entity CrossLED is
Port (
nRST: in std_logic; -- 系統復位控制信號,低電平有效。
--
-- 各信號下標3、2、1、0對應方向東、南、西、北。
-- 輸出0,對應信號燈亮;輸出1,對應信號燈滅。
--
State: in std_logic_vector(1 downto 0); --
Yellow: out std_logic_vector(3 downto 0);
Red: out std_logic_vector(3 downto 0);
Blue: out std_logic_vector(3 downto 0)
);
end CrossLED;
architecture Behavioral of CrossLED is
begin
Yellow <= "0000" when nRST = '0' else -- 復位狀態東西南北黃燈亮。
"1111" when State = "00" else -- 東西兩側紅燈亮,南北兩側綠燈亮。
"1010" when State = "01" else -- 東西兩側紅燈亮,南北兩側黃燈亮(準備變紅燈)。
"1111" when State = "10" else -- 東西兩側綠燈亮,南北兩側紅燈亮。
"0101" when State = "11" else -- 東西兩側黃燈亮(準備變紅燈),南北兩側紅燈亮。
"0000";
Red <= "1111" when nRST = '0' else -- 復位狀態東西南北黃燈亮。
"0101" when State = "00" else -- 東西兩側紅燈亮,南北兩側綠燈亮。
"0101" when State = "01" else -- 東西兩側紅燈亮,南北兩側黃燈亮(準備變紅燈)。
"1010" when State = "10" else -- 東西兩側綠燈亮,南北兩側紅燈亮。
"1010" when State = "11" else -- 東西兩側黃燈亮(準備變紅燈),南北兩側紅燈亮。
"1111";
Blue <= "1111" when nRST = '0' else -- 復位狀態東西南北黃燈亮。
"1010" when State = "00" else -- 東西兩側紅燈亮,南北兩側綠燈亮。
"1111" when State = "01" else -- 東西兩側紅燈亮,南北兩側黃燈亮(準備變紅燈)。
"0101" when State = "10" else -- 東西兩側綠燈亮,南北兩側紅燈亮。
"1111" when State = "11" else -- 東西兩側黃燈亮(準備變紅燈),南北兩側紅燈亮。
"1111";
end Behavioral;