Salta al document

PR - PR Fundamentos de Computadores: Práctica y Ejercicios 2020-2021

Estudios de Informática Multimedia y Telecomunicación
75.562 ·Fundamentos de Computadores ·2020-21
Práctica
Formato y fecha de entrega
Para dudas y aclaraciones sobre el enunciado, dirigíos al consultor responsable de
vuestra aula.
Hay que entregar la solución en un fichero PDF usando una de las plantillas
entregadas junto con este enunciado.
Se debe entregar a través de la aplicación de Entrega y registro de EC del
apartado Evaluación de vuestra aula.
La fecha límite de entrega es el 27 de mayo, a las 24 horas.
Razonad la respuesta en todos los ejercicios. Las respuestas sin justificación
no serán puntuadas.
Respuestas
1 de 14
Fi del document

T’ha resultat útil aquest document?

Vista prèvia del text

75 · Fundamentos de Computadores · 2020-

Práctica

Formato y fecha de entrega

‒ Para dudas y aclaraciones sobre el enunciado, dirigíos al consultor responsable de

vuestra aula.

‒ Hay que entregar la solución en un fichero PDF usando una de las plantillas

entregadas junto con este enunciado.

‒ Se debe entregar a través de la aplicación de Entrega y registro de EC del

apartado Evaluación de vuestra aula.

‒ La fecha límite de entrega es el 27 de mayo, a las 24 horas.

‒ Razonad la respuesta en todos los ejercicios. Las respuestas sin justificación

no serán puntuadas.

Respuestas

PRIMERA PARTE

Dada la máquina de estados siguiente:

Se pide que:

a) [15%] A partir del grafo de la EFSM de la fig. 1 completad el cronograma

siguiente, con la evolución de D, T, c y del estado (E) en que se encuentra la

máquina en cada ciclo de reloj.

Ejercicio 1

Para completar el cronograma en primer lugar debemos tener en cuenta el estado

en el que comienza, que es OFF con D=7 y T=7, a partir de esta información

podemos determinar el valor de c que será c=0 (lo indica el propio estado).

b) [15%] Obtened las tablas de transiciones y de salidas de la EFSM de la

fig. 1, así como las codificaciones binarias de estados y salidas

correspondientes.

A partir del grafo anterior obtenemos las tablas de transiciones y salidas:

Tabla de transiciones:

Estado Actual Entradas Estado siguiente

OFF (U<T)’·(a·(F<D))’ OFF

OFF (U<T) HOT

OFF (U<T)’·a·(F<D) HEAT

HOT (U<T)’·(a·(F<D))’ OFF

HOT (U<T) HOT

HOT (U<T)’·a·(F<D) HEAT

HEAT (U<T)’·(F<D)’ OFF

HEAT (U<T) HOT

HEAT (U<T)’·(F<D) HEAT

Tabla de salidas:

Estado Salidas

OFF c=0 T+=7 D+=

HOT c=0 T+=Ah

HEAT c=1 D+=Ah

Ahora debemos codificar estas tablas en binario:

Para codificar los estados en binario le asignaremos a cada estado una combinación

distinta:

OFF= 00

HOT=

HEAT=

Para los valores de salida debemos asignarle a las variables T y D un selector:

T=7 selector=0 efecto sobre la variable= a T se le asigna el valor 7

T=Ah selector=1 efecto sobre la variable= a T se le asigna el valor Ag

D=7 selector=0 efecto sobre la variable= a D se le asigna el valor 7

D=Ah selector=1 efecto sobre la variables= a D se le asigna el valor Ah.

El valor de la salida c se le asigna directamente desde el estado en que se encuentre.

De este modo, la tabla de salida codificada en binario sería:

Estado Salidas

Símbolo q1 q0 c sT sD

OFF 00 0 0 0

HOT 01 0 1 x

HEAT 10 1 x 1

Ahora solo debemos codificar la tabla de transiciones:

En cuanto al funcionamiento, cada vez que la entrada k (petición de cálculo)

se pone a 1, se pasa a calcular la raíz cuadrada entera de X que se

almacena en N. Después, se pone la salida r (resultado disponible) a 1 para

indicar que la raíz cuadrada se puede leer de la variable A en el estado

siguiente.

Para facilitar las tareas de verificación, la entrada X es de sólo 4 bits.

Teniendo en cuenta lo que se ha indicado previamente, se pide que:

c) [15%] A partir de las tablas de transiciones y de salidas del grafo de la fig.

2 que se dan a continuación, implementad la unidad de control usando ROM

y los registros, los bloques combinacionales y las puertas lógicas que creáis

convenientes. Especificad y justificad las dimensiones de la/las ROM que

uséis e indicad el contenido en binario, indicando a que corresponde cada

bit, y en hexadecimal.

