library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
-- Uncomment the following library declaration if using
-- arithmetic functions with Signed or Unsigned values
--use IEEE.NUMERIC_STD.ALL;
-- Uncomment the following library declaration if instantiating
-- any Xilinx primitives in this code.
--library UNISIM;
--use UNISIM.VComponents.all;
entity maquina_4 is
    port (
     a: in  STD_LOGIC;
           b : in STD_LOGIC;
           y : out  STD_LOGIC_vector (2 downto 0);
     clk : in STD_LOGIC;
     reset : in STD_LOGIC);
end maquina_4;
architecture Behavioral of maquina_4 is
type estado is (s1,s2,s3,s4,s5,idle);
signal nextstate , currentstate :estado;
begin
siguiente : process (a,b,currentstate)
begin
 case Currentstate is 
  when idle=>
   Nextstate <= s1;
  when s1 =>
   if a ='1' then 
    Nextstate <= s2;
   else
    Nextstate <= s1;
    end if;   
  When s2=>
   if a ='0' and b = '1' then
    Nextstate <=s3;
   elsif a ='1' and b = '1' then
    Nextstate <= s4;
   elsif a ='1' and b = '0' then
    Nextstate <= s5;
   else Nextstate <= s2;
    end if;
  when s3 =>
    Nextstate <= s4;
  when s4 => 
    nextstate <= idle;
  when s5 => 
    nextstate <= idle;
 end case;
end process;
FFs: process (clk, reset)
begin
 if reset = '1' then
  currentstate <= idle;
 elsif clk'event and clk='1' then
  currentstate <= nextstate;
 end if;
end process;
output : process (clk,reset)
begin 
if reset = '1'then
y <= "000";
elsif clk'event and clk='1' then
 case nextstate is 
  when idle => 
   y <= "000";
  when s1 => 
   y <= "101";
  when s2 => 
   y <= "111";
  when s3 => 
   y <= "011";
  when s4 => 
   y <= "000"; 
  when s5 => 
   y <= "100";
 end case  ; 
 end if;
end process;
end Behavioral;


No hay comentarios:
Publicar un comentario