You are on page 1of 9

Arquitectura de Computadores 1 Examen Período Julio 2008

Examen – 29 de Julio de 2008


Instrucciones
• Indique su nombre completo y número de cédula en cada hoja.
• Numere todas las hojas e indique la cantidad total de hojas que entrega en la primera.
• Escriba las hojas de un solo lado.
• Empiece cada ejercicio en una hoja nueva.
• Sólo se contestarán dudas de letra. No se aceptarán dudas los últimos 30 minutos del examen.
• Duración: 3 horas.
• Requisito para Aprobación: 1 problema y medio correctamente resueltos

Problema 1

Devuenvase es la nueva máquina receptora de botellas vacías para supermercados, cuyo sistema de
control se nos ha pedido programar.

Para el control de la máquina se dispone de un microprocesador dedicado, el que interactúa con los
siguientes elementos:
- un sensor en la entrada que detecta cuando el usuario coloca una botella para su recepción. Se lee
en el bit 0 (menos significativo) del byte de E/S ENTRADA (1 = hay botella)
- un motor que hace girar una cinta transportadora que mueve la botella hacia el interior ó el exterior de
la máquina. Se activa con el bit 0 (1 = encendido) y su sentido se determina por el valor del bit 1 (1 =
hacia adentro) del byte de E/S MOTOR.
- un sensor al terminar la cinta transportadora (detecta cuando el envase está a punto de abandonar la
cinta transportadora). Genera una interrupción que invoca a salida().
- un lector de código de barras que permite valorar el envase. Cuando realiza una lectura genera una
interrupción que invoca a barras() y el valor leído queda en el byte de E/S VALOR.
- un botón. Se lee en el bit 0 (menos significativo) del byte de E/S BOTON (1 = está apretado)
- una impresora de tickets. Para simplificar supondremos que imprime un ticket con el valor entero que
se escribe en la palabra de E/S IMPRIMIR (el acto de escribir el valor dispara su impresión).
- un circuito timer que genera una interrupción con una frecuencia de 5 Hz invocando a tiempo().
El funcionamiento deseado del sistema es el siguiente:
- cuando se detecta que el usuario coloca una botella para su recepción (mediante el sensor de
entrada) se debe activar el motor de forma que la cinta mueva el envase hacia adentro de la máquina.
- si el lector de código de barras pudo realizar una lectura del valor de la botella antes que la botella
llegue al final de la cinta (sea detectada por el sensor de salida), se deberá mantener encendido el
motor durante un segundo luego que el sensor de salida se haya activado, como forma de asegurar
que la botella abandona la cinta.
- si no existió lectura, el sistema deberá detener el motor en forma inmediata al ser detectada la botella
por el sensor de salida y deberá activar el motor en reversa hasta que la botella llegue nuevamente al
punto de partida (sea detectada por el sensor de entrada) y esperará que el usuario retire la botella (el
sensor deje de detectar).
- se asume que el usuario NO coloca un nuevo envase en la entrada antes que se haya completado el
ingreso del envase anterior.
- cuando el usuario finaliza el ingreso de envases pulsa el botón, lo que debe provocar la impresión de
un ticket con el importe total a cobrar por el usuario en la caja (supondremos que el valor de cada
envase viene codificado en su código de barras). Si se pulsa el botón mientras se está ingresando un
envase se ignora.

Se pide: Implementar en un lenguaje de alto nivel todas las rutinas necesarias para la máquina descripta
teniendo en cuenta que el mismo ejecutara en una máquina dedicada.

Departamento de Arquitectura Página 1 de 9


Arquitectura de Computadores 1 Examen Período Julio 2008

Solución Problema 1

Haremos un diseño basado en una maquina de estados.

entrada ↑ / salida ↑ /
En motor = 1 En
importe = 0
Inicio Directa Reversa
motor = 1 sentido = 0
sentido = 1
botón ↑ /
imprimir = entrada ↑ / código ↑ entrada ↑ /
importe importe = 0 motor = 0
motor = 1
sentido = 1
entrada ↓
Continúo Devuelta

tics = 5 /
motor = 0
salida ↑ /
tics = 0 Código
Expulso
OK

#define TRUE 1
#define INICIO 0
#define EN_DIRECTA 1
#define EN_REVERSA 2
#define DEVUELTA 3
#define CODIGO_OK 4
#define EXPULSO 5
#define CONTINUO 6

int tics, estado, importe;

