stringtranslate.com

Interconexión de componentes periféricos

La interconexión de componentes periféricos ( PCI ) [3] es un bus de computadora local para conectar dispositivos de hardware en una computadora y es parte del estándar PCI Local Bus. El bus PCI admite las funciones que se encuentran en un bus de procesador , pero en un formato estandarizado que es independiente del bus nativo de cualquier procesador . Los dispositivos conectados al bus PCI aparecen ante un maestro de bus como conectados directamente a su propio bus y se les asignan direcciones en el espacio de direcciones del procesador . [4] Es un bus paralelo , síncrono a un único reloj de bus . Los dispositivos conectados pueden tomar la forma de un circuito integrado instalado en la placa base (llamado dispositivo plano en la especificación PCI) o una tarjeta de expansión que cabe en una ranura. El bus local PCI se implementó por primera vez en PC compatibles con IBM , donde desplazó la combinación de varias ranuras lentas de arquitectura estándar industrial (ISA) y una ranura rápida de bus local VESA (VLB) como configuración de bus. Posteriormente se adoptó para otros tipos de computadoras. Las tarjetas PCI típicas utilizadas en las PC incluyen: tarjetas de red , tarjetas de sonido , módems , puertos adicionales como el Universal Serial Bus ( USB ) o serie , tarjetas sintonizadoras de TV y adaptadores de host para unidades de disco duro . Las tarjetas de video PCI reemplazaron a las tarjetas ISA y VLB hasta que las crecientes necesidades de ancho de banda superaron las capacidades de PCI. La interfaz preferida para las tarjetas de video se convirtió en el Puerto de gráficos acelerados (AGP), un superconjunto de PCI, antes de dar paso a PCI Express. [5]

La primera versión de PCI que se encontró en las computadoras de escritorio minoristas fue un bus  de 32 bits que usaba un reloj de bus de 33 MHz y señalización de 5 V, aunque el estándar PCI 1.0 también incluía una variante de 64 bits . [ se necesita aclaración ] Tienen una muesca de ubicación en la tarjeta. La versión 2.0 del estándar PCI introdujo ranuras de 3,3 V, físicamente distinguidas por un conector físico invertido para evitar la inserción accidental de tarjetas de 5 V. Las tarjetas universales, que pueden funcionar con cualquier voltaje, tienen dos muescas. La versión 2.1 del estándar PCI introdujo la operación opcional de 66 MHz. Una variante de PCI orientada al servidor, PCI Extended ( PCI-X ), operaba a frecuencias de hasta 133 MHz para PCI-X 1.0 y hasta 533 MHz para PCI-X 2.0. En la versión 2.2 de la especificación PCI se introdujo un conector interno para tarjetas de portátiles, llamado Mini PCI . El bus PCI también se adoptó para un conector estándar externo para portátiles: el CardBus . [6] La primera especificación PCI fue desarrollada por Intel , pero el desarrollo posterior del estándar pasó a ser responsabilidad del PCI Special Interest Group ( PCI-SIG ). [7]

PCI y PCI-X a veces se denominan PCI paralelo o PCI convencional [8] para distinguirlos tecnológicamente de su sucesor más reciente PCI Express , que adoptó una arquitectura serial basada en carriles. [9] [10] El apogeo de PCI en el mercado de las computadoras de escritorio fue aproximadamente entre 1995 y 2005. [9] PCI y PCI-X se han vuelto obsoletos para la mayoría de los propósitos; sin embargo, a partir de 2020, todavía son comunes en algunas computadoras de escritorio modernas por motivos de compatibilidad con versiones anteriores y el bajo costo relativo de producción. Otra aplicación moderna común de PCI paralelo es en las PC industriales , donde muchas tarjetas de expansión especializadas, utilizadas aquí, nunca hicieron la transición a PCI Express, al igual que con algunas tarjetas ISA. Muchos tipos de dispositivos que antes estaban disponibles en tarjetas de expansión PCI ahora se integran comúnmente en placas base o están disponibles en versiones USB y PCI Express.

Historia

Una tarjeta PCI típica de 32 bits y 5 V, en este caso, un adaptador SCSI de Adaptec
Una placa base con dos ranuras PCI de 32 bits y dos tamaños de ranuras PCI Express

El trabajo en PCI comenzó en Intel Architecture Labs (IAL, también Architecture Development Lab) c.  1990 . Un equipo compuesto principalmente por ingenieros de IAL definió la arquitectura y desarrolló una plataforma y un conjunto de chips de prueba de concepto (Saturn) en asociación con equipos de los sistemas de PC de escritorio de la empresa y organizaciones de productos lógicos centrales.

PCI se empezó a utilizar inmediatamente en servidores, reemplazando la arquitectura Micro Channel (MCA) y la arquitectura estándar extendida de la industria (EISA) como el bus de expansión de servidor preferido. En las PC convencionales, PCI tardó más en reemplazar a VLB y no obtuvo una penetración significativa en el mercado hasta finales de 1994 en las PC Pentium de segunda generación . En 1996, VLB estaba prácticamente extinto y los fabricantes habían adoptado PCI incluso para las computadoras Intel 80486 (486). [11] EISA continuó utilizándose junto con PCI hasta el año 2000. Apple Computer adoptó PCI para computadoras profesionales Power Macintosh (reemplazando a NuBus ) a mediados de 1995, y la línea de productos de consumo Performa (reemplazando LC Processor Direct Slot (PDS)) a mediados de 1995. 1996.

Fuera del mercado de servidores, la versión de 64 bits de PCI simple siguió siendo poco común en la práctica, [12] aunque fue utilizada, por ejemplo, por todas las computadoras Power Macintosh G3 y G4 (post-iMac) . [13]

Las revisiones posteriores de PCI agregaron nuevas características y mejoras de rendimiento, incluido un estándar de 66  MHz 3,3  V y PCI-X de 133 MHz , y la adaptación de la señalización PCI a otros factores de forma. Tanto PCI-X 1.0b como PCI-X 2.0 son compatibles con algunos estándares PCI. Estas revisiones se utilizaron en el hardware del servidor, pero el hardware de PC de consumo siguió siendo casi todo de 32 bits, 33 MHz y 5 voltios.

El PCI-SIG introdujo el PCI Express serie en c.  2004 . Desde entonces, los fabricantes de placas base han incluido progresivamente menos ranuras PCI a favor del nuevo estándar. Muchas placas base nuevas no proporcionan ninguna ranura PCI, a finales de 2013. [ cita necesaria ]

Configuración automática

PCI proporciona espacios de direcciones de puertos de E/S asignados en memoria y memoria separada para la familia de procesadores x86 , de 64 y 32 bits , respectivamente. Las direcciones en estos espacios de direcciones se asignan mediante software. Un tercer espacio de direcciones, llamado Espacio de configuración PCI , que utiliza un esquema de direccionamiento fijo, permite que el software determine la cantidad de memoria y espacio de direcciones de E/S que necesita cada dispositivo. Cada dispositivo puede solicitar hasta seis áreas de espacio de memoria o espacio de puerto de entrada/salida (E/S) a través de sus registros de espacio de configuración.

En un sistema típico, el firmware (o sistema operativo ) consulta todos los buses PCI en el momento del inicio (a través del espacio de configuración PCI ) para averiguar qué dispositivos están presentes y qué recursos del sistema (espacio de memoria, espacio de E/S, líneas de interrupción, etc. ) cada uno necesita. Luego asigna los recursos y le dice a cada dispositivo cuál es su asignación.

El espacio de configuración PCI también contiene una pequeña cantidad de información sobre el tipo de dispositivo, lo que ayuda al sistema operativo a elegir los controladores de dispositivo, o al menos a dialogar con un usuario sobre la configuración del sistema.

Los dispositivos pueden tener una memoria de solo lectura (ROM) integrada que contiene código ejecutable para procesadores x86 o PA-RISC , un controlador de firmware abierto o una ROM opcional . Por lo general, son necesarios para los dispositivos utilizados durante el inicio del sistema, antes de que el sistema operativo cargue los controladores de dispositivo.

Además, existen temporizadores de latencia PCI que son un mecanismo para que los dispositivos PCI Bus-Mastering compartan el bus PCI de manera justa. "Justo" en este caso significa que los dispositivos no utilizarán una porción tan grande del ancho de banda del bus PCI disponible que otros dispositivos no puedan realizar el trabajo necesario. Tenga en cuenta que esto no se aplica a PCI Express.

Cómo funciona esto es que cada dispositivo PCI que puede operar en modo bus maestro debe implementar un temporizador, llamado Temporizador de Latencia, que limita el tiempo que ese dispositivo puede mantener el bus PCI. El temporizador comienza cuando el dispositivo adquiere propiedad del bus y cuenta regresivamente al ritmo del reloj PCI. Cuando el contador llega a cero, se requiere que el dispositivo libere el bus. Si no hay otros dispositivos esperando a ser dueños del autobús, es posible que simplemente vuelva a tomar el autobús y transfiera más datos. [dieciséis]

