Tutorı́a 2. Banco de memoria de 8 y 16 bits (8086) RESUMEN Cuando el procesador opera en modo mı́nimo, éste genera las señales de control para la memoria y los dispositivos de E/S. [1, pág. 292]. Para utilizar el 8088/8086 en modo mı́nimo, se deben de utilizar diversos dispositivos que cumplen con funciones primordiales para el funcionamiento adecuado del procesador y el correcto manejo de memoria y periféricos. En primer lugar, se utiliza un generador de reloj, el 8284A que además de cumplir con esta función, proporciona sincronización de RESET, sincronización READY y una señal de reloj de periférico al nivel de TTL [1, pág. 293]. Otra necesidad al emplear este microprocesador, es el de demultiplexar y buferizar las señales de los buses de dirección y datos. El 8088/8086 permite mapear hasta 1MB de memoria, por lo que emplea un bus de direcciones de 20 bits y un bus de datos de 8 bits para el 8088 y de 16 bits para el 8086. En el caso del 8088, los 8 bits menos significativos del bus de direcciones se encuentran multiplexados con el bus de datos, estos pines se identifican como AD7 − AD0 . Por lo tanto, se utilizan dispositivos de enclavamiento (latches) para demultiplexar estas señales. Lo mismo ocurre con A19 − A16 , que se encuentran multiplexadas con las señales de estado S6 − S3 . Las señales A15 − A8 son independientes, sin embargo, ya que se el bus tiene más de 10 cargas unitarias, se deben de pasar por un búfer [1, pág. 298]. Los latches cumplen esta función ademas de retener datos, por lo cual no es necesario usar un búfer si se utiliza un latch. Para el 8086, la diferencia radica en que al tener un bus de datos de 16 bits, este se multiplexa con los 16 bits del bus de direcciones que comprende desde AD15 − AD0 . El 8086 organiza la memoria lógica en dos bancos de memoria: el banco bajo para las direcciones impares, y el banco alto para las direcciones pares. Esto debido a que el 8086 tiene un bus de datos de 16 bits, necesita poder realizar transferencias de memoria tanto en 8 bits como en 16 bits en un solo ciclo de lectura o escritura. Para lograr esto, se incluye una señal BHE (Bus High Enable) en el procesador, que en conjunto con A0 del bus de direcciones permiten seleccionar el banco (o ambos bancos) de memoria adecuados. 1 Tutorı́a 2. Banco de memoria de 8 y 16 bits (8086) Figura 1: Organización de la memoria lógica en 8086 Existen otros dispositivos que se utilizan como parte del sistema mı́nimo. Por ejemplo, cuando se van a utilizar tanto elementos de memoria como de Entrada/Salida para comunicarse con el usuario u otros sistemas, es importante proveer de señales de control de escritura y lectura para cada tipo de dispositivo. Por esta razón se suele implementar un decodificador de control. Cuando se habla de banco de memoria o interfaz de memoria, se debe de identificar dos tipos de memoria principales: la memoria de sólo lectura (ROM) y la memoria de acceso aleatorio (RAM). La memoria ROM se utiliza para contener datos permanentes del sistema y software. Por otro lado, la memoria RAM se accede para almacenar datos en tiempo de ejecución y software de aplicaciones. Algunas veces los elementos fı́sicos de memoria disponibles no son suficientes de modo que se pueda implementar toda la memoria requerida en un sólo dispositivo. Por esta razón, se utiliza un decodificador de memoria que se encarga de asignar a cada dispositivo de memoria fı́sica una parte de la memoria lógica. 2 Tutorı́a 2. Banco de memoria de 8 y 16 bits (8086) PRÁCTICA DE DISEÑO DE BANCO DE MEMORIA CON 8088 y 8086 Para fin didáctico, en este caso se diseñará el banco de memoria de una microcomputadora tanto con un procesador 8088 (8 bits de bus de datos) y un 8086 (16 bits de bus de datos) para observar las diferencias entre el diseño de ambos bancos de memoria. Las especificaciones de diseño son la siguientes: Frecuencia de operación del sistema de 8 Mhz. Implementar lógica de demultiplexación de buses y enclavamiento de señales Usar un generador de reloj 8284A para el microprocesador. Implementar memoria de código de programa en las direcciones E0000H − F F F F F H del mapa de memoria total. Implementar un solo segmento de 64 KB de memoria de datos. Este único segmento debe contener los vectores de interrupción del microprocesador para cumplir con las especificaciones de Intel. Para desarrollar y demostrar la solución de esta etapa debe realizar lo siguiente: 1. Realizar el mapa de memoria fı́sico y lógico. 2. Realizar el diseño del decodificador para la selección de memoria y el decodificador de señales de control de lectura/escritura. Para esto debe de mostrar un diagrama de bloques con las correspondientes señales de entrada y salida de cada uno de los decodificadores, y ademas, debe de justificar los diagramas mediante su respectiva tabla de verdad. 3. Realizar el circuito esquemático con la conexión fı́sica del CPU con: el generador de reloj, demultiplexación de los buses de datos y direcciones, enclavamiento de señales de control, dispositivos de memoria y decodificadores de selección de memoria y de señales de control de escritura y lectura. 3 Tutorı́a 2. Banco de memoria de 8 y 16 bits (8086) SOLUCIÓN 1. 1. Mapeo de memoria Para realizar el mapeo de la memoria requerida, hay que cumplir con una restricción importante predispuesta por el fabricante del procesador. En la hoja de datos del 8088 de Intel, se indica que existen localidades de memoria reservadas por el procesador tanto en memoria ROM como en memoria RAM [2, pág. 7]. Estas localidades comprenden en memoria ROM las direcciones FFFF0H hasta FFFFFH para vector de reset, y en RAM las localidades desde 00000H hasta 003FFH para los vectores de interrupciones. Estos 256KB para interrupciones constan de vectores de interrupción con 4 bytes cada uno, que contienen 2 bytes para la dirección del segmento y 2 bytes para el offset. El usuario debe como parte de la programación asignar estos valores para el correcto funcionamiento de las interrupciones que vaya a utiilizar. El mapeo de memoria lógica representa la ubicación de los segmentos de memoria de código (ROM) y de datos (RAM) en el espacio de 1MB que puede direccionar el microprocesador. La figura 2 muestra el mapa de memoria lógica a implementar en el caso de estudio. El mismo consta del espacio de memoria ROM requerido que va desde E0000H hasta FFFFFH, es decir, 128KB. La memoria RAM debe ser de 64KB en un sólo bloque, y para cumplir con la restricción de Intel, se coloca desde la dirección 00000H. 4 Tutorı́a 2. Banco de memoria de 8 y 16 bits (8086) Figura 2: Mapa de memoria lógica Para realizar un mapeo que comprenda los dispositivos reales de memoria para implementar el diseño, se debe tomar en cuenta la cantidad de memoria que estos chips pueden manejar: Cuadro 1: Dispositivos de memoria Dispositivo 27512 62256 Tipo de memoria EPROM SRAM Cantidad de memoria 64KB x 8 32KB x 8 Considerando la capacidad de estos dispositivos, se puede realizar un mapa de memoria más completo conforme a la implementación del diseño. Este es el mapa fı́sico y se debe de concebir diferente para el 8088 y el 8086. En el caso del 8088, se necesitan dos chips de cada tipo de memoria para lograr alcanzar la memoria deseada. Como la arquitectura es de 8 bits y las memorias también lo son, esto permite que su implementación sea directa. La figura 3 muestra cómo para implementar cada segmento de memoria con 8088. 5 Tutorı́a 2. Banco de memoria de 8 y 16 bits (8086) Figura 3: Mapa de memoria fı́sica para 8088 Como en el 8086 la memoria se organiza en dos bancos de memoria, es necesario que cada segmento de memoria se encuentre dividido en dos segmentos de la mitad de la memoria. En este caso se pueden utilizar la misma cantidad de dispositivos de memoria RAM y ROM, pero la conexión difiere tanto para el bus de direcciones: 6 Tutorı́a 2. Banco de memoria de 8 y 16 bits (8086) Figura 4: Mapa de memoria fı́sica para 8086 Para realizar la tabla de verdad se debe de tomar en cuenta las lı́neas del bus de direcciones que ocupa cada memoria. Ası́ entonces, la parte del bus de direcciones más alta que no soporten las memorias, es la que será clave para su correcta selección por medio del decodificador de memoria. El 62256 se direcciona con 15 bits, mientras que el 27512 se direcciona con 16 bits. En el caso del 8088 la tabla de verdad queda como la figura 5, se observa que se separa cada memoria la cual guarda un espacio de todo el bloque de memoria. En 8086 la tabla varı́a ligeramente, puesto que en este caso cada bloque de memoria esta conformado por dos memorias cada una con las direcciones pares e impares, tal como se observa en la figura 6. 7 Tutorı́a 2. Banco de memoria de 8 y 16 bits (8086) Figura 5: Tabla de verdad de la memoria lógica en 8 bits Figura 6: Tabla de verdad de la memoria lógica en 16 bits 2. 2.1. 2. Diseño de decodificadores de memoria y de señales de control Decodificador de memoria El decodificador utiliza las direcciones de memoria más altas del procesador que los chips de memoria no pueden manejar, de manera que se logra la convergencia entre el mapeo de memoria lógica y fı́sica. Además este decodificador está controlado por la señal IO/M (en 8 Tutorı́a 2. Banco de memoria de 8 y 16 bits (8086) 8088) o M /IO (en 8086), la cual es utilizada por el procesador para definir cuándo se debe acceder a la memoria o a un dispositivo de entrada/salida. Ası́, se logra decodificar las señales de selección de cada chip (chip select). La figura 7 muestra el diagrama de bloques de señales de este decodificador en 8088. Importante!: Para saber cuales lı́neas de direcciones son necesarias para el decodificador de memoria, identifique cual es el dispositivo de memoria con menor capacidad. Las lı́neas del bus de direcciones del procesador que sobren para controlar este dispositivo serán las que se usen para el decodificador. En el caso de 8088, como el 62256 utiliza hasta A14 , el decodificador ocupará las lı́neas A19 − A15 . Figura 7: Diagrama de bloque del decodificador de memoria en 8088 La tabla de verdad que justifica este decodificador se muestra a continuación: Figura 8: Tabla de verdad del decodificador de memoria en 8088 En el caso del 8086, para poder utilizar ambos bancos de memoria, bajo y alto, se utiliza la señal BHE en conjunto con A0 para realizar la selección de los bancos. Estas señales por lo tanto se incluyen en el decodificador de memoria, tal como se observa en la figura 9. Su tabla de la verdad se muestra en la figura 10. 9 Tutorı́a 2. Banco de memoria de 8 y 16 bits (8086) Figura 9: Diagrama de bloque del decodificador de memoria en 8086 Figura 10: Tabla de verdad del decodificador de memoria en 8086 2.2. Decodificador de señales de control escritura/lectura Este decodificador se utiliza para separar las señales que se utilizan en la escritura o lectura ya sea de un dispositivo de memoria o, por otro lado, de un dispositivo de entrada/salida. Como entradas se utilizan las señales del microprocesador RD y W R para cada tipo de transferencia, IO/M para indicar qué clase de dispositivo el procesador debe acceder, y además se conecta la señal HLDA, utilizada cuando existe un dispositivo periférico (como un DMA) que provee externamente las señales de control para el control de los buses de datos y direcciones, por lo cual inhabilitarı́a las señales de control del procesador. La tabla de verdad de este decodificador se muestra a continuación: Recuerde que este decodificador nunca se ve afectado por la cantidad o los tipos de memorias que se vayan a implementar. Observe que cada una de las señales sólo se activa en un 10 Tutorı́a 2. Banco de memoria de 8 y 16 bits (8086) Figura 11: Diagrama de bloque del dcodificador de control de señales de escritura y lectura Figura 12: Tabla de verdad del decodificador de control estado especı́fico: cuando el microprocesador envı́a sólo una petición de lectura o de escritura, pero no ambas ni ninguna. Además cuando HLDA está activo se deben de liberar las señales, por lo cual se conectan a un ’244 (buffer) después del decodificador y para asi poder configurarlas en alta impedancia cuando se requiere. 3. Diagrama esquemático El diagrama esquemático debe de llevar la conexión fı́sica del CPU con el generador de reloj (señales de CLK, READY y RESET), demultiplexación de los buses de datos y direcciones (con latches), enclavamiento de señales de control (buffer), todas las memorias SRAM y EPROM, y tanto el decodificador de selección de memoria ası́ como el de señales de control de escritura y lectura. Consejo: Antes de realizar el diagrama esquemático: 11 Tutorı́a 2. Banco de memoria de 8 y 16 bits (8086) Haga un planeamiento de donde colocar todos los dispositivos. Extienda los buses de datos y direcciones lo necesario para conectar las memorias. Etiquete todas las señales y los bloques, especialmente cuando se necesita utilizar una señal de un extremo a otro del esquemático. Referencias [1] Brey, B.: Microprocesadores Intel, 7ma edición. Pearson Educación de México, 2006. [2] Intel: 8088 8-BIT HMOS MICROPROCESSOR, Data sheet, August 1990. [3] Carvajal, J.: Interfaz de memoria con 8086/8088, ITCR, Curso Estructura de Microprocesadores, 2009. 12