Hardware - O barramento PCI

Hardware - O barramento PCI

10/01/2018

| Escrito por:

  Este artigo detalha o funcionamento da interface PCI. É recomendável a leitura dos artigos sobre clock, bits e Bytes e pares diferenciais para que fique mais fácil de entender este texto.

Slots PCI (na cor branco) e o chip Ponte Sul (SiS 964) numa placa-mãe Abit SG-80

 

  Lançado em 22 de junho de 1992 pela Intel Corporation, durante o desenvolvimento do Pentium |||, o barramento PCI (Peripheral Component Interconnect - Interconexão de Componentes Periféricos) foi o padrão definitivo para o mercado. Devido ao sucesso do padrão, em poucos anos outras empresas se uniram a Intel e criaram o PCI-SIG (PCI Special Interest Group ou Grupo de Interesse Especial PCI). Com tempo foi criado uma variação chamada de PCI-X (Peripheral Component Interconnect eXtended - Interconexão de Componentes Periféricos Estendida), AGP (Accelerated Graphics Port - Porta Gráfica Acelerada) e por fim, o PCI Express que é completamente diferente e utilizado até os dias atuais. Já temos um artigo sobre o padrão PCI Express! Confira!

  O barramento PCI foi considerado um padrão da indústria pois todos os outros eram projetados para uma plataforma específica e quando esta plataforma ficava obsoleta, outro padrão tinha que ser criado. O controlador PCI foi adicionado ao chip Ponte Sul da placa-mãe e mesmo após o lançamento de outro processador, com socket diferente, clocks mais altos e novas tecnologias, bastava a fabricante redesenhar ou fazer algumas adaptações no chipset, mas, mantendo o mesmo circuito do controlador PCI.

  O controlador PCI 1.0 foi concebido inicialmente para trabalhar com clock de no máximo 33 MHz e 32 trilhas de comunicação para transferência de dados no modo half-duplex, ou seja, enviar e receber dados pelo mesmo caminho. Alguns anos depois foi lançada uma nova versão de 66 MHz. Outra peculiaridade deste padrão é que vários dispositivos podem ser conectados no mesmo barramento, portanto, independente da quantidade de slots PCI, só haverá 1 controlador PCI no chipset Ponte Sul. É válido lembrar que, todos os dispositivos conectados no barramento PCI também possuem controlador PCI para poder se comunicarem.

  O barramento PCI também é Plug And Play, assim como a interface USB, por exemplo. A configuração de endereços IRQ, DMA e I/O é automática, a única coisa que o usuário deve fazer é instalar o driver do dispositivo conectado para que ele seja reconhecido pelo sistema operacional.

  Outra tecnologia introduzida no barramento PCI é o Bus Mastering: esta tecnologia permite que um dispositivo PCI acesse a memória RAM para gravar e ler informações sem a intervenção do processador. Isso faz com que o processador seja poupado de sobrecargas. Mas como assim? Enquanto a CPU está ocupado com outros processos, o controlador PCI pode gravar e ler dados na memória RAM sem que a CPU execute um processo exclusivamente para o barramento PCI. O Bus Mastering é uma melhora feita no DMA (Direct Memory Access - Acesso Direto a Memória).

 

  A taxa de transferência máxima teórica do barramento PCI de 33 Mhz é de 133 MB/s e será dividida entre todos os dispositivos que estiverem conectados ao barramento. Na versão utilizada atualmente,  o clock é de 66 Mhz e a taxa de transferência é de 264 MB/s. É aí que estão os gargalos. Não adiantaria, por exemplo, conectar uma placa Gigabit LAN num barramento PCI que está sendo usado também para uma placa de áudio. A placa Gigabit LAN consegue receber e enviar dados para a rede mundial de computadores numa taxa de transferência máxima teórica de 125 MB/s. Ao conectar uma outra placa neste barramento, a taxa de transferência máxima teórica do barramento PCI será dividido entre as duas, ou seja, se o clock for de 33 MHz, no máximo 66 MB/s para cada uma. Isso se agrava caso mais placas estejam utilizando o barramento.

  Para que os dispositivos PCI se comuniquem com o controlador da placa-mãe sem conflitos, há um parâmetro no BIOS chamado "PCI Latency Timer" (nem todas as placas-mãe possuem este parâmetro acessível ao usuário). Para entender isso você deve ter em mente que, por exemplo, um clock de 66 MHz significa 66 milhões de ciclos de clock. Este parâmetro é padronizado em 32 ou 64 ciclos de clock (isso depende da placa-mãe) e serve para definir o tempo (quantos ciclos de clock) que cada dispositivo PCI terá para se comunicar com o controlador da placa-mãe pelo barramento. Algumas placas oferecem valores que vão até 248 ciclos de clock, mas ao utilizar valores tão altos e vários dispositivos estiverem utilizando o barramento, podem haver lentidões no sistema, pois cada dispositivo terá mais tempo para se comunicar com a placa-mãe.

  Para mais de talhes, leia o artigo sobre clock:   https://hardwarecentrallr.wixsite.com/hardcentral/single-post/2017/10/25/Hardware---Clock

  Leia também sobre os bits e Bytes:   https://hardwarecentrallr.wixsite.com/hardcentral/single-post/2017/11/01/Hardware---Bytes-e-bits

 

 

 Ao lado, uma placa de rede Ethernet com interface PCI. Outros exemplos de placas PCI são: Placas de vídeo das extintas 3Dfx e S3 Graphics, placas de vídeo da ThiNetWorks com o chip ATi Rage XL para multiterminais (era muito utilizado nos computadores de escolas públicas do Paraná), placas áudio antigas da marca Creative Labs, as famosas placas de conexão discada de 56 Kbps e chips de rede com interface PCI, como por exemplo, o RealTek RTL8139D. Existem dezenas de outras marcas que fabricavam placas de áudio, rede, vídeo, USB, Receptor de TV e etc, com interface PCI.

 

  Estes gargalos são atuais, já que na época em que a Intel lançou o barramento PCI não existiam placas Gigabit LAN, Wi-Fi, placas de vídeo de alto desempenho, arquivos de vídeo em alta resolução ocupando vários GigaBytes, o que fez as placas expansíveis PCI se tornarem muito utilizadas, tanto que, placas-mãe do padrão AT (Advanced Technology) não tinham saída de vídeo, portas USB, Ethernet, áudio e outros conectores, apenas um monte de slots ISA / eISA, VLB e até mesmo PCI para conectar todos os controladores.

  Com o passar dos anos surgiu uma variação do slot PCI: o PCI-X. Sua principal diferença é uma extensão no slot que permitia uma conexão de 64 bits, o dobro do PCI original. Dentro do padrão PCI-X havia diferentes revisões com clock mais alto e transferências de dois (DDR) ou quatro (QDR) bits por ciclo de clock. O PCI-X vingou em algumas placas do padrão AT, como você pode ver na imagem acima, e também em placas de servidor. Sua aplicação em placas-mãe de computadores pessoais era mais cara e não fazia muito sentido, já que, o PCI original dava conta do recado na época.

  É válido lembrar que todas as versões do barramento PCI são compatíveis entre si. Por exemplo, ao conectar um dispositivo PCI com o clock de 33 MHz num barramento de 66 MHz, o controlador da placa-mãe irá reconhecer o dispositivo conectado e limitar todo o barramento a 33 MHz. No caso de conectar um dispositivo com barramento de 32 bits num slot de 64 bits, o controlador da placa-mãe vai trabalhar tanto com os dispositivos de 64 bits quanto com os de 32 bits. Ao conectar um dispositivo de 64 bits num slot de 32 bits, o controlador da placa-mãe só vai poder utilizar 32 bits. Veja a imagem abaixo:

  Surgiu também uma versão chamada de miniPCI feita especialmente para notebooks e dispositivos menores, compactos. Esta versão foi abandonada em poucos anos e substituída pelo ExpressCard, miniPCIe e outros padrões que apresentavam desempenho superior.

  O CompactPCI foi uma versão muito incomum, pois durou poucos anos no mercado e era destinado a indústria, que necessitava de um conector mais robusto e que ocupasse menos espaço nos circuitos.

  Abaixo você vê as principais variações e versões do slot PCI:

   Abaixo, a quantidade de pinos de cada modelo de slot:

 

   Abaixo, você vê a pinagem do slot PCI e PCI-X:

  Agora, note a pinagem do slot na placa-mãe:

 O pino marcado como "Pino 1" se refere ao pino "A1" do diagrama mostrado acima.

  Selecionamos três esquemas elétricos de placa-mãe com o circuito do slot PCI e as saídas e entradas do controlador PCI no chipset Ponte Sul. As placas selecionadas são da marca Gigabyte. Observe a imagem abaixo:

