He estado intentando crear un FSM usando las ecuaciones de excitación que desarrollé. No he tenido mucha suerte. El circuito no tiene salida.
NO QUIERO UTILIZAR 'TIPO' y tipos de estado personalizados. Esa es la manera más fácil de salir. Por favor, no me digas que es lo que harías! Es probablemente lo que yo haría también. Estoy tratando de forzarme a aprender nuevos métodos.
A continuación encontrará mi proceso para la secuencia "2314". Configuré mi DE2 para que a los botones se les asignara un número, es decir, X (0) es el botón 0 o el número "1".
Descubrí que el programa necesitaría 5 estados (3 FF) usando una máquina Moore. Si no hay entrada en el estado ("0000"), la entrada debería mantenerse. Decidí usar las chancletas D para este experimento para facilitar las transiciones. Resulta que no es tan sencillo! Gracias por tu ayuda.
Mis ecuaciones para los flip flops D son las siguientes (derivadas del diagrama de estado / tabla de transición) Es posible que no se simplifiquen por completo, ¡lo siento!
d0 = Q2'.Q0 '. (X1.Q1' + X2.Q1)
d1 = Q2 '. (X2'Q1.Q0' + X3.Q1'.Q0)
d2 = x0.Q2'.Q1.Q0
z = Q2.Q1'.Q0 '
Encontrará el código VHDL a continuación. El componente también se muestra a continuación. El archivo VHDL actual es solo uno de mis muchos intentos fallidos. La simulación no tiene salida, por lo que z es una constante '0'.
library ieee;
use ieee.std_logic_1164.all;
entity sequencedetecttwo is
port (
x : in std_logic_vector (3 downto 0);
clk : in std_logic;
z : out std_logic
);
end entity sequencedetecttwo;
architecture arch of sequencedetecttwo is
signal q : std_logic_vector (2 downto 0);
signal d : std_logic_vector (2 downto 0);
component dflipflop is
port (
clk, d : in std_logic;
q : out std_logic
);
end component;
BEGIN
dff0 : dflipflop port map (clk => clk, d => d(0));
dff1 : dflipflop port map (clk => clk, d => d(1));
dff2 : dflipflop port map (clk => clk, d => d(2));
p0 : PROCESS(clk, q)
BEGIN
d(0) <= q(0);
d(1) <= q(1);
d(2) <= q(2);
IF (clk'EVENT AND clk = '1') THEN
q(0) <= not q(2) and not q(0) and ((x(1) and not q(1)) or (x(2) and q(1)));
q(1) <= not q(2) and ((not x(2) and q(1) and not q(0)) or (x(3) and not q(1) and q(0)));
q(2) <= x(0) and not q(2) and q(1) and q(0);
END IF;
END PROCESS p0;
z <= q(2) and not q(1) and not q(0);
END ARCHITECTURE arch;
Y el componente flip flop:
library ieee;
use ieee.std_logic_1164.all;
entity dflipflop is
port (
clk, d : in std_logic;
q : out std_logic
);
end entity dflipflop;
architecture arch of dflipflop is
begin
p0 : process (clk)
begin
if (clk'event and clk = '1') then
q <= d;
end if;
end process;
end architecture arch;