Implementando un FSM usando flip flops JK en VHDL

0

Este es otro proyecto semestral en el que estoy atascado. Necesito implementar una máquina de estado a partir del siguiente diagrama:

Loquehelogradohastaahoraesescribirestatabladeestado,aunqueestoybastantesegurodequemeheequivocadodealgohastaaquí.

Creo que el siguiente paso sería dibujar un mapa de Karnaugh, pero no tengo idea de cómo asignar los valores de entrada.

También dice que necesito usar una memoria de 8x4, pero me preocuparé una vez que llegue a ella. Por el momento, estoy atrapado en el mapa-K. ¿Alguna ayuda? ¿Es la tabla al menos correcta?

    
pregunta Danesan Dragos

1 respuesta

1

La tabla de estado es demasiado complicada. Si usa los valores apropiados extraídos del conjunto [0,1,a,b] para las entradas J, K de cada flop, puede reducirlo a solo 8 entradas. Lo que puede darle alguna indicación de cómo proceder con el siguiente paso.

Haré una observación sobre el ejercicio: especificar el uso de flip-flops J-K puede estar bien para la enseñanza: es importante comprender los componentes fundamentales. Pero una vez que vea cómo encaja todo, es más sencillo y práctico implementar el SM en el comportamiento, algo como:

library ieee;
use ieee.std_logic_1164.all;

entity State_Machine is
   port ( Clock : in std_logic );        
end entity;

architecture Behavioural of State_Machine is

-- State could be an integer
--   type State_Type is range 0 to 7;
-- or an enumeration
   type State_Type is (s0, s1, s2, s3, s4, s5, s6, s7);
   signal State : State_Type;
   signal a,b : boolean;

begin

SM: process(clock) is

   function switch (test : Boolean; T,F : State_Type) return State_Type is
   begin
      if Test then
         return T;
      else
         return F;
      end if;
   end switch;

begin
   if rising_edge(clock) then
      case State is
      when s0 => State <= switch(a, T => s1, F => s7);
      when s1 => State <= switch(b, T => s2, F => s6);
      when s4 => State <= switch(b, T => s5, F => s3);
      when s5 => State <= switch(a, T => s6, F => s2);
      when s7 =>
         if a then 
            State <= s0; 
         end if;
      when others => State <= State_Type'succ(State);
      end case;
   end if;
end process SM;

end architecture;
    
respondido por el Brian Drummond

Lea otras preguntas en las etiquetas