A finite state machine has one input x and one output z The
Solution
LIBRARY ieee;
USE ieee.std_logic_1164.all;
ENTITY fsm1 IS
PORT (
clk : IN STD_LOGIC;
reset : IN STD_LOGIC := \'0\';
x : IN STD_LOGIC := \'0\';
z : OUT STD_LOGIC
);
END fsm1;
ARCHITECTURE BEHAVIOR OF fsm1 IS
TYPE type_present_state IS (s0,s1,s2);
SIGNAL present_state : stateType;
SIGNAL Next_state : stateType;
BEGIN
PROCESS (clk,reset,present_state)
BEGIN
IF (reset=\'1\') THEN
present_state <= s0;
ELSIF (clk=\'1\' AND clk\'event) THEN
present_state <= Next_state;
END IF;
END PROCESS;
PROCESS (present_state,x)
BEGIN
z <= \'0\';
CASE present_state IS
WHEN s0 =>
IF ((x = \'1\')) THEN
Next_state <= s1;z<=\'0\'
ELSE
Next_state <= s1;z<=\'1\'
END IF;
WHEN s1 =>
IF ((x = \'1\')) THEN
Next_state <= s1;z<=\'0\'
ELSE
Next_state <= s2;z<=\'0\'
END IF;
WHEN s2 =>
IF ((x = \'1\')) THEN
Next_state <= s1;z<=\'1\'
ELSE
Next_state <= s2;z<=\'0\'
END IF;
WHEN OTHERS =>
z <= \'X\';
report \"Reach undefined state\";
END CASE;
END PROCESS;
END BEHAVIOR;

