Está en la página 1de 31

Boletín de Ejercicios y Problemas

Sistemas Electrónicos Digitales I. Grado de Ingeniería Telemática. Curso 2019/2020


A continuación se presentan varios ejercicios de la asignatura de Sistemas Electrónicos Digitales I.
Todos estos ejercicios han salido tal cual en exámenes de la asignatura. Resulta conveniente hacerlos
todos, pero al menos se deberían hacer los siguientes:

Tema 1: Todos.

Tema 2: Todos.

Tema 3: Todos.

Tema 4: De los del principio habría que hacer todos salvo el 4.9 y 4.12 que son medio repetidos. Del
4.25 al 4.39 son muy parecidos, pero habría que hacer al menos 3 (empezaría por el 4.39 y más
adelante haría el 4.34). Aunque el 4.36 parece igual que el resto, pide la funcionalidad del circuito,
por lo que conviene hacerlo. El resto de ejercicios de este tema es interesante hacerlos pues son
sencillos y cada uno repasa alguna cosa.

Tema 5: Los primeros (por debajo del 5.44) son todos del mismo tipo y se hacen siempre igual, por lo
que no es imprescindible hacerlos todos. Resulta interesante hacer siempre los tres primeros. El resto
van por pares, es decir, uno tiene una descripción del circuito a implementar mediante biestables
como máquina de estados, y el siguiente complica un poco el circuito y se pide que se implemente en
VHDL. Del 5.44 en adelante, son ejercicios de simplificación de estados y son muy similares, así que
basta con la mitad para entender la mecánica.

Tema 6: Todos.

Problemas: Son ejercicios de máquinas de estados algo más elaborados y avanzados. Son el tipo de
ejercicio que se pone en un examen si se deja consultar apuntes, por ejemplo.

EJERCICIOS

Tema 1: Metodología de Diseño


1.1. Dibuja un diagrama con las fases de las que se compone el flujo de diseño digital hoy en día.

1.2. Explica la importancia de la simulación en el ciclo de diseño de sistemas digitales actual.

1.3. Dibuja el diagrama de fases del ciclo de diseño de un circuito digital. Justifica la importancia
de la simulación en este ciclo de diseño.

Tema 2: Circuitos Combinacionales


2.1. Una barrera debe estar bajada (barrera=1) cuando en general se detecta un coche (coche=1).
Sin embargo, si el coche es de la policía (poli=1) o una ambulancia (ambu=1) la barrera debe estar
subida (barrera=0). La barrera también baja cuando se detecta una furgoneta (furgo=1) salvo que
sea de la guardia civil (civil=1). Implementa un circuito con puertas lógicas, cuya salida indique si la
barrera tiene que estar bajada (1) o subida (0). Indica las entradas y salidas del circuito (deben
utilizarse los nombres del enunciado).
2.2. Una luz se enciende (luz=1) cuando se detecta movimiento (m=1) o se abre la puerta (p=1),
pero en ambos casos, no debe ser de día (d=0) y debe estar todo habilitado (e=1). En cualquier
caso, e independientemente de lo anterior, la luz también se encenderá si se le da al interruptor
(i=1) o se activa la alarma (a=1). Dibuja el circuito que enciende la luz utilizando puertas lógicas de
tu elección. Suponiendo que todas las puertas lógicas tienen el mismo retraso (10 ns) calcula lo
que tarda en encenderse la luz según la entrada que provoque el encendido.

2.3. Una alarma suena (alarma=1) si se detecta una fuga (fuga=1) cuando el depósito está lleno
(depo=1) y el motor está parado (motor=0). También suena si hay una fuga con el motor en
marcha (motor=1) (da igual cómo esté el depósito). Si la alarma suena, al mismo tiempo se
enciende una bomba de achique (bomba=1) siempre y cuando un conmutador esté encendido
(conmut=1) o el sistema no esté en modo manual (manual=0). Implementa un circuito con
puertas lógicas que calcule el valor que deben tomar las salidas alarma y bomba. Describe el
comportamiento del sistema a utilizando VHDL (basta la parte interna de la arquitectura o incluso
la de un bloque PROCESS).

2.4. Un motor m está controlado por tres interruptores a, b y c. El motor funciona (m=1) cuando
ocurre alguna de las siguientes condiciones:
• Cuando sólo esté cerrado c.
• Cuando estén cerrados simultáneamente a y c, y no lo esté b.
• Cuando estén cerrados simultáneamente a y b, y no lo esté c.
(Se entiende que el interruptor vale 1 cuando está cerrado y 0 en caso contrario.)
Se pide: construir la tabla de verdad, implementar el circuito correspondiente más simplificado
posible utilizando únicamente puertas NAND, y realizar la descripción comportamental de dicho
circuito en VHDL (parte interna del bloque PROCESS, con la traducción de la descripción textual a
VHDL, no del circuito implementado).

2.5. En la figura de la derecha se muestra un display de 7 segmentos con 7


entradas [a..b] que sirven para encender y apagar cada uno de los
segmentos del display. Diseña un circuito que genere las señales a, b, c, d,
e, f, g para que se muestre correctamente el dígito correspondiente a una
cifra de 0 a 3 representada con un número binario de 2 bits. El circuito a
diseñar tiene, por lo tanto, 2 entradas y ocho salidas. Dibuja el símbolo del
circuito e impleméntalo utilizando un decodificador binario y las puertas
OR que necesites.

2.6. Diseña un circuito combinacional que sea capaz de detectar si un número de entrada X 2X1X0
codificado en binario es múltiplo de 2 (supón que el cero no es múltiplo de 2). Indica claramente
las entradas y salidas del circuito, el número de bits necesarios para las entradas y las salidas y su
significado. Muestra los mapas de Karnaugh de la función de salida del circuito, la función
simplificada y el circuito combinacional con el menor número de puertas.

2.7. Un sensor de temperatura tiene tres salidas S1, S2 y S3, que corresponden a tres
temperaturas T1, T2 y T3, de manera cada salida Si se pone a 1 si la temperatura medida es mayor
o igual que su correspondiente Ti. Se debe diseñar un circuito que, a partir de S1, S2 y S3, ponga
su única salida S a 1 si la temperatura está entre T1 y T2 o es superior o igual a T3, es decir, (t>=T1
y t<T2) o (t>=T3). Haz la tabla de verdad. Debes simplificar al máximo mediante Karnaugh
teniendo en cuenta que hay combinaciones que nunca se van a dar, pues se cumple que T1<T2<T3
(por ejemplo, el sensor nunca puede decir que la temperatura es menor que T1 y al mismo tiempo
mayor que T2, entre otras combinaciones imposibles). A partir del resultado, comenta si hay algún
riesgo estático.
2.8. Diseña un circuito con tres entradas (a,b,c) de tres bits cada una de manera que en cada
entrada tenemos un número codificado en binario de 0 a 7, y una salida s de dos bits. El circuito
debe mostrar por la salida la entrada que tiene el valor más grande con la siguiente codificación:
00->a, 01->b y 10->c, la combinación 11 nunca debería salir. Para simplificar, supondremos que no
hay dos entradas iguales y que, por lo tanto, siempre hay una más grande que las demás. Puedes
usar cualquier bloque combinacional MSI de los estudiados durante el curso. Debes especificar
claramente el nombre y función de los bloques que utilices así como los nombres de las entradas
y salidas que tengan.

2.9. Simplifica mediante mapas de Karnaugh las siguientes funciones lógicas, expresándolas como
suma de productos.
a) F=abc+bcd+a c b+a b d+abcd
b) G=∑dcba(1,3,4,5,7)

2.10. Dado el siguiente código en VHDL dibuja con puertas lógicas simples (AND, OR, NOT) un
circuito que realice la misma función.
ENTITY circuito IS
PORT (a,b: IN bit; c,d: OUT bit);
END circuito;

ARCHITECTURE descripcion of circuito IS


SIGNAL h,j: bit;
BEGIN
h<='1' WHEN (a and b)='1' ELSE '0';
j<='0' WHEN a='0' OR h='1' ELSE '1';
c<=h OR NOT a;
d<=j WHEN h='1' ELSE '0';
END descripcion;

2.11. Explica en qué consiste el riesgo de 1-estático y en qué tipo de implementación con puertas
se pueda dar. Señala en los mapas de Karnaugh del ejercicio 2.9 las transiciones que podrían
generar un riesgo de 1-estático y añade los términos productos que evitarían el riesgo.

2.12. Simplifica mediante mapas de Karnaugh la siguiente función lógica, expresándola como suma
de productos: G=∑dcba(3,4,5,7,12,13). Señala en el mapa de Karnaugh los riesgos de 1 estático que
pueda haber y calcula una nueva expresión algebraica que lo solucione. Dibuja el circuito
resultante de cualquiera de las dos implementaciones. Implementa el circuito utilizando un
decodificador y una puerta OR de las entradas que quieras ¿Tiene riesgos de 1 estático un circuito
implementado con decodificador? Razona la respuesta.

2.13. Simplifica al máximo, mediante mapas de Karnaugh, la siguiente función lógica, expresándola
como suma de productos: G=∑dcba(3,4,5,7,11,12,13,15). Señala en el mapa de Karnaugh los riesgos
de 1-estático que pueda haber y calcula una nueva expresión algebraica que lo solucione. Dibuja el
circuito resultante de la implementación sin riesgos suponiendo una matriz de AND como en una
PAL. Describe en VHDL la función sin riesgos (basta con poner lo que iría dentro de la
arquitectura).

2.14. Dada la función lógica f=ab+bc realiza las siguientes tareas:


- Dibuja el circuito utilizando dos puertas AND una OR y un Inversor.
- Suponiendo que las puertas AND y OR tienen un retraso de 10 ns, y el Inversor 5 ns, dibuja un
cronograma suponiendo inicialmente que a=b=c=1 y que a los 5 ns la entrada b pasa a cero. El
cronograma debe mostrar las entradas y salidas, así como las señales internas y debe mostrar
al menos los 40 ns posteriores al cambio de b.
- Implementa esta misma función usando un decodificador de 3 a 8.
- Indica si alguna o varias de estas dos implementaciones presenta un riesgo de uno o cero
estático. Justifica la respuesta.

2.15. Implementa y dibuja mediante puertas NOT y AND la siguiente descripción en VHDL:
S<=NOT (A AND S);
Suponiendo que la puerta AND tiene un retraso de 10 ns, y la NOT de 5 ns, dibuja un cronograma
desde 0 ns hasta 60 ns, suponiendo que en t=0 ns A vale '0' y S='1', y que en t=10 ns A cambia de
'0' a '1'. El cronograma debe mostrar A, S y S negada.

2.16. EEUU y Rusia disponen de sendos botones (X e Y respectivamente) que cuando se pulsan
(X=1 o Y=1) pueden iniciar la tercera mundial. Sin embargo, España decide quién de los dos puede
iniciarla mediante un interruptor Z (si es 0 sólo EEUU puede iniciar la guerra y si es 1, sólo podría
iniciarla Rusia). Diseñar un circuito que tome como entradas X, Y, Z, y genere una salida S que
tome el valor 0 para indicar que se inicie la guerra. Diseñar el circuito más simplificado posible
como suma de productos e impleméntalo con puertas AND, OR y NOT. (Debes incluir la tabla de
verdad y la simplificación.) Suponiendo que las puertas presentan cierto retraso, justifica si existe
el riesgo de que se inicie la tercera guerra mundial si alguien desde España juega con el
interruptor Z aunque EEUU y Rusia no hayan pulsado sus botones. Propón un circuito también
combinacional donde esto no ocurra (si fuera el caso).

2.17. Dado el siguiente código en VHDL, dibuja el circuito que describe con puertas lógicas,
representa la tabla de verdad como diagrama de Karnaugh y comenta si el circuito que has
dibujado tiene algún tipo de riesgo estático (a 1 o a 0) indicando bajo qué combinaciones de
entrada ocurren. Si fuera el caso, corrige el circuito para que no tenga riesgos y describe el nuevo
circuito en VHDL (no es necesario que lo dibujes). Justifica todas las respuestas.
s <= (a AND NOT c) OR (b AND c)