Esquema elétrico dos slots PCI da placa-mãe GBT GA-M55S S3 Rev.: 2.02

 

  Abaixo, as saídas do controlador PCI de três modelos de chipset:

 Esquema elétrico da placa-mãe GBT GA-M59SLI S4 Rev.: 1.00 (Controlador PCI do chipset nVidia MCP55).

 

 Esquema elétrico da placa-mãe GBT GA-M55S S3 Rev.: 2.02 (Controlador PCI do chipset nVidia MCP55).

 

 Esquema elétrico da placa-mãe GBT GA-M55S S3 Rev.: 2.02 (Controlador PCI do chipset nVidia MCP61).

 

  Perceba que, junto do controlador PCI há o controlador LPC, responsável por fazer a comunicação da Ponte Sul com o Super I/O e em algumas placas-mãe se comunicar também com o chip de memória ROM Flash e placa TPM. Todos os esquemas adicionados a este artigo são válidos para outros circuitos PCI de outras placas-mãe pois, como foi dito, o barramento PCI é um padrão.

 

  Agora, vamos focar nas características de variações do slot PCI que não foram muito populares no mercado. Abaixo, o diagrama do slot MiniPCI de 100 Pinos:

   Abaixo, o conector MiniPCI de 124 Pinos:

  Agora, note a pinagem do slot na placa-mãe:

  Veja esta outra imagem, de uma placa de rede para slot MiniPCI:

 Pra fechar a sessão de imagem do slot MiniPCI, veja a placa de rede montada no slot:

 

