Está en la página 1de 2

APLICACIN

Esta aplicacin consiste en el diseo de un circuito que detectara una secuencia determinada de pulsadores. Despus de introducir la clave se encender un LED como indicador de que es correcta, como si el LED fuese un actuador que abriese una puerta. La clave secreta es ingresada mediante cuatro pulsadores (PbU, PbD, PbR, PbL), adems el circuito cuenta con entradas de reloj y reset. Consideremos que la clave es PbU, PbU, PbD, PbR (para resumir UUDR). Se considera que se puede introducir la clave correcta en cualquier momento en que encuentre esa secuencia, esto es, no es necesario que solo se pueda introducir despus del reset. As pues, al final de la secuencia LUURLUUUDR se lograra abrir la puerta, independientemente de que hayamos introducido una secuencia errnea al principio. Es importante resaltar que si no se recibe ninguna pulsacin el estado se mantiene, lo que suceder a menudo ya que la frecuencia del reloj es mucho mayor que la frecuencia con la que podamos pulsar.

DIAGRAMA DE ESTADO: (Considerando que cada pulsacin es activada en lgica negada 0)

VHDL
LIBRARY ieee; USE ieee.std_logic_1164.all; ENTITY ckto2 IS PORT (clk, rstn, pU, pD, pR, pI: in std_logic; z: out std_logic); END ckto2; ARCHITECTURE detector OF ckto2 IS TYPE estados IS (cero, uno, dos, tres, cuatro); SIGNAL estado_p, estado_s: estados; -- estado_p: estado presente. -- estado_s: estado siguiente. BEGIN seq: PROCESS(clk, rstn) BEGIN IF (rstn = '0') THEN estado_p <= cero; ELSIF (Rising_Edge(clk)) THEN estado_p <= estado_s; END IF; END PROCESS seq; estado_s <= cero; END IF; WHEN tres => IF (pR = '0') THEN estado_s <= cuatro; ELSIF (pU = '0') THEN estado_s <= uno; ELSE estado_s <= cero; END IF; WHEN cuatro => IF (pU = '0') THEN estado_s <= uno; ELSE estado_s <= cero; END IF; WHEN OTHERS => estado_s <= cero; END CASE; END PROCESS comb; sal: PROCESS(estado_p) BEGIN CASE estado_p IS WHEN cuatro => z <= '1'; WHEN OTHERS => z <= '0'; END CASE; END PROCESS sal; END detector;

comb: PROCESS(estado_p) BEGIN CASE estado_p IS WHEN cero => IF (pU = '0') THEN estado_s <= uno; ELSE estado_s <= cero; END IF; WHEN uno => IF (pU = '0') THEN estado_s <= dos; ELSE estado_s <= cero; END IF; WHEN dos => IF (pD = '0') THEN estado_s <= tres; ELSIF (pU = '0') THEN estado_s <= dos; ELSE

También podría gustarte