2.18. Dada la siguiente función lógica f =∑ (1,3,5,7,8,9,12,13) realiza las siguientes tareas:
abcd
Crea la tabla de verdad y simplifica la función expresándola como suma de productos. Señala en la
tabla los implicantes primos (globos) no esenciales, si los hay. Dibuja el circuito resultante de la
simplificación utilizando solo puertas NAND (debes utilizar el mínimo número de puertas NAND
posible). Si existe riesgo de 1-estático, indica en qué situaciones podría ocurrir y comenta cómo se
podría solucionar dibujando el circuito resultante (debe ser el circuito mínimo que evita el riesgo).

Tema 3: Bloques Combinacionales MSI.


3.1. Implementa las dos funciones del ejercicio 2.9 mediante un único decodificador binario de 4
entradas (16 salidas) y las puertas OR de dos entradas que necesites.

3.2. Se quiere hacer un circuito que realice la operación {s=(e+1) mod 8} donde s y e son de
tres bits. Realiza en primer lugar la tabla de verdad e implementa el circuito utilizando únicamente
un codificador y un decodificador.

3.3. Diseña un codificador BCD de 10 a 4 utilizando 4 puertas OR de las entradas que quieras.
3.4. Diseña un decodificador binario de 2 a 4 con entrada de habilitación usando un único
demultiplexor de 1 a 4 y ningún componente más.

3.5. Explica con tus propias palabras el comportamiento de un multiplexor y un demultiplexor.


Dibuja el símbolo de cada uno de estos circuitos con las entradas y salidas que prefieras. Escribe
en VHDL la entidad correspondiente a cada uno de los dos símbolos dibujados.

3.6. Explica qué funciones realiza un circuito comparador. Describe su funcionamiento en VHDL.
Representa la tabla de verdad de una de las funciones que realiza el comparador (la que quieras)
suponiendo que las entradas son de 2 bits cada una. Implementa con puertas lógicas la función
que has elegido de comparación y dibuja el circuito completo (recuerda que las entradas son de 2
bits).

3.7. Se desea realizar un circuito combinacional que convierta un número binario de 3 bits en una
salida de 8 bits que conectaríamos a una barra de 8 leds para indicar nivel. El número de leds
encendidos indica el nivel (un led encendido, nivel 0; todos los leds, nivel 7). Debes utilizar
circuitos combinacionales MSI y puertas lógicas.

3.8. Implementa, mediante bloques combinacionales MSI y puertas, un circuito que implemente
la siguiente tabla.
e2,e1,e0 0 1 2 3 4 5 6 7
s2,s1,s0 0 2 4 6 6 5 3 1
El circuito resultante debe tener menos de 5 componentes en total. Especifica correctamente, y
con nombre, las entradas y salidas de los componentes que utilices y escribe de qué componente
se trata (salvo las puertas lógicas, cuyo aspecto ya especifica su función).

3.9. Dibuja un sumador en rizo (acarreo encadenado) de 3 bits. Debe verse el detalle a nivel de
puertas lógicas.

3.10. Muestra la tabla de verdad de un sumador completo de un bit (incluye los acarreos) y dibuja
su símbolo. Construye un sumador completo de 4 bits (dos entradas de 4 bits y salida de 5) a
partir del sumador completo de un bit anterior.

3.11. Implementa un sumador completo que sume números de 3 bits con números de 4 bits
utilizando exclusivamente bloques sumadores completos de un bit (son los que tienen 3 bits de
entrada y 2 de salida). Debes etiquetar adecuadamente cada elemento y puertos que utilices.

3.12. Dibuja el símbolo, con sus entradas y salidas, de un sumador completo de dos números de 1
bit y acarreo de entrada. Representa las tablas de verdad de las salidas e implementa el
funcionamiento del sumador mediante un único decodificador y las puertas OR que quieras. A
partir del símbolo del sumador anterior, representa el circuito de un sumador completo de dos
números de 3 bits.

3.13. Utilizando los bloques combinacionales vistos en clase que quieras, diseña y dibuja un
circuito que, dada una entrada codificada binaria X=X 2X1X0 genere una salida S, también codificada
binaria, tal que si la entrada es mayor que 5 devuelva S=X+1 y, si no, S=X+2. Debes especificar
claramente qué función realiza cada uno de los elementos utilizados, así como cada una de las
señales que intervienen, número de bits en la salida, etc.
3.14. Dada la siguiente porción de código en la arquitectura de una descripción en VHDL dibuja el
circuito a que corresponde identificando el elemento que describe cada una de las líneas de
código (debes especificar qué dispositivo describe cada instrucción).
ARCHITECTURE descripcion of circuito IS
SIGNAL a,b,c,d,e,f: bit;
SIGNAL h: bit_vector(1 DOWNTO 0);
SIGNAL x,y,sal: bit_vector(3 DOWNTO 0);
BEGIN
c <= NOT (a AND b); -- Elemento 1
f <= d OR e; -- Elemento 2
h(1) <= c WHEN sel='1' ELSE f; -- Elemento 3
h(0) <= '1' WHEN x=y ELSE '0'; -- Elemento 4
sal <= "0001" WHEN h="00" ELSE "0010" WHEN h="01" ELSE
"0100" WHEN h="10" ELSE "1000"; -- Elemento 5
END descripcion;

3.15. El siguiente código VHDL: s<=a WHEN c='0' ELSE b; donde a y b son señales de dos
bits y c de un bit, describe un circuito combinacional MSI. Identifica de qué dispositivo se trata,
dibuja su símbolo y realiza una implementación mediante puertas lógicas (recuerda que a y b son
de dos bits). Dado su circuito con puertas ¿existe riesgo de 1-estático si a=b=11 y c cambia?
Razona y justifica la respuesta.

3.16. Describe en VHDL un multiplexor con entradas a, b y sel, y salida s (debes describir su
comportamiento en VHDL, no su implementación con puertas). Dibuja el símbolo. Muestra la tabla
de verdad y realiza una implementación lo más simplificada posible con puertas lógicas. Razona si
este circuito presenta algún riesgo estático y, en ese caso, muestra en qué situación se produciría.

Tema 4: Circuitos Secuenciales


4.1. Dibuja el circuito de un flip-flop tipo D (activo por flanco de subida de reloj) construido a
partir de biestables tipo D activos por nivel (configuración maestro esclavo). Dibuja el símbolo.
Muestra la tabla de verdad completa de este biestable D activo por flanco. (No es necesario que
incluyas las entradas de puesta a uno y a cero.)

4.2. Dado el siguiente circuito representa su tabla de verdad. Justifica si se trata de un circuito
combinacional o secuencial. Suponiendo que la puerta tiene un retraso de 10 ns y que la entrada
está inicialmente a cero, dibuja un cronograma de 80 ns suponiendo que a los 20 ns la entrada
pasa de cero a uno y se mantiene así.

4.3. Dado el siguiente circuito, representa su tabla de verdad. Justifica si se trata de un circuito
combinacional o secuencial. Suponiendo que las puertas tienen un retraso de 10 ns y que las
entradas a y b están inicialmente a cero, dibuja un cronograma de 80 ns suponiendo que a los
20 ns las entradas pasan de cero a uno y se mantienen así.
a c

b d
4.4. Dibuja el símbolo de un biestable tipo D activo por nivel y otro activo por flanco. Explica en
qué se diferencian uno y otro respecto de su funcionamiento. Representa el circuito que permite
implementar un flip-flop D activo por flanco a partir del biestable D activo por nivel (configuración
maestro-esclavo). Explica qué son los tiempos de preparación (set-up) y mantenimiento (hold) de
un registro tipo D.

4.5. Se tiene una ristra de 16 leds para un árbol de navidad. Diseña un circuito mediante módulos
simples MSI (secuenciales y combinacionales) que vaya encendiendo un único led de izquierda a
derecha de la tira a intervalos de 1 segundo; cuando el led encendido llega al final vuelve a
empezar otra vez por la izquierda. Los circuitos empleados deben utilizar menos de 16 biestables
internos.

4.6. Con la misma tira de leds del ejercicio anterior, se quiere implementar el efecto de ir
moviendo de izquierda a derecha de forma continua y led a led, un patrón repetitivo formado por
la secuencia de dos leds encendidos, dos apagados, dos encendidos, dos apagados, etc. En esta
ocasión no hay límite en el número de biestables que utilizan los circuitos MSI que necesites.

4.7. Se quiere implementar un adorno para el coche fantástico consistente en una tira de 8 luces
de manera que cada 200 ms se enciende una única luz de forma sucesiva de izquierda a derecha y
cuando llega al final sigue de derecha a izquierda, volviendo a repetir la secuencia continuamente,
encendiéndose la luz de izquierda a derecha y de derecha a izquierda. Se debe usar una única
señal de reloj, de la frecuencia que quieras, y cualquier circuito básico o MSI, combinacional o
secuencial de los vistos en clase.

4.8. Se dispone de una tira de 16 leds. Se quiere hacer un circuito con 16 salidas (una para cada
led). Inicialmente todos los leds están apagados y en cada segundo se van encendiendo uno a uno
empezando por un lado hasta que están todos encendidos, momento en el cual empiezan a
apagarse uno a uno por el mismo lado que empezaron a encenderse con un periodo también de
un segundo. Esto se repite siempre. Se puede utilizar cualquier tipo de elementos discretos
combinacionales o secuenciales vistos hasta el momento. Se dispone de una señal de reloj de 1
Hz.

4.9. Se tiene una tira de 16 leds. Se quiere implementar un circuito que genere un patrón de 4
leds encendidos seguidos de 4 apagados (y así continuamente) que vaya desplazándose led a led
por la tira siempre en el mismo sentido. Diseña y dibuja el circuito utilizando los componentes
MSI que quieras de los vistos en clase.

4.10. Se quiere implementar el circuito para una ruleta. La ruleta consiste en 10 luces dispuestas en
circunferencia. Sólo una de las luces permanece encendida indicando el número que ha salido
según su posición. El usuario dispone de un botón que mientras mantiene pulsado (entrada=1) la
luz va dando vueltas encendiendo cada vez un led de forma consecutiva por orden y siempre en el
mismo sentido. Cuando el usuario suelta el botón (entrada=0) la luz se detiene donde estuviera.
Se cuenta con una señal de reloj de 10 Hz y una de reset para inicializarlo todo. Diseña el esquema
del circuito utilizando cualquiera de los elementos vistos en clase.

4.11. Se dispone de una tira de 16 leds dispuestos en circunferencia alrededor de una diana. La
diana tiene un sensor que saca un '1' durante un instante cuando recibe un impacto en el centro
(el resto del tiempo está a '0'). Realiza un circuito que cada vez que se acierte en la diana
(sensor='1') se muestre un led encendido dando una vuelta a la rueda de leds. El led encendido
sólo debe dar una vuelta y luego se para. Puedes utilizar cualquier circuito de los vistos en clase
especificando de qué circuito se trata y la función de las entradas y salidas (basta con el nombre
de las señales si es suficientemente explicativo). Supondremos que la señal de reloj es de 16 Hz
para que tarde un segundo en dar una vuelta, y que el sensor está a '1' entre 1 y 2 ciclos de reloj
(nunca más de 2 ciclos).

4.12. Se quiere realizar un dado electrónico que aleatoriamente encienda uno de los 6 leds que
indican el número que ha salido. El sistema tiene un pulsador que mientras se mantiene apretado
los leds se encienden sucesivamente muy rápido (tanto que al ojo humano le parecerán que están
todos encendidos) y cuando se suelta aparece encendido sólo uno de los 6 leds. Debes usar un
reloj de alta frecuencia (más de 1 kHz). Debes especificar con precisión las conexiones y cada una
de las entradas y salidas de los circuitos MSI que utilices.

