Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Laboratorio No4 - Diseño Digital - UNMSM
Laboratorio No4 - Diseño Digital - UNMSM
DISEÑO DIGITAL
LABORATORIO No4
Donde:
EP: estado presente.
ES: estado siguiente y se determina con las entradas y el estado presente.
La salida puede depender de la entrada y el estado presente (MEF de Mealy) ó sólo puede
depender del estado presente (MEF de Moore).
La señal de RESET es importante por que de esta manera forzamos a que la máquina inicie en un
estado conocido.
Hay varias formas de implementar una máquina de estado, la más utilizadas son:
library ieee;
use ieee.std_logic_1164.all;
entity detector is
port(Data : in std_logic;
clk : in std_logic;
z : out std_logic);
end detector;
combi: process(ep,Data)
begin
es <= ep;
case ep is
when S0 => z <='0'; if Data='0' then es<=S1; end if;
when S1 => z <='0'; if Data='1' then es<=S2; end if;
when S2 => z <='0'; if Data='0' then es <= S1;
else es <= S3;
end if;
when S3 => z <='0'; if Data='0' then es <= S4;
else es <= S0;
end if;
when S4 => z <='0'; if Data='0' then es <= S1;
else es <= S5;
end if;
when S5 => z <='1'; if Data='0' then es <= S1;
else es <= S3;
end if;
end case;
end process combi;
end moore;
library ieee;
use ieee.std_logic_1164.all;
entity semaforo is
port ( clk: in std_logic;
STOP: in std_logic;
ROJO,VERDE: out std_logic);
end semaforo;
reloj: process(clk)
begin
if clk='1' then
ep <= es;
if ep = S2 then contador <= contador + 1;
elsif ep = S1 then contador <= 0;
end if;
end if;
end process reloj;
combi: process(ep,STOP)
begin
es <= ep;
case ep is
when S0=> ROJO<='0'; VERDE <='1';
if STOP='1' then es <= S1; else es <=
S0; end if;
when S1=> VERDE <='0' ; ROJO <= '1';
es <= S2;
when S2=> VERDE <='0' ; ROJO <= '1';
if STOP='1' then es <= S1;
elsif contador=19 then es <= S0;
else es <= S2;
end if;
end case;
end process combi;
end moore;