library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.NUMERIC_STD.ALL; entity Device_Controller is Port( clk : IN STD_LOGIC ; CTRL_BYTE : IN STD_LOGIC_VECTOR(7 DOWNTO 0) ; RESET : OUT STD_LOGIC ; PERIOD : OUT STD_LOGIC_VECTOR(3 DOWNTO 0) ; OPERATION : OUT STD_LOGIC ); end Device_Controller; architecture Behavioral of Device_Controller is signal s_clk : STD_LOGIC ; signal s_RESET : STD_LOGIC := '0'; signal s_CTRL_BYTE : STD_LOGIC_VECTOR(7 DOWNTO 0) ; signal s_PERIOD : STD_LOGIC_VECTOR(3 DOWNTO 0) := "0001"; SIGNAL s_OPERATION : STD_LOGIC := '0'; begin s_clk <= clk ; RESET <= s_RESET ; s_CTRL_BYTE <= CTRL_BYTE ; process(s_clk, s_CTRL_BYTE) begin if ( rising_edge(s_clk) ) then case s_CTRL_BYTE is when "01000001" => -- A start BYTE s_OPERATION <= '1' ; when "01000010" => -- B stop BYTE s_OPERATION <= '0' ; ------ PERIOD --------------------------------------------- when "01000011" => -- C 1 sec BYTE s_PERIOD <= "0001" ; when "01000100" => -- D 5sec BYTE s_PERIOD <= "0010" ; when "01000101" => -- E 10sec BYTE s_PERIOD <= "0011" ; when "01000110" => -- F 30sec BYTE s_PERIOD <= "0100" ; when "01000111" => -- G 1min BYTE s_PERIOD <= "0101" ; when "01001000" => -- H 5min BYTE s_PERIOD <= "0110" ; when "01001001" => -- I 10min BYTE s_PERIOD <= "0111" ; when "01001010" => -- J 30min BYTE s_PERIOD <= "1000" ; when "01001011" => -- K 1 hour BYTE s_PERIOD <= "1001" ; ---------------------------------------------------------- when "01001100" => -- L "set RESET" BYTE s_RESET <= '1' ; when "01001101" => -- M "reset RESET" BYTE s_RESET <= '0' ; when others => s_OPERATION <= '0' ; end case ; end if ; end process; OPERATION <= s_OPERATION ; PERIOD <= s_PERIOD ; end Behavioral;