4.13. Se quiere implementar una matriz cuadrada de 4x4 LEDs. El circuito tiene dos entradas (X,Y)
de dos bits cada una, de manera que la entrada X indica la coordenada horizontal y la Y la
coordenada vertical del único LED encendido de los 4x4=16 que hay. Se cuenta con una señal
adicional de habilitación de manera que si está a cero lo apaga todo, y si está a uno, hace lo
descrito anteriormente. Puedes usar cualquier circuito MSI y puertas, pero ningún elemento
puede tener más de 4 salidas. Cuando lo tengas, añade un único elemento MSI de tu elección al
circuito para que cada segundo se desplace el LED encendido siguiendo una de las diagonales de
la matriz.

4.14. Se dispone de 6 luces y 5 botones intercalados entre dichas luces de forma alternada (luz-
botón-luz...luz-botón-luz). Todas las luces están inicialmente apagadas, pero cuando se pulsa uno
de los botones, las luces se van encendiendo una a una en cada ciclo de reloj, tanto hacia la
izquierda del botón que se pulsó, como hacia la derecha, empezando por los lados del botón
pulsado. Cuando se suelta el botón se van apagando una tras otra siguiendo el mismo patrón. El
reloj es de unos 4 Hz para generar un efecto bonito. Si se pulsa más de un botón a la vez, el
comportamiento puede ser el que tú quieras. Puedes usar los elementos que quieras de los
explicados en clase. Cuidado con los cortocircuitos (no conectes dos salidas al mismo cable).

4.15. Se quiere hacer un efecto luminoso con 8 luces de manera que se van encendiendo una tras
otra de forma individual (solo una permanece encendida en cada ciclo) pero al llegar a la quinta,
las cuatro primeras también se encienden y se quedan encendidas hasta que vuelve a empezar
(cuando se encienda la última luz, todas estarán encendidas y al siguiente ciclo se volverá a
encender la primera, luego la segunda y así sucesivamente). Puedes utilizar cualquier elemento
digital de los vistos en la asignatura. Debes poner nombre a cada elemento que utilices de manera
que quede clara su función, lo mismo para las entradas y salidas de los circuitos que utilices.

4.16. Diseña y dibuja un contador ascendente a partir de un registro de 4 bits y 4 sumadores


completos de un bit colocados en cascada. Suponiendo que el registro tiene un retraso interno de
5 ns y un tiempo de set-up (preparación) y hold (mantenimiento) de 4 ns, y que el sumador de un
bit tiene un retraso de 7 ns entre cualquiera de sus entradas y sus salidas, calcula el periodo
mínimo de funcionamiento correcto del contador. Suponiendo que el contador funciona a su
máxima frecuencia, indica en qué situación se está más cerca de violar el tiempo de preparación
(set-up).

4.17. Implementa un contador binario de 16 bits a partir de contadores binarios de 4 bits. El


contador de 4 bits solo tiene entrada de rejoj (clk), reset (rst) y habilitación (ena) y salida de 4
bits s=[s3..s0]. Si cuando se produce el flanco de subida del reloj la habilitación está activa
(ena=1) entonces cuenta, de lo contrario no hace nada. Todos los contadores comparten la misma
señal de reloj. El contador resultante debe tener un reloj (clkb), un reset (rstb) y una señal de
habilitación (enab), y una salida de 16 bits (sb=[sb15..sb0]). Puedes utilizar las puertas lógicas
adicionales que necesites. En el esquema debes especificar con su nombre y con claridad cada una
de las señales que aparecen, así como los pines de cada símbolo de los contadores.

4.18. Dibuja un contador asíncrono de 2 bits de salida (contador de 0 a 3) implementado con


biestables tipo D. El contador asíncrono se caracteriza por que la señal de reloj es distinta para
cada biestable, tal como se ha visto en teoría y en el laboratorio. Suponiendo que los biestables
tienen un retraso de 10 ns, un tiempo de preparación (set-up) de 6 ns, y un tiempo de
mantenimiento (hold) de 4 ns, dibuja el cronograma completo de todas las señales que
intervienen en el circuito mostrando una cuenta completa de 0 a 3 y vuelta a 0. Calcula el periodo
mínimo de la señal de reloj para obtener un valor correcto de cuenta antes de que se produzca un
nuevo flanco de subida del reloj, cuente bien, y no se violen los tiempos de set-up y hold.

4.19. Implementa un contador binario de 4 bits que cuente cíclicamente de 4 a 9. Para ello
dispones de un contador binario de 4 bits con posibilidad de carga paralela síncrona y cualquier
circuito combinacional que puedas necesitar.

4.20. Implementa un registro PISO (Parallel Input, Serial Output) de 8 bits con cualquier circuito
MSI secuencial o combinacional, salvo naturalmente el propio PISO. Tampoco se puede utilizar
ningún elemento simple (no vale por tanto utilizar registros simples de un bit, ni puertas lógicas).

4.21. Dibuja el símbolo (con sus entradas y salidas) de un registro de desplazamiento de 8 bits tipo
PIPO (entrada paralela y salida paralela). Implementa también dicho circuito utilizando un
multiplexor de dos entradas de 8 bits y un registro paralelo de 8 bits. Fíjate que solo hay dos
componentes para construir el PIPO. No te olvides de dibujar también el símbolo.

4.22. Dibuja un circuito con un flip-flop tipo D (activo por flanco de subida del reloj) cuya salida
negada (Q) esté conectada directamente a la entrada (D) del mismo biestable. Suponiendo que
inicialmente Q=0, dibuja el cronograma de cada una de las señales que intervienen en el circuito
durante 4 ciclos completos de reloj. Para ello supón que el reloj (clk) tiene un semiperiodo de 20
ns (periodo de 40 ns), que en t=0 hay un flanco de bajada del reloj. Dibuja el cronograma con los
valores concretos de las señales en el que al menos se muestren 4 flancos de subida del reloj. El
retraso del biestable es de 10 ns y presenta un tiempo de preparación (set-up) de 5 ns y de
mantenimiento (hold) de 3 ns. Además:
Calcula y razona cuál sería la frecuencia máxima de funcionamiento.
Calcula qué condiciones de temporización (retrasos, etc.) tendrían que darse en el biestable
para que el funcionamiento fuera incorrecto y explica la razón.

4.23. Se quiere implementar un dispositivo que cuente las horas que han pasado desde que se
encendió y las indique, cada vez que cambia la hora, apagando y enciendo una luz tantas veces
como sea la hora nueva. Cada 12 horas vuelve a empezar. Se dispone de dos señales de
sincronización o relojes: uno con periodo de 1 hora (para llevar la cuenta de las horas) y otro con
periodo de 1 segundo (para encender y apagar la luz indicadora de la hora con ese intervalo). El
funcionamiento es como el de un reloj de pared que da las campanadas cada hora, con la
diferencia de que aquí enciende una luz en lugar de dar campanadas y la hora no es la del día, sino
las que han trascurrido desde que se encendió.

4.24. Se quiere implementar el circuito para un juego de dos jugadores, de manera que cada
jugador posee un botón y gana el que más rápido pulsa y suelta el botón hasta llegar a 100
pulsaciones (desde que se ponen de acuerdo en empezar, tras un reset de los contadores). El
circuito tiene como entradas los dos botones (un 1 es pulsado y 0 sin pulsar) y como salidas los
marcadores de cada jugador codificados en binario de 7 bits, además de dos leds, uno por jugador,
para indicar el ganador. Cuando un jugador llega a las 100 pulsaciones, el juego se para (ya no se
hace caso a las pulsaciones) y el correspondiente led del ganador se enciende. Todo se queda así
hasta que se activa el reset del circuito y se puede iniciar una nueva competición.

4.25. Calcula el periodo mínimo de la señal de reloj del siguiente circuito suponiendo que las
puertas AND tienen un retraso de 20 ns, las NOT un retraso de 10 ns, los registros un retraso de 15
ns y presentan un tiempo de set-up (preparación) de 8 ns y de hold (establecimiento) de 6 ns.
Razona la respuesta.
e

D Q D Q
GRB GRB
CLR CLR

Q Q

clk

4.26. Calcula el periodo mínimo de la señal de reloj del siguiente circuito suponiendo que las
puertas AND tienen un retraso de 20 ns, las NOT un retraso de 10 ns, los registros un retraso de 15
ns y presentan un tiempo de set-up (preparación) de 8 ns y de hold (establecimiento) de 6 ns.
Razona la respuesta.
e

D Q D Q D Q
GRB GRB
GRB
CLR CLR
CLR

Q Q Q
clk

4.27. Dado el siguiente circuito, explica en qué momento no debería cambiar la entrada e si
queremos que el circuito funcione correctamente. Explícalo mediante un cronograma donde se
muestra la franja en la que un cambio en esa entrada haría que el circuito no funcionara
correctamente (supondremos que el retraso en el biestable es de 7 ns, en el and 5 ns, en el
inversor 3 ns, y que los tiempos de set-up y hold son 10 y 4 ns respectivamente).
e

D Q D Q
GRB GRB
CLR CLR

Q Q

clk

4.28. Dibuja las salidas S1 y S2 (para 4 ciclos completos por ejemplo) del siguiente circuito
suponiendo que la puerta NOT tienen un retraso de 10 ns, los registros un retraso de 15 ns y
presentan un tiempo de set-up (establecimiento) de 8 ns y de hold (mantenimiento) de 6 ns. ¿Cuál
sería la frecuencia máxima de funcionamiento de cada una de las salidas? Razona la respuesta.
D Q D Q
GRB
CLR
S1 GRB
CLR
S2
Q Q

clk

4.29. Dado el siguiente circuito, dibuja el cronograma del reloj, de la entrada D y de la salida Q de
cada biestable para 4 ciclos completos de un reloj de 40 ns de periodo. Para ello supón que todas
las señales están inicialmente a 1 y que la entrada e pasa a cero 20 ns después del primer flanco
de subida del reloj. Debes tener en cuenta que las puertas AND tienen un retraso de 10 ns, las
NOT un retraso de 5 ns, los registros un retraso de 6 ns y presentan un tiempo de set-up
(preparación) de 5 ns y de hold (establecimiento) de 5 ns. Indica si se produce alguna violación de
los tiempos de set-up y de hold (si se produjesen, haz el cronograma como si no pasara nada y el
biestable funcionase bien).
e

D Q D Q
GRB GRB
CLR CLR

Q Q

clk

4.30. Dado el siguiente circuito, calcula el periodo mínimo de funcionamiento correcto suponiendo
que la puerta NAND tiene un retraso de 9 ns, la puerta OR de 12, la NOT de 6 y los biestables de 8.
Debes saber además que el tiempo de preparación (set-up) y el de mantenimiendo (hold) de los
biestables es de 7 ns en ambos casos. Razona y justifica la respuesta.

D Q D Q D Q
GRB GRB GRB
CLR CLR CLR

Q Q Q

clk

4.31. Dado el siguiente circuito, calcula el periodo mínimo para la señal de reloj clk suponiendo un
funcionamiento correcto. Debes justificar el cálculo de este periodo mínimo mediante un
cronograma en el que figuren todas las señales del circuito entre dos flancos de subida de cada
reloj (hay dos relojes). Debes tener en cuenta que la puerta NOT tiene un retraso de 3 ns, los
registros un retraso de 6 ns y presentan un tiempo de set-up (preparación) de 5 ns y de hold
(establecimiento) de 4 ns.
D0 D Q
D1 D Q
GRB GRB
CLR CLR

Q Q
clk
clkN

4.32. Dado el siguiente circuito, calcula el periodo mínimo para la señal de reloj clk suponiendo un
funcionamiento correcto. Debes justificar el cálculo de este periodo mínimo mediante un
cronograma en el que figuren todas las señales del circuito entre dos flancos de subida del reloj.
Debes tener en cuenta que la puerta NOT tiene un retraso de 3 ns, la AND de 5 ns, los registros un
retraso de 6 ns y presentan un tiempo de set-up (preparación) de 5 ns y de hold (establecimiento)
de 4 ns.