En primer lugar debemos determinar la dimensión de la ROM y su contenido:

El bus de direcciones de la ROM tiene 4 bits (dos bits del estado y 2 bits de las

entradas k y PN), lo que quiere decir que la ROM tiene 2 =16 posiciones de memoria.

4

Cada posición guarda el contenido del estado siguiente y sus respectivas salidas (r,

id_N, S_A y s_P), por lo que en un principio el contenido tiene 8 bits, ahora bien,

vemos que las salidas (r y id_N unificadas) y s_A y s_P coinciden con el estado por lo

que podemos unificarlo y ahorrar espacio en la ROM, por lo que el contenido puede

ser solo de 2 bits, que sería guardar solo el estado siguiente.

Por lo tanto, el contenido de la ROM sería 16 direcciones de 2 bits de contenido, que

codificando con las tablas de transiciones y salidas con los códigos binarios

correspondientes quedaría tal que así:

Posición de memoria Contenido Codificación

hexadecimal

q1q0 k (P>N) q1+ q0+

00 0 0 00 0

00 0 1 10 2

00 1 0 00 0

00 1 1 10 2

01 0 0 01 1

01 0 1 01 1

01 1 0 00 0

01 1 1 00 0

10 0 0 01 1

10 0 1 01 1

10 1 0 01 1

10 1 1 01 1

11 0 0 xx x

11 0 1 xx x

d) [20%] Implementad el circuito completo de la EFSM de la fig. 2: Construid

el camino de datos usando las puertas lógicas y los bloques necesarios e

incorporad la unidad de control obtenida en el apartado anterior. Indicad y

razonad, para cada bus, su dimensión en bits teniendo en cuenta que la

señal de entrada X es de 4 bits y que representa un valor sin signo (natural).

Para implementar el circuito usaremos el bloque obtenido en el apartado anterior como

pide el enunciado.

Recordemos que en el apartado anterior tenemos los dos biestables para los estados,

la memoria ROM cuyo contenido son los estados futuros dependiendo de la entrada

de datos que tenga y la salida r.

Mantendremos las entradas de los biestables y la entrada k. Pero para la entrada

(P>N) utilizaremos un comparador, cuyas entradas serán el resultado de P y el número

que introducimos para calcular la raíz: N. N será de 4 bits tal y como se pide en el

enunciado pero le añadiremos un 0 al bit de más peso para poder compararlo con P.

Esto es debido a que el número más grande que se le puede calcular la raíz es 1111

(15 decimal) y como vamos a ver más adelante, para poder obtener P en algún caso

es necesario contar con 5 bits.

Ahora vamos a explicar cómo obtenemos las salidas A y P del circuito (la salida r ya

hemos explicado en el apartado anterior de dónde sale).

En primer lugar, para A debemos tener en cuenta que dependiendo del estado en el

que se encuentre pueden darse hasta 3 situaciones:

que A sea 0 (WAIT), que A sea A+1(CALC) o que A sea A-2(DONE).

Para ello vamos a seguir una serie de procesos:

Mientras A no esté en el estado CACL (00), devolverá 0, para conseguir eso

añadimos un multiplexor antes del primer registro de A. Si A está en el estado CACL,

el multiplexor tomará de salida la señal de entrada en la posición 00. El multiplexor

está dominado por la salida s_A (que recordemos que la salida s_A es igual al estado

en el que se encuentra el circuito) una vez llega al primer registro de A, la salida del

registro va a parar a 3 entradas distintas: la primera entrada es la de el sumador de A

y le sumará 1 bit con la siguiente señal de reloj, la segunda entrada irá a parar a un

desplazador(más adelante explicamos por qué) y la tercera entrada va a parar a otro

sumador, que en este caso, no le sumará nada, si no que le restará 2.

Mientras el estado del circuito esté en CACL, simplemente realizará la suma A+1.

Paralelamente mientras vaya realizando esta suma, el resultado que va a parar al otro

sumador, que le resta 2, irá almacenando el resultado en el segundo registro de A. El

resultado de esta resta va a parar a otro multiplexor dominado por la salida r. Este

multiplexor tendrá como salida 0 mientras r sea 0. Es decir, no se mostrará el resultado

de A mientras que r sea 0. Cuando r=1, quiere decir que ya se puede mostrar el

resultado de A, entonces de el multiplexor sale el resultado que va a parar a la salida

A.

Cuando se reinicie el circuito, también se iniciarán los registros de A y volveremos a

empezar.

En segundo lugar, para P también debemos tener en cuenta el estado en el que se

encuentra el circuito, ya que dependiendo de este, P puede tener dos estados: P=0 o

P+2*A+1.

Mientras P no esté en el estado CACL, P será igual a 0. Para que sea así tenemos un

multiplexor conectado a la entrada de el registro de P, donde la salida s_P gobernará