Interrumpe

Los dispositivos deben seguir un protocolo para que las líneas de solicitud de interrupción (IRQ) puedan compartirse. El bus PCI incluye cuatro líneas de interrupción, INTA# a INTD#, todas las cuales están disponibles para cada dispositivo. Hasta ocho dispositivos PCI comparten la misma línea IRQ (LNKA a LNKH) en sistemas x86 habilitados para APIC . Las líneas de interrupción no están conectadas en paralelo como las otras líneas de bus PCI. Las posiciones de las líneas de interrupción rotan entre las ranuras, por lo que lo que aparece para un dispositivo como la línea INTA# es INTB# para el siguiente y INTC# para el siguiente. Los dispositivos de función única generalmente usan su INTA# para la señalización de interrupciones, por lo que la carga del dispositivo se distribuye de manera bastante uniforme entre las cuatro líneas de interrupción disponibles. Esto alivia un problema común con las interrupciones compartidas.

La asignación de líneas de interrupción PCI a líneas de interrupción del sistema, a través del puente de host PCI, depende de la implementación. El firmware específico de la plataforma o el código del sistema operativo deben saber esto y configurar el campo "línea de interrupción" en el espacio de configuración de cada dispositivo indicando a qué IRQ está conectado.

Las líneas de interrupción PCI se activan por nivel . Se eligió esto en lugar de la activación por flanco para obtener una ventaja al dar servicio a una línea de interrupción compartida y por su solidez: las interrupciones activadas por flanco son fáciles de pasar por alto.

Las revisiones posteriores de la especificación PCI agregan soporte para interrupciones señalizadas por mensajes . En este sistema, un dispositivo señala su necesidad de servicio realizando una escritura en la memoria, en lugar de afirmar una línea dedicada. Esto alivia el problema de la escasez de líneas de interrupción. Incluso si los vectores de interrupción todavía se comparten, no sufre los problemas de intercambio de las interrupciones activadas por nivel. También resuelve el problema de enrutamiento, porque la escritura en memoria no se modifica de manera impredecible entre el dispositivo y el host. Finalmente, debido a que la señalización del mensaje está dentro de banda , resuelve algunos problemas de sincronización que pueden ocurrir con escrituras publicadas y líneas de interrupción fuera de banda .

PCI Express no tiene ninguna línea de interrupción física. Utiliza exclusivamente interrupciones señalizadas por mensajes.

Especificaciones de hardware convencionales

Diagrama que muestra las diferentes posiciones clave para tarjetas PCI de 32 y 64 bits

Estas especificaciones representan la versión más común de PCI utilizada en PC normales:

La especificación PCI también proporciona opciones para señalización de 3,3 V, ancho de bus de 64 bits y sincronización de 66 MHz, pero estas no se encuentran comúnmente fuera del soporte PCI-X en las placas base de servidores.

El árbitro del bus PCI realiza el arbitraje del bus entre varios maestros en el bus PCI. En el bus PCI puede residir cualquier número de maestros de bus, así como solicitudes para el bus. Se dedica un par de señales de solicitud y concesión a cada maestro de bus.

Tensión de tarjeta y codificación.

Una tarjeta de expansión PCI-X Gigabit Ethernet con muescas de soporte de 5 V y 3,3 V, lado B hacia la cámara

Las tarjetas PCI típicas tienen una o dos muescas clave, dependiendo de su voltaje de señalización. Las tarjetas que requieren 3,3 voltios tienen una muesca a 56,21 mm de la placa posterior de la tarjeta; los que requieren 5 voltios tienen una muesca a 104,41 mm de la placa posterior. Esto permite que las tarjetas se instalen sólo en ranuras con un voltaje que admitan. Las "tarjetas universales" que aceptan cualquier voltaje tienen ambas muescas clave.

Distribución de pines del conector

El conector PCI se define por tener 62 contactos a cada lado del conector de borde , pero dos o cuatro de ellos son reemplazados por muescas de llave, por lo que una tarjeta tiene 60 o 58 contactos a cada lado. El lado A se refiere al "lado de soldadura" y el lado B se refiere al "lado de los componentes": si la tarjeta se sostiene con el conector apuntando hacia abajo, una vista del lado A tendrá la placa posterior a la derecha, mientras que una vista del lado B Tendrá la placa posterior a la izquierda. La distribución de pines de los lados B y A es la siguiente, mirando hacia el conector de la placa base (los pines A1 y B1 son los más cercanos a la placa posterior). [15] [17] [18]

El PCI de 64 bits amplía esto con 32 contactos adicionales en cada lado que proporcionan AD[63:32], C/BE[7:4]#, la señal de paridad PAR64 y varios pines de alimentación y tierra.

La mayoría de las líneas están conectadas a cada ranura en paralelo. Las excepciones son:

Notas:

Combinación de tarjetas PCI de 32 y 64 bits en ranuras de diferentes anchos

Una tarjeta PCI-X semiinsertada en una ranura PCI de 32 bits, que ilustra la necesidad de tener la muesca más a la derecha y espacio adicional en la placa base para seguir siendo compatible con versiones anteriores.
Tarjeta SCSI de 64 bits que funciona en una ranura PCI de 32 bits

La mayoría de las tarjetas PCI de 32 bits funcionarán correctamente en ranuras PCI-X de 64 bits, pero la velocidad del reloj del bus estará limitada a la frecuencia del reloj de la tarjeta más lenta, una limitación inherente a la topología del bus compartido de PCI. Por ejemplo, cuando se instala un periférico PCI 2.3 de 66 MHz en un bus PCI-X con capacidad de 133 MHz, todo el backplane del bus estará limitado a 66 MHz. Para evitar esta limitación, muchas placas base tienen dos o más buses PCI/PCI-X, uno de los cuales está diseñado para usarse con periféricos PCI-X de alta velocidad y el otro está destinado a periféricos de uso general.

Muchas tarjetas PCI-X de 64 bits están diseñadas para funcionar en modo de 32 bits si se insertan en conectores más cortos de 32 bits, con cierta pérdida de rendimiento. [21] [22] Un ejemplo de esto es la tarjeta de interfaz SCSI de 64 bits Adaptec 29160 . [23] Sin embargo, algunas tarjetas PCI-X de 64 bits no funcionan en ranuras PCI estándar de 32 bits. [24] [ ¿ fuente poco confiable? ]

La instalación de una tarjeta PCI-X de 64 bits en una ranura de 32 bits dejará la parte de 64 bits del conector del borde de la tarjeta sin conectar y sobresaliendo. Esto requiere que no haya componentes de la placa base colocados de manera que obstruyan mecánicamente la parte sobresaliente del conector del borde de la tarjeta.

Dimensiones físicas

Alturas de los soportes PCI:

Longitudes de tarjeta PCI (soporte estándar y 3,3 V): [27]

Longitudes de tarjeta PCI (soporte de perfil bajo y 3,3 V): [28]

Mini-PCI

Una ranura Mini PCI
Tarjeta Mini PCI Wi-Fi Tipo IIIB
Convertidor PCI a MiniPCI Tipo III
Comparación de tarjetas MiniPCI y MiniPCI Express

Mini PCI se agregó a la versión 2.2 de PCI para su uso en computadoras portátiles ; Utiliza un bus de 32 bits y 33 MHz con conexiones alimentadas (solo 3,3 V; 5 V está limitado a 100 mA) y soporte para masterización de bus y DMA . El tamaño estándar de las tarjetas Mini PCI es aproximadamente una cuarta parte del de sus homólogas de tamaño completo. No hay acceso a la tarjeta desde el exterior de la carcasa, a diferencia de las tarjetas PCI de escritorio con soportes que llevan conectores. Esto limita los tipos de funciones que puede realizar una tarjeta Mini PCI.

Se desarrollaron muchos dispositivos Mini PCI, como Wi-Fi , Fast Ethernet , Bluetooth , módems (a menudo Winmodems ), tarjetas de sonido , aceleradores criptográficos , SCSI , IDE – ATA , controladores SATA y tarjetas combinadas. Las tarjetas mini PCI se pueden utilizar con hardware equipado con PCI normal, utilizando convertidores Mini PCI a PCI . Mini PCI ha sido reemplazada por la Mini Tarjeta PCI Express, mucho más estrecha

Detalles técnicos del Mini PCI

Las tarjetas mini PCI tienen un consumo de energía máximo de 2 W, lo que limita la funcionalidad que se puede implementar en este factor de forma. También deben admitir la señal PCI CLKRUN# utilizada para iniciar y detener el reloj PCI con fines de administración de energía.