void interrupt tiempo() {

if (estado == EXPULSO) {
tics++;
}
}

void interrupt salida() {

if (estado == EN_DIRECTA) {
out(MOTOR, 0x01);
estado = EN_REVERSA;
}else if (estado == CODIGO_OK) {
estado = EXPULSO;
tics = 0;
}
}

void interrupt barras() {

if (estado == EN_DIRECTA) {
importe = importe + in(VALOR);
estado = CODIGO_OK;
}
}

Departamento de Arquitectura Página 2 de 9


Arquitectura de Computadores 1 Examen Período Julio 2008

main() {

estado = INICIO;

while (TRUE) {
disable();
switch (estado) {
case INICIO:
if (in(ENTRADA) & 0x01 != 0) {
importe = 0;
out(MOTOR, 0x03);
estado = EN_DIRECTA;
}
break;
case EN_DIRECTA:
break;
case EN_REVERSA:
if (in(ENTRADA) & 0x01 != 0) {
out(MOTOR, 0x00);
estado = DEVUELTA;
}
break;
case DEVUELTA:
if (in(ENTRADA) & 0x01 == 0) {
estado = CONITNUO;
}
break;
case CODIGO_OK:
break;
case EXPULSO:
if (tis >= 5) {
out(MOTOR, 0x00);
estado = CONTINUO;
}
break;
case CONTINUO:
if (in(ENTRADA) & 0x01 != 0) {
importe = 0;
out(MOTOR, 0x03);
estado = EN_DIRECTA;
}
break;
}
enable();
}
}

Problema 2

La empresa Güirpul pretende posicionarse como número uno en el mercado de lavarropas. Para esto
diseñó un nuevo lavarropas con el cual piensa revolucionar el mercado. Este nuevo lavarropas cuenta
con 2 programas: lavado corto y lavado largo.

El ciclo de ejecución del programa de lavado corto consta de 3 etapas: lavado, enjuagado y centrifugado.
Cada etapa del programa de lavado corto dura 5 minutos. En contraposición, el ciclo de ejecución del
programa de lavado largo se compone de 5 etapas: lavado, enjuagado, lavado, enjuagado y centrifugado.
Cada etapa del programa de lavado largo dura 5 minutos.

Se dispone de un timer que interrumpe cada 5 minutos, el cual permite la sincronización entre cada una
de las etapas de los programas. El comienzo de la ejecución de uno de los programas es indicado

Departamento de Arquitectura Página 3 de 9


Arquitectura de Computadores 1 Examen Período Julio 2008

mediante una llave de encendido (0 – apagado, 1 – prendido) y una llave que distingue entre el programa
de lavado corto (0) y el de lavado largo (1).

Se cuenta con una salida S que habilita o no abrir la puerta, esta salida debe ser 0 mientras esta
funcionando el lavarropas y 1 en caso contrario.

Durante la ejecución del programa largo si se modifica la posición de la llave y se selecciona el programa
de lavado corto, el lavarropas salteará las etapas siguientes que correspondan de forma de adaptarse al
ciclo de lavado corto, teniendo en cuenta lo que ya hizo (ej: si ya hizo un lavado y un enjuagado pasa
directamente al centrifugado). Por el contrario, durante la ejecución del programa corto si se selecciona el
programa de lavado largo, no afectará el funcionamiento del lavarropas.

Al finalizar la ejecución de un programa el lavarropas debe quedar en un estado de inactividad hasta que
la llave de encendido pase a "apagado". Si la llave de encendido pasa a "apagado" en cualquier momento
del programa de lavado, el lavarropas debe completar la etapa en la que se encuentre y se debe detener
habilitando la apertura de la puerta. Se supone que al pasar la llave de encendido a "prendido" se
produce un reinicio del timer (el tiempo comienza a contar desde ese momento).

Se pide:

Diseñe y dibuje un circuito de las características del dispositivo descripto. Se dispone FF tipo D y
compuertas lógicas.

Nota: En caso de no utilizar la metodología del curso, justifique detalladamente la solución.

Solución Problema 2

Maquina de estados:
Codificando las entradas del circuito llave_inicio y llave_lavado en ese orden la maquina de estados
queda.

Departamento de Arquitectura Página 4 de 9


Arquitectura de Computadores 1 Examen Período Julio 2008

Tabla de transiciones y mapas de Karnaugh.

Estados\llave_inicio llave_lavado 00 01 11 10
inicio inicio inicio lavado 1 lavado 2
lavado 1 inicio inicio enjuague 1 enjuague 2
enjuague 1 inicio inicio lavado 2 centrifugado
lavado 2 inicio inicio enjuague 2 enjuague 2
enjuague 2 inicio inicio centrifugado centrifugado
centrifugado inicio inicio inactivo inactivo
inactivo inicio inicio inactivo inactivo

Salida
Estados\llave_inicio llave_lavado 00 01 11 10
Inicio 1 1 0 0
lavado 1 1 1 0 0
enjuague 1 1 1 0 0
lavado 2 1 1 0 0
enjuague 2 1 1 0 0
centrifugado 1 1 1 1
Inactivo 1 1 1 1

Departamento de Arquitectura Página 5 de 9


Arquitectura de Computadores 1 Examen Período Julio 2008

Sea la siguiente codificación:


000 – inicio
001 – lavado 1
010 – enjuague 1
011 – lavado 2
100 – enjuague 2
101 – centrifugado
110 – inactivo

Las tablas de transiciones nos queda:


Estados\llave_inicio llave_lavado 00 01 11 10
000 000 000 001 011
001 000 000 010 100
010 000 000 011 101
011 000 000 100 100
100 000 000 101 101
101 000 000 110 110
110 000 000 110 110

Salida
Estados\llave_inicio llave_lavado 00 01 11 10
000 1 1 0 0
001 1 1 0 0
010 1 1 0 0
011 1 1 0 0
100 1 1 0 0
101 1 1 1 1
110 1 1 1 1

Mapas de Karnaugh.
D0
Q2 = 0 Q2 = 1
Q1Q0\llave_inicio llave_lavado 00 01 11 10 Q1Q0\llave_inicio llave_lavado 00 01 11 10
00 0 0 1 1 00 0 0 1 1
01 0 0 0 0 01 0 0 0 0
11 0 0 0 0 11 X X X X
10 0 0 1 1 10 0 0 1 1

D0 = !Q0●llave_inicio

D1
Q2 = 0 Q2 = 1
Q1Q0\llave_inicio llave_lavado 00 01 11 10 Q1Q0\llave_inicio llave_lavado 00 01 11 10
00 0 0 0 1 00 0 0 0 0
01 0 0 1 0 01 0 0 1 1
11 0 0 0 0 11 X X X X
10 0 0 1 0 10 0 0 1 1

D1 = !Q2●!Q1●!Q0●llave_inicio●!llave_lavado + !Q1●Q0●llave_inicio●llave_lavado +
Q1●!Q0●llave_inicio●llave_lavado + Q2●Q0●llave_inicio + Q2●Q1●llave_inicio

Departamento de Arquitectura Página 6 de 9


Arquitectura de Computadores 1 Examen Período Julio 2008

D2
Q2 = 0 Q2 = 1
Q1Q0\llave_inicio llave_lavado 00 01 11 10 Q1Q0\llave_inicio llave_lavado 00 01 11 10
00 0 0 0 0 00 0 0 1 1
01 0 0 0 1 01 0 0 1 1
11 0 0 1 1 11 X X X X
10 0 0 0 1 10 0 0 1 1

D2 = Q0●llave_inicio●!llave_lavado + Q1●llave_inicio●!llave_lavado + Q1●Q0●llave_inicio +


Q2●llave_inicio

S
Q2 = 0 Q2 = 1
Q1Q0\llave_inicio llave_lavado 00 01 11 10 Q1Q0\llave_inicio llave_lavado 00 01 11 10
00 1 1 0 0 00 1 1 0 0
01 1 1 0 0 01 1 1 1 1
11 1 1 0 0 11 X X X X
10 1 1 0 0 10 1 1 1 1

S = !llave_inicio + Q2●Q0●llave_inicio + Q2●Q1●llave_inicio

Departamento de Arquitectura Página 7 de 9


Arquitectura de Computadores 1 Examen Período Julio 2008

Problema 3

Considere el código de Hamming de 4 bits de datos que permite detectar y corregir un bit. Extienda el
mismo para 8 bits de datos.

Se pide:
a) Describa el código de Hamming de 8 bits de datos que permite detectar y corregir un bit. Escriba
las fórmulas correspondientes y explique su deducción.
b) Realice el circuito corrector de un bit para el código de Hamming de la parte a. El circuito recibe
como entrada el código de Hamming y devuelve el código corregido. Se dispone de compuertas
lógicas y decodificadores.

Solución:

