Professional Documents
Culture Documents
Régimen diurno: Luz roja, amarilla, verde y amarilla. Al llegar aquí si F = 1 se repite el ciclo anterior, de lo contrario se pasa a la
operación nocturna. La luz roja y la verde deben tener la misma duración, lo que será de tres periodos de reloj. La luz amarilla
durara un periodo de la señal de reloj.
Solución:
Tabla de estados / salidas.
EP EF Salidas
F=0 F=1 R A V
R1 R2 R2 1 0 0
R2 R3 R3 1 0 0
R3 A1 A1 1 0 0
A1 V1 V1 0 1 0
V1 V2 V2 0 0 1
V2 V3 V3 0 0 1
V3 A2 A2 0 0 1
A2 N R1 0 1 0
N A2 A2 0 0 0
Dado que hay 9 estados se necesita un código de 4 bits. Para lograr esto utilizaremos el contador binario ascendente 74x163. la
asignación de estados es la mostrada en la próxima tabla.
EP EF Salidas
Qd Qc Qb Qa F=0 F=1 R A V
R1 0000 0001 0001 1 0 0
R2 0001 0010 0010 1 0 0
R3 0010 0011 0011 1 0 0
A1 0011 0100 0100 0 1 0
V1 0100 0101 0101 0 0 1
V2 0101 0110 0110 0 0 1
V3 0110 0111 0111 0 0 1
A2 0111 1000 0000 0 1 0
N 1000 0111 0111 0 0 0
1
Electrónica Digital II Problemas de Diseño de Circuitos Secuenciales # 1
Profesor: Víctor Escartín
Qb Qa Qb Qa Qb Qa
00 01 11 10 00 01 11 10 00 01 11 10
Qd Qc Qd Qc Qd Qc
00 1 1 1 00 1 00
01 01 1 01 1 1 1
11 x x x x 11 x x x x 11 x x x x
10 x x x 10 x x x 10 x x x
U7
2
U2 3 1
4 U8
2 1 2
1 R
3
U6
U3 2
VCC 3 1
U15 2 1 4
3 14
4 A QA 13 U12
5 B QB 12 2
6 C QC 11 1
D QD A
15 3
7 RCO
10 ENP
U9
2 ENT 2
CLK CLK
U4
9 1
1 LOAD 2 1 3
CLR
U11
74HCT163 2
1 V
U10 3
2
U5 1
3
2 1
U18
F 2 M
1
3 C
2 U16
3
1
4
5
2
Electrónica Digital II Problemas de Diseño de Circuitos Secuenciales # 1
Profesor: Víctor Escartín
Ejemplo # 2.
Diseñe en un PLD, una maquina de estados sincrónica tipo Moore para controlar las luces de un semáforo con un régimen de
trabajo diurno y otro nocturno. El régimen nocturno se determina mediante una señal de control, F = C ⊕ M = 0, donde C es la
salida de una foto celda y M es la entrada de un interruptor. El régimen diurno ocurre cuando F = 1. La señal M posibilita que en
una noche de mucho trafico el semáforo funcione como si fuera de día y por el contrario que pase al régimen nocturno durante el
día si hay poco trafico.
Régimen diurno: Luz roja, amarilla, verde y amarilla. Al llegar aquí si F = 1 se repite el ciclo anterior, de lo contrario se pasa a la
operación nocturna. La luz roja y la verde deben tener la misma duración, lo que será de tres periodos de reloj. La luz amarilla
durara un periodo de la señal de reloj.
--Proyecto : FSM_1
--Fichero : EJ_1
--Dispositivo : 16V8
LIBRARY IEEE;
USE IEEE.Std_Logic_1164.ALL;
3
Electrónica Digital II Problemas de Diseño de Circuitos Secuenciales # 1
Profesor: Víctor Escartín
Ejemplo # 3.
Diseñe en un PLD, un semáforo de aviso de paso de tren en un cruce de vía única con doble sentido de circulación y un camino.
A B
Funcionamiento:
La vía posee a ambos lados del cruce y a una distancia de seguridad, sendos detectores de paso de tren (A) y (B). Los trenes
circulan por ella en ambas direcciones y se desea que el semáforo señale presencia de tren desde que este alcanza el primer sensor
en su dirección de marcha hasta que pasa por el segundo sensor tras abandonar el cruce.
EP EF Salida
AB
Observación 00 01 11 10
Espera Espera Espera DI - ID 0
Izquierda a derecha ID Espera ID ID ID 1
Derecha a izquierda DI Espera DI DI DI 1
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY SEMAFORO IS
PORT (A,B,CLK,RESET: IN STD_LOGIC;
SEMAF: OUT STD_LOGIC);
END SEMAFORO;
4
Electrónica Digital II Problemas de Diseño de Circuitos Secuenciales # 1
Profesor: Víctor Escartín
Ejemplo # 4.
Diseñe en un PLD, un sistema de molienda de café.
Funcionamiento:
El sistema está formado por dos motores trituradores (M1) y (M2) funcionando de la siguiente forma:
• Cuando el nivel de café dentro de la tolva se encuentre entre (S) e ( I ), sólo debe funcionar uno de los dos motores, de tal
forma, que cada vez que se ponga en marcha uno de ellos, lo haga aquel que estaba parado cuando el otro trabajaba.
• Si el nivel sobrepasa el detector (S), deben funcionar los dos motores simultáneamente, mientras que si no sobrepasa el
detector ( I ), se deben parar ambos.
• Se supone que inicialmente fue M2 el motor que primero funcionó.
EF Salida
SI
Observación EP 00 01 11 10 M1 M2
Anteriormente funciono M2 A A B C - 0 0
Anteriormente funciono M2 B F B D - 1 0
Anteriormente funciono M2 C A B C - 1 1
Anteriormente funciono M1 D F E D - 1 1
Anteriormente funciono M1 E A E D - 0 1
Anteriormente funciono M1 F F E D - 0 0
--Proyecto : FSM_1
--Fichero : FSM_4
--Dispositivo : 22V10
LIBRARY IEEE;
USE IEEE.Std_Logic_1164.ALL;
PROCESS(Reset,CLK)
BEGIN
IF Reset = '0' THEN Estado <= A;
ELSIF Rising_Edge(CLK) THEN Estado <= Nxt_Estado;
END IF;
END PROCESS;
6
Electrónica Digital II Problemas de Diseño de Circuitos Secuenciales # 1
Profesor: Víctor Escartín
Ejemplo # 5.
Diseñe en un PLD, un dispositivo de control electrónico para un juego de azar.
Funcionamiento:
El dispositivo de control tiene dos entradas (A) y (B) y una salidas (Z). La entrada (A) es la correspondiente al reloj, y marcará con
su flanco de subida los instantes en los que el control cambiará sus salidas.
La entrada (B) determinará la naturaleza exacta del cambio en las salidas:
• Si (B=0) , las salidas se incrementarán en uno su valor actual siguiendo una secuencia binaria natural en módulo 8.
• Si (B=1), las salidas se incrementarán en tres su valor actual, siempre que dicho valor sea par; en caso contrario las
salidas se decrementarán en uno.
EP EF
B Salidas
0 1 Z2 Z1 Z0
Inicio S0 S1 S3 0 0 0
S1 S2 S0 0 0 1
S2 S3 S5 0 1 0
S3 S4 S2 0 1 1
S4 S5 S7 1 0 0
S5 S6 S4 1 0 1
S6 S7 S2 1 1 0
S7 S0 S6 1 1 1
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY JUEGO IS
PORT (B,CLK,RESET:IN STD_LOGIC;
Z2,Z1,Z0:OUT STD_LOGIC);
END JUEGO;
7
Electrónica Digital II Problemas de Diseño de Circuitos Secuenciales # 1
Profesor: Víctor Escartín
PROC2:PROCESS(CLK,RESET)
BEGIN
IF RESET='1' THEN EST<=S0;
ELSIF (CLK='1' AND CLK'EVENT) THEN EST<=PROXEST;
END IF;
END PROCESS;
END ARCHIJUEGO;
8
Electrónica Digital II Problemas de Diseño de Circuitos Secuenciales # 1
Profesor: Víctor Escartín
Ejemplo # 6.
Diseñe en un PLD, el circuito lógico de control de un motor.
Funcionamiento:
El circuito de control consta de tres entradas (A, B, C) y dos salidas (MD, MI) funcionando de la siguiente manera:
• si el interruptor (A) está desactivado el circuito lógico impedirá el arranque del motor.
• Si el interruptor (A) está activado:
o al accionar el pulsador (B) el motor girará hacia la izquierda y lo seguirá haciendo aun cuando se suelte.
o al pulsar (C) el motor girará hacia la derecha y continuará así incluso cuando se deje de pulsar.
o Si (B) y (C) son pulsados simultáneamente el motor girará hacia la izquierda.
• En el estado inicial, el motor se encuentra parado y no hay ninguna entrada activada.
Observación EP EF
ABC Salidas
000 001 011 010 100 101 111 110 MD MI
S0 S0 S0 S0 S0 S0 S2 S1 S1 0 0
Gira a la Izq S1 S0 S0 S0 S0 S1 S2 S1 S1 0 1
Gira a la Der S2 S0 S0 S0 S0 S2 S2 S1 S1 1 0
--Proyecto : FSM_1
--Fichero : FSM_6
--Dispositivo : 22V10
LIBRARY IEEE;
USE IEEE.Std_Logic_1164.ALL;
PROCESS(Reset,CLK)
BEGIN
IF Reset = '0' THEN Estado <= S0;
ELSIF Rising_Edge(CLK) THEN Estado <= Nxt_Estado;
END IF;
END PROCESS;
10
Electrónica Digital II Problemas de Diseño de Circuitos Secuenciales # 1
Profesor: Víctor Escartín
Ejemplo # 7.
Diseñar en un PLD, un circuito de alarma con dos entradas SET e INTRUDER. Cuando SET = 1 e INTRUDER = 1, el circuito
debe activar una salida HORN para avisar de la ocurrencia de una violación en este sistema de seguridad. Cuando SET = 0 el
sistema no esta activo y la salida HORN = 0. Cuando SET = 1 y INTRUDER = 0, indica que no hay violación en el sistema de
seguridad aunque esta activo y la salida HORN = 0.
ENTRADAS SALIDA
SET Habilitación de la alarma
Si esta activa (1) indica violación en el
Señaliza la presencia de HORN
INTRUDER sistema de seguridad
un Intruso
Tabla de estado.
Observación Estado actual Estado futuro, salida
SET INTRUDER
00 01 11 10
Alarma NO activa AlarmaOFF AlarmaOFF, 0 AlarmaOFF, 0 AlarmaON, 0 AlarmaON, 0
Alarma activa AlarmaON AlarmaOFF, 0 AlarmaOFF, 0 Violación, 1 AlarmaON, 0
Detección de Intruso Violacion AlarmaOFF, 0 AlarmaOFF, 0 Violación, 1 Violación, 1
Esta maquina también puede ser del tipo Moore. La diferencia esta en que en el estado AlarmaON y con la entrada 11, si la
maquina es Mearly la salida se activa y si es Moore se activara cuando llegue el reloj y pase al estado de violación.
El periodo del reloj debe ser menor que el menor tiempo que puede estar activo la señal de INTRUDER.
-- File: Alarma_1
--This Mealy machine implements a security system with a state table.
--The machine has three states (AlarmaOFF, AlarmaON, and Violacion)
--and two inputs or sensors (set and intruder).
--The security system can be turned to the Off state by deasserting set.
--A horn(output) sounds if the system is On and intruder is asserted.
-- Dispositivo: 16V8
LIBRARY IEEE;
USE IEEE.Std_Logic_1164.ALL;
BEGIN
PROC1: PROCESS (set, intruder)
BEGIN
CASE state IS
WHEN AlarmaOFF => IF set = '1' THEN nextState <= AlarmaON;
ELSE nextState <= AlarmaOFF;
END IF;
WHEN AlarmaON => IF intruder = '1' THEN horn <= '1';
nextState <= Violacion;
ELSIF set = '0' THEN horn <= '0';
nextState <= AlarmaOFF;
ELSE nextState <= AlarmaON;
END IF;
WHEN Violacion => IF set = '0' THEN horn <= '0';
nextState <= AlarmaOFF;
ELSE nextState <= Violacion; -- Horrn ya esta en uno.
END IF;
11
Electrónica Digital II Problemas de Diseño de Circuitos Secuenciales # 1
Profesor: Víctor Escartín
WHEN others => nextState <= AlarmaOFF;
END CASE;
END PROCESS;
proc2: PROCESS(CLK)
BEGIN
IF CLK'Event AND CLK='1' THEN
state <= nextState;
END If;
END PROCESS;
END;
DESIGN EQUATIONS
stateSBV_0.D = intruder * stateSBV_1.Q
+ set * stateSBV_0.Q
stateSBV_0.C = clk
stateSBV_1.C = clk
12
Electrónica Digital II Problemas de Diseño de Circuitos Secuenciales # 1
Profesor: Víctor Escartín
Ejemplo # 8.
Veamos otra variante de realización del ejemplo 1, utilizando un solo PROCESS
Tabla de estado.
Observación Estado actual Estado futuro, salida
SET INTRUDER
00 01 11 10
Alarma NO activa AlarmaOFF AlarmaOFF, 0 AlarmaOFF, 0 AlarmaON, 0 AlarmaON, 0
Alarma activa AlarmaON AlarmaOFF, 0 AlarmaOFF, 0 Violación, 1 AlarmaON, 0
Detección de Intruso Violacion AlarmaOFF, 0 AlarmaOFF, 0 Violación, 1 Violación, 1
-- File: Alarma_3
-- simple security system uses a mealy machine
--This Mealy machine implements a security system with a state table.
--The machine has three states (AlarmaOFF, AlarmaON, and Violacion)
--and two inputs or sensors (set and intruder).
--The security system can be turned to the Off state by deasserting
--set. A horn(output) sounds if the system is On and intruder is
--asserted.
LIBRARY IEEE;
USE IEEE.Std_Logic_1164.ALL;
BEGIN
PROC1: PROCESS (CLK)
BEGIN
IF CLK'Event AND CLK='1' THEN
CASE state IS
WHEN AlarmaOFF =>
IF set = '1' THEN State <= AlarmaON;
ELSE State <= AlarmaOFF;
END IF;
WHEN AlarmaON =>
IF intruder = '1' THEN State <= Violacion;
ELSIF set = '0' THEN State <= AlarmaOFF;
ELSE State <= AlarmaON;
END IF;
WHEN Violacion =>
IF set = '0' THEN State <= AlarmaOFF;
ELSE State <= Violacion;
END IF;
WHEN others => State <= AlarmaOFF;
END CASE;
END IF;
END PROCESS;
HORN <= '1' WHEN State = AlarmaON AND SET = '1' AND intruder = '1' ELSE
'1' WHEN State = Violacion AND SET = '1' ELSE
'0';
END;
13
Electrónica Digital II Problemas de Diseño de Circuitos Secuenciales # 1
Profesor: Víctor Escartín
DESIGN EQUATIONS
horn = set * intruder * stateSBV_1.Q
+ set * stateSBV_0.Q
14
Electrónica Digital II Problemas de Diseño de Circuitos Secuenciales # 1
Profesor: Víctor Escartín
Ejemplo # 9.
Diseñe en un PLD, el circuito de control de un equipo para entregar latas de refrescos. El equipo admite monedas de 5 (nickel), 10
(dime) y 25 (quarter). El costo del refresco es de 30 centavos. Cuando se le entrega al equipo el costo de un refresco este activa
una salida (GiveDrink) para permitir la salida de la lata de refresco. Si hay que dar vuelto se activa una salida ( returnNickel) para
devolver 5 centavos, otra salida (ReturnDime) si hay que devolver 10 centavos.
ENTRADAS SALIDAS
Nickel 5 centavos GiveDrink Habilita la salida del refresco
Dime 10 centavos ReturnNickel Devuelve 5 centavos
Quarter 25 centavos ReturnDime Devuelve 10 centavos
En este sistema el reloj tiene que ser mas rápido que el tiempo en que la moneda pasa por el sensor que la detecta.
Las salidas cuando están en UNO dependen del estado y de la señal de entrada por lo que depende del tiempo en que la entrada esta
en uno. Si este tiempo es suficiente, perfecto de lo contrario la salida hay que utilizarla solo como una señal para que activen al
dispositivo que se encarga de la operación de las salidas.
Tabla de estado.
Estado
Observación Estado futuro, salida
actual
Nickel Dime Quarter
000 001 010 100
No hay moneda Zero Zero Quarter Dime Five
Cinco centavos Five Five Zero,100 Fifteen Dime
Diez centavos Ten Ten Zero,110 Twenty Fifteen
Quince centavos Fifteen Fifteen Zero,101 Twenrty Five Twenty
Veinte centavos Twenty Twenty Zero,111 Zero,100 Twenty Five
Veinte y cinco centavos TwentyFive TwentyFive OweDime,101 Zero,110 Zero,100
Vuelto de diez centavos OweDime Zero,001 Zero,001 Zero,001 Zero,001
-- Refresco
--Dispositivo: 16V8
LIBRARY IEEE;
USE IEEE.Std_Logic_1164.ALL;
-- The following WHEN makes sure that the state machine resets
-- itself if it somehow gets into an undefined state.
WHEN others => drinkStatus <= zero;
END CASE;
END IF;
END process;
END;
16
Electrónica Digital II Problemas de Diseño de Circuitos Secuenciales # 1
Profesor: Víctor Escartín
DESIGN EQUATIONS
returndime.D = /nickel * /dime * quarter * drinkstatusSBV_1.Q *
drinkstatusSBV_2.Q
+ /nickel * /dime * quarter * drinkstatusSBV_0.Q
+ drinkstatusSBV_0.Q * drinkstatusSBV_1.Q
returndime.C = clk
returnnickel.C = clk
givedrink.C = clk
drinkstatusSBV_0.C = clk
drinkstatusSBV_1.C = clk
drinkstatusSBV_2.C = clk
17
Electrónica Digital II Problemas de Diseño de Circuitos Secuenciales # 1
Profesor: Víctor Escartín
Ejemplo # 10.
Diseñe utilizando un PLD, un semáforo con las siguientes características. La luz en la calle con dirección Norte – Sur es
usualmente verde y permanece así por un mínimo de 5 periodos del reloj antes de cambiar. Para que haya un cambio tiene que
haberse detectado la presencia de un carro por la calle con dirección Este – Oeste. El cambio de la luz verde para la roja siempre es
pasando por la amarilla. Si hay algún carro circulando por la dirección Este – Oeste, la luz en los semáforos de las calles este –
oeste se ponen verde por un ciclo del reloj.
ENTRADAS SALIDAS
Sensor que indica la Green,
CAR presencia de un carro en Yellow Norte Sur
la dirección E _ O Red
Green,
Yellow Este Oeste
Red
Tabla de estado.
Observación Estado
Estado futuro, salida
actual
CAR, Count_State
N-S E_O 00 01 11 10
Green Red Green_Red Green_Red,1 Green_Red Yellow_Red,0 Green_Red,1
Yellow Red Yellow_Red Red_Green Red_Green Red_Green Red_Green
Red Green Red_Green Red_Yellow Red_Yellow Red_Yellow Red_Yellow
Red Yellow Red_Yellow Green_Red Green_Red Green_Red Green_Red
Count_State = 0 si el contador es menor que 5, en caso contrario es 1.
En la tabla anterior se utilizo a Count_State como si fuese una salida digital para minimizar el número de columnas que se deben
analizar. En el programa se utiliza NSCount se utiliza como un contador de los ciclos del reloj.
SALIDA = Incrementar a NSCount
En este PLD se utilizan 9 terminales de salida, 6 para las luces y 3 para el contador (NSCount)
Solo se especifica lo que le sucede a NSCount en el estado Green-Red, en los otros no es necesario ya quwe estara todo el tiempo
en cero.
-- Semáforo
-- 22V10
LIBRARY IEEE;
USE IEEE.Std_Logic_1164.ALL;
USE Work.Std_Arith.ALL;
-- This state machine implements a simple traffic light. The N - S light is usually green, and remains green
-- for a minimum of five clocks after being red.
-- If a car is travelling E-W, the E-W light turns green for only one clock.
ENTITY traffic_light IS
PORT(clk, car: IN std_logic; --car is an E-W travelling car
lights: BUFFER std_logic_VECTOR(0 TO 5));
END traffic_light;
BEGIN
PROCESS (CLK)
BEGIN
IF CLK'Event AND CLK = '1' THEN
CASE lights IS
WHEN green_red => IF nscount < 5 THEN lights <= green_red;
nscount <= nscount + 1;
ELSIF car = '1' THEN lights <= yellow_red;
nscount <= 0;
ELSE lights <= green_red;
END IF;
WHEN yellow_red => lights <= red_green;
WHEN red_green => lights <= red_yellow;
WHEN red_yellow => lights <= green_red;
WHEN others => lights <= green_red;
END CASE;
END IF;
END PROCESS;
END moore1;
DESIGN EQUATIONS
lights_4.D = lights_0.Q * /lights_1.Q * /lights_2.Q * /lights_3.Q *
/lights_4.Q * lights_5.Q
lights_4.AR = GND
lights_4.SP = GND
lights_4.C = clk
lights_5.D = /lights_0.Q * lights_1.Q * /lights_2.Q * lights_3.Q *
/lights_4.Q * /lights_5.Q
lights_5.AR = GND
lights_5.SP = GND
lights_5.C = clk
lights_0.D = lights_0.Q * /lights_1.Q * /lights_2.Q * /lights_3.Q *
/lights_4.Q * lights_5.Q
+ /lights_0.Q * lights_1.Q * /lights_2.Q * lights_3.Q *
/lights_4.Q * /lights_5.Q
lights_0.AR = GND
lights_0.SP = GND
lights_0.C = clk
lights_1.D = /lights_0.Q * /lights_1.Q * lights_2.Q * lights_3.Q *
/lights_4.Q * /lights_5.Q * car * nscount_IBV_2.Q *
nscount_IBV_0.Q
+ /lights_0.Q * /lights_1.Q * lights_2.Q * lights_3.Q *
/lights_4.Q * /lights_5.Q * car * nscount_IBV_2.Q *
nscount_IBV_1.Q
lights_1.AR = GND
lights_1.SP = GND
lights_1.C = clk
/lights_2.D = /lights_0.Q * /lights_1.Q * lights_2.Q * lights_3.Q *
/lights_4.Q * /lights_5.Q * car * nscount_IBV_2.Q *
nscount_IBV_0.Q
+ /lights_0.Q * /lights_1.Q * lights_2.Q * lights_3.Q *
/lights_4.Q * /lights_5.Q * car * nscount_IBV_2.Q *
nscount_IBV_1.Q
+ lights_0.Q * /lights_1.Q * /lights_2.Q * /lights_3.Q *
/lights_4.Q * lights_5.Q
+ /lights_0.Q * lights_1.Q * /lights_2.Q * lights_3.Q *
/lights_4.Q * /lights_5.Q
19
Electrónica Digital II Problemas de Diseño de Circuitos Secuenciales # 1
Profesor: Víctor Escartín
lights_2.AR = GND
lights_2.SP = GND
lights_2.C = clk
/lights_3.D = lights_0.Q * /lights_1.Q * /lights_2.Q * /lights_3.Q *
/lights_4.Q * lights_5.Q
+ /lights_0.Q * lights_1.Q * /lights_2.Q * lights_3.Q *
/lights_4.Q * /lights_5.Q
lights_3.AR = GND
lights_3.SP = GND
lights_3.C = clk
nscount_IBV_2.AR = GND
nscount_IBV_2.SP = GND
nscount_IBV_2.C = clk
nscount_IBV_1.AR = GND
nscount_IBV_1.SP = GND
nscount_IBV_1.C = clk
nscount_IBV_0.AR = GND
nscount_IBV_0.SP = GND
nscount_IBV_0.C = clk
20
Electrónica Digital II Problemas de Diseño de Circuitos Secuenciales # 1
Profesor: Víctor Escartín
Ejemplo # 11.
Diseñar utilizando un PLD, una maquina secuencial sincrónica para realizar un juego para predecir que LEDs se encenderá. El
sistema dispone de cuatro entradas G1 a G4, que están conectadas a cuatro push buttons. La maquina tiene cuatros salidas L1 a L4,
conectadas a LEDs. El sistema también tiene una salida mas (ERR) conectada a otro LEDs para indicar que se ha cometido un
Error. El sistema funciona de la siguiente forma, solo hay un LEDs (L1 a L4) encendido y en cada Tick (periodo) del reloj el LED
en encendido cambia. La frecuencia del reloj es alrededor de 4 HZ. El juego consiste en lo siguiente, Ud debe apretar un push
button, si el LED de Error se enciende es porque ese push button no concuerda con el LED que se encenderá en el próximo Tick
del reloj. Cuando adivina y coincide el push button con el LED a encenderse el juego se detiene. y se comienza de nuevo. Si se
aprieta más de un push button el sistema ilumina el LED de error. El sistema debe tener una entrada de reset.
Tabla de estado.
Estado Actual Ecuaciones Estado Futuro Salida
L1 L2 L3 L4 ERR
S1 /G1 /G2 /G3 /G4 S2 1 0 0 0 0
S1 G1 /G2 /G3 /G4 SOK 1 0 0 0 0
S1 G2 + G3 + G4 SERR 1 0 0 0 0
S2 /G1 /G2 /G3 /G4 S3 0 1 0 0 0
S2 /G1 G2 /G3 /G4 SOK 0 1 0 0 0
S2 G2 + G3 + G4 SERR 0 1 0 0 0
S3 /G1 /G2 /G3 /G4 S4 0 0 1 0 0
S3 /G1 /G2 G3 /G4 SOK 0 0 1 0 0
S3 G2 + G3 + G4 SERR 0 0 1 0 0
S4 /G1 /G2 /G3 /G4 S1 0 0 0 1 0
S4 /G1 /G2 /G3 G4 SOK 0 0 0 1 0
S4 G2 + G3 + G4 SERR 0 0 0 1 0
SOK G1 + G2 + G3 + G4 SOK 0 0 0 0 0
SOK /G1 /G2 /G3 /G4 S1 0 0 0 0 0
SERR G1 + G2 + G3 + G4 SERR 0 0 0 0 1
SERR /G1 /G2 /G3 /G4 S1 0 0 0 0 1
LIBRARY IEEE;
USE IEEE.Std_Logic_1164.ALL;
BEGIN
PROCESS (Reset,CLK)
BEGIN
IF Reset = '0' THEN Estado <= SOK;
ELSIF CLK'Event AND CLK = '1' THEN
CASE Estado IS
WHEN S1 => IF G2='1' OR G3='1' OR G4='1' THEN Estado <= SErr;
ELSIF G1 = '1' THEN Estado <= SOK;
ELSE Estado <= S2;
21
Electrónica Digital II Problemas de Diseño de Circuitos Secuenciales # 1
Profesor: Víctor Escartín
END IF;
WHEN S2 => IF G1='1' OR G3='1' OR G4='1' THEN Estado <= SErr;
ELSIF G2 = '1' THEN Estado <= SOK;
ELSE Estado <= S3;
END IF;
WHEN S3 => IF G2='1' OR G2='1' OR G4='1' THEN Estado <= SErr;
ELSIF G3 = '1' THEN Estado <= SOK;
ELSE Estado <= S4;
END IF;
WHEN S4 => IF G1='1' OR G2='1' OR G3='1' THEN Estado <= SErr;
ELSIF G4 = '1' THEN Estado <= SOK;
ELSE Estado <= S1;
END IF;
WHEN SOK |SERR => IF G1='0' OR G2='0' OR G3='0' OR G4='0'
THEN Estado <= S1;
END IF;
WHEN OTHERS => Estado <= S1;
END CASE;
END IF;
END PROCESS;
L1 <= '1' WHEN Estado = S1 ELSE '0';
L2 <= '1' WHEN Estado = S2 ELSE '0';
L3 <= '1' WHEN Estado = S3 ELSE '0';
L4 <= '1' WHEN Estado = S4 ELSE '0';
ERR <= '1' WHEN Estado = SERR ELSE '0';
END;
DESIGN EQUATIONS
err = estadoSBV_0.Q * estadoSBV_2.Q
l4 = estadoSBV_1.Q * estadoSBV_2.Q
l3 = estadoSBV_1.Q * /estadoSBV_2.Q
l2 = /estadoSBV_0.Q * /estadoSBV_1.Q * estadoSBV_2.Q
l1 = /estadoSBV_0.Q * /estadoSBV_1.Q * /estadoSBV_2.Q
estadoSBV_2.D = estadoSBV_2.Q * g1 * g2 * g3 * g4
+ /estadoSBV_0.Q * /estadoSBV_2.Q * /g1 * /g3
+ /estadoSBV_0.Q * g1 * g2
+ estadoSBV_1.Q * g3 * g4
+ estadoSBV_1.Q * /estadoSBV_2.Q * /g3
+ /estadoSBV_0.Q * /estadoSBV_1.Q * g4
+ estadoSBV_1.Q * estadoSBV_2.Q * g3
+ /estadoSBV_0.Q * /estadoSBV_1.Q * g3
+ /estadoSBV_0.Q * estadoSBV_2.Q * g1
+ estadoSBV_1.Q * g2
estadoSBV_2.AR = /reset
estadoSBV_2.SP = GND
estadoSBV_2.C = clk
estadoSBV_1.AR = /reset
estadoSBV_1.SP = GND
estadoSBV_1.C = clk
estadoSBV_0.AR = /reset
estadoSBV_0.SP = GND
estadoSBV_0.C = clk
23