DESCRIÇÃO DOS PINOS

  Agora, a descrição dos pinos de todos os slots detalhados neste artigo:

 > -12 Volts / + 12 Volts: Alimentação elétrica com tensão negativa e positiva de 12 Volts.

 

 > + 5 Volts / 5V: Alimentação elétrica com tensão positiva de 5 Volts.

 

 > + 3,3 Volts / 3,3V / 3,3 VAUX: Alimentação elétrica com tensão positiva de 3,3 Volts.

 

 > + 5 Volts ou + 3,3 Volts: Alimentação elétrica com tensão selecionável de + 5 Volts ou +3,3 Volts.

 

 > Polo negativo / TERRA: Linhas onde circulam corrente elétrica em direção ao polo positivo. Podem ser utilizadas como proteção contra interferência eletromagnética.

 

 > Reservado / RESERVADO: Pinos não utilizados.

 

 > Endereço / Dados (X) ou AD [X] : Linhas para transferência de endereço e dados. São 32 linhas para os slots PCI e MiniPCI e 64 para os slots PCI-X e CompactPCI.

 

 > Seleção de dispositivo / DEVSEL #: Seleciona um dispositivo conectado ao barramento PCI.

 

 > Clock / CLK: Sinal de sincronismo. PCI, MiniPCI, CompactPCI (33MHz), PCI-X e CompactPCI (66 MHz) e PCI-X (133 MHz).

 

 > Requisição / REQ #: Requisição de uso do barramento PCI.

 

  > Reconhecimento de uso / GNT# : Concessão de uso do barramento feita pela placa-mãe.

 

 > Reset / RST #: Reset de todos os dispositivos conectados ao barramento.

 

 > Pare / RARE # / Stop # : Indicador de parada de transação de dados.

 

 > Paridade / PAR : sinais de paridade. Método para evitar erros nas transmissões de dados.

 

 > Erro do sistema / SERR #: Erros relacionados ao sistema de controle do barramento PCI.

 

 > Erro de paridade / PERR #: Erro no cálculo de paridade. O dispositivo ou o controlador PCI, ao receber este sinal, deve reenviar os dados com o cálculo de paridade refeito.

 

 > Ciclo de quadro de dados / QUADRO, ARMAÇÃO #: Habilita o envio de um quadro de dados para um dispositivo PCI pelas linhas AD [X]. É como se fosse uma linha "#FRAME" ou "STROBE".

 

 > Inicialização do dispositivo selecionado / IDSEL #: Seleção de inicialização.

 

 > Clock de teste / CLKRUN #: Clock do sistema de teste de dispositivo PCI.

 

 > Interrupção A / Interrupção B / Interrupção C / Interrupção D / INTA # / INTB # : Interrupções do sistema.

 

 > Alvo pronto / TRDY e Iniciação pronta / YRDI : Transmissor pronto e Iniciador pronto, respectivamente.

 

 > Comando / Byte Ativado (X) ou C / BE [X] # : Linhas de transferências de comandos relacionados à leituras e escritas de I/O e memória pelas linhas AD [X], além de, outros comandos de controle. Abaixo você confere a tabela de códigos que podem ser enviados pelas linhas "C/BEx#":

