Ingeniero Técnico Industrial


Sistemas Digitales


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

C V Z N X

$A249 1010 0010 0100 1001 , como este número empieza por 1 0 0 0 1 0

  • MOVEA.W D2, A3

C V Z N X

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

0 0 0 1 0

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)

  • 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.

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

3 s

12.5 MHz.  = 80 ns.

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

3 s

12.5 MHz.  = 80 ns.

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.

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

3 s

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 )

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.

(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.

'Sistemas Digitales'

ABSOLUTE

ORG $37000

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

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.

'Sistemas Digitales'

  • 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:

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).

A23

A22

A21

A20

A19

A18

A17

A16

A15

A14

A13

A12

A11

A10

A9

A8

A7

A6

A5

A4

A3

A2

A1

A0

ROM

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

RAM

0

0

0

0

0

0

0

0

1

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

1

0

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

E/S

0

0

0

0

0

0

0

1

1

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

1

1

0

1

0

1

1

1

1

1

1

1

1

1

1

1

1

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.

'Sistemas Digitales'

  • 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.

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.

A23

A22

A21

A20

A19

A18

A17

A16

A15

A14

A13

A12

A11

A10

A9

A8

A7

A6

A5

A4

A3

A2

A1

A0

ROM

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

EPROM

0

0

0

0

0

0

0

0

1

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

1

0

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

E/S

0

0

0

0

0

0

0

1

1

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

1

1

0

1

0

1

1

1

1

1

1

1

1

1

1

1

1

RAM

0

0

0

0

0

0

0

1

1

0

1

1

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

1

0

1

0

1

0

1

1

1

1

1

1

1

1

1

1

1

1

  • 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

CAPACIDAD

COSTE EN $

A

4 M x 1 bit

14

B

1 M x 2 bit

6

C

256 k x 4 bit

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 · 'Sistemas Digitales'
224 · 8 bits · 'Sistemas Digitales'
32 chips

Necesitamos 2 bits del bus de direcciones para decodificarlos, puesto que tenemos 4 ( 22 ) bancos.

0 1 ....... 3

1

2

.

.

7

Coste = 32 · 14 +10 · 2 = 468$.

Tipo B

16 Mbytes · 'Sistemas Digitales'
224 · 8 bits · 'Sistemas Digitales'
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 · 'Sistemas Digitales'
224 · 8 bits · 'Sistemas Digitales'
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:

- 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

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

$ 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 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.

A23

A22

A21

A20

A19

A18

A17

A16

A15

A14

A13

A12

A11

A10

A9

A8

A7

A6

A5

A4

A3

A2

A1

A0

X

X

X

X

0

0

1

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

X

X

X

X

0

0

1

0

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

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.

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

'Sistemas Digitales'

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.

  • 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

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

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.

% = 'Sistemas Digitales'
= 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.

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

Espació de Direcciones ( Hex )

Tamaño en Bytes

EPROM

000000 - 000007

8

RAM

000008 - 01FFFF

128 k

NVRAM

180000 - 187FFF

32 k

Reservado expansión

200000 - 2FFFFF

1 M

DUART #1

F00000 - F0000F

16

RTC

F00010 - F0001F

16

  • Dibujar un posible esquema circuital, teniendo en cuenta la conexión de todas las señales necesarias en cada dispositivo.

A23

A22

A21

A20

A19

A18

A17

A16

A15

A14

A13

A12

A11

A10

A9

A8

A7

A6

A5

A4

A3

A2

A1

A0

EPROM

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

1

1

1

RAM

0

0

0

0

0

0

0

0

1

0

0

0

0

0

0

0

0

0

0

0

1

0

0

0

0

0

0

0

0

0

0

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

NVRAM

0

0

0

1

1

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

1

1

0

0

0

0

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

Expansión

0

0

1

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

1

0

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

DUART#1

1

1

1

1

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

1

1

1

1

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

1

1

1

1

RTC

1

1

1

1

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

1

0

0

0

0

1

1

1

1

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

1

1

1

1

1

  • 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?

A23

A22

A21

A20

A19

A18

A17

A16

A15

A14

A13

A12

A11

A10

A9

A8

