Intel 8237 es un controlador de acceso directo a memoria (DMA), que forma parte de la familia de microprocesadores MCS 85 . Permite la transferencia de datos entre la memoria y la E / S con una carga reducida en el procesador principal del sistema al proporcionar a la memoria señales de control e información de la dirección de la memoria durante la transferencia DMA.
El 8237 es un dispositivo de cuatro canales que se puede expandir para incluir cualquier número de entradas de canal DMA. El 8237 es capaz de realizar transferencias DMA a velocidades de hasta 1,6 megabytes por segundo. Cada canal es capaz de direccionar una sección completa de memoria de 64k bytes y puede transferir hasta 64k bytes con una sola programación. [1]
Se utilizó un solo 8237 como controlador DMA en el IBM PC e IBM XT originales . El IBM PC AT agregó otro 8237 en configuración maestro-esclavo, aumentando el número de canales DMA de cuatro a siete. [2] Las computadoras personales posteriores compatibles con IBM pueden tener conjuntos de chips que emulan las funciones del 8237 para compatibilidad con versiones anteriores. El Intel 8237 en realidad fue diseñado por AMD (llamado Am9517). Formaba parte de un acuerdo de licencia cruzada, que permitía a AMD fabricar procesadores Intel, lo que hizo que el diseño también estuviera disponible para Intel. Es por eso que el paquete Intel tiene impreso "(C) AMD 1980".
El 8237 funciona en cuatro modos diferentes, según la cantidad de bytes transferidos por ciclo y la cantidad de circuitos integrados utilizados:
Se puede realizar una transferencia de memoria a memoria. Esto significa que los datos se pueden transferir de un dispositivo de memoria a otro dispositivo de memoria. El registro de dirección actual del canal 0 es la fuente para la transferencia de datos y el canal 1 y la transferencia termina cuando el registro de recuento de palabras actual se convierte en 0. El canal 0 se utiliza para la actualización de DRAM en IBM PC compatibles. [3]
En el modo de inicialización automática, los valores de dirección y conteo se restauran al recibir una señal de fin de proceso (EOP). Esto sucede sin ninguna intervención de la CPU. Se utiliza para repetir la última transferencia. [3]
El recuento de terminales (TC) indica el final de la transferencia a las tarjetas ISA. Al final de la transferencia se producirá una inicialización automática configurada para ello.
En modo único, solo se transfiere un byte por solicitud. Para cada transferencia, el registro de conteo disminuye y la dirección aumenta o disminuye según la programación. Cuando el registro de conteo llega a cero, la señal TC de conteo de terminales se envía a la tarjeta. [4] [5]
La tarjeta debe generar la solicitud DMA DREQ y mantenerse activa hasta que la DMA reconozca DACK . [4]
La transferencia es activada por el DREQ que se puede desactivar una vez reconocido por Dack . La transferencia continúa hasta que se activa el final del proceso EOP (ya sea interno o externo), lo que activará el recuento de terminales TC en la tarjeta. La inicialización automática se puede programar en este modo. [4]
La transferencia es activada por DREQ y reconocida por DACK y continúa hasta que TC , EOP externo o DREQ quedan inactivos. Solo el TC o el EOP externo pueden activar la inicialización automática si está programado. [4]
Los registros internos utilizados en el 8237 para la transferencia de datos son los siguientes:
Como miembro de la familia de dispositivos Intel MCS-85, el 8237 es un dispositivo de 8 bits con direccionamiento de 16 bits. Sin embargo, es compatible con el 8086 / 88microprocesadores. Los modelos IBM PC y PC XT (tipos de máquina 5150 y 5160) tienen una CPU 8088 y una arquitectura de bus del sistema de 8 bits; este último interactúa directamente con el 8237, pero el 8088 tiene un bus de direcciones de 20 bits, por lo que se agregan cuatro pestillos de dirección adicionales de 4 bits, uno para cada canal DMA, junto con el 8237 para aumentar los contadores de direcciones. Sin embargo, debido a que estos pestillos externos están separados de los contadores de direcciones 8237, nunca se incrementan o disminuyen automáticamente durante las operaciones de DMA, lo que hace imposible realizar una operación de DMA a través de un límite de direcciones de 64 KiB. Los intentos de cruzar un límite de 64 KiB en una transferencia DMA se ajustarán a un bloque de memoria de 64 KiB. (Por ejemplo, si un canal DMA y el pestillo de dirección asociado se programaron para transferir 256 bytes a direcciones ascendentes comenzando en la dirección 0x3FF8C,en lugar de transferir a las direcciones 0x3FF8C a 0x4008B, los datos se transferirían a las direcciones 0x3FF8C a 0x3FFFF y luego a 0x30000 a 0x3008B).
IBM PC AT (tipo de máquina 5170) y 100% compatibles utilizan una CPU 80286 y una arquitectura de bus de sistema de 16 bits. Además del 8237 de los modelos PC y XT, se agrega un segundo 8237 en cascada para transferencias DMA de 16 bits. Esto es posible, a pesar de que el 8237 es un dispositivo de 8 bits, porque el 8237 realiza transferencias entre un puerto de E / S y la memoria como transferencias "fly-by" en las que los datos se colocan en el bus por la memoria de origen o I / O O y leído directamente al mismo tiempo por el puerto de E / S de destino o la memoria, sin ser manejado por el 8237. Para este modo de transferencia, el ancho del bus de datos es esencialmente inmaterial para el 8237 (siempre que sea conectado a un bus de datos de al menos 8 bits de ancho, para programar los registros 8237). El segundo 8237 en una PC de clase AT proporciona tres canales DMA de 16 bits (sus canales 1 a 3,canales con nombre 5 a 7 en el PC AT); su canal 0 (llamado canal 4 en el PC AT) se usa en modo cascada para conectar el 8237 para DMA de 8 bits como el "esclavo" en la disposición en cascada; el 8237 que proporciona los canales de 16 bits es el "maestro". Para poder direccionar palabras de 16 bits, se conecta al bus de direcciones de tal manera que cuenta direcciones pares (0, 2, 4, ...) en lugar de direcciones individuales. Como el primer 8237, está aumentado con cuatro registros de extensión de dirección. En una PC de clase AT, los ocho registros de aumento de direcciones tienen un ancho de 8 bits, por lo que se pueden especificar direcciones completas de 24 bits (el tamaño del bus de direcciones 80286). Las transferencias de DMA en cualquier canal aún no pueden cruzar un límite de 64 KiB. (El DMA de 16 bits está limitado a 32,768 palabras de 16 bits, aunque un canal DMA puede contar hasta 65536 direcciones;el bit más significativo del contador de direcciones de un canal DMA de 16 bits se ignora.) Debido a que el modo DMA de memoria a memoria 8237 opera transfiriendo un byte desde la ubicación de la memoria de origen a un registro interno temporal de 8 bits en el 8237 y luego desde el registro temporal a la ubicación de la memoria de destino, este modo no se pudo usar para DMA de memoria a memoria de 16 bits, ya que el registro temporal no es lo suficientemente grande. Además, DMA de memoria a memoria de 16 bits requeriría el uso del canal 4, en conflicto con su uso para conectar en cascada el 8237 que maneja los canales DMA de 8 bits. Sin embargo, en el AT, el canal 0 de DMA de 8 bits ya no se usa para la actualización de DRAM, ya que ha sido reemplazado por una lógica de actualización especializada, por lo que debería ser posible realizar DMA de memoria a memoria de 8 bits utilizando los canales 0 y 1 sin interrumpiendo la actualización de la DRAM.) Debido a que el modo DMA de memoria a memoria del 8237 opera transfiriendo un byte desde la ubicación de la memoria de origen a un registro interno temporal de 8 bits en el 8237 y luego desde el registro temporal a la ubicación de la memoria de destino, este modo no se pudo usar para DMA de memoria a memoria de 16 bits, ya que el registro temporal no es lo suficientemente grande. Además, DMA de memoria a memoria de 16 bits requeriría el uso del canal 4, en conflicto con su uso para conectar en cascada el 8237 que maneja los canales DMA de 8 bits. Sin embargo, en el AT, el canal 0 de DMA de 8 bits ya no se usa para la actualización de DRAM, ya que ha sido reemplazado por una lógica de actualización especializada, por lo que debería ser posible realizar DMA de memoria a memoria de 8 bits utilizando los canales 0 y 1 sin interrumpiendo la actualización de la DRAM.) Debido a que el modo DMA de memoria a memoria del 8237 funciona transfiriendo un byte desde la ubicación de la memoria de origen a un registro interno temporal de 8 bits en el 8237 y luego desde el registro temporal a la ubicación de la memoria de destino, este modo no se pudo utilizar para DMA de memoria a memoria de 16 bits, ya que el registro temporal no es lo suficientemente grande. Además, DMA de memoria a memoria de 16 bits requeriría el uso del canal 4, en conflicto con su uso para conectar en cascada el 8237 que maneja los canales DMA de 8 bits. Sin embargo, en el AT, el canal 0 de DMA de 8 bits ya no se usa para la actualización de DRAM, ya que ha sido reemplazado por una lógica de actualización especializada, por lo que debería ser posible realizar DMA de memoria a memoria de 8 bits utilizando los canales 0 y 1 sin interrumpiendo la actualización de la DRAM.ya que el registro temporal no es lo suficientemente grande. Además, DMA de memoria a memoria de 16 bits requeriría el uso del canal 4, en conflicto con su uso para conectar en cascada el 8237 que maneja los canales DMA de 8 bits. Sin embargo, en el AT, el canal 0 de DMA de 8 bits ya no se usa para la actualización de DRAM, ya que ha sido reemplazado por una lógica de actualización especializada, por lo que debería ser posible realizar DMA de memoria a memoria de 8 bits utilizando los canales 0 y 1 sin interrumpiendo la actualización de la DRAM.ya que el registro temporal no es lo suficientemente grande. Además, DMA de memoria a memoria de 16 bits requeriría el uso del canal 4, en conflicto con su uso para conectar en cascada el 8237 que maneja los canales DMA de 8 bits. Sin embargo, en el AT, el canal 0 de DMA de 8 bits ya no se usa para la actualización de DRAM, ya que ha sido reemplazado por una lógica de actualización especializada, por lo que debería ser posible realizar DMA de memoria a memoria de 8 bits utilizando los canales 0 y 1 sin interrumpiendo la actualización de la DRAM.por lo que debería ser posible realizar DMA de memoria a memoria de 8 bits utilizando los canales 0 y 1 sin interrumpir la actualización de la DRAM.por lo que debería ser posible realizar DMA de memoria a memoria de 8 bits utilizando los canales 0 y 1 sin interrumpir la actualización de la DRAM.
El diseño de DMA basado en 8237 en PC AT compatibles no se actualizó con el cambio a las CPU de 32 bits y las arquitecturas de bus del sistema de 32 bits. En consecuencia, una limitación en estas máquinas es que los controladores DMA 8237 con sus registros de extensión de "página" de direcciones acompañantes solo pueden direccionar 16 MiB de memoria, de acuerdo con el diseño original orientado alrededor de la CPU 80286, que a su vez tiene esta misma limitación de direccionamiento. [6]Esto significa que para otras áreas de memoria, los datos deben ser transferidos primero por DMA desde el dispositivo de E / S a un búfer intermedio en los primeros 16 MiB del espacio de direcciones físicas, y luego movidos a la memoria final por la CPU; o, en la otra dirección, debe ser transferido de la memoria inicial al búfer intermedio por la CPU antes de ser transferido por DMA desde ese búfer al dispositivo de E / S. Esta técnica se llama "búfer de rebote" . En general, pierde cualquier beneficio de velocidad general asociado con DMA, pero puede ser necesario si DMA debe acceder a un periférico debido a requisitos de temporización exigentes o inflexibilidad de la interfaz de hardware.
En la serie de computadoras PS / 2 , IBM actualizó el hardware DMA para admitir datos y direcciones de 32 bits en algunos sistemas con CPU 80386, pero lo hicieron reemplazando el 8237 con un nuevo diseño de controlador DMA. El nuevo diseño incluye un modo de compatibilidad 8237 para compatibilidad descendente con PC AT.
Aunque este dispositivo puede no aparecer como un componente discreto en los sistemas informáticos personales modernos, sí aparece dentro de los conjuntos de chips del controlador del sistema. Por ejemplo, el PIIX integró dos controladores 8237 para bus ISA DMA. [7] [8]
Número de modelo | Velocidad de reloj | Velocidad de transferencia [lista 1] | Precio (USD) [lista 2] |
---|---|---|---|
8237 | 3 MHz | ||
8237-2 | 5 MHz | 1,6 mps | $ 20.00 [9] |