Pular para o conteúdo principal

A história dos barramentos de expansão do PC (Parte 6 – PCI Express)

Prosseguindo a saga sobre as possibilidades de expansão da plataforma PC, neste episódio abordarei o PCI Express, atual padrão para a conexão de diversos tipos de periféricos e placas adaptadoras que substituiu de uma só vez o AGP, o PCI e o PCI-X (este último nos servidores de rede). Veremos também o motivo pelo qual o PCI Express não pode ser considerado um barramento propriamente dito. Como sempre, uma boa leitura!


O contexto histórico

No final dos anos 1990 e no início dos anos 2000, as possibilidades de expansão de um PC desktop típico eram o AGP, exclusivo para as placas de vídeo, e o PCI para as demais placas de expansão, sem falar que algumas placas mãe ainda traziam os antigos slots ISA para a conexão de placas de legado pouco exigentes, tais como fax-modems e placas de som. O PCI-X, evolução do PCI, praticamente não foi aplicado em placas mãe para desktops, apenas em servidores.

Esta aproximação foi suficiente durante vários anos, mas inevitavelmente em função da evolução dos padrões de hardware começou a mostrar certas limitações. O AGP já não satisfazia totalmente os requerimentos das mais novas e potentes placas de vídeo, tanto em taxa de transferência quanto na questão dos requerimentos elétricos (principalmente a potência máxima dissipada) do slot. Outra crítica ao AGP referia-se à sua falta de escalabilidade e possibilidade de expansão, em função do padrão prever somente um slot físico, o que impossibilitava a utilização simultânea de mais de uma placa de vídeo AGP (a aplicação de duas ou mais placas de vídeo na época era mais voltada para o uso de mais de um monitor. Como o AGP não oferecia possibilidade de expansão, aqueles que queriam usufruir de mais de um monitor tinham que recorrer às placas de vídeo PCI tradicionais).

Já o PCI, principalmente na sua implementação padrão de 32 bits e 33 MHz, também mostrava o peso da idade e não era mais capaz de satisfazer plenamente a demanda dos dispositivos mais exigentes, tais como as placas controladoras de discos e as placas de rede Gigabit Ethernet, apenas para citar alguns exemplos. Desta forma, o velho paradigma de que as possibilidades de expansão do PC não acompanhavam a evolução do hardware mais uma vez se mostrava presente.

Com este cenário em vista, um consórcio composto pela Intel, IBM, Dell e HP desenvolveu um novo padrão que promete ser uma solução mais longeva para a conexão de periféricos ao PC: o PCI Express (Peripheral Component Interconnect Express).

O PCI Express

Anunciado em 2004, o PCI Express (que chamarei apenas de PCIE) substituiu de uma só vez o AGP, o PCI e o PCI-X (este último nos servidores), trazendo inúmeras melhorias sobre os padrões anteriores: o foco do seu desenvolvimento foi voltado principalmente às questões de escalabilidade e flexibilidade, que eram os principais pontos fracos dos padrões anteriores.

Basicamente o PCIE é uma conexão serial ponto-a-ponto, motivo pelo qual não pode ser considerado propriamente um barramento - neste há um compartilhamento do meio de transmissão (mantive a palavra “barramento” no título da postagem apenas para manter a sequência da série), o que não ocorre em conexões ponto-a-ponto. Como a conexão é serial, os dados são transmitidos bit a bit entre o transmissor e o receptor, em contraste com a comunicação paralela utilizada pelos padrões anteriores onde mais de um bit é transmitido por pulso de frequência. Olhando superficialmente pode parecer que a comunicação serial será sempre mais lenta do que a paralela, mas veremos que isto nem sempre é verdade.

Placa de vídeo PCIE 3.0 x16

Comunicação serial x paralela

No modo de comunicação paralelo, vários bits são transmitidos em conjunto (tipicamente 8, 16, 32 ou 64 bits) e para que a transmissão seja bem sucedida os bits devem chegar ao receptor em um sincronismo perfeito, caso contrário o mesmo acusará um erro na transmissão e solicitará ao transmissor um reenvio dos dados, o que penaliza o desempenho. Esta é a metodologia usada por todos os barramentos de expansão e conexões do padrão PC até então: ISA (8 ou 16 bits), EISA (32 bits), VLB (32 bits), PCI (32 ou 64 bits) e AGP (32 bits). A transmissão paralela naturalmente também é mais suscetível a interferências eletromagnéticas.

O PCIE inovou por introduzir o padrão serial em uma comunicação ponto-a-ponto. No modo serial os dados são transmitidos bit a bit, em série. Por não haver a necessidade de ser mantida uma sincronia entre os bits enviados (afinal das contas eles são transmitidos um de cada vez) é possível utilizar uma frequência maior de transmissão, que também está muito menos sujeita a interferências eletromagnéticas - dois fatores que no final das contas acabam compensando com sobras o fato de ser transmitido apenas um bit por vez.

Esquema de transmissão paralela de um dado de 8 bits. Os bits devem ser mantidos em perfeita sincronia


Transmissão serial também de 8 bits. Os bits são transmitidos um a um

O fato de o PCIE ser serial trouxe também outras vantagens: faz com que o slot seja mais compacto e utilize um menor número de contatos, o que torna a sua implementação nas placas mãe menos complexa e também menos sujeita a problemas físicos no encaixe das placas de expansão (o famoso “mau-contato”), problema que era crônico nos slots VLB mas que também acontecia nos slots PCI e AGP.

Pistas (ou linhas) PCIE

Como uma das principais premissas do PCIE é a escalabilidade, o mesmo foi organizado em pistas (do inglês, lanes). Cada pista PCIE consiste em dois canais de transmissão serial ponto-a-ponto, em sentidos opostos:

Esquema de uma pista PCIE

Este tipo de organização em pistas permite que o PCIE tenha uma flexibilidade quase ilimitada, pois cada slot do padrão pode ser conectado a uma ou mais pistas. Um slot PCIE conectado a uma única pista é chamado de x1, a quatro pistas x4, a oito pistas x8, a dezesseis pistas x16 e a trinta e duas pistas x32, muito embora este último tipo ainda não foi implementado. Outra grande sacada em termos de flexibilidade é que placas de diferentes “tamanhos” podem ser utilizadas em slots com diferente número de pistas. Por exemplo, uma placa x1 pode ser conectada a um slot x16 sem problemas.

Tipos de slots PCIE: x16 (1, 2 e 5), x16 com 8 pistas (3 e 7) e x1 (4 e 6)

Em termos elétricos, cada slot x1 pode fornecer até 10 W de potência, enquanto que os x4 e x8 até 25 W e o x16 até 75 W (sendo que as placas adaptadoras que tenham um alto consumo elétrico, tais como as placas de vídeo, podem ter conectores de alimentação discretos). O PCIE também prevê suporte ao padrão Hot Plug, que torna possível inserir e remover dispositivos com o sistema ligado, muito embora que para isto tanto o slot quanto a placa adaptadora devem ser compatíveis com o padrão.

Detalhe dos conectores elétricos PCIE discretos de uma placa de vídeo

Revisões do PCIE

A revisão inicial do PCI Express foi a 1.0a, sendo seguida pela 1.1 apresentada em 2005. Em ambas as revisões cada pista PCIE possui uma taxa de transferência máxima teórica de 250 MB/s (logo um slot x16 1.X oferece uma taxa máxima de 4.000 MB/s, quase o dobro do AGP 8X). Utiliza o algoritmo de codificação 8b/10b, que a grosso modo significa que são transmitidos 10 bits para representar cada conjunto de 8 bits de dados (os 2 bits adicionais sendo de controle), o que gera uma perda de 20% na taxa de transferência bruta.

Em 2007 foi apresentada a revisão 2.0, que ampliava a taxa de transferência de cada pista para 500 MB/s (resultando em 8.000 MB/s em 16 pistas). Possui retrocompatibilidade completa com a revisão 1.X, ou seja, placas 2.0 funcionam em slots 1.X (embora operando com uma menor taxa de transferência, logicamente) da mesma forma que placas 1.X funcionam em slots 2.0. Manteve o esquema de codificação 8b/10b.

Já a revisão 3.0 foi apresentada em 2010 e aumenta a taxa de transferência de cada pista para algo em torno de 1.000 MB/s (16.000 MB/s em x16) com diversas melhorias no padrão de sinalização, entre elas a codificação 128b/130b, onde para cada grupo de 128 bits são transferidos 130 bits – ou seja, com os mesmos 2 bits de controle são transferidos 128 bits, o que reduz a perda em relação à taxa de transferência bruta para algo em torno dos 1,54% apenas. Esta revisão manteve compatibilidade total com as revisões 2.0 e 1.X.

Atualmente está no forno a revisão 4.0 que promete elevar a taxa de transferência de cada pista para 2.000 MB/s. Para efeito de comparação, cada pista PCIE 4.0 oferecerá uma taxa de transferência equivalente ao do AGP 8X com uma fração da complexidade de implementação. Um slot PCIE 4.0 x16 terá uma taxa de transferência máxima teórica de incríveis 32.000 MB/s!

Placa de rede PCIE x1

Protocolo e camadas

O protocolo de implementação do PCI Express é dividido em três camadas: transaction layer, data link layer e a physical layer (respectivamente, camadas de transação, canal de dados e física). A camada física por sua vez é divida entre as subcamadas elétrica e lógica, sendo que esta última contém o esquema de codificação (8b/10b ou 128b/130b, dependendo da revisão do PCIE). A subcamada elétrica, como o próprio nome diz, atua no fornecimento da tensão, corrente e dissipação de potência exigida pela placa adaptadora.

É na camada do canal de dados onde é feita a transmissão dos bits propriamente dita e também onde é verificado se os dados foram recebidos com integridade. Para tanto, são utilizados 32 bits de código do tipo CRC (Cyclic Redundancy Check, ou checagem de redundância cíclica) que permite ao dispositivo receptor calcular a integridade do pacote recebido. Caso a integridade não puder ser comprovada, o pacote é descartado e o receptor envia ao transmissor uma mensagem do tipo NAK (Negative Acknowledgement Message, ou mensagem de reconhecimento negativo) que indica que o pacote não foi recebido íntegro e deve ser retransmitido. Por outro lado, caso o pacote de dados tenha sito checado e confirmado é enviada a mensagem ACK (Acknowledgement, ou reconhecimento) que indica o sucesso na transmissão. Também é importante destacar que o PCIE transmite todas as mensagens de controle e os pedidos de interrupções pelo mesmo canal de dados.

Já a camada de transação é utilizada para permitir que dois dispositivos PCIE sejam pareados para estabelecerem comunicação entre si. A implementação da camada de transação do PCIE é baseada no conceito de créditos: cada dispositivo informa a quantidade de “créditos” que possui o seu buffer (que é uma pequena quantidade de memória utilizada para armazenar temporariamente dados e instruções) na camada de transação e só pode receber dados enquanto os seus créditos não estourarem. Sempre que um dado recebido pela camada de transação é processado e repassado para a camada de dados o dispositivo repõe os devidos créditos.

Placa controladora de disco PCIE x4

Ufa! Chegamos ao final da conceituação sobre o PCI Express, que substituiu com vantagens todos os barramentos e conexões internas anteriores e atualmente é o padrão indiscutível de interface de expansão dos PCs. Como curiosidade, da mesma forma que ocorreu com o padrão ISA, algumas placas mãe ainda oferecem slots PCI tradicionais para a utilização com placas adaptadoras de legado, sendo que este barramento é interligado com o PCI Express através de um circuito do tipo ponte, que pode ser tanto um chip discreto como pode estar integrado no chipset da placa mãe.

Um grande abraço e até a próxima!

Anterior:

Comentários