Tabla de contenido
Ejemplo Boton Start STOP
--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;