Agora, a explicação de cada comando enviado pelas linhas "C/BEx":

----> Interromper reconhecimento (0000): O Controlador de Interrupção reconhece e reage automaticamente ao comando "INTA #" (interrupção de reconhecimento). Na fase de dados, ele transfere o vetor de interrupção para as linhas do AD [X];

 

----> Ciclo especial (0001): São 4 códigos enviados pelas linhas AD [X] quando o 'Ciclo especial' é enviado pelas linhas "C/BEx". Veja-os abaixo:

 

 ----> I / O Leitura (0010) e I / O Escrita (0011): Operação de leitura ou gravação do dispositivo de Entrada / Saída. As linhas "AD [X]" contêm um endereço de bytes (sendo que "AD [0]" e "AD [1]" devem ser decodificados). As portas 'PCI I / O' podem ter 8 ou 16 bits, mas o barramento PCI permite 32 bits de espaço de endereço. O espaço de configuração PCI também pode ser acessado pelas portas de I / O 0x0CF8 (Address) e 0x0CFC (Data). A porta de endereço deve ser acessada primeiro.

  OBS.: Em máquinas compatíveis com IBM, a CPU Intel é limitada a 16 bits de espaço de I / O, e, em alguns casos, é ainda mais limitada por placas ISA que também podem ser instaladas na máquina (muitas placas ISA decodificam apenas os 10 bits inferiores de espaço de endereço, desta forma, observar todo o espaço de I / O de 16 bits). Esse limite pressupõe que a máquina suporta slots ISA ou eISA além dos slots PCI;

----> Leitura de memória (0110) e Escrita de memória (0111): Significa uma leitura ou gravação no espaço de memória do sistema. Neste caso, as linhas "AD [0]" e "AD [1]" não precisam ser decodificados. Todas as linhas "AD [X]" contêm um endereço de palavra dupla. As linhas de ativação de bytes ("C/BEx") indicam quais bytes são válidos;

----> Leitura de Configuração (1010) e Escrita de Configuração (1011): Estes códigos são para leitura ou escrita no espaço de configuração do dispositivo PCI, que tem 256 bytes de comprimento. É acessado em unidades de palavra dupla.

     ->> "AD [0]" e "AD [1]" contêm o valor 0;

     ->> "AD [2]" ao "AD [7]" contêm o endereço de palavra dupla;

     ->> "AD [8]" ao "AD [10]" são usados ​​para selecionar a unidade endereçada a unidade de falha;

     ->> As demais linhas "AD [X]"não são usadas.

  Veja a imagem abaixo com parte do sistema de configuração:

----> Leitura de Memória Múltipla (1100): Esta é uma extensão do ciclo de barramento de leitura de memória. Ele é usado para ler grandes blocos de memória sem armazenamento em cache, o que é excelente para longos acessos de memória sequencial;

----> Ciclo de Endereços Duplos (1101): Dois ciclos de endereço são necessários quando um endereço de 64 bits é usado, mas existe apenas um endereço físico de 32 bits. A parte menos significativa do endereço é colocada primeiro nas linhas AD, seguidas pelos 32 bits mais significativos. O segundo ciclo de endereço também contém o comando para o tipo de transferência (I / O, Read / Write, etc).

  OBS.: O barramento PCI suporta um espaço de endereço de I / O de 64 bits, embora isso não esteja disponível em muitos PCs baseados em Intel devido a limitações da CPU;