Hay tres factores de forma de tarjeta : tarjetas tipo I, tipo II y tipo III. El conector de tarjeta utilizado para cada tipo incluye: Los Tipos I y II usan un conector apilable de 100 pines, mientras que el Tipo III usa un conector de borde de 124 pines, es decir, el conector para los Tipos I y II difiere del del Tipo III, donde el conector está en el borde de una tarjeta, como en un SO-DIMM . Los 24 pines adicionales proporcionan las señales adicionales necesarias para enrutar las E/S a través del conector del sistema (audio, AC-Link , LAN , interfaz de línea telefónica). Las tarjetas tipo II tienen conectores montados RJ11 y RJ45. Estas tarjetas deben ubicarse en el borde de la computadora o estación de acoplamiento para que los puertos RJ11 y RJ45 puedan montarse para acceso externo.

Mini PCI es distinto de Micro PCI de 144 pines. [29]

Transacciones de bus PCI

El tráfico del bus PCI consta de una serie de transacciones del bus PCI. Cada transacción consta de una fase de dirección seguida de una o más fases de datos . La dirección de las fases de datos puede ser del iniciador al destino (transacción de escritura) o viceversa (transacción de lectura), pero todas las fases de datos deben estar en la misma dirección. Cualquiera de las partes podrá pausar o detener las fases de datos en cualquier momento. (Un ejemplo común es un dispositivo PCI de bajo rendimiento que no admite transacciones en ráfaga y siempre detiene una transacción después de la primera fase de datos).

Cualquier dispositivo PCI puede iniciar una transacción. Primero, debe solicitar permiso a un árbitro del bus PCI en la placa base. El árbitro concede permiso a uno de los dispositivos solicitantes. El iniciador comienza la fase de dirección transmitiendo una dirección de 32 bits más un código de comando de 4 bits y luego espera a que responda un objetivo. Todos los demás dispositivos examinan esta dirección y uno de ellos responde unos ciclos más tarde.

El direccionamiento de 64 bits se realiza mediante una fase de direccionamiento de dos etapas. El iniciador transmite los 32 bits de dirección bajos, acompañados de un código de comando especial de "ciclo de dirección dual". Los dispositivos que no admiten direccionamiento de 64 bits simplemente no pueden responder a ese código de comando. En el siguiente ciclo, el iniciador transmite los 32 bits de dirección altos, más el código de comando real. La transacción opera de manera idéntica a partir de ese momento. Para garantizar la compatibilidad con dispositivos PCI de 32 bits, está prohibido utilizar un ciclo de dirección dual si no es necesario, es decir, si los bits de dirección de orden superior son todos cero.

Mientras que el bus PCI transfiere 32 bits por fase de datos, el iniciador transmite señales de habilitación de 4 bytes activos bajos que indican qué bytes de 8 bits deben considerarse significativos. En particular, una escritura debe afectar sólo a los bytes habilitados en el dispositivo PCI de destino. Son de poca importancia para las lecturas de memoria, pero las lecturas de E/S pueden tener efectos secundarios. El estándar PCI permite explícitamente una fase de datos sin bytes habilitados, que debe comportarse como no operativa.

espacios de direcciones PCI

PCI tiene tres espacios de direcciones: memoria, dirección de E/S y configuración.

Las direcciones de memoria tienen un tamaño de 32 bits (opcionalmente 64 bits), admiten almacenamiento en caché y pueden ser transacciones en ráfagas.

Las direcciones de E/S son para compatibilidad con el espacio de direcciones del puerto de E/S de la arquitectura Intel x86 . Aunque la especificación del bus PCI permite transacciones en ráfagas en cualquier espacio de direcciones, la mayoría de los dispositivos solo lo admiten para direcciones de memoria y no para E/S.

Finalmente, el espacio de configuración PCI proporciona acceso a 256 bytes de registros de configuración especiales por dispositivo PCI. Cada ranura PCI tiene su propio rango de direcciones de espacio de configuración. Los registros se utilizan para configurar la memoria de los dispositivos y los rangos de direcciones de E/S a los que deben responder desde los iniciadores de transacciones. Cuando una computadora se enciende por primera vez, todos los dispositivos PCI responden solo a sus accesos al espacio de configuración. El BIOS de la computadora busca dispositivos y les asigna rangos de direcciones de E/S y memoria.

Si ningún dispositivo reclama una dirección, la fase de dirección del iniciador de la transacción expirará, lo que provocará que el iniciador cancele la operación. En el caso de lecturas, en este caso se acostumbra proporcionar todos unos para el valor de datos leídos (0xFFFFFFFF). Por lo tanto, los dispositivos PCI generalmente intentan evitar el uso del valor de todos unos en registros de estado importantes, para que el software pueda detectar fácilmente un error de este tipo.

Códigos de comando PCI

Hay 16 códigos de comando de 4 bits posibles y 12 de ellos están asignados. Con la excepción del ciclo único de dirección dual, el bit menos significativo del código de comando indica si las siguientes fases de datos son una lectura (datos enviados desde el objetivo al iniciador) o una escritura (datos enviados desde un iniciador al objetivo). Los destinos PCI deben examinar el código de comando así como la dirección y no responder a las fases de dirección que especifican un código de comando no compatible.

Los comandos que se refieren a líneas de caché dependen de que el registro de tamaño de línea de caché del espacio de configuración PCI esté configurado correctamente; no podrán utilizarse hasta que se haya hecho esto.

0000: Confirmación de interrupción
Esta es una forma especial de ciclo de lectura dirigida implícitamente al controlador de interrupciones, que devuelve un vector de interrupción. Se ignora el campo de dirección de 32 bits. Una posible implementación es generar un ciclo de reconocimiento de interrupción en un bus ISA utilizando un puente de bus PCI/ISA. Este comando es para compatibilidad con IBM PC ; Si no hay un controlador de interrupciones estilo Intel 8259 en el bus PCI, nunca será necesario utilizar este ciclo.
0001: Ciclo Especial
Este ciclo es una escritura de transmisión especial de eventos del sistema que pueden interesar a la tarjeta PCI. El campo de dirección de un ciclo especial se ignora, pero le sigue una fase de datos que contiene un mensaje de carga útil. Los mensajes definidos actualmente anuncian que el procesador se está deteniendo por algún motivo (por ejemplo, para ahorrar energía). Ningún dispositivo responde nunca a este ciclo; siempre finaliza con un aborto maestro después de dejar los datos en el bus durante al menos 4 ciclos.
0010: Lectura de E/S
Esto realiza una lectura desde el espacio de E/S. Se proporcionan los 32 bits de la dirección de lectura, de modo que un dispositivo puede (por razones de compatibilidad) implementar menos de 4 bytes de registros de E/S. Si el byte habilita datos de solicitud que no están dentro del rango de direcciones admitido por el dispositivo PCI (por ejemplo, una lectura de 4 bytes desde un dispositivo que solo admite 2 bytes de espacio de direcciones de E/S), se debe terminar con un aborto de destino. Se permiten múltiples ciclos de datos, utilizando ordenamiento de ráfagas lineal (incremental simple).
El estándar PCI desaconseja el uso del espacio de E/S en dispositivos nuevos, prefiriendo que tanto como sea posible se haga a través del mapeo de la memoria principal.
0011: Escritura de E/S
Esto realiza una escritura en el espacio de E/S.
010 x : Reservado
Un dispositivo PCI no debe responder a un ciclo de dirección con estos códigos de comando.
0110: Lectura de memoria
Esto realiza un ciclo de lectura desde el espacio de la memoria. Debido a que el espacio de memoria más pequeño que un dispositivo PCI puede implementar es de 16 bytes, [17] [15] : §6.5.2.1  los dos bits menos significativos de la dirección no son necesarios durante la fase de dirección; La información equivalente llegará durante las fases de datos en forma de señales de selección de bytes. En su lugar, especifican el orden en el que se deben devolver los datos en ráfaga. [17] [15] : §3.2.2.2  Si un dispositivo no admite la orden solicitada, debe proporcionar la primera palabra y luego desconectarse.
Si un espacio de memoria está marcado como "precargable", entonces el dispositivo de destino debe ignorar las señales de selección de bytes en una lectura de memoria y siempre devolver 32 bits válidos.
0111: Escritura de memoria
Esto funciona de manera similar a una lectura de memoria. Las señales de selección de bytes son más importantes en una escritura, ya que los bytes no seleccionados no deben escribirse en la memoria.
Generalmente, las escrituras PCI son más rápidas que las lecturas PCI, porque un dispositivo puede almacenar en el buffer los datos de escritura entrantes y liberar el bus más rápido. Para una lectura, debe retrasar la fase de datos hasta que se hayan recuperado los datos.
100 x : Reservado
Un dispositivo PCI no debe responder a un ciclo de dirección con estos códigos de comando.
1010: Lectura de configuración
Esto es similar a una lectura de E/S, pero lee desde el espacio de configuración PCI. Un dispositivo debe responder sólo si los 11 bits inferiores de la dirección especifican una función y un registro que implementa, y si se afirma la señal IDSEL especial. Debe ignorar los 21 bits altos. Se permiten lecturas en ráfaga (mediante incremento lineal) en el espacio de configuración PCI.
A diferencia del espacio de E/S, los registros de configuración PCI estándar se definen para que las lecturas nunca alteren el estado del dispositivo. Es posible que un dispositivo tenga registros de espacio de configuración más allá de los 64 bytes estándar, lo que tiene efectos secundarios de lectura, pero esto es poco común. [30]
Los accesos al espacio de configuración suelen tener algunos ciclos de retraso para permitir que las líneas IDSEL se estabilicen, lo que los hace más lentos que otras formas de acceso. Además, el acceso al espacio de configuración requiere una operación de varios pasos en lugar de una sola instrucción de máquina. Por lo tanto, es mejor evitarlos durante el funcionamiento rutinario de un dispositivo PCI.
1011: escritura de configuración
Esto funciona de manera análoga a una lectura de configuración.
1100: Lectura de memoria múltiple
Este comando es idéntico a una lectura de memoria genérica, pero incluye la sugerencia de que una ráfaga de lectura larga continuará más allá del final de la línea de caché actual y el objetivo debe buscar internamente una gran cantidad de datos. Un objetivo siempre puede considerar esto como sinónimo de una lectura de memoria genérica.
1101: Ciclo de dirección dual
Al acceder a una dirección de memoria que requiere más de 32 bits para ser representada, la fase de dirección comienza con este comando y los 32 bits bajos de la dirección, seguido de un segundo ciclo con el comando real y los 32 bits altos de la dirección. Los destinos PCI que no admiten direccionamiento de 64 bits pueden simplemente tratar esto como otro código de comando reservado y no responder a él. Este código de comando sólo puede usarse con una palabra de dirección de orden superior distinta de cero; Está prohibido utilizar este ciclo si no es necesario.
1110: Línea de lectura de memoria
Este comando es idéntico a una lectura de memoria genérica, pero incluye la sugerencia de que la lectura continuará hasta el final de la línea de caché. Un objetivo siempre puede considerar esto como sinónimo de una lectura de memoria genérica.
1111: Escritura e invalidación de memoria
Este comando es idéntico a una escritura de memoria genérica, pero viene con la garantía de que se escribirán una o más líneas de caché completas, con todas las selecciones de bytes habilitadas. Esta es una optimización para cachés de reescritura que espían el bus. Normalmente, una caché de reescritura que contiene datos sucios debe interrumpir la operación de escritura el tiempo suficiente para escribir primero sus propios datos sucios. Si la escritura se realiza con este comando, se garantiza que los datos que se van a reescribir serán irrelevantes y es posible que simplemente se invaliden en la memoria caché de reescritura.
Esta optimización sólo afecta a la caché de espionaje y no supone ninguna diferencia para el objetivo, que puede tratarlo como un sinónimo del comando de escritura en memoria.

