Programación en VHDL/Ejemplos/Máquinas de estados

De Wikilibros, la colección de libros de texto de contenido libre.
← Ejemplos/Biestable-Latch Máquinas de estados Ejemplos/ALU →



El objetivo es crear un sistema que genere unas salidas determinadas, dependiendo de los estados por donde va fluyendo la ruta de datos. Por consiguiente, hará falta el reset y reloj del sistema como entradas del sistema. También se añade una señal para sacar el estado al exterior.

  • Entradas:
    • rst: Reset del sistema.
    • clk: Reloj del sistema.
  • Salidas:
    • a: Salida de datos.
    • b: Salida de datos.
    • estado: Salida del estado.

     LIBRARY IEEE;
     USE IEEE.STD_LOGIC_1164.ALL;

     ENTITY maquina_estados IS
       PORT (clk : IN std_logic;
             rst : IN std_logic;
             a : OUT std_logic;
             b : OUT std_logic;
             estado : OUT std_logic_vector(3 downto 0));
     END maquina_estados;

     ARCHITECTURE synth OF maquina_estados IS
       SIGNAL pstate, n_state : std_logic_vector(3 downto 0);
     BEGIN

    -- maquina de estados

     PROCESS (clk, rst)
     BEGIN
       IF rst = '1' THEN
         pstate <= "0000";
       ELSIF clk = '1' AND clk'event THEN
         pstate <= n_state;
       END IF;
     END PROCESS;

     estado <= pstate;

     n_state <= "0001" WHEN (pstate = "0000") ELSE
	        "0010" WHEN (pstate = "0001") ELSE
                "0011" WHEN (pstate = "0010") ELSE
	        "0100" WHEN (pstate = "0011") ELSE
                "0101" WHEN (pstate = "0100") ELSE
	        "0011" WHEN (pstate = "0101") ELSE
	        "0111" WHEN (pstate = "0011") ELSE
	        "1000" WHEN (pstate = "0111") ELSE
	        "1001" WHEN (pstate = "1000") ELSE
                "0000";

     a <= '1' WHEN pstate = "0000" ELSE --0
	  '0' WHEN pstate = "0001" ELSE --1
	  '0' WHEN pstate = "0010" ELSE --2
	  '1' WHEN pstate = "0011" ELSE --3
	  '1' WHEN pstate = "0100" ELSE --4 
	  '1' WHEN pstate = "0101" ELSE --5
	  '1' WHEN pstate = "0110" ELSE --6
	  '1' WHEN pstate = "0111" ELSE --7
	  '1' WHEN pstate = "1000" ELSE --8
	  '1' WHEN pstate = "1001" ELSE --9
	  '0';

     b <= '1' WHEN pstate = "0000" ELSE --0
	  '1' WHEN pstate = "0001" ELSE --1
	  '1' WHEN pstate = "0010" ELSE --2
	  '1' WHEN pstate = "0011" ELSE --3
	  '1' WHEN pstate = "0100" ELSE --4
	  '0' WHEN pstate = "0101" ELSE --5
	  '0' WHEN pstate = "0110" ELSE --6
	  '1' WHEN pstate = "0111" ELSE --7
	  '1' WHEN pstate = "1000" ELSE --8
	  '1' WHEN pstate = "1001" ELSE --9
	  '0';

     END synth;

← Ejemplos/Biestable-Latch Máquinas de estados Ejemplos/ALU →