----> Linha de leitura de memória (1110): Este ciclo é usado para ler mais de dois blocos de dados de 32 bits, normalmente até o final de uma linha de cache. É mais eficiente que as rajadas de leitura de memória normal para uma longa série de acessos de memória sequencial.

----> Gravação de Memória e Invalidação (1111): Isso indica que um mínimo de uma linha de cache deve ser transferido. Isso permite que a memória principal seja atualizada, economizando um ciclo de write-back do cache.

 

 > O restante dos pinos não explicados dos slots MiniPCI são para aplicações específicas de áudio com codecs AC'97, além de outros fins que fogem do escopo deste artigo.

 

SOBRE O SLOT CompactPCI

  O slot CompactPCI não será detalhado pois, como foi dito, ele é muito incomum e foi pouco utilizado. O princípio de funcionamento dele é o mesmo: são 2 tipos de slots, que fisicamente são idênticos, mas um tem apenas 32 pinos ativos e o outro possui todos os 64 pinos com o clock de 66 MHz. Na maioria da placas-mãe, dependia do fabricante utilizar todos os pinos do slot ou não. Veja abaixo uma imagem do slot CompactPCI:

 

  Anteriormente, havíamos exposto algumas informações sobre o barramento ISA. Para conhecer profundamente o barramento ISA e eISA, CLIQUE AQUI!

 

PRINCIPAIS LINHAS E DIAGRAMA DE TIMING'S

  Abaixo, o diagrama com as principais linhas do barramento PCI:

  O barramento AGP utiliza todos estes sinais obrigatórios, além de algumas linhas extras para funcionar.

  CLIQUE AQUI e conheça também a evolução do barramento PCI: O AGP. É notável que o barramento AGP é muito semelhante.

 

  Veja abaixo, o diagrama de timing simulando uma transferência de dados no barramento PCI (também válido para o barramento AGP):

   Quando, se incluem 'Wait States' (Estados de Espera) na transmissão de dados, eles são inseridos nas linhas "IRDY" e "TRDY". Os 'Wait States' tem o objetivo de, digamos, atrasar a transferência dos dados durante um determinado período de tempo para não sobrecarregar o sistema em alguns momentos. Veja um diagrama de transmissão de dados utilizando 'Wait States' abaixo:

   Como você pode ver nos dois diagramas acima, há uma representação simbólica de apenas uma linha "C/BE [X]" com 1 bit do comando, sendo que no barramento PCI de 32 bits há 4 linhas "C/BE [X]" para transferir os 4 bits do comando.

 

  CURIOSIDADE: A placa-mãe PC Chips A31G foi projetada com um "armengue" no barramento PCI para suportar também um slot AGP. A ideia não foi muito boa, apesar dos dois barramentos serem muito parecidos. Você pode conferir detalhes CLICANDO AQUI!

   Na figura 1 você vê o diagrama de blocos do controlador PCI e na figura 2, os sinais PCI com tabela de descrição de pinos juntamente com a direção que os dados vão em cada linha (a letra "Z" significa que a linha possui alta impedância). Abaixo você vê a descrição dos circuitos internos do controlador PCI:


 > Address Decode: Este bloco recebe os dados de controle de transações do barramento PCI e decodifica esses dados para determinar se a transação foi direcionada ao este dispositivo PCI ou não. Este bloco instrui a máquina do Estado Escravo a aceitar ou ignorar as transações de dados conforme elas são apresentadas no barramento PCI;