qué salida debe tomar el multiplexor, ya que si es cualquiera que no sea 00, la salida P

será 0.

Cuando el estado cambia al CALC, quiere decir que la salida del multiplexor sí que

será la que está en la posición 00 del multiplexor y pasará al registro el cálculo que

realizaremos para obtener P

El cálculo para obtener P es el siguiente:

Según las leyes matemáticas en una serie de operaciones, la multiplicación tiene

prioridad frente a la suma, por tanto, primero debemos hacer la operación 2*A.

Para hacer esta multiplicación recordemos que la salida del primer registro de A iba a

parar a tres entradas diferentes, una de ella es un desplazador que utilizaremos para

multiplicar A por 2.

Una vez realizada esta operación la salida del desplazador va a parar a un sumador,

cuyas entradas son la propia multiplicación(entrada A) a la que le sumaremos P (la

entrada B) que está conectada a la salida del registro de P.

El resultado de esta suma va a parar a otro nuevo sumador (entrada A) a la que le

sumaremos 1 (entrada B). Finalmente el resultado de esta suma va a parar a la

entrada 00 del multiplexor que hemos detallado al principio y que será el que de el

resultado para la salida P.

Cuando se reinicie el circuito, también se reiniciarán los registros de P y volveremos a

empezar.

Para la salida de A sólo serán necesarios 3 bits ya que aunque la raíz más grande que

puede dar de resultado es la raíz de 15 que es aproximadamente 3 y esta se pueda

SEGUNDA PARTE

Hay que diseñar el modelo de un controlador de un semáforo de paso

(ATLC) para regular la entrada de personas de forma que ayude a mantener

la distancia física. La persona que esté en primer lugar en la cola de entrada

podrá pasar cuando esté en verde. El semáforo solo se pondrá en verde

cuando detecte que hay una persona en la cola (cámara B) y no detecte a

nadie en la rampa de entrada (cámara A). Una vez que se pone en verde, se

mantendrá hasta que la cámara A detecte alguna persona. En aquel

momento, volverá a posarse en rojo como mínimo durante 10 segundos y

hasta que no se cumplan las condiciones para volver a ponerse en verde.

El controlador tiene las entradas y salidas siguientes:

‒ Las entradas A y B, que proporcionan un valor entre 0 y 100 en cuanto a la

probabilidad de que haya una persona en las imágenes. La presencia de

personas se considerará cierta cuando el valor de la probabilidad sea

superior o igual a 5;

‒ La entrada T, que proporciona el tiempo en número de segundos que ha

transcurrido desde la última vez que se ha puesto a cero;

‒ La salida z, que mientras es 1 hace que el Timer (temporizador) mantenga

T a 0 y cuando pasa a 0 hace que el Timer inicie la cuenta, y

‒ Las salidas r y g, que se tienen que poner a 1 para encender las luces rojo

y verde, respectivamente (y a 0 para mantenerlas apagadas).

Diseñad la ASM del controlador del semáforo de espaciamiento entre

personas que se ha descrito

En primer lugar debemos determinar un estado inicial, que será VER, donde la luz del

semáforo verde está encendida, la luz roja apagada y el temporizador también estará

desactivado. Esto quiere decir que si hay una persona en la cámara B podrá pasar.

Como no sabemos si hay, debemos comprobarlo.

Para comprobarlo pasamos a la condición S1 (B>=5), si se cumple, debemos pasar a

la siguiente condición, si no se cumple, quiere decir que no hay ninguna persona en la

cámara B y el semáforo deberá ponerse rojo.

La siguiente condición será (A<5) que comprueba si no hay nadie en la cámara A. Si

se cumple esta condición (y por consiguiente la condición anterior) iremos al estado

VER y el semáforo se pondrá verde. Por el contrario, si no se cumple la condición S

el semáforo se tornará rojo y no se podrá pasar.

Para que el semáforo se ponga rojo, declaramos el estado ROJ, dónde: la luz del

semáforo rojo estará encendida, la luz verde apagada y se iniciará el temporizador.

Una vez hemos llegado al estado ROJ, debemos ir a la condición S3(T>10) que quiere

decir que debe pasar al menos 10 segundos desde que se ha puesto en rojo para

comprobar si la luz del semáforo debe seguir en rojo o debe tornarse a verde, por lo

que si es false, quiere decir que no ha pasado suficiente tiempo y la luz debe seguir en

rojo y por el contrario, si la condición es true, quiere decir que ha pasado más de 10

segundos, por lo que debe volver a la flecha que va a parar a la condición S1, para

comprobar de nuevo, si se cumplen las condiciones S1 y S2.

En el caso de que se cumplieran ambas condiciones, volvería al estado VER, lo que

quiere decir que se desactivaría el contador del temporizador, la luz verde se

encendería y la luz roja se apagará.

.