Make your own free website on Tripod.com

Logo alpertron

Página principal del sitio de Darío Alpern
See Site in English
NOTA IMPORTANTE: Desde el 4 de abril de 2001, la nueva dirección de esta página es http://www.alpertron.com.ar/80486.HTM. Por favor actualice sus bookmarks, ya que esta página no se actualizará más.

Darío Alpern - Webmaster

El microprocesador 80486

Por Dario Alejandro Alpern

Bloques que componen el 80486

Este microprocesador es básicamente un 80386 con el agregado de una unidad de punto flotante compatible con el 80387 y un caché de memoria de 8 KBytes. Por lo tanto los bloques que componen el 80486 son los siguientes:

  1. Unidad de ejecución: Incluye los registros de uso general de 32 bits, la unidad lógico-matemática y un barrel shifter de 64 bits. La unidad de ejecución está mejorada con lo que se necesita un sólo ciclo de reloj para las instrucciones más frecuentes.

  2. Unidad de segmentación: Incluye los registros de segmento, los cachés de información de descriptores y la lógica de protección. No tiene diferencias con respecto al 80386.

  3. Unidad de paginación: Es la encargada de traducir las direcciones lineales (generadas por la unidad anterior) en direcciones físicas. Incluye el buffer de conversión por búsqueda (TLB). Los últimos modelos (DX4, algunos DX2) soportan páginas de 4MB aparte de las de 4KB del 80386.

  4. Unidad de caché: La evolución de las memorias hizo que el tiempo de acceso de las mismas decrecieran lentamente, mientras que la velocidad de los microprocesadores aumentaba exponencialmente. Por lo tanto, el acceso a memoria representaba el cuello de botella. La idea del caché es tener una memoria relativamente pequeña con la velocidad del microprocesador. La mayoría del código que se ejecuta lo hace dentro de ciclos, con lo que, si se tiene el ciclo completo dentro del caché, no sería necesario acceder a la memoria externa. Con los datos pasa algo similar: también ocurre un efecto de localidad. El caché se carga rápidamente mediante un proceso conocido como "ráfaga", con el que se pueden transferir cuatro bytes por ciclo de reloj. Más abajo se da información más detallada de esta unidad.

  5. Interfaz con el bus: Incluye los manejadores del bus de direcciones (con salidas de A31-A2 y BE0# a BE3# (mediante esto último cada byte del bus de datos se habilita por separado)), bus de datos de 32 bits y bus de control.

  6. Unidad de instrucciones: Incluye la unidad de prebúsqueda que le pide los bytes de instrucciones al caché (ambos se comunican mediante un bus interno de 128 bits), una cola de instrucciones de 32 bytes, la unidad de decodificación, la unidad de control, y la ROM de control (que indica lo que deben hacer las instrucciones).

  7. Unidad de punto flotante: Incluye ocho registros de punto flotante de 80 bits y la lógica necesaria para realizar operaciones básicas, raíz cuadrada y trascendentes de punto flotante. Es tres o cuatro veces más rápido que un 386DX y 387DX a la misma frecuencia de reloj. Esta unidad no está incluida en el modelo 486SX.

Unidad de caché

Estos procesadores tienen un caché interno que almacena 8KB de instrucciones y datos excepto el DX4 y el Write-back enhanced DX4 que tienen 16KB de caché interno. El caché aumenta el rendimiento del sistema ya que las lecturas se realizan más rápido desde el caché que desde la memoria externa. Esto también reduce el uso del bus externo por parte del procesador. Éste es un caché de primer nivel (también llamado L1).

El procesador 80486 puede usar un caché de segundo nivel (también llamado L2) fuera del chip para aumentar aún más el rendimiento general del sistema.

Si bien la operación de estos cachés internos y externos son transparentes a la ejecución de los programas, el conocimiento de su funcionamiento puede servir para optimizar el software.

El caché está disponible en todos los modos de funcionamiento del procesador: modo real, modo protegido y modo de manejo del sistema.

Funcionamiento

El caché es una memoria especial, llamada memoria asociativa. Dicha memoria tiene, asociado a cada unidad de memoria, un tag, que almacena la dirección de memoria que contiene los datos que están en la unidad de memoria. Cuando se desea leer una posición de memoria mediante esta memoria asociativa, se comparan todos los tags con esta dirección. Si algún tag tiene esta dirección, se dice que hubo un acierto (cache hit en inglés) con lo que se puede leer la información asociada a ese tag. En caso contrario hay un fallo (cache miss en inglés), con lo que hay que perder un ciclo de bus para leer el dato que está en memoria externa.

En el caso del 80486, cada unidad de memoria son 16 bytes. Esta cantidad es una línea del caché. Las líneas pueden ser válidas (cuando contienen datos de la memoria principal) o inválidas (en este caso la línea no contiene información útil). Como el caché se llena por líneas completas (comenzando por direcciones múltiplos de 16), hay que tratar de no leer posiciones aleatorias de la memoria, ya que en este caso, si se leen bytes en posiciones alejadas unas de otras, el procesador usará cuatro ciclos de bus para leer 16 bytes (para llenar una línea) por cada byte que deseamos leer. Esto no es problema para el código o la pila (stack) ya que éstos se acceden generalmente de manera secuencial.

Hay dos clases de cachés: write-through y write-back (retroescritura)(implementado solamente en los modelos write-back enhanced DX2 y write-back enhanced DX4). La diferencia entre las dos radica en el momento de escritura. Las primeras siempre escriben en la memoria principal, mientras que las otras sólo escriben cuando se llena el caché y hay que desocupar una línea. Esto último aumenta el rendimiento del sistema.

Hay dos nuevos bits del registro de control CR0 que controlan el funcionamiento del caché: CD (Cache Disable, bit 30) y NW (Not write-through, bit 29). Cuando CD = 1, el 80486 no leerá memoria externa si hay una copia en el caché, si NW = 1, el 80486 no escribirá en la memoria externa si hay datos en el caché (sólo se escribirá en el caché). La operatoria normal (caché habilitado) es CD = NW = 0. Nótese que si CD = NW = 1 se puede utilizar el caché como una RAM rápida (no hay ciclos externos de bus ni para lectura ni para escritura si hay acierto en el caché). Para deshabilitar completamente el caché deberá poner CD = NW = 1 y luego ejecutar una de las instrucciones para vaciar el caché.

Existen dos instrucciones para vaciar el caché: INVD y WBINVD.

Versiones del 80486

El chip se empaqueta en el formato PGA (Pin Grid Array) de 168 pines en todas las versiones. En el caso del SX, también existe el formato PQFP (Plastic Quad Flat Pack) de 196 pines. Las frecuencias más utilizadas en estos microprocesadores son: SX: 25 y 33 MHz, DX: 33 y 50 MHz, DX2: 25/50 MHz y 33/66 MHz y DX4: 25/75 y 33/100 MHz. En los dos últimos modelos, la primera cifra indica la frecuencia del bus externo y la segunda la del bus interno. Para tener una idea de la velocidad, el 80486 DX2 de 66 MHz ejecuta 54 millones de instrucciones por segundo.

Nuevas instrucciones del 80486

BSWAP reg32 (Byte Swap): Cambia el orden de los bytes. Si antes de BSWAP el orden era B0, B1, B2, B3, después de BSWAP el orden será B3, B2, B1, B0.

CMPXCHG dest, src (Compare and Exchange): Compara el acumulador (AL o EAX) con dest. Si es igual, dest se carga con el valor de src, en caso contrario, el acumulador se carga con el valor de dest.

INVD (Invalidate Cache): Vacía el caché interno. Realiza un ciclo de bus especial que indica que deben vaciarse los cachés externos. Los datos en el caché que deben escribirse en la memoria se pierden.

INVLPG (Invalidate Translation Look-Aside Buffer Entry): Invalida una entrada de página en el buffer de conversión por búsqueda (TLB). Esta instrucción puede ser implementada de forma diferente en microprocesadores futuros.

WBINVD (Write Before Invalidate Data Cache): Realiza los cambios indicados en el caché en la memoria externa y luego lo invalida.

XADD dest, src (Exchange and Add): Suma los operandos fuente y destino poniendo el resultado en el destino. El valor original del destino se mueve a la fuente. La instrucción cambia los indicadores de acuerdo al resultado de la suma.

Además de las instrucciones mencionadas, todos los modelos del 486 excepto el SX incluyen todas las instrucciones del coprocesador matemático 80387.

Los últimos modelos (486DX4, SL) incluyen la instrucción CPUID, que se introdujo con el procesador Pentium. Además en el SL se incluye la instrucción RSM (sirve para volver del modo de manejo de energía).

Nedstat Counter