D0 D Q
D1 D Q
Q0 Q1
GRB GRB
CLR CLR

Q Q

clk

4.33. Dado el siguiente circuito, calcula y justifica mediante un cronograma, el periodo mínimo de
funcionamiento correcto del siguiente circuito. Para ello supón que la AND tiene un retraso de 10
ns, la OR de 8 ns, y la NOT de 5 ns. Además, el biestable presenta un tiempo de mantenimiento
(Hold) de 3 ns, un tiempo de preparación (Set-up) de 4 ns y un retraso de 6 ns.
d0 q0 d1 q1 sal
D Q D Q
qn0
Q Q
clk
qn1

4.34. Dado el siguiente circuito, calcula el periodo mínimo de funcionamiento correcto suponiendo
que la puerta NAND tiene un retraso de 6 ns, la puerta OR de 8, la NOT de 4 y los biestables de 10.
Debes saber además que el tiempo de preparación (set-up) y el de mantenimiendo (hold) de los
biestables es de 2 ns en ambos casos. Justifica el resultado mediante un cronograma explicativo
donde se muestren clk, D0, Q0, D1, Q1, D2, Q2 (o sus inversas según el caso).

D Q D Q D Q
GRB GRB GRB
CLR CLR CLR

Q Q Q

clk
4.35. Dado el siguiente circuito, dibuja el cronograma de cada una de las señales que aparecen.
Para ello supón que el reloj (clk) tiene un semiperiodo de 20 ns (periodo de 40 ns), que en t=0 hay
un flanco de bajada del reloj y que la entrada e lleva muchos ciclos valiendo 0 con anterioridad y
que justo en t=5 ns, pasa a valer 1. Dibuja el cronograma con los valores concretos de las señales
en el que al menos se muestren 4 flancos de subida del reloj. Los retrasos son: 6 ns para la AND, 4
ns para la NOT y 10 ns para los biestables, que además presentan un tiempo de preparación (set-
up) de 5 ns y de mantenimiento (hold) de 3 ns.
Calcula y razona cuál sería la frecuencia máxima de funcionamiento, o periodo mínimo,
suponiendo que e se mantiene a 1.
Indica en el cronograma, y comenta, los espacios de tiempo en los que la entrada e no
debería cambiar para un correcto funcionamiento del circuito.

d0 q0 d1 q1
e D Q D Q
Q Q
clk

4.36. Dado el siguiente circuito realiza un cronograma de al menos 8 ciclos de reloj donde
aparezcan únicamente las salidas de los biestables (q0, q1, q2). Supón que, inicialmente,
q0=q1=q2=0 y que el periodo de reloj es mucho más grande que los retrasos de las puertas y los
biestables. Con el cronograma obtenido, averigua, justifica y explica la función que realiza el
circuito.

4.37. Dado el siguiente circuito, justifica y calcula mediante un cronograma el periodo mínimo de
funcionamiento correcto del circuito. El cronograma debe mostrar todas las señales implicadas.
Supón que las puertas AND tienen un retraso de 10 ns, la OR de 12 ns, los biestables 14 y que el
tiempo de preparación del biestable (setup) coincide con el de mantenimiento (hold) y es de 6 ns.
q01
d0 D Q
q0 d1 D Q
q1

clk qn0 qn01 qn1


Q Q

4.38. Dado el siguiente circuito, justifica y calcula mediante un cronograma el periodo mínimo de
funcionamiento correcto del circuito. El cronograma debe mostrar todas las señales implicadas.
Supón que las puertas AND tienen un retraso de 10 ns, la OR de 12 ns, los biestables 14 y que el
tiempo de preparación del biestable (setup) coincide con el de mantenimiento (hold) y es de 6 ns.
Se debe mostrar todas las señales que intervienen.
q01
d0 q0 d1 q1
D Q qn01 D Q

clk Q Q
qn1

4.39. Dado el siguiente circuito, calcula el periodo mínimo de funcionamiento correcto suponiendo
que los biestables tienen un retraso de 8 ns, un tiempo de preparación (set-up) de 4 ns y un
tiempo de mantenimiento (hold) de 3 ns. Suponiendo que el periodo de reloj es justo el periodo
mínimo calculado, dibuja un cronograma de al menos 4 ciclos completos de reloj (5 flancos de
subida) suponiendo que antes del primer flanco de subida D0=0 y D1=1. El cronograma debe
incluir clk, D0, Q0, D1 y Q1 (o sus inversas según el caso).

D Q D Q
GRB GRB
CLR CLR

Q Q
clk

4.40. Describe en VHDL el circuito del ejercicio 4.33. Es suficiente con poner el interior de la
arquitectura, pero debes utilizar los nombres que aparecen en el esquema como nombres de las
señales que utilices.

4.41. Se tiene dos biestables tipo D. La salida Q1 del primero va a ambas entradas de una puerta
NAND cuya salida va a la entrada D2 del segundo biestable. La salida Q2 del segundo biestable va
conectada a una puerta NOT cuya salida va a la entrada D1 del primer biestable. Ambos biestables
están conectados a la misma señal de reloj CLK. Dibuja el circuito. Dibuja el cronograma para
cuatro ciclos completos del reloj suponiendo que inicialmente Q1=Q2=1. Calcula y justifica la
frecuencia máxima de funcionamiento suponiendo que los retrasos son 15ns, 12ns y 14ns para el
biestable, NOT y NAND respectivamente; y que los tiempos de preparación (set-up) y hold
(mantenimiento) de los biestables son 16ns y 13ns respectivamente.

4.42. Cada instrucción del siguiente código VHDL está modelando un circuito muy concreto.
Identifícalo, dibuja el símbolo y explica muy brevemente cómo se llama qué es y qué hace.
s1<=a WHEN e='1' ELSE b;
s2<="00" WHEN e="0001" ELSE "01" WHEN e="0010" ELSE "10"
WHEN e="0100" ELSE "11" WHEN e="1000" ELSE "00";
s3<=e WHEN clk='1' and clk'event ELSE s3;
s4<=s4+1 WHEN clk='1' and clk'event ELSE UNAFFECTED;
s5<='1' WHEN a=b ELSE '0';
s6<='1' WHEN e1='1' AND e2='0' ELSE '0' WHEN e1='0' AND e2='1'
ELSE '0' WHEN e1='1' AND e1='1' ELSE s6;

4.43. El siguiente código describe un circuito típico MSI. Identifica el circuito de que se trata y
explica su funcionamiento. Dibuja el símbolo indicando las entradas y salidas del circuito.
Renombra las entradas y salidas para identificar mejor la función del circuito (debes indicar
claramente a que señal antigua corresponde el nuevo nombre que le pones). El símbolo o el nuevo
nombre debe indicar si las señales son activas a nivel alto o bajo.
ENTITY circuito IS
PORT( a,b,c,d: IN bit; e: IN integer RANGE 0 TO 15;
f: OUT integer RANGE 0 TO 15);
END circuito;

ARCHITECTURE descripcion of circuito IS


SIGNAL faux: integer RANGE 0 TO 15;
BEGIN
PROCESS(d,c)
BEGIN
IF d='0' THEN
faux<=0;
ELSIF c='1' AND c'event THEN
IF b=1 THEN
faux<=e;
ELSE
IF a=1 THEN
IF faux=15 THEN faux<=0;
ELSE faux=faux+1; END IF;
ELSE
IF faux=0 THEN faux<=15;
ELSE faux=faux-1; END IF;
END IF;
END IF;
END IF;
END PROCESS;
f<=faux;
END descripcion;

4.44. Dada la siguiente porción de código en VHDL, dibuja el circuito que describe mediante
puertas lógicas y elementos MSI. En el caso de circuitos MSI debes indicar explícitamente, con su
nombre, de qué elemento se trata.
ARCHITECTURE descripcion of circuito IS
SIGNAL a,b,c,d,e,f,g: bit;
BEGIN
c <= NOT (a AND NOT b);
d <= c WHEN e='1' ELSE d;
f <= d WHEN e='1' ELSE a;
g <= '0' WHEN (f='0' AND e='0') ELSE '1';
END descripcion;

4.45. Implementa un contador cíclico de 0 a 12 suponiendo que la salida del circuito es un


integer RANGE 0 TO 15 (4 bits) y que el reset (reset), la habilitación de reloj (ena) y el
reloj (clk) son std_logic, añade lo que le falta a esta Arquitectura en VHDL para poder
sintetizar el circuito.
ARCHITECTURE comportamiento OF ruleta IS
SIGNAL aux: integer RANGE 0 TO 15;
BEGIN
salida<=aux;
PROCESS(clk,reset)
BEGIN
-- Añade tu código aquí
...
END PROCESS;
END comportamiento;

4.46. Dibuja el circuito correspondiente a lo descrito por la siguiente porción de código en VHDL.
Debes utilizar componentes MSI siempre que sea posible, en cuyo caso debes nombrarlos. Fíjate
que los nombres de las señales no son probablemente los utilizados habitualmente por los
componentes descritos.
PROCESS(clk,s,e,b1,b0,m3,m2,m1,m0)
BEGIN
IF clk='1' AND clk'event THEN s<=e;
END IF;
h<=s AND e;
CASE b1&b0 IS
WHEN "00" => e<=m0;
WHEN "01" => e<=m1;
WHEN "10" => e<=m2;
WHEN "11" => e<=m3;
END CASE;
END PROCESS;

4.47. Dibuja el circuito de un biestable RS. Haz el cronograma de este circuito (señales R, S, Q y Qn)
suponiendo que las dos entradas R y S son 1 (R=S=1) y de repente pasan ambas entradas a valer
cero (R=S=0). Dibuja los 20 ns siguientes al cambio suponiendo que el retraso de las puertas es de
5 ns.

4.48. Diseña y dibuja un biestable RS con entrada de habilitación (ena) utilizando puertas NAND.
Describe la tabla de verdad de este circuito. Dibuja un cronograma de unos 100 ns suponiendo
que inicialmente todas las entradas están a uno (R=S=ena=1) y a los 10 ns la entrada ena pasa a
cero (ena=0). Supón para ello que las puertas NAND tienen un retraso de 10 ns.

4.49. Calcula el periodo mínimo de la señal de reloj para que un circuito formado por 4 biestables
síncronos tipo D en anillo funcione correctamente. Dibuja el cronograma de 2 ciclos completos de
reloj funcionando a la frecuencia máxima (debes mostrar las salidas de los biestables y el reloj; las
negadas no hace falta dibujarlas pues no intervienen).

4.50. Describe en VHDL (incluyendo entidad, etc.) un registro síncrono de 8 bits con puesta a cero
asíncrona y puesta a 1 (255 en este caso) síncrona. Las entradas y salidas son std_logic y
std_logic_vector.

4.51. Implementa un contador ascendente de 4 bits, con señal de habilitación de cuenta (a 1


cuenta y a 0 se para la cuenta) mediante un registro síncrono de 4 bits y 4 sumadores completos
de un bit. Sólo se debe emplear estos 5 elementos (1 registro síncrono y 4 sumadores completos
de un bit).

4.52. Implementa un contador ascendente simple de 3 bits a partir de biestables (el que prefieras)
y puertas lógicas. El contador debe incluir una señal de puesta a cero (reset). Describe
completamente el circuito (tanto entidad como arquitectura) usando VHDL.

4.53. Dos concursantes en un programa de televisión disponen de un botón que deben pulsar
cuando quieran contestar a una pregunta que se les hace. El concursante que primero aprieta el
botón responde en primer lugar. Para saber quién ha contestado primero, hay una luz que se
queda encendida junto al concursante que apretó el botón en primer lugar (la luz se queda
encendida independientemente de que se siga pulsando el botón y hasta que se resetea el circuito
mediante un 1 en una señal de entrada adicional). Implementa el circuito que realiza dicha
función. Para ello supón que a y b son las entradas correspondientes a los botones de ambos
concursantes (un 1 indica botón pulsado), que r es la entrada de puesta a cero o apagado de las
luces, y que luza y luzb son las salidas para encender las luces de cada concursante. Puedes utilizar
una señal de reloj si lo consideras conveniente.
Explica y razona lo que le ocurriría a tu circuito si ambos botones se pulsan al mismo tiempo o en
un intervalo de tiempo muy pequeño.