Latencia del bus PCI

Poco después de la promulgación de la especificación PCI, se descubrió que las transacciones prolongadas realizadas por algunos dispositivos, debido a reconocimientos lentos, ráfagas de datos largas o alguna combinación, podrían provocar un desbordamiento o una insuficiencia del búfer en otros dispositivos. Las recomendaciones sobre el calendario de las fases individuales en la Revisión 2.0 se hicieron obligatorias en la revisión 2.1: [31] : 3 

Además, a partir de la revisión 2.1, todos los iniciadores capaces de distribuir más de dos fases de datos deben implementar un temporizador de latencia programable. El temporizador comienza a contar los ciclos del reloj cuando comienza una transacción (el iniciador afirma FRAME#). Si el cronómetro ha expirado y el árbitro ha eliminado GNT#, entonces el iniciador debe cancelar la transacción en la próxima oportunidad legal. Esta suele ser la siguiente fase de datos, pero las transacciones de escritura de memoria e invalidación deben continuar hasta el final de la línea de caché.

Transacciones retrasadas

Los dispositivos que no puedan cumplir con esas restricciones de tiempo deben usar una combinación de escrituras publicadas (para escrituras en memoria) y transacciones retrasadas (para otras escrituras y todas las lecturas). En una transacción retrasada, el objetivo registra la transacción (incluidos los datos de escritura) internamente y aborta (afirma STOP# en lugar de TRDY#) la primera fase de datos. El iniciador debe volver a intentar exactamente la misma transacción más tarde. Mientras tanto, el objetivo realiza internamente la transacción y espera el reintento de la transacción. Cuando se ve la transacción reintentada, se entrega el resultado almacenado en el buffer.

Un dispositivo puede ser el objetivo de otras transacciones mientras se completa una transacción retrasada; debe recordar el tipo de transacción, la dirección, las selecciones de bytes y (si se escribe) el valor de los datos, y solo completar la transacción correcta.

Si el objetivo tiene un límite en la cantidad de transacciones retrasadas que puede registrar internamente (los objetivos simples pueden imponer un límite de 1), obligará a esas transacciones a volver a intentarlo sin registrarlas. Se tratarán cuando se complete la transacción retrasada actual. Si dos iniciadores intentan la misma transacción, una transacción retrasada iniciada por uno puede hacer que su resultado se entregue al otro; esto es inofensivo.

Un objetivo abandona una transacción retrasada cuando un reintento logra entregar el resultado almacenado en el buffer, el bus se reinicia o cuando transcurren 2 15 = 32768 ciclos de reloj (aproximadamente 1 ms) sin ver un reintento. Esto último nunca debería ocurrir durante el funcionamiento normal, pero evita un bloqueo total de todo el bus si un iniciador se reinicia o no funciona correctamente.

Puentes de bus PCI

El estándar PCI permite conectar múltiples buses PCI independientes mediante puentes de bus que reenviarán operaciones de un bus a otro cuando sea necesario. Aunque PCI no tiende a utilizar muchos puentes de bus, los sistemas PCI Express utilizan muchos puentes PCI a PCI, normalmente llamados puerto raíz PCI Express ; Cada ranura PCI Express parece ser un bus independiente, conectado a los demás mediante un puente. El puente de host PCI (normalmente el puente norte en plataformas x86) interconecta entre la CPU, la memoria principal y el bus PCI. [32]

escritos publicados

Generalmente, cuando un puente de bus ve una transacción en un bus que debe reenviarse al otro, la transacción original debe esperar hasta que se complete la transacción reenviada antes de que esté listo el resultado. Se produce una excepción notable en el caso de las escrituras en memoria. Aquí, el puente puede registrar los datos de escritura internamente (si tiene espacio) y señalar la finalización de la escritura antes de que se complete la escritura reenviada. O, de hecho, antes de que haya comenzado. Estas escrituras "enviadas pero aún no llegadas" se denominan "escrituras publicadas", por analogía con un mensaje de correo postal. Aunque ofrecen grandes oportunidades para mejorar el rendimiento, las reglas que rigen lo que está permitido son algo complejas. [33]

Combinando, fusionando y colapsando

El estándar PCI permite que los puentes de bus conviertan múltiples transacciones de bus en una transacción más grande en determinadas situaciones. Esto puede mejorar la eficiencia del bus PCI.

Combinatorio

Las transacciones de escritura en direcciones consecutivas se pueden combinar en una escritura en ráfaga más larga, siempre que el orden de los accesos en la ráfaga sea el mismo que el orden de las escrituras originales. Está permitido insertar fases de datos adicionales con todas las habilitaciones de bytes desactivadas si las escrituras son casi consecutivas.

Fusionando

Se pueden fusionar múltiples escrituras en porciones separadas de la misma palabra en una sola escritura con habilitaciones de múltiples bytes afirmadas. En este caso, las escrituras que se presentaron al puente de bus en un orden particular se fusionan para que ocurran al mismo tiempo cuando se reenvían.

colapsando

No se pueden combinar varias escrituras en el mismo byte o bytes , por ejemplo, realizando solo la segunda escritura y omitiendo la primera escritura que se sobrescribió. Esto se debe a que la especificación PCI permite que las escrituras tengan efectos secundarios.

Señales de bus PCI

Las transacciones del bus PCI están controladas por cinco señales de control principales, dos impulsadas por el iniciador de una transacción (FRAME# e IRDY#) y tres impulsadas por el objetivo (DEVSEL#, TRDY# y STOP#). Hay dos señales de arbitraje adicionales (REQ# y GNT#) que se utilizan para obtener permiso para iniciar una transacción. Todos son activo-bajo , lo que significa que el estado activo o afirmado es un voltaje bajo . Las resistencias pull-up de la placa base garantizan que permanecerán altas (inactivas o desactivadas ) si no las controla ningún dispositivo, pero el bus PCI no depende de las resistencias para cambiar el nivel de la señal; todos los dispositivos elevan las señales durante un ciclo antes de dejar de generarlas .

Temporización de la señal

Todas las señales del bus PCI se muestrean en el flanco ascendente del reloj. Las señales cambian nominalmente en el flanco descendente del reloj, lo que le da a cada dispositivo PCI aproximadamente medio ciclo de reloj para decidir cómo responder a las señales que observó en el flanco ascendente, y medio ciclo de reloj para transmitir su respuesta al otro dispositivo. .

El bus PCI requiere que cada vez que cambie el dispositivo que controla una señal del bus PCI, debe transcurrir un ciclo de respuesta entre el momento en que un dispositivo deja de enviar la señal y el otro dispositivo comienza. Sin esto, podría haber un período en el que ambos dispositivos estuvieran transmitiendo la señal, lo que interferiría con el funcionamiento del autobús.

La combinación de este ciclo de respuesta y el requisito de mantener alta una línea de control durante un ciclo antes de dejar de conducirla significa que cada una de las líneas de control principales debe estar alta durante un mínimo de dos ciclos al cambiar de propietario. El protocolo de bus PCI está diseñado para que esto rara vez sea una limitación; sólo en unos pocos casos especiales (en particular, transacciones rápidas consecutivas) es necesario introducir un retraso adicional para cumplir con este requisito.

Arbitraje

Cualquier dispositivo en un bus PCI que sea capaz de actuar como maestro de bus puede iniciar una transacción con cualquier otro dispositivo. Para garantizar que sólo se inicie una transacción a la vez, cada maestro debe esperar primero una señal de concesión de bus, GNT#, de un árbitro ubicado en la placa base. Cada dispositivo tiene una línea de solicitud separada REQ# que solicita el bus, pero el árbitro puede "estacionar" la señal de concesión del bus en cualquier dispositivo si no hay solicitudes actuales.

El árbitro puede eliminar GNT# en cualquier momento. Un dispositivo que pierde GNT# puede completar su transacción actual, pero no puede iniciar una (afirmando FRAME#) a menos que observe que GNT# afirmó el ciclo antes de que comience.

El árbitro también puede proporcionar GNT# en cualquier momento, incluso durante la transacción de otro maestro. Durante una transacción, se afirma FRAME# o IRDY# o ambos; cuando ambos son anulados, el autobús está inactivo. Un dispositivo puede iniciar una transacción en cualquier momento en que se afirma GNT# y el bus está inactivo.

Fase de dirección

Una transacción de bus PCI comienza con una fase de dirección . El iniciador (normalmente un chipset ), al ver que tiene GNT# y que el bus está inactivo, envía la dirección de destino a las líneas AD[31:0], el comando asociado (por ejemplo, lectura de memoria o escritura de E/S) en el C/BE[3:0]# líneas y baja FRAME#.

Cada uno de los demás dispositivos examina la dirección y el comando y decide si responde como objetivo afirmando DEVSEL#. Un dispositivo debe responder afirmando DEVSEL# dentro de 3 ciclos. Se dice que los dispositivos que prometen responder en 1 o 2 ciclos tienen "DEVSEL rápido" o "DEVSEL medio", respectivamente. (En realidad, el tiempo para responder es de 2,5 ciclos, ya que los dispositivos PCI deben transmitir todas las señales medio ciclo antes para poder recibirlas tres ciclos más tarde).

Un dispositivo debe bloquear la dirección en el primer ciclo; se requiere que el iniciador elimine la dirección y el comando del bus en el siguiente ciclo, incluso antes de recibir una respuesta DEVSEL#. El tiempo adicional está disponible sólo para interpretar la dirección y el comando después de su captura.

En el quinto ciclo de la fase de dirección (o antes si todos los demás dispositivos tienen DEVSEL medio o más rápido), se permite una "decodificación sustractiva" general para algunos rangos de direcciones. Esto lo utiliza comúnmente un puente de bus ISA para direcciones dentro de su rango (24 bits para memoria y 16 bits para E/S).

En el sexto ciclo, si no ha habido respuesta, el iniciador puede cancelar la transacción cancelando la afirmación de FRAME#. Esto se conoce como terminación de aborto maestro y es habitual que los puentes de bus PCI devuelvan datos de todos unos (0xFFFFFFFF) en este caso. Por lo tanto, los dispositivos PCI generalmente están diseñados para evitar el uso del valor de todos unos en registros de estado importantes, de modo que el software pueda detectar fácilmente dicho error.

Temporización de la fase de dirección

Notas:

En el flanco ascendente del reloj 0, el iniciador observa FRAME# e IRDY# ambos altos, y GNT# bajo, por lo que controla la dirección, ordena y afirma FRAME# a tiempo para el flanco ascendente del reloj 1. Los objetivos retienen la dirección y comenzar a decodificarlo. Pueden responder con DEVSEL# a tiempo para el reloj 2 (DEVSEL rápido), 3 (medio) o 4 (lento). Los dispositivos de decodificación sustractiva, al no ver otra respuesta en el reloj 4, pueden responder en el reloj 5. Si el maestro no ve una respuesta en el reloj 5, finalizará la transacción y eliminará el FRAME# en el reloj 6.

TRDY# y STOP# se desactivan (alto) durante la fase de dirección. El iniciador puede afirmar IRDY# tan pronto como esté listo para transferir datos, lo que en teoría podría ser tan pronto como el reloj 2.

Dirección de doble ciclo

Para permitir el direccionamiento de 64 bits, un maestro presentará la dirección durante dos ciclos consecutivos. Primero, envía los bits de dirección de orden inferior con un comando especial de "dirección de ciclo dual" en C/BE[3:0]#. En el siguiente ciclo, envía los bits de dirección de orden superior y el comando real. Los ciclos de dirección dual están prohibidos si los bits de dirección de orden superior son cero, por lo que los dispositivos que no admiten direccionamiento de 64 bits simplemente no pueden responder a los comandos de ciclo dual.

 _ 0_ 1_ 2_ 3_ 4_ 5_ 6_ CLK _/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ ___ GNT# \___/XXXXXXXXXXXXXXXXXXXXXXXX _______ MARCO# \_______________________ ___ ___ AD[31:0] -------<___X___>--------------- (bits bajos, luego altos) ___ ___ _______________ C/BE[3:0]# -------<___X___X_______________ (DAC, luego comando real) ___________________________ DISPOSITIVO# \___\___\___\___ Rápido Medio Lento _ _ _ _ _ _ _ _ CLK _/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ 0 1 2 3 4 5 6

Acceso a la configuración

Las direcciones para el acceso al espacio de configuración PCI utilizan una decodificación especial. Para estos, las líneas de dirección de orden inferior especifican el desplazamiento del registro de configuración PCI deseado y las líneas de dirección de orden superior se ignoran. En cambio, una señal de dirección adicional, la entrada IDSEL, debe estar en nivel alto antes de que un dispositivo pueda afirmar DEVSEL#. Cada ranura conecta una línea de dirección de orden superior diferente al pin IDSEL y se selecciona mediante codificación one-hot en las líneas de dirección superiores.

Fases de datos

Después de la fase de dirección (específicamente, comenzando con el ciclo en el que DEVSEL# baja) viene una ráfaga de una o más fases de datos . En todos los casos, el iniciador controla señales de selección de byte bajo activo en las líneas C/BE[3:0]#, pero los datos en AD[31:0] pueden ser controlados por el iniciador (en caso de escrituras) o objetivo (en caso de lecturas).

Durante las fases de datos, las líneas C/BE[3:0]# se interpretan como bytes activos bajos habilitados . En caso de escritura, las señales confirmadas indican cuál de los cuatro bytes del bus AD se escribirá en la ubicación direccionada. En el caso de una lectura, indican qué bytes le interesan al iniciador. Para las lecturas, siempre es legal ignorar las señales de habilitación de bytes y simplemente devolver los 32 bits; Se requieren recursos de memoria caché para devolver siempre 32 bits válidos. Las habilitaciones de bytes son útiles principalmente para accesos al espacio de E/S donde las lecturas tienen efectos secundarios.

El estándar PCI permite explícitamente una fase de datos con las cuatro líneas C/BE# desactivadas y no debe tener ningún efecto en el objetivo más que avanzar la dirección en el acceso en ráfaga en curso.

La fase de datos continúa hasta que ambas partes estén listas para completar la transferencia y continuar con la siguiente fase de datos. El iniciador afirma IRDY# ( iniciador listo ) cuando ya no necesita esperar, mientras que el objetivo afirma TRDY# ( objetivo listo ). Cualquiera que sea el lado que proporcione los datos debe conducirlos en el bus AD antes de afirmar su señal de listo.

Una vez que uno de los participantes afirma su señal de listo, no puede dejar de estar listo ni alterar sus señales de control hasta el final de la fase de datos. El destinatario de los datos debe bloquear el bus AD en cada ciclo hasta que vea tanto IRDY# como TRDY# afirmados, lo que marca el final de la fase de datos actual e indica que los datos recién bloqueados son la palabra que se transferirá.

Para mantener la velocidad de ráfaga máxima, el remitente de datos tiene medio ciclo de reloj después de ver tanto IRDY# como TRDY# afirmados para enviar la siguiente palabra al bus AD.

 0_ 1_ 2_ 3_ 4_ 5_ 6_ 7_ 8_ 9_ CLK _/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ ___ _______ ___ ___ ___ AD[31:0] ---<___XXXXXXXXX_______XXXXX___X___X___ (Si es una escritura) ___ ___ _______ ___ ___ AD[31:0] ---<___>~~~<XXXXXXXX___X_______X___X___ (Si es una lectura) ___ _______________ _______ ___ ___ C/BE[3:0]# ---<___X_______________X_______X___X___ (Debe ser siempre válido) _______________ | ___ | | | IRDY# x \_______/ x \___________ ___________________ | | | | TRDY# xx \___________________ ___________ | | | | DEVSEL# \___________________________ ___ | | | | MARCO# \___________________________________ _ _ _ _ _ |_ _ |_ |_ |_ CLK _/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ 0 1 2 3 4 5 6 7 8 9

Esto continúa el ciclo de direcciones ilustrado anteriormente, suponiendo un ciclo de dirección único con DEVSEL medio, de modo que el objetivo responda a tiempo para el reloj 3. Sin embargo, en ese momento, ninguno de los lados está listo para transferir datos. Para el reloj 4, el iniciador está listo, pero el objetivo no. En el reloj 5, ambos están listos y se produce una transferencia de datos (como lo indican las líneas verticales). Para el reloj 6, el objetivo está listo para transferirse, pero el iniciador no. En el reloj 7, el iniciador está listo y se transfieren los datos. Para los relojes 8 y 9, ambos lados permanecen listos para transferir datos y los datos se transfieren a la velocidad máxima posible (32 bits por ciclo de reloj).

En caso de una lectura, el reloj 2 está reservado para girar el bus AD, por lo que el objetivo no puede conducir datos en el bus incluso si es capaz de realizar un DEVSEL rápido.

DEVSEL# rápido en lecturas

En teoría, un objetivo que admita DEVSEL rápido podría comenzar a responder a una lectura en el ciclo después de que se presenta la dirección. Sin embargo, este ciclo está reservado para el retorno de los autobuses AD. Por lo tanto, es posible que un objetivo no conduzca el bus AD (y por lo tanto no pueda afirmar TRDY#) en el segundo ciclo de una transacción. La mayoría de los objetivos no serán tan rápidos y no necesitarán ninguna lógica especial para imponer esta condición.

Finalizar transacciones

Cualquiera de las partes puede solicitar que finalice una ráfaga después de la fase de datos actual. Los dispositivos PCI simples que no admiten ráfagas de varias palabras siempre lo solicitarán inmediatamente. Incluso los dispositivos que admiten ráfagas tendrán algún límite en la longitud máxima que pueden admitir, como el final de su memoria direccionable.

Terminación de ráfaga del iniciador

El iniciador puede marcar cualquier fase de datos como la final de una transacción al anular la afirmación de FRAME# al mismo tiempo que afirma IRDY#. El ciclo después de que el objetivo afirma TRDY#, la transferencia de datos final se completa, ambos lados desactivan sus respectivas señales RDY# y el bus vuelve a estar inactivo. El maestro no puede anular la afirmación de FRAME# antes de afirmar IRDY#, ni puede anular la afirmación de FRAME# mientras espera, con IRDY# afirmado, que el objetivo afirme TRDY#.

La única excepción menor es una terminación de aborto maestro , cuando ningún objetivo responde con DEVSEL#. Obviamente, en tal caso no tiene sentido esperar a TRDY#. Sin embargo, incluso en este caso, el maestro debe afirmar IRDY# durante al menos un ciclo después de cancelar FRAME#. (Comúnmente, un maestro afirmará IRDY# antes de recibir DEVSEL#, por lo que simplemente debe mantener IRDY# afirmado durante un ciclo más). Esto es para garantizar que se obedezcan las reglas de tiempo de retorno del autobús en la línea FRAME#.

Terminación de ráfaga de objetivo

El objetivo solicita al iniciador que finalice una ráfaga afirmando STOP#. Luego, el iniciador finalizará la transacción eliminando la afirmación de FRAME# en la próxima oportunidad legal; si desea transferir más datos, continuará en una transacción separada. Hay varias formas para que el objetivo haga esto:

Desconectar con datos
Si el objetivo afirma STOP# y TRDY# al mismo tiempo, esto indica que el objetivo desea que esta sea la última fase de datos. Por ejemplo, un objetivo que no admite transferencias en ráfaga siempre lo hará para forzar transacciones PCI de una sola palabra. Esta es la forma más eficaz para que un objetivo finalice una ráfaga.
Desconectarse sin datos
Si el objetivo afirma STOP# sin afirmar TRDY#, esto indica que el objetivo desea detenerse sin transferir datos. STOP# se considera equivalente a TRDY# a efectos de finalizar una fase de datos, pero no se transfieren datos.
Rever
Una desconexión sin datos antes de transferir datos es un reintento y, a diferencia de otras transacciones PCI, los iniciadores PCI deben hacer una pequeña pausa antes de continuar con la operación. Consulte la especificación PCI para obtener más detalles.
Aborto objetivo
Normalmente, un objetivo mantiene DEVSEL# afirmado hasta la última fase de datos. Sin embargo, si un objetivo desactiva DEVSEL# antes de desconectarse sin datos (afirmando STOP#), esto indica un aborto de destino , que es una condición de error fatal. Es posible que el iniciador no vuelva a intentarlo y normalmente lo trata como un error de bus . Un objetivo no puede cancelar su DEVSEL# mientras espera con TRDY# o STOP# bajo; debe hacer esto al comienzo de una fase de datos.

Siempre habrá al menos un ciclo más después de una desconexión iniciada por el objetivo, para permitir que el maestro anule la afirmación de FRAME#. Hay dos subcasos, que toman la misma cantidad de tiempo, pero uno requiere una fase de datos adicional:

Desconectar-A
Si el iniciador observa STOP# antes de afirmar su propio IRDY#, entonces puede finalizar la ráfaga desactivando FRAME# al mismo tiempo que afirma IRDY#, finalizando la ráfaga después de la fase de datos actual.
Desconectar-B
Si el iniciador ya ha afirmado IRDY# (sin anular la afirmación de FRAME#) en el momento en que observa el STOP# del objetivo, se compromete a una fase de datos adicional. El objetivo debe esperar a través de una fase de datos adicional, manteniendo STOP# afirmado sin TRDY#, antes de que la transacción pueda finalizar.

Si el iniciador finaliza la ráfaga al mismo tiempo que el objetivo solicita la desconexión, no hay ningún ciclo de bus adicional.

direccionamiento por ráfagas

Para los accesos al espacio de memoria, se puede acceder a las palabras en una ráfaga en varios órdenes. Los bits de dirección de orden inferior innecesarios AD[1:0] se utilizan para transmitir la orden solicitada por el iniciador. Un objetivo que no soporta un orden particular debe terminar la ráfaga después de la primera palabra. Algunos de estos pedidos dependen del tamaño de la línea de caché, que se puede configurar en todos los dispositivos PCI.

Si el desplazamiento inicial dentro de la línea de caché es cero, todos estos modos se reducen al mismo orden.

Los modos de alternancia de línea de caché y ajuste de línea de caché son dos formas de recuperación de línea de caché de primera palabra crítica. El modo de conmutación realiza XOR en la dirección proporcionada con un contador incremental. Este es el orden nativo para los procesadores Intel 486 y Pentium. Tiene la ventaja de que no es necesario conocer el tamaño de la línea de caché para implementarlo.

La versión 2.1 de PCI dejó obsoleto el modo de alternancia y agregó el modo de ajuste de línea de caché, [31] : 2  donde la recuperación se realiza linealmente, ajustándose al final de cada línea de caché. Cuando una línea de caché se recupera por completo, la recuperación salta al desplazamiento inicial en la siguiente línea de caché.

La mayoría de los dispositivos PCI sólo admiten una gama limitada de tamaños de línea de caché típicos; si el tamaño de la línea de caché está programado en un valor inesperado, fuerzan el acceso de una sola palabra.

PCI también admite acceso en ráfagas a E/S y espacio de configuración, pero solo se admite el modo lineal. (Esto rara vez se usa y puede tener errores en algunos dispositivos; es posible que no lo admitan, pero tampoco fuercen adecuadamente el acceso de una sola palabra).

Ejemplos de transacciones

Esta es la ráfaga de escritura de cuatro palabras con la velocidad más alta posible, terminada por el maestro:

 0_ 1_ 2_ 3_ 4_ 5_ 6_ 7_ CLK _/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \ ___ ___ ___ ___ ___ ANUNCIO[31:0] ---<___X___X___X___X___>---<___> ___ ___ ___ ___ ___ C/BE[3:0]# ---<___X___X___X___X___>---<___> | | | | ___ IRDY# ^^^^^^^^\______________/ ^^^^^ | | | | ___ TRDY# ^^^^^^^^\______________/ ^^^^^ | | | | ___ DEVSEL# ^^^^^^^^\______________/ ^^^^^ ___ | | | ___ CUADRO# \_______________/ | ^^^^\____ _ _ |_ |_ |_ |_ _ _ CLK _/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \ 0 1 2 3 4 5 6 7

En el flanco 1 del reloj, el iniciador inicia una transacción generando una dirección, un comando y afirmando FRAME#. Las otras señales están inactivas (indicadas por ^^^), elevadas por las resistencias pull-up de la placa base. Ese podría ser su ciclo de recuperación. En el ciclo 2, el objetivo afirma tanto DEVSEL# como TRDY#. Como el iniciador también está preparado, se produce una transferencia de datos. Esto se repite durante tres ciclos más, pero antes del último (flanco 5 del reloj), el maestro desactiva el CUADRO#, indicando que este es el final. En el flanco 6 del reloj, el bus AD y el FRAME# no están activados (ciclo de respuesta) y las otras líneas de control se activan en alto durante 1 ciclo. En el flanco 7 del reloj, otro iniciador puede iniciar una transacción diferente. Este es también el ciclo de respuesta para las otras líneas de control.

La ráfaga de lectura equivalente tarda un ciclo más, porque el objetivo debe esperar 1 ciclo para que el bus AD gire antes de que pueda afirmar TRDY#:

 0_ 1_ 2_ 3_ 4_ 5_ 6_ 7_ 8_ CLK _/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \ ___ ___ ___ ___ ___ ANUNCIO[31:0] ---<___>---<___X___X___X___>---<___> ___ _______ ___ ___ ___ C/BE[3:0]# ---<___X_______X___X___X___>---<___> ___ | | | | ___ IRDY# ^^^^\___________________/ ^^^^^ ___ _____ | | | | ___ TRDY# ^^^^ \______________/ ^^^^^ ___ | | | | ___ DEVSEL# ^^^^\___________________/ ^^^^^ ___ | | | ___ CUADRO# \___________________/ | ^^^^\____ _ _ _ |_ |_ |_ |_ _ _ CLK _/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \ 0 1 2 3 4 5 6 7 8

Una ráfaga de alta velocidad terminada por el objetivo tendrá un ciclo adicional al final:

 0_ 1_ 2_ 3_ 4_ 5_ 6_ 7_ 8_ CLK _/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \ ___ ___ ___ ___ ___ ANUNCIO[31:0] ---<___>---<___X___X___X___XXXX>---- ___ _______ ___ ___ ___ ___ C/BE[3:0]# ---<___X_______X___X___X___X___>---- | | | | ___ IRDY# ^^^^^^^\_______________________/ _____ | | | | _______ TRDY# ^^^^^^^ \______________/ ________________ | ___ PARADA# ^^^^^^^ | | | \_______/ | | | | ___ DEVSEL# ^^^^^^^\_______________________/ ___ | | | | ___ MARCO# \_______________________/ ^^^^ _ _ _ |_ |_ |_ |_ _ _ CLK _/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \ 0 1 2 3 4 5 6 7 8

En el flanco 6 del reloj, el objetivo indica que quiere detenerse (con datos), pero el iniciador ya mantiene IRDY# bajo, por lo que hay una quinta fase de datos (flanco 7 del reloj), durante la cual no se transfieren datos.

Paridad

El bus PCI detecta errores de paridad, pero no intenta corregirlos reintentando las operaciones; es puramente una indicación de falla. Debido a esto, no es necesario detectar el error de paridad antes de que ocurra, y el bus PCI lo detecta unos ciclos más tarde. Durante una fase de datos, cualquier dispositivo que esté controlando las líneas AD[31:0] calcula la paridad uniforme entre ellas y las líneas C/BE[3:0]#, y las envía a la línea PAR un ciclo después. Todas las reglas de acceso y ciclos de respuesta para el autobús AD se aplican a la línea PAR, solo un ciclo después. El dispositivo que escucha en el bus AD verifica la paridad recibida y afirma la línea PERR# (error de paridad) un ciclo después de eso. Esto generalmente genera una interrupción del procesador, y el procesador puede buscar en el bus PCI el dispositivo que detectó el error.

La línea PERR# solo se usa durante las fases de datos, una vez que se ha seleccionado un objetivo. Si se detecta un error de paridad durante una fase de dirección (o la fase de datos de un ciclo especial), los dispositivos que lo observan afirman la línea SERR# (error del sistema).

Incluso cuando algunos bytes están enmascarados por las líneas C/BE# y no están en uso, aún deben tener algún valor definido, y este valor debe usarse para calcular la paridad.

Transacciones consecutivas rápidas

Debido a la necesidad de un ciclo de respuesta entre diferentes dispositivos que controlan las señales del bus PCI, en general es necesario tener un ciclo inactivo entre las transacciones del bus PCI. Sin embargo, en algunas circunstancias se permite omitir este ciclo inactivo, yendo directamente del ciclo final de una transferencia (IRDY# afirmado, FRAME# desactivado) al primer ciclo de la siguiente (FRAME# afirmado, IRDY# desactivado).

Un iniciador sólo puede realizar transacciones consecutivas cuando:

Pueden surgir restricciones de tiempo adicionales debido a la necesidad de dar la vuelta a las líneas de control del objetivo, particularmente DEVSEL#. El objetivo desactiva DEVSEL#, elevándolo a un nivel alto, en el ciclo que sigue a la fase de datos finales, que en el caso de transacciones consecutivas es el primer ciclo de la fase de dirección. El segundo ciclo de la fase de dirección se reserva para el cambio de DEVSEL#, por lo que si el objetivo es diferente del anterior, no debe afirmar DEVSEL# hasta el tercer ciclo (velocidad DEVSEL media).

Un caso en el que este problema no puede surgir es si el iniciador sabe de alguna manera (presumiblemente porque las direcciones comparten suficientes bits de alto orden) que la segunda transferencia está dirigida al mismo objetivo que la anterior. En ese caso, podrá realizar transacciones consecutivas. Todos los objetivos de PCI deben admitir esto.

También es posible que el objetivo realice un seguimiento de los requisitos. Si nunca acelera DEVSEL, se cumplen de manera trivial. Si es así, deberá esperar hasta el tiempo medio DEVSEL a menos que:

Los objetivos que tienen esta capacidad lo indican mediante un bit especial en un registro de configuración PCI, y si todos los objetivos en un bus la tienen, todos los iniciadores pueden usar transferencias consecutivas libremente.

Un puente de bus de decodificación sustractiva debe saber esperar este retraso adicional en el caso de ciclos consecutivos, para anunciar el soporte consecutivo.

PCI de 64 bits

A partir de la revisión 2.1, [ se necesita aclaración ] la especificación PCI incluye soporte opcional de 64 bits. Esto se proporciona a través de un conector extendido que proporciona las extensiones de bus de 64 bits AD[63:32], C/BE[7:4]# y PAR64, y varios pines de alimentación y tierra adicionales. El conector PCI de 64 bits se distingue de un conector de 32 bits por el segmento adicional de 64 bits.

Las transacciones de memoria entre dispositivos de 64 bits pueden utilizar los 64 bits para duplicar la velocidad de transferencia de datos. Las transacciones que no sean de memoria (incluidos los accesos a la configuración y al espacio de E/S) no pueden utilizar la extensión de 64 bits. Durante una ráfaga de 64 bits, el direccionamiento en ráfaga funciona igual que en una transferencia de 32 bits, pero la dirección se incrementa dos veces por fase de datos. La dirección inicial debe estar alineada con 64 bits; es decir, AD2 debe ser 0. Los datos correspondientes a las direcciones intermedias (con AD2 = 1) se transportan en la mitad superior del bus AD.

Para iniciar una transacción de 64 bits, el iniciador controla la dirección inicial en el bus AD y afirma REQ64# al mismo tiempo que FRAME#. Si el destino seleccionado puede admitir una transferencia de 64 bits para esta transacción, responde afirmando ACK64# al mismo tiempo que DEVSEL#. Un objetivo puede decidir, por transacción, si permite una transferencia de 64 bits.

Si se afirma REQ64# durante la fase de dirección, el iniciador también controla los 32 bits superiores de la dirección y una copia del comando del bus en la mitad superior del bus. Si la dirección requiere 64 bits, aún se requiere un ciclo de dirección dual, pero la mitad superior del bus transporta la mitad superior de la dirección y el código de comando final durante ambos ciclos de fase de dirección; esto permite que un objetivo de 64 bits vea la dirección completa y comience a responder antes.

Si el iniciador ve DEVSEL# afirmado sin ACK64#, realiza fases de datos de 32 bits. Los datos que se habrían transferido en la mitad superior del bus durante la primera fase de datos se transfieren en cambio durante la segunda fase de datos. Normalmente, el iniciador controla los 64 bits de datos antes de ver DEVSEL#. Si falta ACK64#, es posible que deje de controlar la mitad superior del bus de datos.

Las líneas REQ64# y ACK64# se mantienen afirmadas durante toda la transacción, excepto la última fase de datos, y se anulan al mismo tiempo que FRAME# y DEVSEL#, respectivamente.

La línea PAR64 funciona igual que la línea PAR, pero proporciona paridad uniforme sobre AD[63:32] y C/BE[7:4]#. Sólo es válido para las fases de dirección si se afirma REQ64#. PAR64 solo es válido para fases de datos si se afirman tanto REQ64# como ACK64#.

Espionaje de caché (obsoleto)

PCI originalmente incluía soporte opcional para la coherencia de la caché de reescritura . Esto requería soporte de objetivos de memoria caché, que escucharían dos pines del caché en el bus, SDONE (snoop done) y SBO# (snoop backoff). [34]

Debido a que esto rara vez se implementó en la práctica, se eliminó de la revisión 2.2 de la especificación PCI, [15] [35] y los pines se reutilizaron para el acceso SMBus en la revisión 2.3. [17]

El caché vigilaría todos los accesos a la memoria, sin afirmar DEVSEL#. Si detecta un acceso que podría estar almacenado en caché, reducirá el nivel de SDONE (no se realiza la exploración). Un objetivo que respalde la coherencia evitaría completar una fase de datos (afirmando TRDY#) hasta que observe SDONE alto.

En el caso de una escritura en datos que estaban limpios en el caché, el caché solo tendría que invalidar su copia y afirmaría SDONE tan pronto como se estableciera. Sin embargo, si el caché contenía datos sucios, el caché tendría que volver a escribirlos antes de que pudiera continuar el acceso. por lo que afirmaría SBO# al generar SDONE. Esto indicaría al objetivo activo que afirme STOP# en lugar de TRDY#, lo que provocaría que el iniciador se desconecte y reintente la operación más tarde. Mientras tanto, el caché arbitraría el bus y escribiría sus datos en la memoria.

Los objetivos que soportan la coherencia de la caché también deben finalizar las ráfagas antes de que crucen las líneas de la caché.

Herramientas de desarrollo

Una tarjeta PCI POST que muestra números de autoprueba de encendido (POST) durante el inicio del BIOS

Al desarrollar y/o solucionar problemas del bus PCI, el examen de las señales de hardware puede ser muy importante. Los analizadores lógicos y analizadores de bus son herramientas que recopilan, analizan y decodifican señales para que los usuarios las vean de manera útil.

Ver también

Referencias

  1. ^ Revisión 2.2 de la especificación del bus local PCI . Hillsboro, Oregón : Grupo de interés especial de PCI . 18 de diciembre de 1998. página ii.
  2. ^ "PCIe (Peripheral Component Interconnect Express) | En la placa base | Certificación de TI de Pearson". www.pearsonitcertification.com . Consultado el 25 de septiembre de 2020 .
  3. ^ "PCI". Web-o-pedia. Septiembre de 1996..
  4. ^ Hamacher, V. Carl; Vranesic, Zvonko G.; Zaky, Safwat G. (2002). Organización informática (5ª ed.). McGraw-Hill. ISBN 9780071122184.
  5. ^ "Tarjeta gráfica AMD HD 4350 edición PCI de HIS" . Consultado el 27 de julio de 2009 .
  6. ^ Imdad-Haque, Faisal (1996). Interior Tarjeta PC: CardBus y PCMCIA Diseño: CardBus y PCMCIA Diseño. Newnes. pag. 39.ISBN _ 978-0-08-053473-2.
  7. ^ Sumathi, S.; Surekha, P. (2007). Sistemas de instrumentación avanzada basados ​​en LabVIEW. Saltador. pag. 305.ISBN _ 978-3-540-48501-8.
  8. ^ Variación del bus PCI
  9. ^ ab Williams, John (2008). Diseño digital VLSI con Verilog: un libro de texto del Silicon Valley Technical Institute. Saltador. pag. 67.ISBN _ 978-1-4020-8446-1.
  10. ^ Bachmutsky, Alejandro (2011). Diseño de sistemas para pasarelas de telecomunicaciones. John Wiley e hijos. pag. 81.ISBN _ 978-1-119-95642-6.
  11. ^ VLB fue diseñado para sistemas basados ​​​​en 486, pero incluso el PCI más genérico ganaría prominencia en esa plataforma.
  12. ^ Meyers, Michael (2012). Guía de examen todo en uno de certificación CompTIA A + (8ª ed.). Profesional de McGraw Hill. pag. 339.ISBN _ 978-0-07-179512-8.
  13. ^ Identificar una variedad de ranuras PCI, LaCie
  14. ^ "Historia familiar de PCI" (PDF) .
  15. ^ Especificación de bus local PCI abcdef, revisión 3.0
  16. ^ "Cómo realizar el temporizador de latencia PCI". Reric.NET por Eric Seppanen. 2004-11-14 . Consultado el 17 de julio de 2008 .
  17. ^ Revisión 2.3 de la especificación del bus local PCI abcde . Portland, Oregón : Grupo de interés especial de PCI . 29 de marzo de 2002.
  18. ^ "Distribución de pines del conector PCI".
  19. ^ ab Especificación de la interfaz de administración de energía PCI v1.2
  20. ^ "archive.org/zuavra.net: uso de Wake-On-LAN WOL/PME para encender su computadora de forma remota". Archivado desde el original el 8 de marzo de 2007.
  21. ^ Redes ZNYX (16 de junio de 2009). "Serie ZX370". Archivado desde el original el 2 de mayo de 2011 . Consultado el 13 de julio de 2012 . La serie ZX370 es un verdadero adaptador de 64 bits, que amplía el canal de red para lograr un mayor rendimiento y al mismo tiempo ofrece compatibilidad con ranuras PCI estándar de 32 bits.
  22. ^ Redes ZNYX. "Adaptador Fast Ethernet PCI multicanal serie ZX370" (PDF) . Archivado desde el original (PDF) el 20 de julio de 2013 . Consultado el 13 de julio de 2012 . Compatible con versiones anteriores con ranuras PCI de 32 bits y 33 MHz
  23. ^ Adaptec (enero de 2000). "Referencia del usuario del controlador SCSI de la tarjeta Adaptec SCSI 29160 Ultra160" (pdf) . pag. 1 . Consultado el 13 de julio de 2012 . Aunque la tarjeta Adaptec SCSI 29160 es una tarjeta PCI de 64 bits, también funciona en una ranura PCI de 32 bits. Cuando se instala en una ranura PCI de 32 bits, la tarjeta se ejecuta automáticamente en el modo más lento de 32 bits.
  24. ^ LaCie. "Soporte de LaCie: identifique una variedad de ranuras PCI". Archivado desde el original el 4 de abril de 2012 . Consultado el 13 de julio de 2012 .
  25. ^ Revisión 3.0 de la especificación del bus local PCI . Hillsboro, Oregón : Grupo de interés especial de PCI . 3 de febrero de 2004. Figura 5-8.
  26. ^ Revisión 3.0 de la especificación del bus local PCI . Hillsboro, Oregón : Grupo de interés especial de PCI . 3 de febrero de 2004. Figura 5-9.
  27. ^ Revisión 3.0 de la especificación del bus local PCI . Hillsboro, Oregón : Grupo de interés especial de PCI . 3 de febrero de 2004. Figura 5-6.
  28. ^ Revisión 3.0 de la especificación del bus local PCI . Hillsboro, Oregón : Grupo de interés especial de PCI . 3 de febrero de 2004. Figura 5-7.
  29. ^ Micro PCI, Micro AGP (Preguntas frecuentes), iBASE, archivado desde el original el 11 de diciembre de 2001 , consultado el 20 de noviembre de 2010.
  30. ^ Roudier, Gérard (28 de noviembre de 2001). "Re: sym53c875: leer /proc provoca un error de paridad SCSI". kernel-linux (lista de correo).
  31. ^ ab Especificación del bus local PCI: Revisión 2.1 frente a Revisión 2.0 (PDF) (Nota de aplicación). Corporación Intel. Marzo de 1997. AP-753. Archivado desde el original (PDF) el 30 de abril de 2015.
  32. ^ "Detalles del bus: escritura de controladores de dispositivos para Oracle® Solaris 11.3". docs.oracle.com . Consultado el 18 de diciembre de 2020 .
  33. ^ Especificación de arquitectura de puente PCI a PCI, revisión 1.1
  34. ^ Especificación de bus local PCI, revisión 2.1
  35. ^ Revisión 2.2 de la especificación del bus local PCI . Hillsboro, Oregón : Grupo de interés especial de PCI . 18 de diciembre de 1998.

Otras lecturas

Especificaciones técnicas oficiales
Libros

enlaces externos

Oficial
Detalles técnicos
Listas de proveedores, dispositivos e identificaciones
Consejos
linux
Herramientas de desarrollo
Núcleos FPGA