a)
Para el código de Hamming de 8 bits, suponemos que tenemos 256 elementos representados. Utilizando
una codificación en binario, necesitamos 8 bits (a8a7a6a5a4a3a2a1) para poder representarlos.
Sabemos que para poder generar un código de distancia 3 (que permita detectar y corregir 1 bit) se debe
cumplir la siguiente ecuación 2 ≥ p + k + 1, donde p es la cantidad de bits de paridad y k es la cantidad
p

de bits por palabra (en este caso 8).


Por lo tanto, si tomamos p=4 tenemos que 16 ≥ 4 + 8 + 1.
La idea del código de Hamming es colocar los bits de paridad (que denominaremos p1, p2, p3 y p4) en las
posiciones que son potencias de 2.
Por lo tanto, representaremos la palabra de código (de 7 bits) como
C = a8a7a6a5p4a4a3a2p3a1p2p1
Para calcular el valor de los bits de paridad seguimos el siguiente algoritmo:
• Para cada bit pi ubicado en la posición i-ésima, aplicar la opreración XOR de los siguientes bits:
1. Saltear i-1 bits
2. Tomar los i siguientes bits
3. Saltear i bits
4. (repetir 2 y 3 hasta que no queden más bits)

Por lo tanto los bits de paridad quedan:


a7 ⊕ a5 ⊕ a4 ⊕ a2 ⊕ a1 ⊕ p1 = 0  p1 = a7 ⊕ a5 ⊕ a4 ⊕ a2 ⊕ a1

a7 ⊕ a6 ⊕ a4 ⊕ a3 ⊕ a1 ⊕ p2 = 0  p2 = a7 ⊕ a6 ⊕ a4 ⊕ a3 ⊕ a1

a8 ⊕ a4 ⊕ a3 ⊕ a2 ⊕ p3 = 0  p3 = a8 ⊕ a4 ⊕ a3 ⊕ a2

a8 ⊕ a7 ⊕ a6 ⊕ a5 ⊕ p4 = 0  p4 = a8 ⊕ a7 ⊕ a6 ⊕ a5

Podemos representar estas ecuaciones en una tabla, indicando con una x las posiciones afectadas en el
cálculo de paridad de cada bit de paridad:

a8 a7 a6 a5 p4 a4 a3 a2 p3 a1 p2 p1
p1 x x x x x x
p2 x x x x x x
p3 x x x x x
p4 x x x x x

Suponiendo ahora que se recibió una palabra de código con un único error. Si observamos la tabla
podemos ver los bits de paridad que van a ser afectados según qué bit ha cambiado su valor. Para cada
bit de la palabra se puede ver que el conjunto de bits de paridad que se ve afectado es único, es decir

Departamento de Arquitectura Página 8 de 9


Arquitectura de Computadores 1 Examen Período Julio 2008

que en la tabla no hay 2 columnas iguales. Esta característica es la que permite determinar y corregir el
bit erróneo.

El algoritmo que decodifica la palabra y determina, a partir de los bits de paridad, si hubo error y en dicho
caso identifica el bit con error simplemente utiliza las ecuaciones descriptas arriba, donde cada ecuación
aporta un digito binario a un número binario de p bits llamado S. Cuando S vale 0 esto quiere decir que se
verifica la paridad de cada ecuación y por lo tanto se considera que no ha habido error en la palabra (o
hubo más de 1 error y los efectos de dichos errores se cancelaron). De otra manera, el número S indica
la posición dentro de la palabra de código que tiene error y que para corregir hay que cambiar (de 0 a 1 o
de 1 a 0).
Con 4 bits de paridad se pueden identificar 15 posiciones (más la posición 0 que indica que no hubo
error), pero para este problema utilizamos solamente 12 posiciones (8 bits de datos más 4 bits de
paridad) por lo que si S > 12 sabemos que hubo más de 1 error por lo que no se puede decodificar la
palabra.

Para el caso pedido las ecuaciones quedan:

S1 = a7 ⊕ a5 ⊕ a4 ⊕ a2 ⊕ a1 ⊕ p1

S2 = a7 ⊕ a6 ⊕ a4 ⊕ a3 ⊕ a1 ⊕ p2

S3 = a8 ⊕ a4 ⊕ a3 ⊕ a2 ⊕ p3

S4 = a8 ⊕ a7 ⊕ a6 ⊕ a5 ⊕ p4

b)

Departamento de Arquitectura Página 9 de 9

You might also like