4.54. Se tiene una tira de 8 luces que sirve para indicar el nivel alcanzado en una caseta de feria
(por ejemplo, la de golpear con una maza en la palanca que empuja hacia arriba una pesa).
Cuando se golpea la palanca, las luces se iluminan de forma ascendente y sucesiva (con intervalos
de 0,5 segundos) hasta alcanzar un nivel que depende de la fuerza empleada, quedando todas las
luces iluminadas hasta ese nivel. Tiene una entrada de 3 bits que indica en binario el nivel que
debe alcanzar la iluminación y una entrada de un bit que se pone a uno durante un ciclo de reloj
para que empiece la secuencia de iluminación (esta entrada se generaría al golpear con la maza).
El circuito cuenta también con una señal de reloj (0,5 segundos de periodo) y una señal de réset
con la que preparamos el circuito para un nuevo golpeo. Utiliza los circuitos funcionales (MSI) y
puertas que quieras, especificando claramente lo que son y poniendo nombre, con su función, a
cada entrada y salida.

4.55. Implementa la funcionalidad descrita en el ejercicio 5.11 con los elementos MSI y puertas
lógicas que quieras, y suponiendo que cuenta hasta 5 unos seguidos y luego vuelve a cero. Debes
explicar la implementación y el funcionamiento. No se admiten registros simples de un bit pues
eso ya se ha hecho en el ejercicio anterior.

4.56. Describe en VHDL un circuito que, al igual que el 5.11, cuente los unos seguidos que van
llegando, pero que además cuente los ceros. El circuito ahora debe tener dos salidas (codificadas
en binario y por tanto de varios bits cada una); en una se lleva la cuenta de ceros seguidos y en la
otra la de unos seguidos. Es decir, mientras lleguen unos la cuenta de unos se va incrementando
mientras que la de ceros permanece a cero. Cuando llega un cero, la cuenta de ceros pasa a uno
(ya lleva un cero) y la de unos pasa a valer cero. Los ceros sucesivos irán incrementando la cuenta
de ceros mientras que la de unos permanece a cero. Tanto una cuenta como la otra contarán hasta
un máximo de 5 ceros o unos seguidos, iniciándose de nuevo la cuenta (ambas salidas a cero) al
llegar a ese valor. Este problema se puede resolver como máquina de estados, pero si se te ocurre
alguna otra posibilidad, puedes utilizarla igualmente.
-- No es necesario que escribas esta entidad en el
-- examen, pero debes usar estas entradas y salidas
ENTITY cuenta IS
PORT (E,clk,reset: IN std_logic;
numCeros: OUT integer RANGE 0 to 7;
numUnos: OUT integer RANGE 0 to 7);
END cuenta;

ARCHITECTURE comportamiento OF cuenta IS


TYPE estado IS (inicio, ...); -- Pon los tuyos
SIGNAL presente: estado:=inicio;
-- Pon aquí cualquier otra señal que necesites
BEGIN
-- Aquí va la descripción
END comportamiento;

Tema 5: Máquinas de Estados


5.1. Se pretende implementar un circuito con tres salidas S2, S1, S0 que genere la secuencia 000,
001, 011, 111 de forma cíclica. El circuito tiene una señal de puesta a cero síncrona (reset) y un
reloj de 1 Hz (clk). Realiza la implementación mediante una máquina de estados utilizando el
mínimo número de biestables que puedas. Debes dibujar el diagrama de estados, las tablas de
transición, las tablas para el cálculo de las funciones de transición de estados y salida, y el circuito
final.

5.2. Implementa la máquina de estados del ejercicio anterior mediante una descripción en VHDL.
Sólo es necesaria la sección de arquitectura. Al final de los ejercicios puedes encontrar la
estructura básica del código VHDL para la descripción de máquinas de estados.

5.3. Dado el problema propuesto en los ejercicios anteriores, trata de implementarlo mediante un
registro de desplazamiento tipo SIPO. El registro cuenta con señal de reloj y reset síncrono. Puedes
utilizar puertas lógicas adicionales (AND, NAND, OR, NOR y NOT) de las entradas que quieras.

5.4. Dado el problema propuesto en los ejercicios anteriores, trata de implementarlo mediante un
contador de 2 bits y 3 decodificadores (uno para cada salida) además de las puertas lógicas que
necesites.

5.5. Dada la siguiente porción de código en VHDL trata de descubrir la máquina de estados que
está describiendo y dibuja su diagrama de transición de estados indicando todas las entradas,
salidas, estados y transiciones. Explica, razonando, si se trata de una máquina de Mealy o de
Moore.
ARCHITECTURE descripcion of circuito IS
TYPE estado IS (inicial, sube, baja)
SIGNAL presente: estado:=inicial;
BEGIN
PROCESS(clk,reset)
BEGIN
IF reset='1' THEN presente<=inicial;
ELSIF clk='1' AND clk'event THEN
CASE presente IS
WHEN inicial=>
IF boton="01" THEN presente<=sube;
ELSIF boton="10" THEN presente<=baja;
ELSE presente<=inicial;
END IF;
WHEN sube=> presente<=inicial;
WHEN baja=> presente<=inicial;
END CASE;
END IF;
END PROCESS;
PROCESS(presente,boton)
BEGIN
IF presente = inicial THEN motor<=boton; END IF;
IF presente = sube THEN motor<="01"; END IF;
IF presente = baja THEN motor<="10"; END IF;
END PROCESS;
END descripcion;

5.6. Dada la siguiente porción de código en VHDL trata de descubrir la máquina de estados que
está describiendo y dibuja su diagrama de transición de estados indicando todas las entradas,
salidas, estados y transiciones. Explica, razonando, si se trata de una máquina de Mealy o de
Moore.
ARCHITECTURE descripcion of circuito IS
TYPE estado IS (inicial, delante, detras, quieto)
SIGNAL presente: estado:=inicial;
BEGIN
PROCESS(clk,reset)
BEGIN
IF reset='1' THEN presente<=inicial;
ELSIF clk='1' AND clk'event THEN
CASE presente IS
WHEN inicial=>
IF sensor="01" THEN presente<=delante;
ELSIF sensor="10" THEN presente<=detras;
END IF;
WHEN delante=> presente<=inicial;
WHEN detras=> presente<=inicial;
WHEN quieto=>
IF sensor="00" THEN presente<=inicial;
END IF;
END CASE;
END IF;
END PROCESS;

PROCESS(presente,sensor)
BEGIN
IF presente = inicial THEN salida<=sensor;
ELSIF presente = detras THEN salida<="00";
ELSE salida<="10";
END IF;
END PROCESS;
END descripcion;

5.7. Dado el siguiente circuito, calcula y justifica, mediante un cronograma, el periodo mínimo de
funcionamiento correcto del mismo; supón para ello que las entradas e1 y e0 permanecen
constantes. Suponiendo que el circuito corresponde a la implementación de una máquina de
estados, calcula las funciones de transición y salida, tanto en forma algebraica como en forma de
tabla, y dibuja el diagrama de estados completo. (Los retrasos en las puertas AND, OR y biestable
son 4ns, 5 ns y 10 ns respectivamente, y los tiempos de preparación (set-up) y mantenimiento
(hold) son 3ns y 2 ns respectivamente.)
5.8. Diseña una máquina de estados síncrona que detecte la ristra "01" y saque un 1 el ciclo
siguiente a la recepción de ese código (máquina de Moore). Cualquier aparición de "01" síncrono
con el reloj produce la salida a 1.

5.9. Se quiere implementar una cerradura electrónica mediante dos botones B1 y B0. Cada botón
puede tomar los valores 1 (apretado) y 0 (suelto). La secuencia del par B1B0 que abre la cerradura
es primero 11 (B1 y B0 pulsados), luego 10 (B1 pulsado y B0 no) y por último 00 (los dos sueltos).
Cuando se introduce la secuencia correcta, la salida de un bit del circuito se pone a 1 (el resto del
tiempo está a 0). El circuito viene sincronizado con una señal de reloj de frecuencia superior a 1
kHz y dispone de una señal de reset para inicializar la máquina. Debes dibujar el diagrama de
transición de estados, la debes simplificar, si se puede. Debes dar a continuación las tablas de
transición de estados y salida e implementar el circuito mediante biestables y puertas lógicas de tu
elección. No olvides dibujar el circuito final resultante con todos sus elementos.

5.10. Suponiendo que ahora la secuencia de B1B0 que abre la caja es {11,10,00,10,11,01} realiza el
nuevo diagrama de estados y describe el circuito en VHDL. A continuación tienes parte del código
en VHDL que te puede servir en la descripción:
-- No es necesario que escribas esta entidad en el
-- examen, pero debes usar esos nombres
ENTITY cerradura IS
PORT (B0,B1,clk,reset: IN std_logic;
abrir: OUT std_logic);
END cerradura;

ARCHITECTURE comportamiento OF cerradura IS


TYPE estado IS (inicio, ...); -- Pon los tuyos
SIGNAL presente: estado:=inicio;
-- Pon aquí cualquier otra señal que necesites
BEGIN
-- Aquí va la descripción
END comportamiento;

5.11. Se quiere hacer un circuito que cuente los ciclos de reloj que una señal de entrada
permanece en uno (hasta un máximo de 3 ciclos o 3 unos seguidos). La máquina de estados
cuenta con una salida codificada en binario, cuyo valor se incrementa cada vez que la entrada está
a uno cuando se produce el flanco de subida del reloj, y pasa a cero cuando llega un cero o se han
contado tres unos. Sólo puedes utilizar registros de un bit y puertas lógicas y resolverlo como
máquina de estados.

5.12. Se tiene un depósito con un grifo para llenarlo y un desagüe para vaciarlo. La válvula grif abre
el grifo cuando la ponemos a 1 y lo cierra cuando lo ponemos a 0. De la misma manera, la válvula
desag abre el desagüe cuando está a 1 y lo cierra cuando está a cero. Por otro lado, el depósito
tiene un sensor lleno que se pone a 1 cuando el depósito está lleno y a 0 si no. También cuenta
con un sensor vacio que se pone a 1 si el depósito está vacío y a 0 si no. Se trata de hacer un
circuito que abra y cierre el grifo y el desagüe del depósito actuando sobre grif y desag, de manera
que se debe mantener el grifo abierto y el desagüe cerrado hasta que se llene. Una vez lleno, debe
abrirse el desagüe y cerrarse el grifo hasta que se vacíe completamente, iniciando a continuación
un nuevo ciclo de llenado/vaciado y así para siempre. El circuito se debe implementar mediante
una máquina de estados con biestables tipo D, un reset para inicializarlo todo y un reloj de
sincronización de 100 kHz. En el estado inicial de reset supondremos que estamos llenando el
depósito.

5.13. Supongamos que queremos utilizar el depósito anterior para hacer un medidor de litros
consumidos. El depósito tiene una capacidad de 1 litro, por lo que cada vez que se vacíe el
depósito sabremos que se ha consumido un litro. Añade una salida litros de 8 bits al circuito para
indicar en binario los litros consumidos desde la última vez que se hizo un reset. Implementa el
nuevo circuito en VHDL. Al final de los ejercicios puedes encontrar la estructura básica del código
VHDL para la descripción de máquinas de estados.

5.14. Se quiere implementar un cuentarrevoluciones digital para un coche utilizando elementos


