Documento 74396

Anuncio
1. Nombra y define los distintos `tipos' de datos con los que pueden trabajar las instrucciones del 68000.
Las instrucciones del 6800 pueden trabajar con datos de tamaño byte (8 bits), tamaño word (16 bits) y tamaño
long−word (32 bits).
Según son interese, estos bits los podemos interpretar como caracteres, enteros con o sin signo, números en
código BCD, conjuntos,....
2. Selecciona, entre las siguientes, cuales son características propias de 68000:
Espacio de memoria e I/O separados − I/O mapeado en memoria.
Direccionamiento lineal − Direccionamiento paginado − Direccionamiento segmentado.
Buses ( D/@ ) multiplexados − Buses ( D/@ ) independients.
Protocolo de buses síncrono − Protocolo de buses asíncrono.
Unidad de control cableada − Unidad de control microprogramada.
3. Explica que ocurriría si no se recibiera el DTACK! en un ciclo de lectura, indica un modo correcto y
habitual de resolver esta situación.
Si el microprocesador no recibe el DTACK!, significa que el dispositivo exterior no ha dado la confirmación
del envío de datos.
La forma más habitual de resolver esta situación es crear retrasos o ciclos de espera. Si se producen muchos
ciclos de espera sin que llegue el DTACK! se produce un bus error.
4. Suponiendo un valor inicial de CCR=$00, indica cual seria el valor de CCR tras ejecutar las siguientes
instrucciones:
• MOVE.W #$A249, D4
CVZNX
$A249 1010 0010 0100 1001 , como este número empieza por 1 0 0 0 1 0
• MOVEA.W D2, A3
CVZNX
Como esta instrucción se mueve direcciones de memoria y no altera los flancos. 0 0 0 0 0
• SUB.L D0, D1 ( Suponiendo D0 = $64A27, D1=$AF002039 )
D1 = D1 − D0 = $ AEF9D612 = 1010 1110 1111 1001 1101 0110 0001 0010, como este numero empieza por
1. C V Z N X
00010
1
5. Asumiendo unos valores iniciales de A0= $2000, A1=$900000, D1=$12FA40, ¿Cuáles son las direcciones
efectivas por los operando fuente y destino en cada uno de las siguientes instrucciones?
• MOVE.B (A1),D0
Esta instrucción mueve el contenido de la dirección $ 900000 (A1) al registro D0.
• MOVE.W (A0), (A1)
Esta instrucción mueve el contenido de la dirección $2000 (A0) a la dirección $900000 (A1)
• MOVE.W (A0)+, −(A1)
Esta instrucción mueve el contenido de la dirección $2000 (A0) a la dirección $8FFFFE (A1−2), y A0 pasa a
valer $2002.
• ADD.L $34(A1,D0.W), D1
Esta instrucción tomamos como base la @ marcada por A1, la desplaza el nº D0, y haces un desplazamiento
de 34 en hexadecimal ( 52 en decimal ) y el contenido lo sumamos con D1 y lo almacenamos en D1.
• LEA 20( PC )
Esta instrucción suma 20 el contendido de PC.
6. Señala, y explica, las posibles diferencias entre los siguientes pares de instrucciones.
• MOVE.W $1000, D3 ! MOVE.W #$1000, D3
MOVE.W $1000, D3 copia el valor situado en la dirección $ 1000 en el registro D3.
(ABSOLUTO)
MOVE.W #$1000, D3 copia el valor $1000 en el registro D3. ( INMEDIATO)
• MOVE.L #TABLA ,A0 ! LEA TABLA, A0
MOVE.L #TABLA , A0 grava el valor de TABLA en A0, como si fuese un inmediato.
LEA TABLA, A0 Carga el valor de TABLA en A0, siendo TABLA una posición de memoria.
• TAS SEMAFORO ! BSET #7, SEMAFORO
TAS SEMAFORO Esta instrucción realiza el test del byte i el set del bit 7, en un ciclo de bus.
BSET #7, SEMAFORO Esta instrucción realiza el test del byte i el set del bit 7, en dos ciclo de bus.
• MOVE.L ( A2 ), D0 ! MOVE.L A2, D0
MOVE.L ( A2 ), D0 Esta instrucción mueve el contenido donde apunta A2 en el registro D0 ( INDIRECTO )
MOVE.L A2, D0 Esta instrucción mueve el valor que tiene A2 en el registro D0 (DIRECTO)
2
• MOVE.L ( A2 ), D0 ! MOVE.L 0(A2), D0
MOVE.L ( A2 ), D0 Esta instrucción mueve el contenido donde apunta A2 en el registro D0 ( INDIRECTO )
MOVE.L 0(A2), D0 Esta instrucción mueve el contenido donde apunta A2 + el desplazamiento (en este caso
0) en el registro D0.
• BRA etiqueta ! JMP etiqueta
BRA etiqueta Salto incondicional, el PC nuevo = PC actual + 2 + desplazamiento, el desplazamiento es un
valor, con signo de 8 o 16 bits extendido a 32. En esta instrucción etiqueta es un desplazamiento.
JMP etiqueta Salto incondicional, permite saltar a cualquier posición de memoria especificando su dirección
efectiva. En esta instrucción etiqueta es una dirección efectiva.
• BSR etiqueta ! JSR etiqueta
BSR etiqueta Esta instrucción funcionan de forma similar al BRA etiqueta pero apilando la dirección de
retorno, aquella a la que han de volver tras la ejecución de la subrutina.
JSR etiqueta Esta instrucción funcionan de forma similar al JMP etiqueta pero apilando la dirección de
retorno, aquella a la que han de volver tras la ejecución de la subrutina.
• MOVE.W ( $E000).W, D0 ! MOVE.W ($E000).L, D0
MOVE.W ( $E000).W, D0 Esta instrucción accede al word donde apunta la dirección $E000 y lo mueve en
D0.
MOVE.W ( $E000).L, D0 Esta instrucción accede al long word donde apunta la dirección $E000 y lo mueve
en D0.
7. Supongamos que la última instrucción del programa es BRA, y que ocupa la última posición de memoria
físicamente existente ( final de la pastilla RAM ). Discutir las posibles situaciones y su resolución.
Podríamos tener el problema que al hacer la instrucción BRA, el microprocesador hiciera el pre−fech de la
siguiente instrucción y no hubiese memoria.
También tendríamos el problema con el PC, ya que el PCnuevo = PCactual +2 + desplazamiento nos
apuntaría a una dirección inexistente, la forma de solucionarlo sería substituir el BRA por un JMP.
8. Para mejorar la velocidad de ejecución, aumentamos la frecuencia de reloj de procesador 8MHz. 12.5
MHz., ¿qué efecto tendría este hecho sobre el tiempo de ejecución de las siguientes instrucciones?
MOVE.W (A1)+,D0
ROR.L #4, D0
Expresar el tanto por ciento de ahorro de tiempo en cada una de las siguientes hipótesis:
• En ambos casos no hay estados de espera en el acceso a memoria.
8 MHz. = 125 ns.
3
Instrucción
Ciclos
Tiempo
MOVE.W (A1)+, D0
8 (2 / 0)
8 · 125 ns = 1 s
ROR.L #4, D0
8 + 2n (1 / 0) = 8+8 =16
16 · 125 ns. = 2 s
TOTAL
12.5 MHz. = 80 ns.
3s
MOVE.W (A1)+, D0
8 (2 / 0)
8 · 80 ns = 640 ns
ROR.L #4, D0
8 + 2n (1 / 0) = 8+8 =16
16 · 80 ns. = 1,280 s
TOTAL
1920 ns
% de ahorro de tiempo = 3000−1920 / 3000 = 0.36 36 %
• A 12.5 MHz. Aparecen 2 estados de espera en cada acceso a memoria de datos.
8 MHz. = 125 ns.
Instrucción
Ciclos
Tiempo
MOVE.W (A1)+, D0
8 (2 / 0)
8 · 125 ns = 1 s
ROR.L #4, D0
8 + 2n (1 / 0) = 8+8 =16
16 · 125 ns. = 2 s
TOTAL
12.5 MHz. = 80 ns.
3s
MOVE.W (A1)+, D0
8 (2 / 0)
(2+8) · 80 ns = 800 ns
ROR.L #4, D0
8 + 2n (1 / 0) = 8+8 =16
16 · 80 ns. = 1,280 s
TOTAL
2080 ns
% de ahorro de tiempo = 3000−2080 / 3000 = 0.3066 30,66 %
• A 12.5 MHz. Aparecen 2 estados de espera en cada acceso a memoria.
8 MHz. = 125 ns.
TOTAL
Instrucción
Ciclos
Tiempo
MOVE.W (A1)+, D0
8 (2 / 0)
8 · 125 ns = 1 s
ROR.L #4, D0
8 + 2n (1 / 0) = 8+8 =16
16 · 125 ns. = 2 s
3s
4
12.5 MHz. = 80 ns.
acceso a memoria
acceso a memoria datos
MOVE.W (A1)+, D0
8 (2 / 0)
(2+2+8) ·80 ns = 960 ns
ROR.L #4, D0
8 + 2n (1 / 0) = 8+8 =16
(2+16) ·80 ns. = 1440 s
TOTAL
2400 ns
% de ahorro de tiempo = 3000−2400 / 3000 = 0.2 20 %
Explicar los motivos que justificarían cada una de las hipótesis.
Discutir el efecto de esta estrategia sobre el consumo de potencia.
9. Indica que condiciones han de cumplirse para que las siguientes instrucciones sean funcionalmente
equivalentes:
• MOVE.L D0, $ABCD
• MOVE.L D0, $10 ( A1 )
• MOVE.L D0, $100 ( A2, D1.L )
• MOVE.L D0, ( A3 )
En esas condiciones ( equivalencia funcional ) clasifícalas según su tiempo de ejecución, de mayor a menor.
A3 = $ ABCD
A1 = ABBD ( $ABBD +$10 = $ABCD )
A2 = $ABCD − $100 · 4 = A7CD
Mayor: c, b, a, d, ::menor
10. Torres de Hannoi: Recordar la leyenda sobre el terrible castigo que, por su poco piadosa conducta,
recibieron aquellos pobres monjes de su inclemente dios . Debían desplazar todos los discos de la columna
inicial a la final, con la sola ayuda de la columna auxiliar y sin apilar nunca un disco mayor sobre uno menor.
Realizar el programa ensamblador que nos de la lista de movimientos correctos para resolver el problema con
N discos. Suponer la utilización de la placa microinstructora de prácticas, utilizar un método de salida que se
considere adecuado.
Realizar el cálculo del número de movimientos. Añadir al programa anterior lo necesario para que se vea el
número de paso junto con el movimiento realizado.
HANNOY ( N: entero, INI: columna, AUX: columna, FIN : columna )
Si N ==1 entonces
Monge_mueve ( INI, FIN )
Sino
Hannoy (N−1, INI, FIN, AUX )
5
Monge_mueve ( INI, FIN )
Hannoy (N−1, AUX, INI, FIN )
Fsino
FHANNOY
HANNOY: LNK A6, #0
SUBQ #1, +8(A6)
BEQ 1PIEZA
MOVE +12(A6), −(A7)
MOVE +14(A6), −(A7)
MOVE +10(A6), −(A7)
MOVE +8(A6), −(A7)
JSR HANNOY
ADDQ.L #2, A7
JSR MONJE_MUEVE
ADDQ.L #6, A7
MOVE +14(A6), −(A7)
MOVE +10(A6), −(A7)
MOVE +12(A6), −(A7)
MOVE +8(A6), −(A7)
BRA FIN
1PIEZA: MOVE +14(A6), −(A7)
MOVE +10(A6), −(A7)
JSR MONJE:MUEVE
FIN: UNLK A6
RTS
Estudiar el crecimiento de la pila. Importancia de la optimización del código en cuanto a paso de parámetros y
gestión ( e higiene ) de la pila.
6
(A6) FP
A6
FP +4
@ret
FP +8 N
FP + 10 INI
FP +12 AUX
FP +14 FIN
La pila crece 16N+4 bytes
Nmax = 64 k la pila crece hasta 1Mbyte +4 Byte
11. Tenemos un sistema, de reconocimiento del terreno, que nos da la altura y material del suelo en un punto.
El sistema lo controlamos con un MC68000 y tiene las siguientes características:
• Tiene el reloj mapeado sobre la dirección $25000.
• El sensor realiza un movimiento en cada flanco ascendente y una adquisición de datos en flanco
descendente ( del reloj ).
• Se supone ( maravillas de la técnica ) que en sus movimientos, y en la adquisión, es muchísimo mas
rápido que el MC68000.
• Realiza los movimientos sobre una cuadricula predeterminada:
• En este caso tenemos definida, sobre el terreno, una cuadricula de 10x10.
• Cuando realiza una adquisión obtiene la altura como un valor de 32 bits, mapeados en la posición
$25004, y el tipo de terreno codificado en un valor de 16 bits, mapeados en la posición $ 25008.
Objetivo:
• Leer toda la retícula y guardarla en memoria.
• A petición del usuario dar la altura o la composición de un punto de la retícula.
• Para ello supondremos la existencia de una rutina , ( entrada), que nos devuelve sobre la pila ( y en
este orden ) la x de la retícula, la y, un código indicando altura, composición o error.
• Suponer la existencia de otra rutina , ( Salida ), a la que se pasa como pará metro el valor pedido por
el usuario.
• Escribir una posible cabecera para cada rutina supuesta.
a.− Leer toda la retícula y guardarla en memoria.
ABSOLUTE
ORG $37000
7
MOVE #100, D0
MOVEA.L $25004,A1 ; altura
MOVEA.L $25008,A2 ; material
MOVEA.L $25000,A0 ; reloj
MOVEA.L $40000,A5 ; registro donde guardamos en memoria
MOVE.L D0,D2 ; fila
FILA: MOVE.L D0,D1 ; columnas
FLANCO: TST (A0) ; miramos si recibimos un flanco descendente
BEQ MOVIMIENTO
ADQUISICION: CMPI #1,(A0) ;esperamos que A0 sea 0 (flanco descendente
BEQ ADQUISICION ; para hacer la adqusisción)
MOVE.L (A1),(A5)+ ; pasamos la altura a un registro
MOVE.W (A2),(A5)+ ; pasamos el tipo de material a un ;registro
BRA FLANCO
MOVIMIENTO: TST (A0)
BEQ MOVIMIENTO
DBF D1,FLANCO ; decrementamos una columna
DBF D2, FILA ; decrementamos una fila y volvemos a cargar todas las
columnas
TRAP #5 ; para terminar
END
b.− A petición del usuario dar la altura a la composición de un punto de la retícula.
Alt
Mat
Alt
Mat
Alt
Mat
8
Para acceder a la posición utilizamos un direccionamiento indirecto con indice.
d8 ( base , x ) index=(fila*9+columna)
tamaño = 6
x= index * tamaño
d8 = descplazamiento = 0 * 4;
JSR ENTRADA
MOVEA.L $50000,A4 ;vamos a la subrutina ENTRADA
MOVEA.L $40000,A5
MOVEA.L (A7)+,(D2) ;pasamos la X a D2fila
MOVE.L (A7)+,(D3) ;pasamos la altgura, materiar ó error
; si tebnemos altura=0
; si tenemos material =4
; si tenemos error =1
; si se cumplen las tres entonces elegimos nosotros
CMPI #1,(D3) ;miramos si hay error
BEQ ERROR
MULU #9,(D2) ; multiplicamos por 9 las filas para calcular la direccion
ADDQ (D2),(D1) ; sumaos D2 a D1
MULU #6,(D1) ;multiplicamos 6 a D1, para lacular la dirección
MOVE.L +(D3)(A5,D1),A4 ; guardamos la posición de la celda
JSR SALIDA ; llamamos a la subrutina salida y pasamos
; A4 como parametro
12. El siguiente esquema es la célula básica de una Daisy−chain, el eslabón de una cadena.
9
• Teniendo en cuenta los nombres de las señales y la posibilidad de encadenar varias células idénticas,
explicar el funcionamiento del circuito y su posible utilidad.
Con el 68000, tenemos 7 niveles de prioridad, pero con una estructura del tipo Dasiy−Chain, podemos
priorizar tantos acontecimientos como deseamos
• Dibujar el conexionado de los siguientes bloques.
¿????
Usando los bloques dibujados, las celdas de daisy−chain y la lógica que consideres necesarios. Se deben
generar interrupciones no enmascarables y/o de nivel tres ( Priorizarlas según te indique tu sentido común ).
13. Supongamos la existencia del siguiente sistema:
Una cinta transportadora es alimentada con piezas planas, cuadradas, que deben tener una perforación en una
de las esquinas.
Nuestro cometido es controlar las herramientas que nos permiten: comprobar las piezas, rotar su posición, y
trasladarlas a un punto concreto.
Nuestro objetivo es componer cuadros mayores, a base de cuatro piezas, con una perforación en cada esquina.
• El lector óptico detecta la presencia de metal ( 1 ) o ausencia ( 0 ), está mapeado en la posición
$25000. Es prácticamente de respuesta instantánea y se supone correctamente enfocado sobre el
contorno de la pieza en todo momento.
• La barra rotadora gira la pieza 2 grados cada vez que detecta un flanco ascendente. Está mapeada en
la posición $25002.
• El brazo posicionador esta controlado por una rutina llamada coloca. Toma de la pila las coordenadas
`x' e 'y', y sitúa la pieza en la posición indicada en el esquema ( sin rotarla ).
• La cinta avanza un paso cada vez que el posicionador actúa.
• Se pide realizar un programa que controle el sistema: Comprobará la presencia de una pieza, si tiene
una y solo una perforación, girará la pieza si es necesario y la colocará en el lugar adecuado.
También se debe conservar una estadística del tipo de piezas: Correctas, exceso de perforaciones, ausencia de
perforación, ausencia de pieza.
• El funcionamiento del brazo posicionador es totalmente automático, solo necesita los siguientes datos:
10
Posición $25004: Coordenadas x donde situarse
Posición $25006: Coordenadas y donde situarse.
Posición $25008: 1 toma pieza, suelta pieza.
Realizar la rutina coloca.
14 Queremos diseñar un sistema con el siguiente mapa de memoria:
ROM :@ $ 000000 @ $ 007FFF
RAM :@ $ 008000 @ $ 017FFF
E / S :@ $018000 @ $01AFFF
• Utilizando el mínimo número necesario de puertas y de los circuitos de la figura, realizar el esquema
hardware del conexionado de la memoria con el microprocesador (conectar todas las líneas necesarias
y diseñar la decodificación).
ROM 215 = 32 kbytes 14 bits del bus de direcciones.
RAM 216 = 64 kbytes 16 bits del bus de direcciones.
E/S 214 = 16 kbytes 13 bits del bus de direcciones.
• Discutir la diferencia que presentaría, el esquema, si los chips de memoria fueran de 16 kbytes o si
fueran de 8 kbytes.
16 kbytes
ROM 32 kbytes necesitamos dos chips 1 bit del bus de direcciones de decodificación.
11
RAM 64 kbytes necesitamos cuatro chips 2 bits del bus de direcciones de decodificación.
8 kbytes
ROM 32 kbytes necesitamos cuatro chips 2 bit del bus de direcciones de decodificación.
RAM 64 kbytes necesitamos ocho chips 3 bits del bus de direcciones de decodificación.
• Substituimos la memoria RAM por una EPROM y ubicamos una nueva RAM de 64 kbytes en las
primeras posiciones libres. Realizar el nuevo esquema de decodificación.
• Dada la situación que, dentro del mapa de memoria, ocupa la EPROM, ¿habría que grabar la de
alguna forma especial?, ¿ Puedes modificar el esquema de conexión de forma que una EPROM
normalmente grabada funcionara correctamente?.
¿??????????
• ¿ Por qué el anterior problema no nos afectaba en el caso de la RAM?
¿?????????????
15. Queremos dotar de memoria, principal, a un sistema con una capacidad de 16 Mbytes. Disponemos de tres
tipos de memoria:
TIPO
A
B
C
CAPACIDAD
4 M x 1 bit
1 M x 2 bit
256 k x 4 bit
COSTE EN $
14
6
3
Y un coste por la circuitería de decodificación y conexionado de :
d x 10 $
Siendo `d' el numero de bits del bus de direcciones a ser decodificados.
Razonar y calcular cual será el tipo de memoria usada.
Suponiendo el bus de datos de 8 bits.
Tipo A
16 Mbytes ·
224 · 8 bits ·
32 chips
Necesitamos 2 bits del bus de direcciones para decodificarlos, puesto que tenemos 4 ( 22 ) bancos.
0 1 ....... 3
12
1
2
.
.
7
Coste = 32 · 14 +10 · 2 = 468$.
Tipo B
16 Mbytes ·
224 · 8 bits ·
64 chips
Necesitamos 4 bits del bus de direcciones para decodificarlos, puesto que tenemos 16 ( 24 ) bancos.
0 1 ....... 15
1
2
3
Coste = 64 · 6 +10 · 4 = 424$.
Tipo C
16 Mbytes ·
224 · 8 bits ·
128 chips
Necesitamos 6 bits del bus de direcciones para decodificarlos, puesto que tenemos 64 ( 26 ) bancos.
0 1 ....... 63
1
Coste = 128 · 3 +10 · 6 = 444$.
16. Nos disponemos a controlar el funcionamiento de un robot, con un microprocesador 68000. La función
que debe realizar el robot estriba en desplazarse por una planta de producción, tomar componentes de un lugar
determinado y colocarlos en otro. Las especificaciones que debemos conocer son:
13
− Tenemos el suelo de la planta reticulado con pintura amarilla. Los caminos que ha de recorrer el robot, y los
lugares de manipulación de piezas, coinciden con punto de la retícula.
− El robot tiene varios registros situados en el mapa de memoria de 68000:
Direcciones: S ( $ 25001 ), N ( $ 25003), E ( $25005 ), W ( $ 25007).Cada vez que recibe un flanco
ascendente, en uno de estos registros, realiza una acción en la dirección correspondiente.
Sensor de presencia: A! ( $25009 ). Su estado de reposo es 0, pasa a 1 cuando sensa la presencia de una
persona un nodo adyacente.
Acciones: D ( $ 2500B). Determina la acción que realizará el robot, al recibir un flanco en los registros de
direcciones ( 0, reposo, 1, avance, 2, tomar pieza, 3, colocar pieza ).
− Como la cadena de la producción ha de poderse modificar semanalmente, se ha pensado almacenar la
secuencia a realizar en una EPROM situada en la dirección $20000. De esta forma el programa será el mismo
y, cuando deseemos alterar el funcionamiento del robot, solo tendremos que cambiar un C.I.
• Realizar el programa, en ensamblador, que controlará el correcto funcionamiento de nuestro robot.
ABSOLUTE
ORG $35000
MOVE.L # $25001,A3
MOVE.L # $2500B,A0
MOVE.L # $25009,A1
MOVE.B # 0, (A0)
MOVE.B # 0, D6
MOVE.L # $20000,A5
INICIO: MOVE.B ( A5)+, D6
BTST #0, D6
BEQ FIN
MOVE.B D6, D5
LSR #3, D5
MOVE.B D5, ( A0 )
MOVE.B D6, D5
AND.B #6, D5
14
MOVE.B #0, +0( A3, D5)
MOVE.B #1, +0 ( A3, D5)
DEFECT: BTST #0, (A1)
BNE DEFECT
BRA INICIO
FIN: TRAP # 5
END.
• Realiza una de las secuencias semanales que introduciremos en la EPROM. Esta secuencia de ser la
representada en la siguiente figura.
$ 20000 XXX0 1111 avance, oeste
$ 20001 XXX0 1111 avance, oeste
$ 20002 XXX0 1111 avance, oeste
$ 20003 XXX0 1111 avance, oeste
$ 20004 XXX0 1011 avance, norte
$ 20005 XXX0 1011 avance, norte
$ 20006 XXX1 0XX1 tomar pieza, XX
$ 20007 XXX0 1011 avance, norte
$ 20008 XXX0 1011 avance, norte
$ 20009 XXX0 1111 avance, oeste
$ 2000A XXX0 1111 avance, oeste
$ 2000B XXX0 1111 avance, oeste
$ 2000C XXX1 1XX1 colocar pieza, XX
$ 2000D XXX0 1101 avance, este
$ 2000E XXX0 1101 avance, este
$ 2000F XXX0 1101 avance, este
$ 20010 XXX0 1011 avance, norte
$ 20011 XXX0 1011 avance, norte
15
$ 20012 XXX0 1011 avance, norte
$ 20013 XXX0 1111 avance, oeste
$ 20014 XXX0 1011 avance, norte
$ 20015 XXX1 0XX1 tomar pieza, XX
$ 20016 XXX0 1101 avance, este
$ 20017 XXX0 1101 avance, este
$ 20018 XXX0 1101 avance, este
$ 20019 XXX0 1001 avance, sur
$ 2001A XXX0 1001 avance, sur
$ 2001B XXX1 1XX1 colocar pieza, XX
$ 2001C XXX0 0XX0 reposo, XX, fin secuencia.
17. En un sistema , tenemos un solo dispositivo con posibilidad de realizar peticiones de interrupción. Con los
datos que se facilitan a continuación, calcular:
• Tiempos, máximo y mínimo, que transcurrirán desde que el dispositivo realiza la petición hasta el
inicio el servicio a la petición.
• Tiempo medio de respuesta a la interrupción, usando la aproximación del ultimo punto.
Datos:
− Frecuencia de reloj de la CPU : 5 MHz.
− Bus de datos: 16 bits.
− Bus de direcciones de 32 bits.
− Duración de la instrucción más larga: 50 ciclos de reloj.
− Retardo de la lógica de activación de las líneas de interrupción: 2 ciclos de reloj.
− Ciclo de reconocimiento de interrupción: 2 ciclos de reloj.
− Ciclo de lectura dato tamaño word: 4 ciclos de reloj.
− Ciclo de lectura dato tamaño long word: 8 ciclos de reloj.
− Tiempo consumido en apilar los registros: 60 ciclos de reloj.
− Salto a la dirección de la rutina tras obtener el vector de interrupción: 52 ciclos.
− Aproximación: La probabilidad de que queden 20, 10 o 6 ciclos de reloj para completar la instrucción en
16
curso es, respectivamente el 20%, 30% y 50%.
= 1 / f = 1 / 5000000 = 200 ns.
a)
Tiempo máximo.
− Duración de la instrucción más larga.
− Retardo de la lógica de activación de las líneas de interrupción.
− Ciclo de reconocimiento de interrupción.
− Ciclo de lectura dato tamaño long word.
− Tiempo consumido en apilar los registros.
− Salto a la dirección de la rutina tras obtener el vector de interrupción.
T max = 50 + 2 + 2 + 60 + 8 + 52 = 174 ciclos 174 · 200 ns = 34.8 s
Tiempo mínimo.
− Retardo de la lógica de activación de las líneas de interrupción.
− Ciclo de reconocimiento de interrupción.
− Ciclo de lectura dato tamaño word.
− Tiempo consumido en apilar los registros.
− Salto a la dirección de la rutina tras obtener el vector de interrupción.
T min = 2 + 2 + 4 + 60 + 52 = 120 ciclos 120 · 200 = 24 s.
b)
T medio = (120 + 20) · 0.2 + (120 + 10) · 0.3 + (120 + 6) · 0.5 = 130 ciclos 130 ·200 = 26 s.
18. Estudiar el esquema de la figura y ...
• Determinar el mapa de memoria.
Inicio $ X20000
Fin $ X2FFFF
Decodificación incompleta ja que varias direcciones lógicas se mapean en una misma dirección física.
• Dibujar el cronograma de las señales implicadas en un ciclo de lectura.
• Indicar si se generan estados de espera.
17
f = 10 MHz. = 10 ns.
El tiempo que tarda en producirse el DTACK! = 38 ns (multiplexor) + 5 ns (nor) + 5 ns (inversor) = 48 ns.
Como el DTACK! se activa antes de la bajada de S4, concretamente en este caso en el estado S2, no se
producirán ciclos de espera.
• Indica, razonadamente, que memoria, la del tipo A o la del tipo B indicadas en los datos, sería más
conveniente utilizar.
Memoria A 150 ns acceso Sobra = 250 ns − ( 150 ns. +48 ns ) = 52 ns.
Memoria B 200 ns acceso Sobra = 250 ns − ( 200 ns. +48 ns ) = 2 ns.
Como las dos memorias son válidas utilizaríamos la más barata.
• Analiza la utilidad de la puerta AND.
Si FC0 = FC1 = FC2 = 1 esto implica que tiene espacio para interrupciones, entonces lo que hace la puerta
AND es inhibir los dispositivos de memoria.
• Analiza en que modo de operación se pude acceder a este bloque de memoria.
Se puede acceder en los dos modos, usuario y supervisor.
• Modifica el circuito para que solo podamos acceder a esta memoria para leer datos en modo usuario.
Para cumplirse FC0 = 1, FC1 = FC2 = 0
DATOS: Retardo de cada bloque combinacional = 5 ns, tiempo de acceso a la memoria: A = 150 ns vs. B=
200 ns, frecuencia de reloj del sistema = 10 MHz.
19. Hemos aprovechado nuestros inmensos conocimientos de esta asignatura para aumentar las prestaciones
de un sistema basado en el 68000. Hemos conseguido que una máquina `mata marcianos' realice
simultáneamente las funciones de un sencillo ordenador de abordo para nuestro coche. De esta manera,
mientras el copiloto bate todos los récords jugando al ` Tetris TM', el piloto puede consultar diversas
informaciones en un display.
• Cuando el coche arranca produce una interrupción autovectorizada de nivel 3.
• Cuando accionamos el pulsador se produce una interrupción autovectorizada nivel 2.
• Cada minuto se produce una interrupción autovectorizada nivel 1.
El display puede mostrar cinco posibles informaciones:
• Km. totales recorridos por el vehículo.
18
• Km. parciales, los recorridos por el vehículo desde la última vez que arrancamos.
• La hora actual.
• Tiempo de viaje. El tiempo transcurrido desde la ultima vez que arrancamos.
• Velocidad promedio durante el viaje.
El diplay siempre está mostrando una de las informaciones. Cuando accionamos el pulsador muestra la
siguiente lista, de forma rotatoria. La información mostrada se actualiza cada minuto.
Tenemos libres todas las posiciones de memoria a partir de la $ 25000, excepto:
• @ $ 25006, 16 bits indicando los km. totales.
• @ $ 2500A, 16 bits indicando la hora actual en minutos.
• @ $ 2500E, 8 bits indicando la velocidad instantánea del vehículo.
Podemos utilizar dos rutinas, ya implementadas, para la presentación por el display:
• Salida: Toma un word de ( FP +8 ), y lo representa en forma decimal.
• Hora: Toma un word de ( FP + 8 ), y lo representa en forma horaria ( HH:MM ).
( Nota: Podéis trabajar con la información en minutos de la @ $2500ª, la rutina encargada de realizar la
traducción y la presentación en horas : minutos ).
Realizar y explicar el código necesario para obtener el funcionamiento descrito.
Arranque i.a.v.3 Posicion 108 Arranca i.a.v. nº 27
Pulsador i.a.v. 2 Posicilon 104 Pulsador i.a.v. nº 26
1 i.a.v. 1 Posicion 100 Rut 1 i.a.v. nº 25
MOVE.L #ARRANCA,108
MOVE.L #PULSADOR,104
MOVE.L #RUT1, 100
ARRANCA: ORG $25010 ;cuando entramos en una excepción apilamos
MOVE.W $25006,$25008 ; la direccion de retorno y el SR
MOVE.B #1,$2500F ;esta posicion es un contador
RTE
PULSADOR: ADD.B #1,$2500F
CMP.B #6,s2500F
BEQ CAMBIO
MOVE #1,$2500F
19
JMP TEMPORIZADOR
TEMPORIZADOR: CMP.B #1,$2500F
BEQ KMT ;Km totales
CMP.B #2,$2500F
BEQ KMP ;Km parciales
CMP #3,$2500F
BEQ RELOJ ;Hora actual
CMP.B #4,$2500F
BEQ TVIAJE ;Tiempo de viaje
CLR D0
MOVE.W $25006,D0
SUB.W $25008,D0
MOVE.W $2500A,D1
SUB.W $2500C,D1
DIVU.W D1,D0 ; calculo de los Km parciales
MULU #60,D0
MOVE.W D0,−(A7)
JSR SALIDA
ADDQ.L #2,A7
RTE
KMT: MOVE.W $25006,−(A7)
JSR SALIDA
ADDQ.L #2,A7
RTE
KMP: MOVE.W $25006,D0
SUB.W $25008,D0
20
MOVE.W D0,−(A7)
MOVE.W D0,−(A7)
JSR SALIDA
ADDQ.L #2,A7
RTE
RELOJ: MOVE.W $2500A,−(A7)
JSR HORA
ADDQ.L #2,A7
RTE
TVIAJE: MOVE.W $2500A,D0
SUB.W $25006,D0
MOVE.W D0,−(A7)
JSR HORA
ADDQ.L #2,A7
RTE
20. Considerar un sistema basado en un microprocesador con una memoria principal y una memoria `cache'.
El tiempo de ciclo de la cache es de 60 ns y el tiempo de ciclo de la memoria principal es de 480 ns. Calcular:
• El tiempo medio de un ciclo de lectura, si la `hit ratio' (porcentaje de aciertos) es un 90%.
T medio = 60 ns · 0.9 + (60 ns + 480 ns) · 0.1 = 108 ns.
• El porcentaje de mejora obtenido en el tiempo de la lectura.
%=
= 0.775 77.5 %
• La mejora en la `velocidad' de procesado del sistema, si antes de introducir la cache se consumía un
60% del tiempo en ciclos de memoria.
Si la mejora es el 77.5 %, i el tanto por ciento de tiempo que consumía en ciclos de memoria era del 60%, la
mejora es el 77.5 % del 60 % es decir, 0.6 · 0.775 = 0.465 46.5 %. Ahora con la cache consumirá el 46.5 %
del tiempo en ciclos de memoria.
• Cual es la mínima `hit ratio' necesaria, para que este sistema presente una mejora en sus prestaciones.
21
H.R. · 60 ns + ( 1 − H.R.) · (480 ns + 60 ns) < 480 ns
540 ns − 480 · H.R. < 480 ns − 480 · H.R .< −60 H.R .> 60 / 480 = 0.125 12.5 %
Nota: Explicar claramente las hipótesis que realices sobre el funcionamiento del sistema, incluidos tiempos y
políticas.
21. Dado el siguiente mapa de memoria:
Dispositivo
EPROM
RAM
NVRAM
Reservado expansión
DUART #1
RTC
Espació de Direcciones ( Hex )
000000 − 000007
000008 − 01FFFF
180000 − 187FFF
200000 − 2FFFFF
F00000 − F0000F
F00010 − F0001F
Tamaño en Bytes
8
128 k
32 k
1M
16
16
• Dibujar un posible esquema circuital, teniendo en cuenta la conexión de todas las señales necesarias
en cada dispositivo.
• Explicar si en el apartado anterior habéis usado las señales FC0−FC2 y la causa.
• Justificar el tamaño de los dispositivos de memoria elegidos.
Transparencia
22. En la siguiente figura aparece un bloque de memoria que debe ser conectado a un 68000. Se ha
implementado con circuitos integrados del tipo PCD5114. Razonar las respuestas a las siguientes preguntas.
• Los PCD5114 son SRAM o DRAM?, explica como lo has detectado obviando el hecho de que lo
indica en su hoja de características ( ver anexo de características técnicas ).
Son SRAM's porque los bloques de memoria no presentan una lógica de control para realizar los ciclos de
refresco.
• Conectar las lineas, que no estén, de los CI's de memoria.
− Conectamos las 2 E2A a la señal A2! del 68000.
− Conectamos el R / W! de las memorias a la del 68000
− Conectamos en cada columna las lineas de buses de datos, serán respectivamente en cada columna
D15−D12, D11−D8, D7−D4 y D3−D0.
• Qué capacidad y organización de memoria se ha implemetado?
Cada chip 210 · 4 bits = 4 kbits
8 chips · 4 kbits = 4 kbytes.
• Indicar las direcciones del mapa de memoria ocupadas. La decodificación es completo o incompleta?
22
Decodificación incompleta ja que varias direcciones lógicas se mapean en una misma dirección física.
• Modificar el esquema para que las direcciones ocupadas sean las mayores del mapa de memoria.
• En un ciclo de lectura, suponiendo el reloj del sistema a 10 MHz., ¿serán necesarios ciclos de espera?.
¿Y suponiendo un reloj a 5 MHz.?
Retardo del decodificador = 38 ns.
Tiempo de ciclo de lectura / escritura = 200 ns.
f = 10 MHz.
= 100 ns
Retardo = 200 + 38= 238 ns.
To ( bajada de S2) = 1 ciclo y medio = 150 ns
238 ns. −150 ns. = 88 ns. necesitamos 1 ciclo de espera.
f = 5 MHz.
= 200 ns
Retardo = 200 + 38= 238 ns.
To ( bajada de S2) = 1 ciclo y medio = 300 ns
238 ns. −300 ns. = − 62 ns. no necesitamos ciclos de espera.
23. Queremos conectar un DAC AD558 a nuestro 68000.
23
• Diseña el conexionado necesario para controlar el DAC cumpliendo el siguiente mapa de memoria:
$ C0000 $ C04FF memoria EPROM
$ C0800 $ C09FF memoria RAM
$ C0600 DAC
Utilizar para ello un decodificador 74LS138 y la menor cantidad de lógica posible. Tener en cuenta que la
carga de DAC se produce cuando detecta un flanco ascendente en su entrada ENABLE.
• Implementar un programa que, en el sistema anterior, genere un diente de sierra de f = 2 kHz.,
máxima amplitud y máxima calidad.
24. En el circuito de la figura 24 aparece la conexión del MC 68000 a una unidad de memoria ROM.
• Determinar el mapa de memoria ROM:
Inicio $ 008000
Fin $ 00FFFE
32766 bytes
• Explica el proceso de generación de la señal ROM_DTACK.
A partir de 4 pulsos de reloj, haremos que el `1' lógico pase por los 4 biestables tipo D, para finalmente ir
hacia la señal DTACK−ROM!. Si la frecuencia del reloj es de 8 MHz., implica que el periodo sea de 125 ns.,
puesto que hay 4 pulsos tendrá 500 ns.
• Explica como se genera la señal BERR*. Explica su utilidad.
La señal BERR! Se genera gracias a 4 pulsos de reloj generados por un biestable. Puesto que el reloj del
biestable trabaja a una frecuencia 10 veces menor, entonces el tiempo para generar la señal será 5 s ( (10 /
8MHz.) · 4 ) y 5 s / 125 ns. 40 veces más llento que el reloj de 68000.
La señal BERR! se inserta cuando haya saltado el watch−dog por no llegarle la señal DTACK!
• Realiza los añadidos, o modificaciones, necesarias para que la ROM solo sea accesible en modo
supervisor.
Para ser accesible enb modo supervisor FC0 FC1 FC2
24
101
011
y = FC2 ( FC1"FC0)
25. En la fig.25 se presenta el 68000 junto con una circuiteria de gestión de interrupciones.
• Identifica los tipos de interrupciones implementados en la figura. Explica si son emmascarables, su
nivel de prioridad y si son, o no, autovectorizadas.
• Explica el funcionamiento de la circuitería en un proceso de reconocimiento de interrupción.
26 Tenemos un sistema compuesto por los siguientes elementos:
• 2 canales de comunicaciones paralelo con de PIA de la familia 6800.
• 2 canales de comunicaciones serie con dos ICIA de la familia 6800.
• 1 circuito TIMER PTM6840.
• Indica que señales de 68000 se utilizan para la conexión de estos dispositivos, y explica su función.
− Cuándo esperamos un DTACK! recibimos un VPA! idefentificamos un acceso valido a perifericos del
6800.
− Pasamos a sincronizarmos con E ( enable), un reloj independiente, 10 veces más lento y un ciclo de trabalo
4L − 6H.
− La señal VMA!, hace la función del AS! pero con los perifericos tipo 6800.
• En la figura b se muestra parte de decodificación del sistema mencionado. Especifica el mapa de
memoria que determina e indica si es una codificación completa o incompleta.
ACIAS : $ X1XX 01 $ X1XX 0F
PIAS : $ X1XX11 $ X1XX1F
TIMER: $ X1XX21 $ X1XX2F
Decodificación incompleta ja que varias direcciones lógicas se mapean en una misma dirección física.
• Explica cual es la función de la señal VMA! En el esquema anterior.
Una vez hemos decodificado la dirección de estos dispositivos la señal VMA! servirá para habilitar las
señales, una vez el 68000 ya esté preparado y sincronizado en los perifericos del 6800.
• En la figura d aparece el esquema de conexión del circuito anterior con un procesador 68000. Aparece
una lógica adicional necesaria para la correcta gestión de las peticiones de interrupción auto
vectorizadas. Determina que puertas lógicas deben ser las cajas A, B y C para que el sistema gestione
correctamente las interrupciones autovectorizadas y la decodificación de los dispositivos de 8 bits.
25
Bloque A
Bloque B
Bloque C
• Explica el funcionamiento del esquema de la figura e e indica el nivel de prioridad asignado a la
petición de interrupción de cada dispositivo.
TIMER interrupción nivel 2
HACIA interrupción nivel 3
PIA B interrupción nivel 4
PIA A interrupción nivel 5
• Supongamos que el TIMER solicita una interrupción a la CPU. Indica cual será el código
IPL0!−IPL2! Que se generará y a que dirección saltará el PC como respuesta a dicha petición.
IPL2! IPL1! IPL0!
1 0 1 Nivel 2
Como será una interrupción autovectorizada de nivel 2, y tiene elcodigo 26 en la tabla de vectores de
excepción, la dirección de la rutina de atención estará en la posición :
27. Calcula el consumo medio de un sistema de memoria que tenga un ciclo de trabajo de 25%.
Si el ciclo de trabajo es del 25 % el ciclo de stand−by es del 75 %.
• Si esta compuesto por memorias de tecnología NMOS con un consumo en `stand−by' de 30 mW y de
200 mW en operación.
30 mW · 0.75 + 200 mW · 0.25 = 22.5 mW + 50 mW = 72, 5mW
• Si esta compuesto por memorias de tecnología CMOS con un consumo en `stand−by' de 0.5 mW y de
200 mW en operación.
0.5 mW · 0.75 + 200 mW · 0.25 = 0.375 mW + 50 mW = 50.375 mW
28. Supongamos un sistema con las siguientes caracteristicas:
• Duración de un ciclo de bus = 500 ns.
• Duración de la transferencia de control de buses = 250 ns.
• Velocidad de comunicaciones de un dispositivo I/O a través de DMA = 50 kbytes / s.
• Transferencia de datos byte a byte.
• Calcula el tiempo que el dispositivo I/O tendrá ocupado el bus si transmite 128 trabajando en modo
ráfaga.
128 bytes ·
26
= 2.5 ms. 5000 ciclos de bus
T i/o = 250 ns. + 2.5 ms. + 250 ns.= 2.5005 ms.
• Repite el apartado anterior, y compara los resultados, si el dispositivo trabaja en modo robo.
Tiempo que utiliza el DMA para transmitir un byte = 1 byte ·
= 0.00001953 s.
0.00001953 s = 19531 ns. 40 ciclos de bus
T i/o = 128 ( 250 ns + (500 ns · 40 ) +250 ) = 2624000 ns = 2.624 ms.
• Repite los dos apartados anteriores, y compara los resultados, en caso de una velocidad de
transferencia de 1 Mbyte/s.
En modo rafaga:
128 bytes ·
= 122.07 s. 245 ciclos de bus
T i/o = 250 ns. + 245 · 50ns. + 250 ns.= 123 s.
En modo robo:
Tiempo que utiliza el DMA para transmitir un byte = 1 byte ·
= 953.6743164 ns.
953.6743164 ns . 2 ciclos de bus
T i/o = 128 ( 250 ns + (500 ns · 2 ) +250 ) = 2624000 ns = 192 s.
29. Tenemos un sistema digital con las siguientes características:
• Procesador MC 68000.
• EPROM en las posiciones $ 000000 $ 0003FF
• RAM programa supervisor $ 000400 $ 001FFF
• RAM datos supervisor $ 020000 $ 02FFFF
• RAM programa supervisor $ 030000 $ 03FFFF
• RAM programa supervisor $ 040000 $ 04FFFF
• Como usuarios del sistema, realizar un programa que llene todas las posiciones de memoria de datos.
Las posiciones pares con $ FF y las impares con $ 00.
Al realizar el apartado anterior, os percatáis de que esa memoria corresponde a un monitor cuadrado de vídeo.
Cada posición de memoria contiene el brillo de un pixel de la pantalla.
ABSOLUTE
27
ORIG $30000 ;Nos ubicamos en la memoria de usuario
MOVE.L #$ 40000, A0; ;Inicialización para el bucle
MOVE.W #$3FFF,D1 ;En un bucle largo será mas eficiente que CMPA.L
MOVE.L #$FF00FF00, D0 ;Long−word, posiciones par−impar−par−impar
Llenar: MOVE.L DO, (A0)+ ;Lleno y avanzo a la siguiente posición
DBF D1, Llenar ; y repito hasta llenar toda la memoria.
TRAP #5
END
• ¿ Qué imagen has obtenido en el apartado anterior?. Dibuja un tablero de ajedrez que ocupe toda la
pantalla.
ABSOLUTE
ORIG $30000 ;Ubicación en user −program memory
;Inicialización de registros
MOVE.L #$40000, A0 ;Inicio memoria datos usuario
MOVE.L #$ FFFFFFFF, D3 ; Para pintar de blanco eficazmente
MOVE.L #$ 00000000, D4 ;Para pintar de negro
MOVEQ #$7, D5 ;Contador para pintar 8 líneas de cuadros
Tablero: MOVE.W #$7F,D2 ;Contador para completar una fila de grosor $20
Fila: MOVEQ #$7, D1 ;Contador para hacer cuadros de anchura $20
Cuadro: MOVE.L D3, (A0) ;Pintamos 4 pixel de un color
MOVE.L D4, $20 (A0)+ ; Y otros cuatro del cuadro contigua del otro color
DBF D1, Cuadro ;Hasta completar una línea de dos cuadros
ADDA.L #$20, A0 ; Pasamos a pintar otra línea de dos cuadros contiguos
DBF D2, Fila ; Hasta completar una fila de 8 cuadros de $20x$20
EXG D3, D4 ; La siguiente fila empezará con los colores cambiados
DBF D5, Tablero ;Y así hasta pintar 8 líneas de 8 cuadros de 32x33332
TRAP #5 ; Acabamos
28
END
• Consigue una imagen que pase, de izquierda a derecha, del negro al blanco con la máxima suavidad.
ABSOLUTE
ORIG $30000 ;Ubicamos en user −program memory
MOVE.L #$40000;A0 ;Inicialización de los registros utilizados
MOVE.B #$0,D0 ;Para obtener suavidad cambiaremos pixel a pixel
MOVE.W #$3FFF,D1 ;En un bucle largo será mas eficiente que CMPA.L
LLENADO: MOVE.B D0,(A0)+ ;Pinto un pixel y apunto al siguiente
ADDQ.B #1,D0 ;Incremento el brillo del siguiente pixel
;En tamaño B, tras $FF tendremos de nuevo $0
DBF D1,LLENADO ;Repetimos hasta llenar la memoria
TRAP #5 ; Fin
END
• Tenemos un scaner mapeado de la siguiente manera:
• $ 050000 Registro de datos de entrada.
• $ 050001 Registro de estado.
• $ 050002 Registro de control.
Quiero volcar una imagen, que me esta obteniendo el scaner, sobre la pantalla. Como quiero suavizar las
aristas verticales, para cada pixel de la pantalla tomo como valor el promedio de tres posiciones contiguas
horizontalmente en la imagen real.
Realiza el programa necesario. Discute el problema de bordes, pero no es necesario que la soluciones a la
práctica.
ABSOLUTE
ORIG $30000 ;Ubicación en memoria de programa de usuario
;Inicialización de registros
MOVE.L #$40000,A0 ;Inicio memoria de datos usuario ( vídeo)
MOVE.L #$50000,A1 ;@ `base' del scaner
CLEAR.L D2 ;Para no tener problemas con acarreos de la suma
MOVE.L D2,D1 ;ni con los restos de la división
29
MOVE.L D2,D0 ;tratamiento trivial del problema del primer pixel
ESPERA_DATO: MOVE.B 1(A1),D3 ;Encuesta del estado del escáner.
BEQ ESPERA_DATO ;Supongo que Stat._Reg=0 indica `no preparado'.
MOVE.B (A1),D0 ;Tomamos el pixel captado
MOVEQ.B #1,2(A1) ;Le indicamos que ya puede escánear otro pixel
NOP ;Supongo que esto se hace produciendo un pulso
MOVEQ.B #1,2(A1) ;de valor 1 durante un cierto intervalo de tiempo
ADD D0,D2 ;Realizamos el promedio de los 3 pixeles contiguos
ADD D1,D2 ;Sumamos tamaño word, para asumir sumar > $FF
DIVU #3,D2
MOVE.B D2,(A0)+ ;Y enviamos el resultado a la memoria de video
MOVE.L D1,D2 ;Desplazamos la cola de pixel y, de paso, limpiamos
MOVE D0,D1 ;la parte alta de D2 que contiene el resto (coste 0)
CMPA A1,A0 ; Y repetimos hasta haber llenado la pantalla
BNE ESPERA_DATO; Podíamos usar DBF como otros...
TRAP #5 ;Fin
END
30. En la figura aparece un bloque de memoria que se va a conectar a un microprocesador de 8 bits, Z−80.
Está compuesto por dispositivos del tipo 2114 con una capacidad de almacenamiento de 1k x 4 bits.
• ¿Cuál es el número de terminales A0..AN que deben tener cada 2114?.¿Cuál es el valor de N?.
Cada dispositivo 2114 tiene una capacidad de 1k x 4 bit. Con dos chips podemos direccionar 1 kbyte, por lo
tanto 1 kbyte = 1024 = 210 N = 9 A0 .. A9
• ¿Qué señal de Z−80 conectarias a la entrada X del decodificador, para que el bloque de memoria no
fuese accesible mediante instruciones IN / OUT ( IN_PORT, OUT_PORT )?.
Conectaría la señal IOREQ! A la entrada X del decodificador, esta señal habilitaría a no el funcionamiento del
decodificador.
• ¿Qué capacidad total de almacenamiento tiene el bloque de la figura?. ¿Cómo está organizada?.
Cada dispositivo es de 1 k x 4 bits, como hay 4 la capacidad total es de 2 kbytes.
30
Esta organizada por dos bancadas de 1 kbytes cada una.
• Indica las direcciones ocupadas por el bloque de memoria en el mapa de direcciones del
microprocesador. ¿ Es una codificación completa o incompleta?
Inicio $ XXX 00
Fin $ XXX 11
212−1 = 4095 bytes
Podemos ver que se trata de una codificación incompleta ya que existen más direcciones lógicas que físicas.
31 Estamos realizando un sistema basado en un 68000 a 10 MHz. ( datos disponibles en el manual ). Hemos
implementado ya un bloque decodificador, con 50 ns. De retardo, que nos mapea el espacio de memoria sobre
tres dispositivos diferentes:
EPROM con un tiempo de ciclo de 360 ns.
SRAM con un tiempo de acceso de 50 ns.
DRAM con un tiempo de ciclo de 190 ns.
Diseñar la generación de la señal DTACK! Para asegurar un correcto funcionamiento del sistema, usando
puertas lógicas y biestables ideales.
f = 10 MHz. = 100 ns
La señal DTACK! tiene que estar a nivel bajo en la bajada de S4, por lo tanto para generar la señal DTACK!
tenemos 1 ciclo y medio de reloj ( 150 ns. )para que no se produzcan estados de espera.
EPROM 360 ns. + 50ns. −150 ns = 260 ns. 3 ciclos de espera.
SRAM 50 ns. + 50 ns. − 150 ns. = −50 ns. no necesita ciclos de espera.
DRAM 190 ns. + 50 ns. − 150 ns. = 90 ns. 1 ciclo de espera.
32. Tenemos un sistema digital con las siguientes características:
• Procesador MC 68000.
• EPROM en las posiciones $ 000000 $ 0003FF
• RAM programa supervisor $ 000400 $ 001FFF
• RAM datos supervisor $ 020000 $ 02FFFF
• RAM programa supervisor $ 030000 $ 03FFFF
31
• RAM programa supervisor $ 040000 $ 04FFFF
• Como usuarios del sistema, realizar un programa que llene todas las posiciones de memoria de datos,
con $00 excepto las posiciones 8xn (n " [0, 1, 2, ...])que se llenaran con $FF. Al realizar el apartado
anterior, os percatáis , para vuestro asombro y regocijo, de que esa memoria corresponde a un monitor
cuadrado de video. Cada posición de memoria contiene el brillo de un pixel de la pantalla ( $00 indica
negro, $FF blanco y los valores intermedios escala de grises).
ABSOLUTE
ORIG $30000 ;Nos ubicamos en la memoria de usuario
MOVE.L #$ 40000, A0; ;Inicialización para el bucle
MOVE.W #$1FF8,D1 ;En un bucle largo será mas eficiente que CMPA.L
MOVE.L #$00000000, D2
MOVE.L #$FF000000,D3
Llenar: MOVE.L D3, (A0)+ ;Lleno y avanzo a la siguiente posición
MOVE.L D2,( A0)+ ;Lleno y avanzo a la siguiente posición
DBF D1, Llenar ; y repito hasta llenar toda la memoria.
TRAP #5
END
• ¿ Qué imagen has obtenido en el apartado anterior?. Realiza un programa que dibuje líneas blancas
diagonales ( izq. Arriba a der. Abajo) de dos pixeles de grosor, sobre fondo negro y separadas 30
pixeles horizontales una de la otra.
ABSOLUTE
ORIG $30000 ;Ubicación en user −program memory
;Inicialización de registros
MOVE.L #$40000, A0 ;Inicio memoria datos usuario
MOVE.W #$ FFFF, D4 ; Para pintar de blanco eficazmente
CLR.B D1
MOVE.B #$FF,D2
MOVE.B #$00,D3
LLENAR: MOVE.W #29,D4
32
MOVE.B D2,(A0)+
MOVE.B D2,(A0)+
ADDQ #1,D1
CMPI #4,D1
BEQ AVIS
TORN: MOVE.B D3,(A0)+
DBF D1,TORN
DBF D4,LLENAR
TRAP 5
AVIS: CLR.B D1
MOVE.W #30,D4
JMP TORN
END
• Consigue una imagen que pase, de izquierda a derecha, del negro al blanco con la máxima suavidad.
ABSOLUTE
ORIG $30000 ;Ubicamos en user −program memory
MOVE.L #$40000;A0 ;Inicialización de los registros utilizados
MOVE.W #$3FFF,D1 ;En un bucle largo será mas eficiente que CMPA.L
MOVE.L #$FFFFFFFF,D2
MOVE.L #$01010101,D3
INICIO: MOVE.B #3F,D4
LLENAR: MOVE.L D2,(A0)+
DBF D4,LLENAR
SUB.L D3,D2
DBF D1,INICIO
TRAP #5
33
END
33. Estamos realizando la implementación de un espacio de memoria de 512 kbytes para un procesador de 8
bits. Para ello vamos a emplear dispositivos DRAM con una capacidad de 256 kbits cada uno.
Comparar las soluciones obtenidas si utilizamos DRAM's con una organización x1 o bien si la organización es
x4, en relación a:
• Numero de dispositivos de memoria.
Organización x1 = 256 kbits x1 = 256 kbits.
Organización x4 = 64 kbits x4 = 256 kbits.
Organización x1
= 16 chips
Organización x4
= 16 chips
• Potencia disipada.
Organización x1
W total = 8 chips ( en ciclos de trabajo ) + 8 chips ( en stand by )
Organización x4
W total = 2 chips ( en ciclos de trabajo ) + 14 chips ( en stand by )
El consumo de potencia es mayor con la organización x1
• Espacio ocupado en la placa.
El espacio ocupado en la placa es el mismo ja que el número de pastillas es el mismo para ambas
organizaciones.
• Granualidad. (mínima expansión de memoria que puedes hacer)
Organización x1 Tendríamos que incluir 8 chips de 256 kbits.
Organización x4 Tendríamos que incluir 2 chips de 64 kbits.
La mejor elección respecto la granualidad sería la organización x4.
• Fiabilidad.
34
Organización x1 Probabilidad de fallo = 8 · Tasa de fallo
Organización x4 Probabilidad de fallo = 2 · Tasa de fallo
La mejor elección respecto la fiabilidad sería la organización x4, ya que la tasa de fallos es menor.
DATOS: los dos tipos de dispositivos son de iguales característica, igual potencia disipada en cada modo de
trabajo, igual tasa de fallos, espacio ocupado proporcional al numero de pastillas...
34. Realizar una rutina que calcule la multiplicación de dos matrices.
• De dos matrices 2x2, con los siguientes parámetros pasados por la pila:
1º Dirección de la matriz A (L).
2º Dirección de la matriz B (L).
Resultado : Dirección de la matriz R (L). Substituyendo a @ B
• De dos matrices ( n+1 ) x ( n+1 ), con los siguientes parámetros por la pila:
1º Dirección de la matriz A (L).
2º Dirección de la matriz B (L).
3º n ( ). Indice máximo de filas y columnas ( i, j " [0,..n])
Resultado : Dirección de la matriz R (L). Substituyendo a @ B.
DATOS:
• Suponed todos los datos en tamaño w, y que los resultados de los productos son también tamaño W.
Es decir, realizar operaciones con signo sin preocuparnos del rango de los operadores ni del resultado.
• Existe una serie de funciones de sistema para la gestión de memoria. En pseudo C seria:
@memoria_libre.L = reserva_memoria ( tamaño.L)
void = libera_memoria ( tamaño.L, @aliberar.L)
• Recordar como se multiplican matrices:
a)
LINK A6,#0 ; Creo un `Stack frame' para acceder a los parámetros.
MOVEM.L D1−D2/A1−A3,−(A7) ;Salvo contexto
MOVE.L +8(A6),A2 ;Apunto al inicio de la matriz B
35
MOVE.L +12(A6),A1 ;Apunto al inicio de la matriz A
MOVE.L #8,−(A7)
JSR reservar_memoria ; Reservamos memoria para colocar el resultado.
MOVE.L (A7)+,A3 ;Apunto al inicio de la matriz R (resultado)
MOVE.L (A3),+8(A6) ;Paso el parámetro resultado
MOVE (A1),D1 ;D1=2
MULS (A2),D1 ;D1=A·E
MOVE 2(A1),D2 ;D2=B
MULS 4(A2),D2 ;D2=B·G
ADD D1,D2 ;D2=A·E + B·G
MOVE D2,(A3)+ ;R00
MOVE (A1),D1 ;.....
MULS 2(A2),D1
MOVE 2(A1),D2
MULS 6(A2),D2
ADD D1,D2
MOVE D2,(A3)+
MOVE 4(A1),D1
MULS (A2),D1
MOVE 6(A1),D2
MULS 4(A2),D2
ADD D1,D2
MOVE D2,(A3)+
MOVE 4(A1),D1
MULS 2(A2),D1
MOVE 6(A1),D2
36
MULS 6(A2),D2
ADD D1,D2
MOVE D2,(A3)+
MOVE.L (A7)+,D1−D2/A1−A3 ;Restauramos contexto
UNLK A5 ;Desmontamos el `Stack Frame'
RTS ; Y volvemos al programa que nos ha llamado
b)
LINK A6,#0 ; Montamos `Stack Frame', para acceder a los para.
MOVEM.L D0−D6/A0−A2,−(A7) ;Salvamos contexto
MOVE +8(A6),D0 ;D0=n
MOVE.L +10(A6),A1 ;A1=@B
MOVE.L +14(A6),A0 ;A0=@A
MOVE D0,D5
ADDQ #1,D5 ;D5=n+1 Longitud de la fila ( y de la columna)
MOVE D5,D1 ;Calculamos el espacio necesario en memoria
MULU D5,D1 ;n x n x 2 Bytes
ASL #1,D1
MOVE.L D1,−(A7)
JSR reserva_memoria ;Reservamos espacio para la matriz resultado
MOVE.L (A7)+,A2 ;A2 = @R
MOVE.L A2,+10(A6) ;Pasamos el parámetro resultado
ADD.L D1,A2 ;Apuntamos al final de la matriz para llenarla
;condamente `marcha−atrás' con los bucles
;`decrement−and−branch'
COLUMNA: MOVE +8(A6),D1 ; D0 apuntará filas
FILA: MOVE +8(A6)D2 ; D1 apuntará columnas
37
CLR D6 ; D2=i, será el índice para recorrer el sumatorio
;i aD0,i · bi,D1
;D6 mantendrá la suma parcial del sumatorio
CALCULO: MOVE D0,D3 ;D3 indice de acceso al elemento de A
MULU D5,D3 ;aD0,i Indice = ( D0·D5 + i) ·2
ADD D2,D3
ASL #1,D3
MOVE 0(A0,D3),D3 ;D3 = aD0,i
MOVE D2,D4 ;Idem para el elemento bi,D1
MULU D5,D4 ;Con índice = ( D5 · i +D1) ·2
ADD D1,D4
ASL #1,D4
MULU 0(A1, D4),D3 ;D3= aD0,i · bi,D1
ADD D3,D6 ;D6 = i aD0,i · bi,D1 parcial
DBF D2, CALCULO ;" i " [0..n]
MOVE D6,−(A2) ;RD0,D1
DBF D1, FILA ;Avanzo por la fila
DBF D0, COLUMNA ;Cambio de fila
MOVEM.L (A7)+, D0−D6/A0−A2 ;Restauro contexto
UNLK A6 ;Desmonto el `Stack Frame'
RTS ; Vuelvo al programo que me había llamado.
35.
a). Realizar una rutina que calcule la suma de dos matrices 3x3, con los siguientes parámetros pasados por la
pila:
1º Dirección de la matriz A (L).
2º Dirección de la matriz B (L).
Resultado : Dirección de la matriz R (L). Substituyendo a @ B
38
LINK A6,#0 ; Creo un ` Stack Frame' para acceder a los p.
MOVEM.L D1−D2/A1−A3,−(A7); Salvamos contexto
MOVE.L +8(A6),A2 ; Apunto al inicio de la matriz B
MOVE.L +12(A6),A1; ; Apunto al inicio de la matriz A
MOVE.L #8,D2
MOVE.L #128,−(A7)
JSR reserva_memoria ;Reservamos memoria para calcular el resulatado
MOVE.L (A7)+,A3
MOVE.L A3,+8(A6), ;Paso el parámetro resultado
CALCULO: MOVE.L (A1)+,D1
ADD.L (A2)+,D1
MOVE.L D1,(A3)+
DBF D2,CALCULO
MOVEM.L (A7)+,D1−D2/A1−A3 ; Restauramos contexto
UNLK A6 ;Desmontamos el `Stack Frame'
RTS ;Retorno de la subrutina
b) Realizar una rutina que calcule la suma de dos matrices NxN, con los siguientes parámetros pasados por la
pila:
1º Dirección de la matriz A (L).
2º Dirección de la matriz B (L).
3º n ( ). Indice máximo de filas y columnas ( i, j " [0,..n])
Resultado : Dirección de la matriz R (L). Substituyendo a @ B.
LINK A6,#0 ; Creo un ` Stack Frame' para acceder a los p.
MOVEM.L D0−D3/A0−A1,−(A7) ; Salvamos contexto
MOVE +8(A6),D0 ;D0=n
MOVE.L +10(A6),A1 ;A1 = @B
MOVE.L +14(A6)A0 ;A0 = @A
39
MOVE.L D0,D1
ASL #1,D1 ; n x 2 Bytes
MOVE.L D1,−(A7)
JSR reserva_memoria
MOVE.L D0,D2
SUB.L #1,D2 ; n−1
MOVE.L (A7)+,A2 ;A2 = @R
MOVE.L A2,+10(A6) ;Pasamos el parámetro resultodo
CALCULO: MOVE.L (A0)+,D3
ADD.L (A1)+,D3
MOVE.L D3,(A3)+
DBF D2,CALCULO
MOVEM.L (A7)+,D0−D3/A0−A1 ;Restauramos contexto
UNLK A6 ;Desmontamos el `Stack Frame'
RTS ;Volvemos al programa que nos ha llamado
c) Realizar una rutina que permute las filas por las columnas de una matriz 2x2 con parámetros:
1º Dirección de la matriz A (L). Objeto de permutación.
LINK A6,#0 ;Creo un `Stack Frame' para acceder a los parametr.
MOVEM.L A1−A3, −(A7) ;Salvamos contexto
MOVE.L +8(A6),A1
JSR reserva_memoria
MOVE.L (A7)+,A3
MOVE.L A3,+8(A6)
MOVE.L (A1),(A3)+
MOVE 4(A1),(A3)+
MOVE 2(A1),(A3)+
40
MOVE 6(A1),(A3)+
MOVEM.L (A7)+,A1−A3
UNLK A6
RTS
36 Realizar la interconexión a un 68000 de seis 16 kx8 EPROM, empezando en la posición de memoria
$000000, y seis 32 kx4 SRAM,, empezando en la posición $200000.
41
Descargar