Accelerated Graphics Port ( AGP ) es un estándar de tarjeta de expansión paralela , diseñado para conectar una tarjeta de video a un sistema informático para ayudar en la aceleración de gráficos de computadora 3D . Originalmente fue diseñado como sucesor de las conexiones de tipo PCI para tarjetas de video. Desde 2004, AGP fue eliminado progresivamente a favor de PCI Express (PCIe), que es serial , en lugar de paralelo; a mediados de 2008, las tarjetas PCI Express dominaban el mercado y solo estaban disponibles unos pocos modelos AGP, [1] con los fabricantes de GPU y los socios de placas complementarias eventualmente abandonando el soporte para la interfaz a favor de PCI Express.
AGP es un superconjunto del estándar PCI, diseñado para superar las limitaciones de PCI a la hora de satisfacer los requisitos de las tarjetas gráficas de alto rendimiento de la época. [2]
La principal ventaja de AGP es que no comparte el bus PCI , lo que proporciona una ruta punto a punto dedicada entre las ranuras de expansión y el chipset de la placa base. La conexión directa también permite velocidades de reloj más altas.
El segundo cambio importante es el uso de transacciones divididas , en las que las fases de dirección y datos están separadas. La tarjeta puede enviar muchas fases de dirección, de modo que el host pueda procesarlas en orden, evitando demoras prolongadas causadas por el bus inactivo durante las operaciones de lectura.
En tercer lugar, se simplifica el enlace del bus PCI. A diferencia de las transacciones del bus PCI, cuya longitud se negocia ciclo por ciclo utilizando las señales FRAME# y STOP#, las transferencias AGP siempre tienen una longitud de múltiplo de 8 bytes, y la longitud total se incluye en la solicitud. Además, en lugar de utilizar las señales IRDY# y TRDY# para cada palabra, los datos se transfieren en bloques de 4 ciclos de reloj (32 palabras a una velocidad AGP 8×) y solo se permiten pausas entre bloques.
Por último, AGP permite (obligatorio sólo en AGP 3.0) el direccionamiento de banda lateral , lo que significa que los buses de dirección y datos están separados, por lo que la fase de dirección no utiliza las líneas principales de dirección/datos (AD) en absoluto. Esto se hace añadiendo un bus de "dirección de banda lateral" de 8 bits adicional , sobre el cual el controlador gráfico puede emitir nuevas solicitudes AGP mientras otros datos AGP fluyen sobre las 32 líneas principales de dirección/datos (AD). Esto da como resultado un rendimiento general mejorado de los datos AGP.
Esta gran mejora en el rendimiento de lectura de memoria hace que sea práctico para una tarjeta AGP leer texturas directamente desde la RAM del sistema, mientras que una tarjeta gráfica PCI debe copiarla desde la RAM del sistema a la memoria de video de la tarjeta . La memoria del sistema se pone a disposición mediante la tabla de reasignación de direcciones gráficas (GART), que distribuye la memoria principal según sea necesario para el almacenamiento de texturas. [3] La cantidad máxima de memoria del sistema disponible para AGP se define como la apertura AGP .
La ranura AGP apareció por primera vez en placas de sistema compatibles con x86 basadas en procesadores Intel P5 Pentium y Slot 1 P6 Pentium II con Socket 7. Intel introdujo la compatibilidad con AGP con el chipset i 440LX Slot 1 el 26 de agosto de 1997, y a esto le siguió una avalancha de productos de todos los principales proveedores de placas de sistema. [4]
Los primeros chipsets Socket 7 que admitieron AGP fueron el VIA Apollo VP3 , el SiS 5591/5592 y el ALI Aladdin V. Intel nunca lanzó un chipset Socket 7 equipado con AGP. FIC presentó la primera placa de sistema AGP Socket 7 en noviembre de 1997 como el FIC PA-2012 basado en el chipset VIA Apollo VP3, seguido muy rápidamente por el EPoX P55-VP3 también basado en el chipset VIA VP3 que fue el primero en comercializarse. [5]
Los primeros chipsets de vídeo con soporte AGP incluían el Rendition Vérité V2200, 3dfx Voodoo Banshee , Nvidia RIVA 128 , 3Dlabs PERMEDIA 2, Intel i740 , ATI Rage series , Matrox Millennium II y S3 ViRGE GX/2 . Algunas de las primeras placas AGP utilizaban procesadores gráficos construidos en torno a PCI y simplemente se conectaban a AGP. Esto dio como resultado que las tarjetas se beneficiaran poco del nuevo bus, y la única mejora utilizada fue el reloj de bus de 66 MHz, con su ancho de banda resultante duplicado sobre PCI y exclusividad de bus. El i740 de Intel fue diseñado explícitamente para explotar el nuevo conjunto de características AGP; de hecho, fue diseñado para texturizar solo desde la memoria AGP, lo que hizo que las versiones PCI de la placa fueran difíciles de implementar (la RAM local de la placa tenía que emular la memoria AGP).
Microsoft introdujo por primera vez el soporte AGP en Windows 95 OEM Service Release 2 (OSR2 versión 1111 o 950B) a través del parche USB SUPPLEMENT to OSR2 . [6] Después de aplicar el parche, el sistema Windows 95 se convirtió en Windows 95 versión 4.00.950 B. El primer sistema operativo basado en Windows NT que recibió soporte AGP fue Windows NT 4.0 con Service Pack 3, introducido en 1997. El soporte de Linux para transferencias de datos rápidas mejoradas con AGP se agregó por primera vez en 1999 con la implementación del módulo de kernel AGPgart .
Con la creciente adopción de PCIe, los fabricantes de tarjetas gráficas continuaron produciendo tarjetas AGP a medida que el estándar se volvía obsoleto. A medida que las GPU comenzaron a diseñarse para conectarse a PCIe, se requirió un chip puente PCIe-AGP adicional para crear una tarjeta gráfica compatible con AGP. La inclusión de un puente y la necesidad de un diseño de tarjeta AGP independiente generaron costos adicionales para la placa.
Las GeForce 6600 y ATI Radeon X800 XL, lanzadas durante 2004-2005, fueron las primeras tarjetas puente. [7] [8] En 2009, las tarjetas AGP de Nvidia tenían un techo de la serie GeForce 7. En 2011, las tarjetas AGP con capacidad para DirectX 10 de los proveedores de AMD (Club 3D, HIS, Sapphire, Jaton, Visiontek, Diamond, etc.) incluyeron las Radeon HD 2400, 3450, 3650 , 3850, 4350, 4650 y 4670. La serie HD 5000 AGP mencionada en el software AMD Catalyst nunca estuvo disponible. Hubo muchos problemas con los controladores de revisión AGP AMD Catalyst 11.2 - 11.6 en Windows 7 con las tarjetas de video AGP de la serie HD 4000; [9] El uso de los controladores de revisión AGP 10.12 o 11.1 es una posible solución alternativa. Varios de los proveedores mencionados anteriormente ofrecen versiones anteriores de los controladores AGP.
En 2010, ningún nuevo chipset de placa base admitía AGP y pocas placas base nuevas tenían ranuras AGP, aunque algunas continuaron produciéndose con chipsets más antiguos que admitían AGP.
En 2016, la versión 1607 de Windows 10 dejó de brindar soporte para AGP. [10] [ ¿ Fuente poco confiable? ] En 2020 se consideró la posible eliminación futura del soporte para AGP de los controladores del kernel de Linux de código abierto. [11] [ Necesita actualización ]
Intel lanzó la "especificación AGP 1.0" en 1997. [13] Especificaba señales de 3,3 V y velocidades de 1× y 2×. [4] La especificación 2.0 documentaba señalización de 1,5 V, que podía utilizarse a velocidades de 1×, 2× y 4× adicionales [14] [15] y la 3.0 añadía señalización de 0,8 V, que podía funcionar a velocidades de 4× y 8×. [16] (Las velocidades de 1× y 2× son físicamente posibles, pero no se especificaron).
Las versiones disponibles se enumeran en la tabla adyacente.
Microsoft solo menciona públicamente la versión 3.5 de AGP en Universal Accelerated Graphics Port (UAGP) , que especifica la compatibilidad obligatoria con registros adicionales que se marcaron como opcionales en AGP 3.0. Los registros actualizados incluyen PCISTS, CAPPTR, NCAPID, AGPSTAT, AGPCMD, NISTAT y NICMD. Los nuevos registros obligatorios incluyen APBASELO, APBASEHI, AGPCTRL, APSIZE, NEPG, GARTLO y GARTHI.
Hay varias interfaces físicas (conectores); consulte la sección Compatibilidad.
Una extensión oficial para tarjetas que requerían más potencia eléctrica, con una ranura más larga con pines adicionales para ese propósito. Las tarjetas AGP Pro eran generalmente tarjetas de clase estación de trabajo que se usaban para acelerar aplicaciones profesionales de diseño asistido por computadora empleadas en los campos de la arquitectura, el mecanizado, la ingeniería, las simulaciones y campos similares. [17]
En un borrador de documentos se propuso un canal de 64 bits como estándar opcional para AGP 3.0, [18] pero se eliminó en la versión final del estándar.
El estándar permite la transferencia de 64 bits para lecturas, escrituras y escrituras rápidas AGP8×; transferencia de 32 bits para operaciones PCI.
Los fabricantes han producido una serie de variaciones no estándar de la interfaz AGP.
Las tarjetas AGP son compatibles con versiones anteriores y posteriores dentro de ciertos límites. Las tarjetas con claves de solo 1,5 V no se pueden instalar en ranuras de 3,3 V y viceversa, aunque existen tarjetas "universales" que se pueden instalar en cualquier tipo de ranura. También hay ranuras "universales" sin claves que aceptan ambos tipos de tarjetas. Cuando se conecta una tarjeta AGP universal en una ranura AGP universal, solo se utiliza la parte de 1,5 V de la tarjeta. Algunas tarjetas, como la serie GeForce 6 de Nvidia (excepto la 6200) o la serie Radeon X800 de ATI , solo tienen claves para 1,5 V para evitar que se instalen en placas base más antiguas sin compatibilidad con 1,5 V. Algunas de las últimas tarjetas modernas con compatibilidad con 3,3 V fueron:
Las tarjetas AGP Pro no encajan en las ranuras estándar, pero las tarjetas AGP estándar sí funcionan en una ranura Pro. Las placas base equipadas con una ranura AGP Pro universal aceptarán una tarjeta de 1,5 V o 3,3 V en la configuración AGP Pro o AGP estándar, una tarjeta AGP universal o una tarjeta AGP Pro universal.
Algunas tarjetas tienen muescas dobles por error y algunas placas base tienen ranuras completamente abiertas por error, lo que permite que se conecte una tarjeta en una ranura que no admite el voltaje de señalización correcto, lo que puede dañar la tarjeta o la placa base. Algunas tarjetas de 3,3 V antiguas con un diseño incorrecto tienen la clave de 1,5 V.
Existen algunos sistemas propietarios que no son compatibles con el estándar AGP; por ejemplo, las computadoras Apple Power Macintosh con el Apple Display Connector (ADC) tienen un conector adicional que suministra energía a la pantalla conectada. Algunas tarjetas diseñadas para funcionar con una arquitectura de CPU específica (por ejemplo, PC, Apple) pueden no funcionar con otras debido a problemas de firmware .
Mark Allen de Playtools.com hizo los siguientes comentarios sobre la compatibilidad práctica de AGP para AGP 3.0 y AGP 2.0: [22]
... nadie fabrica tarjetas AGP 3.0 y nadie fabrica placas base AGP 3.0. Al menos, ninguno de los fabricantes que he podido encontrar. Todas las tarjetas de vídeo que he podido encontrar que afirmaban ser una tarjeta AGP 3.0 eran en realidad una tarjeta AGP 3.0 universal de 1,5 V. Y todas las placas base que afirmaban ser una placa base AGP 3.0 resultaron ser una placa base AGP 3.0 universal de 1,5 V. Tiene sentido, si lo piensas, porque si alguien realmente enviara un producto orientado al consumidor que admitiera solo 0,8 voltios, terminaría con muchos clientes confundidos y una pesadilla de soporte. En el mercado de consumo, tendrías que estar loco para enviar un producto que solo admitiera 0,8 voltios.
La potencia real suministrada por una ranura AGP depende de la tarjeta utilizada. La corriente máxima extraída de los distintos raíles se proporciona en las especificaciones de las distintas versiones. Por ejemplo, si se extrae la corriente máxima de todas las fuentes y todos los voltajes están en sus límites superiores especificados, [16] : 95 una ranura AGP 3.0 puede suministrar hasta 48,25 vatios ; esta cifra se puede utilizar para especificar una fuente de alimentación de forma conservadora, pero en la práctica es poco probable que una tarjeta extraiga más de 40 W de la ranura, y muchas utilizan menos. AGP Pro proporciona una potencia adicional de hasta 110 W. Muchas tarjetas AGP tenían conectores de alimentación adicionales para suministrarles más potencia de la que podía proporcionar la ranura.
Un bus AGP es un superconjunto de un bus PCI convencional de 66 MHz y, inmediatamente después de reiniciarse, sigue el mismo protocolo. La tarjeta debe actuar como un destino PCI y, opcionalmente, puede actuar como un maestro PCI. (AGP 2.0 agregó una extensión de "escrituras rápidas" que permite escrituras PCI desde la placa base a la tarjeta para transferir datos a mayor velocidad).
Una vez que la tarjeta se inicializa mediante transacciones PCI, se permiten las transacciones AGP. Para ellas, la tarjeta siempre es el maestro AGP y la placa base siempre es el destino AGP. La tarjeta pone en cola varias solicitudes que corresponden a la fase de dirección PCI y la placa base programa las fases de datos correspondientes más adelante. Una parte importante de la inicialización es indicar a la tarjeta la cantidad máxima de solicitudes AGP pendientes que se pueden poner en cola en un momento determinado.
Las solicitudes AGP son similares a las solicitudes de lectura y escritura de memoria PCI, pero utilizan una codificación diferente en las líneas de comando C/BE[3:0] y siempre están alineadas en 8 bytes ; su dirección de inicio y longitud son siempre múltiplos de 8 bytes (64 bits). Los tres bits de orden inferior de la dirección se utilizan en cambio para comunicar la longitud de la solicitud.
Siempre que se activa la señal PCI GNT#, que otorga el bus a la tarjeta, tres bits de estado adicionales ST[2:0] indican el tipo de transferencia que se realizará a continuación. Si los bits son 0xx
, se deben transferir los datos de una transacción AGP previamente puesta en cola; si los tres bits son 111
, la tarjeta puede comenzar una transacción PCI o (si no se utiliza el direccionamiento de banda lateral) poner en cola una solicitud en banda utilizando PIPE#.
Al igual que PCI, cada transacción AGP comienza con una fase de dirección, que comunica una dirección y un código de comando de 4 bits. Sin embargo, los comandos posibles son diferentes a los de PCI:
AGP 3.0 eliminó las solicitudes de alta prioridad y los comandos de lectura largos, ya que se usaban poco. También impuso el direccionamiento de banda lateral, lo que eliminó el ciclo de dirección dual y dejó solo cuatro tipos de solicitudes: lectura de baja prioridad (0000), escritura de baja prioridad (0100), vaciado (1010) y valla (1100).
Para poner en cola una solicitud en banda, la tarjeta debe solicitar el bus mediante la señal PCI REQ# estándar y recibir GNT# más el estado del bus ST[2:0] igual a 111
. Luego, en lugar de activar FRAME# para comenzar una transacción PCI, la tarjeta activa la señal PIPE# mientras activa el comando AGP, la dirección y la longitud en las líneas C/BE[3:0], AD[31:3] y AD[2:0], respectivamente. (Si la dirección es de 64 bits, se utiliza un ciclo de dirección dual similar a PCI). Por cada ciclo en el que se activa PIPE#, la tarjeta envía otra solicitud sin esperar la confirmación de la placa base, hasta la profundidad de cola máxima configurada. El último ciclo se marca con la desactivación de REQ#, y PIPE# se desactiva en el siguiente ciclo inactivo.
Si se admite y configura el direccionamiento de banda lateral, no se utiliza la señal PIPE# (y la señal se reutiliza para otro propósito en el protocolo AGP 3.0, que requiere direccionamiento de banda lateral). En su lugar, las solicitudes se dividen en fragmentos de 16 bits que se envían como dos bytes a través del bus SBA. No es necesario que la tarjeta solicite permiso a la placa base; se puede enviar una nueva solicitud en cualquier momento siempre que la cantidad de solicitudes pendientes se encuentre dentro de la profundidad máxima de cola configurada. Los valores posibles son:
0aaa aaaa aaaa alll
10cc ccra aaaa aaaa
110r aaaa aaaa aaaa
1110 aaaa aaaa aaaa
1111 0xxx
, 1111 10xx
,1111 110x
1111 1110
1111 1111
Los bytes de dirección de banda lateral se envían a la misma velocidad que las transferencias de datos, hasta 8 veces el reloj de bus básico de 66 MHz. El direccionamiento de banda lateral tiene la ventaja de que elimina en gran medida la necesidad de ciclos de respuesta en el bus AD entre transferencias, en el caso habitual en que las operaciones de lectura superan en gran medida a las de escritura.
Al afirmar GNT#, la placa base puede indicar a través de los bits ST que se realizará a continuación una fase de datos para una solicitud en cola. Hay cuatro colas: dos prioridades (baja y alta) para cada una de las lecturas y escrituras, y cada una se procesa en orden. Obviamente, la placa base intentará completar primero las solicitudes de alta prioridad, pero no hay límite en la cantidad de respuestas de baja prioridad que se pueden entregar mientras se procesa la solicitud de alta prioridad.
Para cada ciclo en el que se afirma el GNT# y los bits de estado tienen el valor 00p
, se programa la devolución de una respuesta de lectura de la prioridad indicada. En la siguiente oportunidad disponible (normalmente el siguiente ciclo de reloj), la placa base afirmará TRDY# (objetivo listo) y comenzará a transferir la respuesta a la solicitud más antigua en la cola de lectura indicada. (Otras señales de bus PCI como FRAME#, DEVSEL# e IRDY# permanecen desafirmadas). Se transfieren hasta cuatro ciclos de reloj de datos (16 bytes en AGP 1× o 128 bytes en AGP 8×) sin esperar la confirmación de la tarjeta. Si la respuesta es más larga que eso, tanto la tarjeta como la placa base deben indicar su capacidad para continuar en el tercer ciclo afirmando IRDY# (iniciador listo) y TRDY#, respectivamente. Si alguno no lo hace, se insertarán estados de espera hasta dos ciclos después de que ambos lo hagan. (El valor de IRDY# y TRDY# en otros momentos es irrelevante y normalmente se desafirman).
Las líneas de habilitación de bytes C/BE# se pueden ignorar durante las respuestas de lectura, pero la placa base las mantiene activas (todos los bytes son válidos).
La tarjeta también puede activar la señal RBF# (buffer de lectura lleno) para indicar que temporalmente no puede recibir más respuestas de lectura de baja prioridad. La placa base se abstendrá de programar más respuestas de lectura de baja prioridad. La tarjeta debe poder seguir recibiendo el final de la respuesta actual y el primer bloque de cuatro ciclos de la siguiente, si está programado, además de cualquier respuesta de alta prioridad que haya solicitado.
Para cada ciclo en el que se activa GNT# y los bits de estado tienen el valor 01p
, se programa el envío de datos de escritura a través del bus. En la siguiente oportunidad disponible (normalmente el siguiente ciclo de reloj), la tarjeta activará IRDY# (iniciador listo) y comenzará a transferir la parte de datos de la solicitud más antigua en la cola de escritura indicada. Si los datos tienen una duración superior a cuatro ciclos de reloj, la placa base indicará su capacidad para continuar activando TRDY# en el tercer ciclo. A diferencia de las lecturas, no existe ninguna disposición para que la tarjeta retrase la escritura; si no tenía los datos listos para enviar, no debería haber puesto en cola la solicitud.
Las líneas C/BE# se utilizan con datos de escritura y la tarjeta puede utilizarlas para seleccionar qué bytes se deben escribir en la memoria.
El multiplicador en AGP 2×, 4× y 8× indica la cantidad de transferencias de datos a través del bus durante cada ciclo de reloj de 66 MHz. Dichas transferencias utilizan sincronización de reloj con una señal "estroboscópica" (AD_STB[0], AD_STB[1] y SB_STB) generada por la fuente de datos. AGP 4× agrega señales estroboscópicas complementarias.
Debido a que las transacciones AGP pueden ser tan breves como dos transferencias, a velocidades AGP 4× y 8× es posible que una solicitud se complete en medio de un ciclo de reloj. En tal caso, el ciclo se rellena con transferencias de datos ficticias (con las líneas de habilitación de bytes C/BE# retenidas sin confirmar).
El conector AGP contiene casi todas las señales PCI, además de varias adiciones. El conector tiene 66 contactos en cada lado, aunque se eliminan 4 para cada muesca de codificación. El pin 1 es el más cercano al soporte de E/S, y los lados B y A son como en la tabla, mirando hacia abajo al conector de la placa base.
Los contactos están espaciados a intervalos de 1 mm, sin embargo, están dispuestos en dos filas verticales escalonadas de modo que haya un espacio de 2 mm entre los pines en cada fila. Los contactos impares del lado A y los contactos pares del lado B están en la fila inferior (de 1,0 a 3,5 mm desde el borde de la tarjeta). Los demás están en la fila superior (de 3,7 a 6,0 mm desde el borde de la tarjeta).
Las señales PCI omitidas son:
Las señales agregadas son: