Tabla de contenido
--Bilbiotecas
library ieee;
use ieee.std_logic_1164.all;
entity SS_MOTOR is
port(
clk : in std_logic; -- Entrada de reloj
ss : in std_logic; -- Entrada de señal de control
motor : out std_logic -- Salida del motor
);
--Pines definidos
attribute LOC : string;
-- Asignación de pines de entrada
attribute LOC of clk : signal is "P1"; -- Asignación de ubicación para el reloj
attribute LOC of ss : signal is "P2"; -- Asignación de ubicación para la señal de control
-- Asignación de pines de salida
attribute LOC of motor : signal is "P23"; -- Asignación de ubicación para la salida del motor
end SS_MOTOR;
architecture RTL of SS_MOTOR is
type nom_estados is (e0, e1, e2, e3); -- Definición de los estados
signal estado : nom_estados := e0; -- Estado inicial
begin
process(clk)
begin
if rising_edge(clk) then -- Comprobación de flanco de subida del reloj
case estado is
when e0 =>
if (ss = '1') then -- Transición si hay un flanco de subida en la señal de control
estado <= e1;
else
estado <= e0;
end if;
when e1 =>
if (ss = '1') then -- Transición si hay un flanco de subida en la señal de control
estado <= e1;
else
estado <= e2; -- Volver al estado inicial si no hay un flanco de subida en la señal de control
end if;
when e2 =>
if (ss = '1') then -- Transición si hay un flanco de subida en la señal de control
estado <= e3;
else
estado <= e2; -- Mantener el estado actual si no hay un flanco de subida en la señal de control
end if;
when e3 =>
if (ss = '1') then -- Transición si hay un flanco de subida en la señal de control
estado <= e3;
else
estado <= e0; -- Volver al estado inicial si no hay un flanco de subida en la señal de control
end if;
end case;
end if;
end process;
-- Lógica combinacional para controlar la salida del motor según el estado actual
with estado select
motor <= '0' when e0,
'1' when e1,
'1' when e2,
'0' when e3;
end RTL;