6. DESCRIPCIÓN FUNCIONAL EXTERNA
6.3 Control del bus asíncrono(/AS, R/#W,/UDS,/LDS,/DTACK)
Este bloque esta constituido por cuatro líneas de salida más una de entrada que sirven para controlar la transferencia de datos por el bus de datos.
Habilitación de direcciones (/AS)
Es una línea triestado de salida, activa en nivel bajo y mediante la cual la CPU informa que la dirección existente en el bus de direcciones es válida. Normalmente los drivers que controlan las líneas del bus de direcciones tienen unos tiempos de propagación que difieren de una línea a otra, por tanto la utilidad de /AS está en la de asegurar, al exterior, que ha pasado el tiempo suficiente para que se hayan estabilizado los valores lógicos de las líneas del bus de direcciones.
Lectura/Escritura (R/#W)
Esta línea triestado indica el sentido del flujo de información en el bus de datos. Si el ciclo es de lectura, R/#W = 1, el bus recoge información hacia el microprocesador. Si el ciclo es de escritura, R/#W = 0, por el bus circula información procedente del microprocesador hacia la memoria o periférico.
Habilitación de datos parte alta y parta baja (/UDS y /LDS)
Son líneas de salida triestado, que junto con R/#W controlan el flujo de información en el bus de datos. Cuando se trabaja con datos de tipo byte, indican por qué parte del bus, parte alta (D15-D8) o parte baja (D7-D0) se realiza la transferencia del dato. Si A0=0, se
accede a una dirección par y /UDS está activa(/UDS=0 y /LDS=1). Si A0=1, se accede a una dirección impar y /LDS está activa (/UDS=1 y /LDS=0).
Si se accede a datos de tipo palabra, el bit A0 no tiene sentido, ya que en este caso se trabaja con todo el bus de datos, entonces /UDS=/LDS=0.
Reconocimiento de transferencia de datos (/DTACK)
Es una línea de entrada, activa en nivel bajo, que indica que la transferencia del dato ya ha sido realizada. Durante un ciclo de lectura, cuando /DTACK=0, se captura el dato y termina el ciclo de lectura. Durante un ciclo de escritura, si /DTACK=0, el dato ya ha sido escrito y termina el ciclo de escritura. En definitiva, esta señal permite configurar la velocidad de trabajo de la CPU con la memoria y los periféricos que controla.
Podemos definir los siguientes ciclos de bus en el MC68000 Ciclo de lectura
Ciclo de escritura
6.3.1 Ciclo de lectura
Durante un ciclo de lectura, el procesador recibe 1 o 2 bytes de datos por el bus
Si la instrucción especifica un tamaño de operando de palabra o palabra larga, #UDS y #LDS se activan simultáneamente para permitir el uso de las 16 líneas del bus de datos
Para operandos de tamaño palabra larga se requieren dos ciclos de lectura
Cuando el operando a leer es de tamaño byte, entonces A0 determina por qué parte del bus el procesador recibe dicho byte, activando #UDS (y dato por D15-D8) para las direcciones pares y activando #LDS (y dato por D7-D0) para las impares.
Para el ciclo de lectura se definen ocho estados. Cada estado se corresoponde con un nivel logico de la señal de reloj del procesador:
ESTADO 0 (S0): En este estado se inicia el ciclo de lectura. El procesador sitúa los valores del código de función en las salidas FC2-0 y pone a 1 la salida R/#W
ESTADO 1 (S1): En este estado, el procesador coloca la dirección válida en el bus de direcciones
ESTADO 2 (S2): En el flanco ascendente de S2, el procesador activa la salida #AS y los habilitadores de bus #UDS, #LDS en función del tamaño del dato y la dirección donde este se ubique (par o impar)
ESTADO 3 (S3): Durante este estado no se alteran ninguna señal
ESTADO 4 (S4): Durante este estado el procesador espera la señal de terminación del ciclo mediante la recepción de un 0 por su entrada #DTACK o por la activación de #BERR o de #VPA. (Si se activa esta última comienza un ciclo especial de lectura). Si no se recibe ninguna señal por estas entradas antes del flanco de bajada de S4, el procesador inserta estados de espera(ciclos de reloj completos) hasta que #DTACK,#BERR o #VPA se activen. ESTADO 5 (S5): Durante este estado no cambia ninguna señal del bus
ESTADO 6 (S6): En este estado los datos del dispositivo son mantenidos en el bus de datos ESTADO 7 (S7): En el flanco de bajada del estado 7, el procesador captura los datos del bus y desactiva #AS,#UDS y/o #LDS en el flanco de subida de S7, colocando al final de S7 el bus de direcciones en alta impedancia. Por su parte, el dispositivo externo debe haber retirado #DTACK o #BERR durante este tiempo.
6.3.2 Ciclo de escritura
Direccionamiento del dispositivo
1) Pone R/#W a 1(S0)
2) Coloca el codigo de funcion(FC2-0)(S0) 3) Coloca direccione en A23-A1 (S1) 4) Activa #AS(S2)
5) Activa #UDS y/o #LDS(S2)
Introduccion de datos
1) Decodificacion de direccion
2) Coloca el dato en D15-D8 y/o D7-D0 (dependiendo de #UDS y #LDS) 3) Activa #DTACK(no SW si en S4) Adquisicion de datos 1) Almacena datos(fin S6) 2) Desactiva #UDS y #LDS(S7) 3) Desactiva #AS(S7) Termina ciclo
1) Retira el dato de D15-D8 y/o D7-D0 2) Desactiva #DTACK
Durante un ciclo de escritura, el procesador manda bytes de datos hacia la memoria o algún dispositivo periférico.
Si la instrucción especifica un operando de tamaño palabra, el procesador activa #UDS y #LDS para habilitar las 16 líneas del bus de datos. Si el operando es de tamaño byte, en función de A0 se activará #UDS o #LDS
En el ciclo de escritura se definen ocho estados:
ESTADO 0 (S0): En este estado se inicia el ciclo de lectura. El procesador sitúa los valores del código de función en las salidas FC2-0 y pone a 1 la salida R/#W
ESTADO 1 (S1): En este estado, el procesador coloca la dirección válida en el bus de direcciones
ESTADO 2 (S2): En S2, el procesador activa la salida #AS y pone R/#W a 0.
ESTADO 3 (S3): Durante este estado el bus de datos sale de su estado de alta impedancia para mostrar el dato que será escrito.
ESTADO 4 (S4): En el flanco ascendente de S4, el procesador activa #UDS o/y #LDS. Además, durante este estado el procesador espera la señal de terminación del ciclo mediante la recepción de un 0 por su entrada #DTACK o por la activación de #BERR o de #VPA. (Si se activa esta última comienza un ciclo especial de escritura). Si no se recibe ninguna señal por estas entradas antes del flanco de bajada de S4, el procesador inserta estados de espera (ciclos de reloj completos) hasta que #DTACK,#BERR o #VPA se activen.
ESTADO 5 (S5): Durante este estado no cambia ninguna señal del bus ESTADO 6 (S6): Durante este estado no cambia ninguna señal del bus
ESTADO 7 (S7): En el flanco de bajada del estado 7, el procesador desactiva #AS,#UDS y/o #LDS y en el flanco de subida de S7, pone el bus de direcciones en alta impedancia y R/#W a 1. Por su parte, el dispositivo externo debe haber retirado #DTACK o #BERR durante este tiempo.
Direccionamiento del dispositivo
1) Coloca el codigo de funcion(FC2-0)(S0) 2) Coloca la direccion en A23-A1 (S1) 3) Activa #AS(S2)
4) Pone R/#W a 0(S2)
5) Coloca datos en D15-8 o/y D7-0 (S3)
5) Activa #UDS y/o #LDS(S4) Introduccion de datos
1) Decodificacion de direccion
2) Captura el dato de D15-D8 y/o D7-D0 (dependiendo de #UDS y #LDS)
3) Activa #DTACK(no SW si en S4)
Adquisicion de datos
1) Desactiva #UDS y #LDS(S7) 2) Desactiva #AS(S7)
3) Retira datos del bus (fin S7)
4) Pone R/#W a 1 (fin S7) Termina ciclo
1) Desactiva #DTACK
6.3.4 Conexión de chips de memoria al MC68000
En este apartado analizaremos la estructura de conexión entre el microprocesador MC68000 y la memoria. Supongamos que deseamos obtener un mapa de memoria con 64K de ROM que ocupe las direcciones más altas y 64K de RAM las más bajas. Se dispone de memorias de 32Kx8.
Conectamos las 15 líneas menos significativas del bus de direcciones del microprocesador A15-A1 al bus de direcciones de los dispositivos de memoria. Las líneas más significativas me permiten decodificar o seleccionar los distintos elementos de memoria. En concreto, para seleccionar la memoria ROM, A23-A16=1-1, y para seleccionar la RAM, A23-A16=0-0. Por tanto, /CSROM = /A23+...+/A16 y /CSRAM = A23 + ... + A16. (Hemos supuesto que las señales de selección son activas en bajo). En la siguiente figura se ha representado la conexión de la memoria ROM. Utilizamos dos memorias ROM de 32K8, una de las cuales se conecta a los 8 bits más significativos del bus de datos y la otra a los 8 bits menos significativos. Hemos considerado que las memorias tienen líneas de selección /CS y habilitadores de salida /OE.
Si /AS=0,R/#W=1,/CSROM=0, los habilitadores de chip /CS=0 están activos. En función de A1-A15 y /LDS, /UDS, se accederá al dato correspondiente. Si es de tipo palabra, /UDS=/LDS=0, y las dos memorias ROM vuelcan su contenido en el bus de datos. Si se accede a un dato de tipo byte, /LDS o /UDS determinan la memoria que vuelva su contenido.
Una estructura similar aparecerá en la selección de la memoria RAM, en cuyo caso adquiere sentido la línea de lectura/escritura.
Por último, recordamos que es misión de la circuitería externa la activación de la línea de /DTACK, para conseguir la correcta transferencia de información en los ciclos de lectura y escritura. Esta señal dependerá de la rapidez de respuesta de los dispositivos externos. Si por ejemplo tenemos memorias lentas, DTACK debe activarse cuando estas hayan colocado su
contenido en el bus o cuando ya se haya escrito la información en las mismas. Un posible esquema de un circuito que permite la generación de esta señal se puede basar en un contador que se incrementa en cada ciclo de reloj CLK del microprocesador. La salida de CY, se utiliza para generar esta señal, de forma que está se activa cuando el contador ha pasado un tiempo igual al módulo del mismo multiplicado por el periodo de la señal de reloj. El módulo del contador deberá escogerse en función de las características temporales de la memoria y periféricos, de forma que la activación del Cy del contador asegure los tiempos de lectura y escritura de estos periféricos externos. Otro posible esquema los da la utilización de circuitos de tiempo o multivibradores, que a partir de la activación de la señal /AS, genera un pulso pasado un determinado tiempo. Este tiempo puede ser programado por un resistencia y un condensador. No obstante, para memorias cuyo ciclo de lectura o escritura sea comparable o menor con los ciclos de lectura o escritura del 68000, la propia lógica combinacional que habilita el acceso a las memorias se puede utilizar como señal /DTACK.