A7

A6

A5

A4

A3

A2

A1

A0

X

X

X

X

1

0

1

0

X

X

X

X

X

0

0

0

0

0

0

0

0

0

0

0

X

X

X

X

1

0

1

1

X

X

X

X

X

1

1

1

1

1

1

1

1

1

1

1

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.

A23

A22

A21

A20

A19

A18

A17

A16

A15

A14

A13

A12

A11

A10

A9

A8

A7

A6

A5

A4

A3

A2

A1

A0

1

1

1

1

1

1

1

1

1

1

1

1

0

0

0

0

0

0

0

0

0

0

0

0

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

'Sistemas Digitales'

  • 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.

  • 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.

A23

A22

A21

A20

A19

A18

A17

A16

A15

A14

A13

A12

A11

A10

A9

A8

A7

A6

A5

A4

A3

A2

A1

A0

EPROM

x

X

x

X

1

1

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

x

X

x

X

1

1

0

0

0

0

0

0

0

1

0

0

1

1

1

1

1

1

1

1

RAM

x

X

x

X

1

1

0

0

0

0

0

0

1

0

0

0

0

0

0

0

0

0

0

0

x

X

x

X

1

1

0

0

0

0

0

0

1

0

0

1

1

1

1

1

1

1

1

1

DAC

x

X

x

X

1

1

0

0

0

0

0

0

0

1

1

0

0

0

0

0

0

0

0

0

'Sistemas Digitales'

  • 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:

A23

A22

A21

A20

A19

A18

A17

A16

A15

A14

A13

A12

A11

A10

A9

A8

A7

A6

A5

A4

A3

A2

A1

A0

0

0

0

0

0

0

0

0

1

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

0

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

1 0 1

0 1 1

y = FC2 ( FC1"FC0)

'Sistemas Digitales'

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.

A23

A22

A21

A20

A19

A18

A17

A16

A15

A14

A13

A12

A11

A10

A9

A8

A7

A6

A5

A4

A3

A2

A1

A0

ACIAS

X

X

X

X

0

0

0

1

X

X

X

X

X

X

X

X

0

0

0

0

0

0

0

1

X

X

X

X

0

0

0

1

X

X

X

X

X

X

X

X

0

0

0

0

1

1

1

1

PIAS

X

X

X

X

0

0

0

1

X

X

X

X

X

X

X

X

0

0

0

1

0

0

0

1

X

X

X

X

0

0

0

1

X

X

X

X

X

X

X

X

0

0

0

1

1

1

1

1

TIMER

X

X

X

X

0

0

0

1

X

X

X

X

X

X

X

X

0

0

1

0

0

0

0

1

X

X

X

X

0

0

0

1

X

X

X

X

X

X

X

X

0

0

1

0

1

1

1

1

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.

'Sistemas Digitales'

'Sistemas Digitales'

'Sistemas Digitales'

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 · 'Sistemas Digitales'
= 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 · 'Sistemas Digitales'
= 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 · 'Sistemas Digitales'
= 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 · 'Sistemas Digitales'
= 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

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

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

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.

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?

A23

A22

A21

A20

A19

A18

A17

A16

A15

A14

A13

A12

A11

A10

A9

A8

A7

A6

A5

A4

A3

A2

A1

A0

X

X

X

X

X

X

X

X

1

X

0

0

0

0

0

0

0

0

0

0

0

0

0

0

X

X

X

X

X

X

X

X

1

X

0

0

1

1

1

1

1

1

1

1

1

1

1

0

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.

'Sistemas Digitales'

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

  • 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

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

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

'Sistemas Digitales'
= 16 chips

Organización x4

'Sistemas Digitales'
= 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.

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:

'Sistemas Digitales'

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

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

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

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

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

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)+

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.

A23

A22

A21

A20

A19

A18

A17

A16

A15

A14

A13

A12

A11

A10

A9

A8

A7

A6

A5

A4

A3

A2

A1

A0

EPROM

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

1

0

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

SRAM

0

0

1

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

1

0

0

0

1

0

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

'Sistemas Digitales'




Descargar
Enviado por:Ivan
Idioma: castellano
País: España

Te va a interesar