Story Transcript
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