LIBRARY IEEE;
USE IEEE. STD_LOGIC_1164. ALL;
ENTITY oneprocess_fsm IS
PORT ( ip,reset,clk : IN BIT; --DECLARES THE INPUTS
op : OUT BIT ); --DECLARES THE OUTPUT
END oneprocess_fsm;
ARCHITECTURE operation_oneprocess_fsm OF oneprocess_fsm IS
TYPE statetype IS (S0, S1 ,S2 ,S3 ,S4 ,S5); --ENUMERATED DATA TYPE
SIGNAL state: statetype;
BEGIN
PROCESS( ip, reset, clk ) --BEGINING OF PROCESS WITH SENSITIVITY LIST
BEGIN
IF(reset='1') THEN
state<= S0;
ELSIF(clk'event and clk='1') THEN --ON CLK EVENT STATE IS LOADED
CASE state IS --CASE CHECKS FOR VARIOUS CONDITIONS DEPENDING ON THE STATES
WHEN S0 =>
IF(ip='1') THEN
state <= S1;
ELSE
state <= S0;
END IF;
WHEN S1 =>
IF(ip='0') THEN
state <= S2;
ELSE
state <= S1;
END IF;
WHEN S2 =>
IF(ip='0') THEN
state <= S3;
ELSE
state <= S1;
END IF;
WHEN S3 =>
IF(ip='1') THEN
state <= S4;
ELSE
state <= S0;
END IF;
WHEN S4 =>
IF(ip='1') THEN
state <= S5;
ELSE
state <= S2;
END IF;
WHEN S5 =>
IF(ip='1') THEN
state <= S1;
ELSE
state <= S2;
END IF;
END CASE; --END CASE
END IF;
END PROCESS;
WITH state SELECT --USE OF WITH SELECT TO GIVE OUPUT BASED ON STATE CONDITION
op <= '0' WHEN S0,
'0' WHEN S1,
'0' WHEN S2,
'0' WHEN S3,
'0' WHEN S4,
'1' WHEN S5,
'0' WHEN OTHERS;
END operation_oneprocess_fsm;