MSI. El motor entrega un pulso en cada vuelta del motor (entrada motor). La salida es un bus de
14 bits por lo que puede representar un número de 0 a 16383 que será por tanto las revoluciones
máximas que se pueden contar. Como entradas adicionales tendremos un reloj clk de 1 Hz y un
reset para inicializarlo todo. El circuito contará los pulsos del motor durante un minuto al final del
cual se captura este valor en un registro. Necesitas por tanto un contador y un comparador para
contar un minuto, otro contador de 14 bits para contar los pulsos y un registro para capturar las
revoluciones contadas y mostrarlas en la salida. El circuito debe incluir todas las señales que
intervienen.

5.15. Se quiere hacer el circuito que controla las dos puertas automáticas de acceso a un banco. Se
tiene una entrada al circuito proveniente de un botón que el usuario pulsa para entrar ( boton=1).
En el estado inicial, al detectarse la pulsación del botón, debemos actuar sobre la salida puerta1
para abrir la primera puerta (puerta1=1). Entre las dos puertas tenemos un sensor que detecta si
la persona ha atravesado la primera puerta (sensor=1). En ese momento se cierra la primera
puerta y se abre la segunda. (puerta1=0 y puerta2=1). Cuando el sensor deje de detectar a la
persona (sensor=0) cerraremos la segunda puerta (puerta2=0) volviendo al estado inicial donde
una nueva pulsación activa de nuevo la apertura de puertas (en el estado inicial ambas están
cerradas). Se tiene por tanto dos salidas (puerta1 y puerta2) y dos entradas (boton y sensor) junto
con un reloj (clk) de alta frecuencia y un reset para inicializarlo todo. Debes dibujar el diagrama de
transición de la máquina de estados, las tablas de transición y salida y la implementación final con
biestables tipo D y puertas lógicas.

5.16. Realiza la descripción de la máquina de estados del ejercicio anterior en VHDL:


-- No es necesario que escribas esta entidad en el
-- examen, pero debes usar estos nombres
ENTITY puertas IS
PORT (boton,sensor,clk,reset: IN std_logic;
puerta1, puerta2: OUT std_logic);
END puertas;

ARCHITECTURE comportamiento OF puertas IS


TYPE estado IS (inicio, ...); -- Pon los tuyos
SIGNAL presente: estado:=inicio;
-- Pon aquí cualquier otra señal que necesites
BEGIN
-- Aquí va la descripción
END comportamiento;

5.17. Una cinta transportadora lleva naranjas de una en una hasta una caja. Existe un sensor que
cada vez que detecta una naranja se pone a uno (sensor=1) y entre naranja y naranja se pone a
cero (sensor=0). Por otro lado, se tiene un actuador que cuando recibe un 1 (cambia=1) retira la
caja con las naranjas que le hayan llegado y pone una nueva. Se pide diseñar un circuito, utilizando
elementos MSI, que cada vez que se hayan contado 100 naranjas cambie la caja. Especificar las
entradas y salidas y dibujar el esquema del circuito resultante especificando con detalle todos sus
elementos y tamaño en bits de los buses y cables.

5.18. Se dispone de una cerradura electrónica controlada por un circuito con una entrada de dos
bits (E[1:0]) y una salida de un bit (S) que abre la cerradura cuando S=1. Además el circuito cuenta
con una señal de reloj CLK y de reinicio RESET. Para abrir la cerradura el usuario debe introducir la
siguiente secuencia: "01", "11", "10" (no está sincronizada con el reloj, por lo que el intervalo
entre un valor y el siguiente puede ser arbitrario). Diseñar dicho circuito mediante una máquina
de estados. Dibuja el diagrama de estados, las tablas de transición y salida, las funciones de
transición y salida, y el circuito resultante implementado con biestables y puertas de tu elección.

5.19. Se dispone de una cinta transportadora pero esta vez se trata de botellas. Encima de la cinta
hay un dispositivo que cuando le llega una botella, la llena, le pone un tapón y comprueba que el
tapón está colocado. El circuito controla todo, incluido el motor de la cinta. Inicialmente el circuito
pone en marcha el motor (motor=1) hasta que la botella está debajo del dispositivo llenador,
hecho que sabemos porque la entrada botella=1. A continuación abrimos la salida de líquido para
llenar la botella (valvula=1). Sabremos que la botella está llena gracias al sensor llena=1. En este
momento cerramos la salida de líquido (valvula=0), ponemos el tapón (pontapon=1) y esperamos
a que se active la señal que detecta que el tapón está bien colocado ( tapon=1). Si pasan 2
segundos y la entrada tapon no se ha puesto a 1, activaremos la salida error=1, y todo se detiene,
en caso contrario, ponemos pontapon=0 y volvemos a iniciar la secuencia activando de nuevo el
motor (motor=1) hasta que llegue una nueva botella (botella=1). El circuito cuenta con una
entrada de reset asíncrona y un reloj (clk) de 10 Hz. Debes dibujar el diagrama de estados de la
máquina de estados que resuelve el problema. Supón que los diferentes sensores vuelven a cero
tras un ciclo. No olvides asignar un valor a cada salida en cada estado.
-- No es necesario que escribas esta entidad en el
-- examen, pero debes usar los siguiente nombres
ENTITY botellas IS
PORT (botella,llena,tapon,clk,reset: IN std_logic;
motor,valvula,pontapon,error: OUT std_logic);
END botellas;

ARCHITECTURE comportamiento OF botellas IS


TYPE estado IS (inicio,...); -- Pon los tuyos
SIGNAL presente: estado:=inicio;
-- Pon aquí cualquier otra señal que necesites
...
BEGIN
-- Aquí va la descripción
...
END comportamiento;

5.20. Un molino gira continuamente a derechas (sentido='0') o a izquierdas (sentido='1').


Inicialmente el molino gira a derechas. El circuito a diseñar dispone de dos botones activos a nivel
alto; uno sirve para indicar que gire a derechas (botonder='1') y el otro para que gire a izquierda
(botonizq='1'). Cuando se pulsa en cualquier instante alguno de esos botones de entrada la salida
sentido debe tomar el valor correspondiente al botón pulsado y mantenerlo hasta que se pulse de
nuevo algún botón. El valor de la salida sólo cambia si se pulsa el botón contrario al sentido que
esté indicando. Se supone que la duración de la pulsación del botón es breve pero mucho mayor
que el reloj a utilizar que puedes suponer de 1 KHz por ejemplo. Dibuja el diagrama de transición
de estados y salida de la máquina de estados. Implementa el circuito con biestables de tu elección
y puertas lógicas. Dibuja el circuito completo. Debes conectar correctamente la señal de reset a
los biestables.

5.21. Dado el molino del ejercicio anterior, supón ahora que añadimos un botón para
arrancar/parar la máquina en cualquier instante (botonmarchaparo) y que tenemos una salida
adicional para indicarle al motor que funcione (motor='1') o que esté parado (motor='0'). Dibuja el
nuevo diagrama de transición de estados teniendo en cuenta las nuevas señales, estados y salidas.
Diseña el circuito mediante una descripción en VHDL de esa máquina de estados. Al final del
documento tienes la estructura básica de una descripción de máquinas de estados en VHDL.

5.22. Se quiere hacer un circuito que controle el llenado de tres depósitos de agua. La única
entrada (lleno) se pone a 1 cuando el depósito que se está llenando en ese momento ya se ha
llenado; en otro caso vale 0. El circuito dispone de tres salidas (dep1, dep2 y dep3) que cuando se
ponen individualmente a 1, abren el grifo correspondiente a su depósito para que entre agua;
cuando se ponen a 0 lo cierran. El circuito debe llenar cada vez un depósito hasta que esté lleno,
empezando por el 1: luego debe llenar el siguiente depósito y así hasta el último (el 3), volviendo a
empezar por el primero. Naturalmente, sólo se abre el grifo del depósito que se quiere llenar,
permaneciendo el resto cerrados. El circuito se completa con una señal de reset (conectada
directamente al reset de los biestables) y un reloj (clk) de la frecuencia que quieras.

5.23. Dado el circuito del ejercicio anterior, supón ahora que tenemos tres entradas, una para cada
depósito, que indican que se ha llenado (puedes llamarlas lleno1, lleno2 y lleno3). Supón también
que, además de las salidas para llenar los depósitos, dispones de otras tres (vac1, vac2 y vac3)
para vaciarlos, de manera que tenemos que vaciar cada vez sólo el depósito siguiente al que estoy
llenado, es decir, si estoy llenando el depósito 2, al mismo tiempo tengo que vaciar el 3. Dibuja el
nuevo diagrama de transición de estados teniendo en cuenta las nuevas señales, estados y salidas.
Diseña el circuito mediante una descripción en VHDL de esa máquina de estados. Al final del
documento tienes parte del código VHDL para ayudarte a resolverlo (no hace falta que incluyas la
entidad).

5.24. Hay dos vías de tren (VA y VB) que se juntan en una sola. Hay un sistema de agujas que
conecta una de las dos vías a la vía única. Las agujas se controlan con la señal V (de vía) que si está
a 0 conecta la VA y si está a 1 conecta la VB. Por otro lado, cada una de estas dos vías tiene un
sensor (SA y SB) que si detectan que hay un tren en su vía se ponen a 1 respectivamente. Se pide
realizar un circuito que seleccione la vía en función de que se detecte un tren en una u otra,
teniendo en cuenta que si no se detecta ningún tren, la aguja debe permanecer en la vía que
estuviera (V no cambia) y si se detectan dos trenes a la vez pasa lo mismo, es decir, tampoco debe
cambiarse la V. Debe implementarse el circuito mediante una máquina de estados síncrona con un
reloj de 100 Hz y una señal de reset; hay que especificar sus entradas y salidas, así como el
diagrama y las tablas de transición de estados, funciones lógicas y circuito final resultante.

5.25. Partiendo de la descripción del ejercicio anterior, supón ahora que se tienen 4 vías que
confluyen en una sola y que la aguja se controla mediante una señal V de dos bits (V1 y V0). Al
igual que antes, cada vía tiene su propio sensor (SA, SB, SC y SD) que indica que hay un tren en
dicha vía. El circuito a realizar debe poner la salida V a uno de los 4 valores para seleccionar una
de las vías que tenga un tren. Si no hay ningún tren, la aguja no cambia y V conserva su valor. En el
caso de que se detecten uno o más trenes en las vías, si la vía actualmente seleccionada tiene un
tren, no se cambiará; pero si no lo tiene, deberá cambiarse a una que sí lo tenga. Dibuja el nuevo
diagrama de transición de estados teniendo en cuenta las nuevas entradas, salidas y estados.
Diseña el circuito mediante una descripción en VHDL de esa máquina de estados. Al final del
documento tienes parte del código para ayudarte a resolverlo (no hace falta que incluyas la
entidad).

5.26. Se quiere hacer un circuito que genere varias secuencias de números binarios (s=[s1..s0]) en
función de una entrada de dos bits (e=[e1..e0]). Si la entrada e="00" la secuencia de salida sería
s={0,1,2,3,0,1,2,3,...}, si e="01" entonces s={0,2,0,2,...}, si e="10" entonces s={1,3,1,3,...} y si
e="11" entonces s={0,3,2,1,0,3,2,1,...}. En el caso que se produzca un cambio en la entrada, el
siguiente número debe ser el siguiente que siga según el orden natural de los enteros positivos y
que pertenezca a la nueva secuencia seleccionada. El circuito debe realizarse con biestables y
puertas utilizando el procedimiento de máquinas de estados, se debe por tanto especificar el
diagrama de estados, las tablas de transición y salida, las ecuaciones algebraicas y finalmente el
esquema del circuito. La máquina cuenta con una señal de reloj y un reset asíncrono (en caso de
activarse el reset, la salida debe ser 0 que será la correspondiente al estado inicial).

5.27. Describe en VHDL el comportamiento del circuito presentado en el ejercicio anterior.

