library IEEE; use IEEE.std_logic_1164.all; entity lavatrice is port( ck : in std_logic; Start : in std_logic; Fill : in std_logic_vector(1 downto 0); Temp, Done : in std_logic; water, w_dir, heat, powder : out std_logic ); end lavatrice; architecture behavioral of lavatrice is type stato is (waiting, filling, heating, powdering, washing, unfilling); signal next_state, state : stato; begin process(state, Start, Fill, Temp, Done) begin case state is when waiting => if Start = '1' then next_state <= filling; else next_state <= state; end if; water <= '0'; w_dir <= '0'; heat <= '0'; powder <= '0'; when filling => if Fill = "11" then next_state <= heating; else next_state <= state; end if; water <= '1'; w_dir <= '0'; heat <= '0'; powder <= '0'; when heating => if Temp = '1' then next_state <= powdering; else next_state <= state; end if; water <= '0'; w_dir <= '0'; heat <= '1'; powder <= '0'; when powdering => next_state <= washing; water <= '0'; w_dir <= '0'; heat <= '0'; powder <= '1'; when washing => if Done = '1' then next_state <= unfilling; else next_state <= state; end if; water <= '0'; w_dir <= '0'; heat <= '0'; powder <= '0'; when others => if Fill = "00" then next_state <= waiting; else next_state <= state; end if; water <= '1'; w_dir <= '1'; heat <= '0'; powder <= '0'; end case; end process; process(ck) begin if (ck'event and ck='1') then state <= next_state; end if; end process; end behavioral;