> Slave State Machine: Este bloco gera e monitora todos os sinais PCI necessários para aceitar transações no barramento PCI. Todas as funções de gerenciamento de protocolos PCI escravos são divididas entre o decodificador de endereço e os blocos de Slave State Machine;


 > Slave Back End Interface: Este bloco aceita transações da Slave State Machine e transmite essas transações para o domínio do outro circuito. Este bloco executa a dissociação assíncrona entre o domínio do PCI e o domínio de outro circuito que se comunica pelo barramento PCI como um escravo. Também implementa o controle de tradução de endereços, registra e executa a tradução de endereços para transações escravas;

 

 > Master Back End Interface: Este bloco aceita transações do barramento PCI a partir da interface de back-end e passa essas transações para o Master State Machine. Este bloco também executa a dissociação assíncrona entre o domínio do outro circuito e o domínio do circuito PCI para transações principais. Este bloco implementa os registros de controle de tradução de endereço mestre e também executa a tradução de endereços para transações principais;

 

 > Master State Machine: Este bloco gera e monitora todos os sinais PCI necessários para iniciar transações no barramento. A maioria das funções de gerenciamento de protocolos mestre PCI são implementadas neste bloco. Este bloco responde às solicitações de transferência que são apresentadas a partir da interface Master Back End Interface;

 

 > Output Mux.: Este circuito multiplexa o endereço Mestre, os dados de gravação Mestre, os dados de leitura da configuração do escravo (que receberá os dados) que a memória escrava lê nos pinos AD em momentos específicos. Este bloco é controlado por vários dos outros blocos no controlador PCI;

 

 > Configuration Registers: Este bloco implementa os registros de configuração do barramento PCI necessários e alguns dos registros do Back-end Interface Master e Slave. Esses registros controlam os modos e opções (a configuração geral do barramento) PCI e fornecem informações vitais para o host PCI (dispositivo conectado ao barramento);

 

 > Error Handler: Este bloco monitora as condições de erro que podem ocorrer no barramento PCI, isto é, erros de paridade e erros do sistema;

 

 > Back End Registers Interface: Este bloco implementa a função de ponte assíncrona que permite que o circuito conectado ao controlador PCI acesse os registros de configuração de PCI, os registros de tradução de endereço Mestre e Escravo e outros controles e registros do controlador PCI. Este bloco também implementa alguns registradores de controle / status PCI que residem no domínio do circuito conectado ao Back-end Interface (circuito conectado ao controlador PCI).

 

  Observação: Texto traduzido de uma documentação técnica da Texas Instruments sobre o barramento PCI. O URL do PDF estará disponível no final do artigo.

 

  Uma explicação simples para resumir todos estes tópicos: O Master Back-end Interface pega os dados vindos do circuito conectado e manda eles para o receptor juntamente com o endereço dele e informações do emissor através do Output Multiplexer.

  Para receber dados, o Address Decode verifica se o endereço dos dados corresponde ao que lhe foi dado e se sim, ele repassa a informação para o Slave Back-end Interface que transfere-os para o circuito conectado. As configurações de registro e interface de registro de back-end servem para manter as configurações do barramento PCI e comunica-las ao circuito conectado.

  Master State Machine e Slave State Machine cuidam de endereços do barramento e comandos para gravação e leitura na memória principal (memória RAM) através do circuito Bus Mastering Engine.

  Este foi o "artigo retrô" sobre antigas tecnologias que fizeram sucesso e duraram anos no mercado! Até 2017, ainda eram vendidas placas-mãe com slots PCI! A ASUS M5A78L-M/USB3 possui dois slots ligados ao chipset Ponte Sul AMD SB700. A AsRock N68 GS4 FX R2.0 de 2015 também tem 2 slots PCI ligados ao Chipset nVidia nForce 630a.

  Ficou com dúvidas? Achou que faltou algo? Mande suas palavras para hardwarecentrallr@gmail.com. Gostou do artigo? curta, compartilhe e comente!

CRÉDITOS e FONTES

 

Texto, imagens, tabelas e diagramas: Leonardo Ritter

Fontes: Banco de esquemas elétricos do HC; Clube do Hardware; InfoWester; Hardware.com; Texas Instruments (http://www.ti.com/lit/ug/sprue60b/sprue60b.pdf); Engenharia reversa praticada pelo autor do artigo.

 

Última atualização: 19 de Novembro de 2018.

Please reload

© 2019 Hardware Central Tecnologia Entretenimento e Comunicação do Brasil Ltda. Todos os direitos reservados.

Wix Editor / Revisão da web page: 3.0/2019 (07/10/19)