5.28. Se quiere hacer un sistema que sólo permita la presencia de un coche en un puente. Para
ello, se dispone de una barrera normalmente cerrada (b=0). Un sensor puede detectar la
presencia de un coche (p0=1) momento en el cual (si no había coches ya cruzando) se abre la
barrera (b=1) y el coche pasa. Al pasar, el coche deja de detectarse (p0=0) y entonces la barrera
baja para impedir que entren nuevos coches. Para saber que el coche ya ha cruzado, existe otro
sensor al final del puente que al activarse (p1=1), indica que el puente está libre de coches y podrá
aceptar nuevos. Especifica las entradas y salidas del sistema. Resuelve el problema mediante una
máquina de estados. Dibuja el diagrama de estados (no te dejas ninguna combinación de entrada).
Representa las tablas de transición y salida, y dibuja el circuito resultante utilizando puertas y
biestables del tipo que quieras. El circuito debe simplificarse lo más posible, incluyendo, si fuera el
caso, la simplificación de las salidas no especificadas. La sincronización se hace con un reloj de
varios kHz (clk) y el sistema se inicia con un reset.

5.29. Supón ahora que el puente puede ir en los dos sentidos y que igualmente no puede haber
dos coches sobre él en ningún momento. Tenemos por tanto el mismo sistema descrito
anteriormente en ambos lados del puente, por lo que a las señales de un lado les podemos añadir
una "a" (pa0, pa1, ba,...) y a las del otro una "b" (pb0, pb1, bb,...). Dibuja los nuevos diagramas de
estados y describe el nuevo circuito en VHDL.

5.30. Se dispone de un toldo motorizado. El motor gira en dos sentidos para abrir (motor="10") o
cerrar (motor="01") o quedarse quieto (motor="00"). El toldo cuenta con un sensor tope que se
pone a uno durante un ciclo (tope=1) cuando el toldo se ha abierto o cerrado del todo. Además
cuenta con un sensor sol que se pone a uno cuando hay sol y a cero en caso contrario. Se debe
hacer un circuito que abra el toldo cuando haga sol (sol=1), actuando adecuadamente sobre el
motor, y lo cierre cuando ya no haya sol (sol=0). Especifica las entradas y salidas del sistema.
Resuelve el problema mediante una máquina de estados. Dibuja el diagrama de estados (no te
dejas ninguna combinación de entrada). Representa las tablas de transición y salida, y dibuja el
circuito resultante utilizando puertas y biestables del tipo que quieras. El circuito debe
simplificarse lo más posible, incluyendo, si fuera el caso, la simplificación de las salidas no
especificadas. La sincronización se hace con un reloj de varios kHz (clk) y el sistema se inicia con
un reset.

5.31. Supón ahora que añadimos un sensor de viento y dos botones para abrir y cerrar el toldo,
además de un interruptor auto. El sensor viento se activa (viento=1) si la velocidad del viento
supera los 30 Km/h, en cuyo caso el circuito debe cerrar el toldo si no está cerrado. Cuando el
interruptor auto está activo (auto=1) el toldo funciona tal y como se ha descrito hasta ahora, sin
embargo, si está desactivado (auto=0) el toldo solo hará caso a los botones de abrir y cerrar, de
manera que cuando se pulse alguno (abrir=1 por ejemplo) el toldo se abrirá o cerrará según el
botón pulsado. Al circuito se le añade además una salida de alarma que se activará (alarma=1)
cuando el toldo no esté cerrado y el viento esté activado. Dibuja el nuevo diagrama de estados y
describe el circuito en VHDL.

5.32. Se quiere hacer un circuito que controle un calefactor en una estancia. Si la señal calor se
pone a 1 el calefactor calienta, y si está a cero, enfría. Se dispone de dos sensores: el sensor t25 se
pone a 1 cuando la temperatura está por encima de 25 grados y 0 en caso contrario. El t24 se
pone a 1 cuando la temperatura está por debajo de 24 grados y a 0 en caso contrario. El circuito a
diseñar debe encender y apagar el calentador, según lo que registren los sensores, para mantener
la estancia entre 24 y 25 grados. Utiliza una máquina de estados con un reloj clk de cualquier
frecuencia y señal de reset. Especifica claramente las entradas y salidas del sistema, el diagrama
de estados, las tablas de transición y salida, el circuito resultante y todos los detalles de la
elaboración del circuito.

5.33. Dado el circuito anterior, supón que tenemos un sensor adicional t23 que nos informa
mediante un 1 que la temperatura está por debajo de 23 grados Tenemos además un interruptor
franja que si está a 0 la temperatura de la habitación debe estar estre 23 y 24 grados, y si está a 1,
entre 24 y 25 grados. Dibuja el nuevo diagrama de estados y describe en VHDL el comportamiento
del nuevo circuito.

5.34. Se tiene un robot de cocina que consiste en un recipiente con una resistencia (r) y un motor
(m); la resistencia calienta el contenido si hacemos r=1, y el motor lo remueve si hacemos m=1.
Tiene además dos sensores: frio (f) y caliente (c), que indican si el contenido está por debajo de
una determinada temperatura o frío (f=1) o si está por encima de una determinada temperatura o
caliente (c=1). Se quiere hacer un circuito que actúe sobre el motor y el calentador de manera que
inicialmente se debe calentar el contenido del recipiente hasta que esté caliente, momento en el
cual dejamos de calentar y pondremos el motor en marcha hasta que el contenido esté frío, tras lo
cual paramos el motor y el circuito ya no hace nada hasta que se vuelve a inicializar mediante una
señal de reset, que serviría para iniciar de nuevo esta secuencia de calentamiento->motor->paro.
Implementa el circuito mediante una máquina de estados con reset y clk. Especifica las entradas y
salidas, dibuja el diagrama de transición de estados con todas las combinaciones de entrada,
representa las tablas de transición y salida correspondientes. Realiza la codificación de estados y
las funciones de transición y salida simplificadas. Dibuja finalmente el esquema del circuito
resultante. Ten en cuenta que la señal de reset inicia la secuencia por lo que deberás conectar el
reset del sistema a los resets de los biestables, de manera que el estado cuando se realiza el reset
sea el primero en la secuencia.

5.35. Realiza la descripción en VHDL del comportamiento del circuito anterior pero supón ahora
que hay un tiempo máximo de calentamiento de 80 segundos, y un tiempo máximo en el que el
motor está moviendo la mezcla de 60 segundos. Supón para ello que el reloj del sistema es de 100
Hz (0,01 segundos).

5.36. Se quiere hacer un circuito que controle el momento en que un sistema, acoplado a un reloj,
debe dar las campanadas (cam=1) y posteriormente hacer sonar una musiquita (mus=1). El reloj le
indica a nuestro sistema que es una hora en punto activando la señal hora (hora=1) durante un
tiempo indeterminado. En ese instante, nuestro circuito le indicará al sistema de sonido que toque
las campanas activando la señal cam (cam=1). Sabremos que han terminado las campanadas pues
el sistema de sonido nos lo indicará con una señal a 1 (p=1). En este momento debemos decirle al
sistema de sonido que encienda la música (mus=1) y que apague las campanas (cam=0). Sabremos
que ha terminado de tocar la canción pues el sistema de sonido nos lo indicará con (p=0). En el
momento se haya terminado todo (p=0 y hora=0) las salidas pasarán o se quedarán a cero (cam=0
y mus=0) y estaremos preparados para una nueva activación de las horas, que es lo que inicia de
nuevo la secuencia de campanadas y música. Implementa el circuito mediante una máquina de
estados con reset y clk. Especifica las entradas y salidas, dibuja el diagrama de transición de
estados con todas las combinaciones de entrada, representa las tablas de transición y salida
correspondientes. Realiza la codificación de estados y las funciones de transición y salida
simplificadas. Dibuja finalmente el esquema del circuito resultante.

5.37. Realiza la descripción en VHDL del comportamiento del circuito anterior pero supón ahora
que hay un tiempo máximo en el que está dando las campanadas, es decir, dejará de tocar las
campanas (cam=0) cuando haya pasado un determinado tiempo o se active p (p=1), lo que sea
que ocurra antes. El tiempo máximo en el que deben sonar las campanas coincide con el tiempo
en segundos de la hora numérica. Esta hora viene indicada por una nueva entrada (lahora[3..0])
de 4 bits que contiene la hora actual y, por tanto, se corresponde con el número de segundos que
deben estar sonando las campanas como máximo. Supón para ello que el reloj del sistema es de
100 Hz (0,01 segundos).

5.38. Diseña un circuito de marcha/paro de manera que cada vez que se pulsa un botón b, es decir,
la entrada b pasa de 0 a 1, un motor se pone en marcha (salida m=1) si estaba apagado, o se para
(m=0) si estaba en marcha. Utiliza una máquina de estados síncrona con un reloj clk de frecuencia
en torno a los KHz y señal de reset asíncrona. Con el reset activo el motor está parado. Especifica
claramente las entradas y salidas del sistema, el diagrama de estados, las tablas de transición y
salida, el circuito resultante y todos los detalles de la elaboración del circuito. No se puede usar b
como reloj de ningún biestable.

5.39. Dado el circuito anterior, supón ahora que el motor tiene cuatro velocidades codificadas
como 00, 01, 10 y 11, de manera que cada vez que pulsamos el botón aumenta la velocidad (si es
11 vuelve a empezar en 00). Dibuja el nuevo diagrama de estados y describe en VHDL el
comportamiento del nuevo circuito. Con el reset activo el motor debe estar parado (00). Recuerda
que, al igual que en el ejercicio anterior, para que se entienda que el botón ha sido pulsado tiene
que estar a cero previamente (sin pulsar).

5.40. Se tiene un péndulo que oscila entre dos sensores a Izquierda y Derecha (SI, SD). Cuando
cada sensor detecta la presencia del péndulo saca 1 y el resto del tiempo saca 0. Debes diseñar un
circuito cuya salida indique con un 1 que el péndulo está yendo de derecha a izquierda (el último
sensor que se activó es el derecho) y con 0 el caso contrario. Debes tener en cuenta que hay
combinaciones de entrada que no se pueden dar (11 por ejemplo) para así obtener un circuito lo
más simplificado posible. Implementa el circuito mediante una máquina de estados con reset y
clk. Especifica las entradas y salidas, dibuja el diagrama de transición de estados con todas las
combinaciones de entrada, representa las tablas de transición y salida correspondientes. Realiza la
codificación de estados y las funciones de transición y salida simplificadas.

5.41. Realiza la descripción en VHDL del comportamiento del circuito anterior pero añadiendo un
contador que, en todo momento, tenga el número de milisegundos que han transcurrido desde el
último cambio de sentido del péndulo. Supón para ello que la señal de reloj es de 1 kHz (1 ms de
periodo) y que el péndulo cambia de sentido en menos de un segundo.

5.42. Se quiere hacer un circuito que genere diferentes secuencias de bits en función de una
entrada de dos bits (e=[e1..e0]). Si la entrada e="00" la secuencia de salida sería
s={0,1,0,1,...}, si e="01" entonces s={0,1,1,0,1,1,...}, si e="10" entonces
s={0,0,1,0,0,1,...} y si e="11" entonces la salida da igual pues esa combinación nunca se
puede dar. En el caso que se produzca un cambio en la entrada, la nueva secuencia puede
empezar en cualquier sitio. Es importante darse cuenta que las secuencias se repiten cada 3 bits
como mucho. Implementa el circuito mediante una máquina de estados con reset y clk. Especifica
las entradas y salidas, dibuja el diagrama de transición de estados con todas las combinaciones de
entrada, representa las tablas de transición y salida correspondientes. Realiza la codificación de
estados y las funciones de transición y salida simplificadas al máximo.

5.43. Realiza la descripción en VHDL del comportamiento del circuito anterior, pero con la
modificación de que cuando la entrada es e="11" entonces la secuencia de salida es
s={0,0,0,1,1,0,0,0,1,1,...} es decir, está formada por 5 bits que se repiten, en lugar de
3 como en el resto de secuencias.

5.44. Dada la siguiente tabla de transición de estados, dibuja el diagrama de estados sin simplificar
y obtenido después de simplificar los estados (si se puede simplificar).
Estado actual Estado siguiente, E=0 Estado siguiente, E=1 Salida
A A B 0
B B C 1
C D E 0
D C G 0
E B C 1
F D F 0
G B C 1

5.45. Dada la siguiente tabla de transición de estados, simplifícala, dibuja el diagrama de estados
resultante y diseña el circuito correspondiente a la máquina de estados que representa.
Estado actual Estado siguiente, E=0 Estado siguiente, E=1 Salida
A B A 0
B C D 1
C C D 1
D C A 0

5.46. Dada la siguiente tabla de transición de estados, dibuja el diagrama de estados


correspondiente a esa tabla. A continuación simplifica los estados lo más posible y vuelve a dibujar
un nuevo diagrama con los estados resultantes (debes explicar o razonar las simplificaciones
realizadas). Por último, diseña el circuito que implementa esa máquina de estados utilizando
biestables tipo D y las puertas lógicas que necesites.
Estado actual Estado siguiente, E=0 Estado siguiente, E=1 Salida
A A B 0
B C D 0
C A C 1
D A B 0

5.47. Dada la siguiente tabla de transición de estados, dibuja el diagrama de transición de estados,
representa el diagrama de fusión de estados, simplifica los estados y finalmente dibuja la nueva
tabla de transición así como el diagrama de transición simplificado resultante.

Estado actual Estado siguiente, E=0 Estado siguiente, E=1 Salida


A A B 0
B C B 1
C A D 0
D C B 1

Tema 6: Lógica Programable


6.1. Se dispone de dos funciones lógicas f0=∑ cba(3,4,5,7) y f1=∑cba(1,4,5). Calcula la expresión
algebraica mínima de esas funciones mediante mapas de Karnaugh. Dibuja un dispositivo PAL
(Programmable And Logic) completo de 3 entradas y 2 salidas, indicando mediante cruces las
conexiones que habría que programar para implementar dichas funciones.

6.2. Dibuja la estructura matricial de un circuito de lógica programable PAL suponiendo 4 entradas
y 1 salida. Indica en dicha matriz las conexiones que habría que hacer para implementar la función
s=abcd+abc+bcd (las variables subrayadas están negadas).

6.3. Se dispone de dos funciones lógicas f0=∑ cba(3,4,5,7) y f1=∑cba(1,4,5). Implementa ambas
funciones mediante un único circuito MSI y puertas OR de dos entradas. Indica de qué circuito MSI
se trata. Dibuja la matriz de conexiones de una PAL (Programmable And Logic) indicando mediante
cruces las conexiones que habría que programar para implementar dichas funciones.

6.4. Implementa mediante una PAL (Programmable And Logic) un decodificador binario de 3 a 8.
Debes dibujar la matriz de interconexiones de la PAL, y los circuitos que contiene, indicando con
una X el lugar donde hay conexión entre los cables que se cruzan.

PROBLEMAS
P1.- Se debe describir en VHDL el circuito controlador de una puerta de garaje.

Entradas: El sistema tiene una entrada que llamaremos obstaculo que a '1' indica que hay un coche
en medio de la entrada (si hay un coche entrando la puerta no debería cerrarse). También tiene otra
entrada que a '1' indica puerta completamente abierta y otra más que a '1' indica que la puerta está
completamente cerrada; a estas entradas las llamaremos abierta y cerrada respectivamente. Por
último hay otra entrada que a '1' indica que se ha pedido abrir la puerta; la llamaremos abrir.
Salidas: Las salidas corresponderán a las conexiones del motor que acciona la puerta y tendremos
dos: motor_abrir y motor_cerrar que cuando están a '1' abren o cierran la puerta (no deberían
activarse ambas al mismo tiempo).

Funcionamiento: Con estas entradas y salidas el funcionamiento sería el siguiente: El sistema recibe
un abrir=1 cuando un coche quiere entrar. En ese momento se debe accionar el motor para abrir la
puerta. Una vez abierta la cerraremos siempre que hayan pasado al menos 10 segundos y no haya
ningún obstáculo. Si mientras la puerta se está cerrando aparece un obstáculo, se debe volver a abrir
y esperar de nuevo 10 segundos. Si mientras se está cerrando se recibe una nueva petición de
apertura de puerta (un coche llega justo cuando se está cerrando) debemos abrir de nuevo la puerta
aunque no se haya cerrado del todo. Por supuesto no debemos hacer caso al sensor de obstáculo una
vez la puerta se haya cerrado del todo.

Otras consideraciones: Todo debe sincronizarse con una única señal de reloj (clk) de una frecuencia
de 10 Hz y se debe proveer una señal de reset, activa a nivel bajo, que inicialice todo el sistema.

Debe dibujarse el diagrama de estados correspondiente a la solución del problema (sirve además de
ayuda para la descripción VHDL).

P3.- Se debe implementar un circuito contador de vueltas de una pista de dos coches de carreras de
juguete.

Entradas: El sistema tiene dos entradas que llamaremos pasopormeta1 y pasopormeta2 conectadas a
sendos sensores de presencia y que se ponen a '1' durante unos milisegundos para indicar que el
coche 1 o el coche 2 acaban de pasar por la meta respectivamente. Hay otra entrada que llamaremos
reset que se pone a '1' cuando se pulsa un botón y que sirve para poner a cero los contadores, apagar
la luz de ganador, y empezar así una nueva carrera. Se dispone de una señal de reloj de 1 Mhz para
sincronizarlo todo o filtrar las señales provenientes de botones o para obtener señales limpias de
reloj.

Salidas: Por un lado tenemos dos buses de 7 hilos para excitar dos cifras de 7-segmentos (una para
cada contador de vueltas que por lo tanto sólo irá de 0 a 9). Además tendremos dos salidas de un bit,
una para cada coche, conectadas a sendas luces que se deben encender después de 9 vueltas según
el que haya ganado (un '1' enciende y un '0' apaga).

Funcionamiento: Con estas entradas y salidas el funcionamiento sería el siguiente: El botón de réset
nos sirve para poner los contadores a cero y las luces de ganador a '0' (luces apagadas). Se inicia la
carrera y los coches dan vueltas al circuito de manera que cada vez que un coche atraviesa la meta se
incrementa su contador correspondiente. Cuando el contador de uno de los coches llega a 9 se para
de contar, no se hace caso ya más a los siguientes pasos por meta, y se enciende la luz
correspondiente al coche que primero haya llegado a 9. Todo se queda así hasta que se vuelve a
pulsar sobre el botón de réset iniciando una nueva carrera.

Realizar un circuito que implemente lo anteriormente descrito utilizando registros, contadores,


comparadores, multiplexores decodificadores BCD de 7 segmentos y puertas lógicas estándar.

P4.- Realizar una descripción comportamental en VHDL del circuito que hace todo lo descrito
anteriormente. Basta con el bloque de arquitectura. Dado que puede resultar tedioso implementar
en VHDL la decodificación para obtener los 7 segmentos de los marcadores de vueltas, supondremos
que esta decodificación se hace fuera del circuito en VHDL por lo que las salidas para cada contador
serán de 4 bits (en lugar de 7) y utilizarán una codificación binaria.

P5.- Implementa mediante una descripción de máquina de estados en VHDL, un circuito que detecte
si un coche pasa de izquierda a derecha en una carretera. Para ello se dispone de dos sensores, I y D
(de Izquierda y Derecha respectivamente) que devuelven '1' cuando detectan un coche y '0' en caso
contrario. Los dos sensores están muy juntos de manera que cuando un coche va de izquierda a
derecha, primero se pone a '1' el sensor de la izquierda, luego se ponen a '1' los dos, luego a '1' sólo
el de la derecha (aquí ya podemos dar el evento por detectado) y luego los dos a '0'. El circuito debe
devolver un '1' durante al menos un ciclo de reloj cuando se haya detectado un coche de izquierda a
derecha. Sólo se debe detectar el paso limpio de un coche de izquierda a derecha, por lo que si los
sensores no siguen la secuencia anterior tendremos que volver al principio. Se considera que el coche
ha sido detectado cuando en la secuencia anterior está solamente encendido el sensor de la derecha,
no siendo necesario esperar a que haya pasado todo el coche y los dos sensores estén a '0'. El circuito
viene sincronizado con una señal de reloj de frecuencia superior a 1 kHz y dispone de una señal de
reset para inicializar la máquina. En esta descripción no es necesario que simplifiques los estados.

A continuación se incluye la entidad y las primeras líneas de la arquitectura de la descripción en


VHDL del circuito
ENTITY detector IS
PORT (d,i,clk,reset: IN std_logic;
salida: OUT std_logic);
END detector;

ARCHITECTURE comportamiento OF detector IS


TYPE estado IS (inicio, ...); -- Pon los tuyos
SIGNAL presente: estado:=inicio;
-- Pon aquí cualquier otra señal que necesites
BEGIN
-- Aquí va la descripción
END comportamiento;

P6.- Implementa mediante puertas lógicas y biestables de tu elección, el circuito descrito en el


ejercicio anterior. Debes dibujar los diagramas de transición de estados y salida. En este caso debes
simplificar la máquina de estados eliminando los estados equivalentes que probablemente haya.
Dibuja el esquema del circuito final y las tablas y simplificaciones necesarias en el proceso de diseño.
No olvides incluir también el reset del circuito.

P7.- Se tiene una cinta transportadora que puede llevar cajas de color rojo, verde. azul y negro. Al
final de la cinta hay un mecanismo que redirige la caja a 5 destinos diferentes: Los 4 primeros
destinos coinciden con el color de la caja, de manera que la caja de un color se envía al destino de ese
color, salvo la primera caja después de producirse un cambio de color que debe enviarse al quinto
destino al que llamaremos "cambio". Por ejemplo, supongamos que vienen 3 cajas verdes seguidas
de 4 cajas rojas: la primera verde irá al destino "cambio", las dos siguientes irán al destino "verde", la
siguiente, como es roja y ha habido un cambio de color, irá al destino "cambio" y las tres últimas ya
irán al destino "rojo". Para saber el color de la caja, la cinta dispone de un sensor que devuelve un
código binario según el color de la caja. También hay un sensor que saca un pulso cada vez que pasa
una caja. Se debe diseñar un dispositivo que decida a qué destino enviar la caja que acaba de llegar
por la cinta en función de su color. Para ello, realiza las siguientes tareas:
- Identifica las entradas y salidas del sistema y asigna una codificación de bits a cada una. Añade
una señal de reset para iniciar el dispositivo.
- Implementa una máquina de estados síncrona, con el sensor de detección de caja como señal
de reloj, que resuelva el problema. Dibuja el diagrama de estados de la máquina con sus
salidas y entradas.
- Implementa el circuito utilizando una descripción en VHDL. Tienes un esqueleto de partida en
P5.

P8.- Partiendo de la descripción del circuito del ejercicio anterior, supón ahora que en lugar de 4
colores de cajas tenemos sólo dos (rojo y verde), y por tanto tres destinos (rojo, verde y cambio).
Describe la nueva máquina de estados mediante el diagrama de estados y salida. Implementa el
circuito mediante puertas lógicas y biestables de tu elección. Debes eliminar los estados equivalentes
que haya o justificar que no hay y por tanto que no se puede simplificar más. Dibuja el esquema del
circuito final y las tablas y simplificaciones necesarias en el proceso de diseño. No olvides incluir
también el reset del circuito.

Esqueleto básico de una arquitectura en VHDL para máquinas de


estados
ARCHITECTURE descripcion of circuito IS
TYPE estado IS (inicial, ...)
SIGNAL presente: estado;
BEGIN
-- Función de transición de estado:
PROCESS(clk,reset)
BEGIN
IF reset='1' THEN presente<=...;
ELSIF clk='1' AND clk'event THEN
CASE presente IS
WHEN inicial=> ...
...
END CASE;
END IF;
END PROCESS;

-- Función de salida:
...
END descripcion;

También podría gustarte