PCI Express (PCIe) existe depuis 2003 et a réussi à devenir l’interconnexion de données principale non seulement pour les cartes d’extension, mais aussi pour les périphériques externes à haut débit. Ce qui rend également le PCIe intéressant, c’est qu’il remplace l’utilisation généralisée des bus parallèles par des liaisons série. Au lieu d’avoir un bus avec un support commun (traces) auquel plusieurs périphériques se connectent, PCIe utilise un complexe racine qui se connecte directement aux points d’extrémité PCIe.

Ceci est similaire à la façon dont Ethernet utilisait à l’origine une configuration de bus, avec une dorsale commune (câble coaxial), mais Ethernet moderne (à partir des années 90) est passé à une configuration point à point, assistée par des commutateurs pour permettre une commutation dynamique entre laquelle des points (appareils) sont connectés. PCIe offre également la possibilité d’ajouter des commutateurs qui permettent à plus d’un point d’extrémité PCIe (un périphérique ou une partie d’un périphérique) de partager une liaison PCIe (appelée «voie»).

Ce changement d’un bus parallèle à des liaisons série simplifie beaucoup la topologie par rapport à ISA ou PCI où le temps de communication devait être partagé avec d’autres périphériques PCI sur le bus et seul un fonctionnement en semi-duplex était possible. La possibilité de regrouper plusieurs voies pour fournir moins ou plus de bande passante à des ports ou des périphériques spécifiques a signifié qu’il n’y avait pas besoin d’un emplacement pour carte graphique spécialisé, en utilisant par exemple un emplacement PCIe x16 avec 16 voies. Cela signifie cependant que nous utilisons des liaisons série qui fonctionnent à plusieurs GHz et doivent être implémentées sous forme de paires différentielles pour protéger l’intégrité du signal.

Tout cela peut sembler un peu au-delà des moyens de l’amateur moyen, mais il existe encore des moyens de s’amuser avec le piratage PCIe, même s’ils n’impliquent pas la mise en forme de puces 7400 logiques et le débogage avec un oscilloscope budgétaire à 100 MHz, comme avec les bus ISA.

Paires différentielles de demande d’horloges élevées

La version 1.0 de PCIe augmente le taux de transfert maximal par rapport au PCI 32 bits de 133 Mo / s à 250 Mo / s. C’est à peu près la même chose qu’une connexion PCI-X 64 bits (à 133 MHz) si quatre voies sont utilisées (~ 1064 Mo / s). Ici, les voies PCIe sont cadencées à 2,5 GHz, avec des paires d’émission / réception de signalisation différentielle dans chaque voie pour un fonctionnement en duplex intégral.

Aujourd’hui, PCIe 4 est progressivement adopté à mesure que de plus en plus de systèmes sont mis à niveau. Cette version de la norme fonctionne à 16 GHz, et la version PCIe 5 déjà publiée est cadencée à 32 GHz. Bien que cela signifie beaucoup de bande passante (> 31 Go / s pour une liaison x16 PCIe 4), cela entraîne le coût de générer ces transitions rapides, de garder ces liaisons de données pleines et de conserver les données intactes pendant plus de quelques millimètres. Cela nécessite quelques technologies intéressantes, principalement la signalisation différentielle et SerDes.

Visualisation de base du fonctionnement de la signalisation différentielle.

La signalisation différentielle est couramment utilisée dans de nombreux protocoles de communication, notamment RS-422, IEA-485, Ethernet (via un câblage à paire torsadée), DisplayPort, HDMI et USB, ainsi que sur les PCB, où la connexion entre Ethernet PHY et magnétique est mis en œuvre sous forme de paires différentielles. Chaque côté de la paire conduit le même signal, juste avec un côté ayant le signal inversé. Les deux côtés ont la même impédance et sont affectés de la même manière par le bruit (électromagnétique) dans l’environnement. Il en résulte que lorsque le récepteur retourne le signal inversé et fusionne les deux signaux, le bruit dans le signal s’inverse d’un côté (amplitude négative) et annule ainsi le bruit du côté non inversé.

L’évolution vers des tensions de signal plus faibles (sous forme de LVDS) dans ces protocoles et l’augmentation des vitesses d’horloge rendent l’utilisation de paires différentielles indispensable. Heureusement, ils ne sont pas extrêmement difficiles à mettre en œuvre sur, par exemple, une conception de PCB personnalisée. Le travail acharné pour s’assurer que les traces dans une paire différentielle ont la même longueur est facilité par les outils EDA courants (y compris KiCad, Autodesk Eagle et Altium) qui fournissent des fonctionnalités pour faire du routage des paires différentielles une affaire semi-automatisée.

Avoir les deux façons: SerDes

Diagramme schématique d’un lien SerDes.

Un sérialiseur / désérialiseur (SerDes) est un bloc fonctionnel qui est utilisé pour convertir entre des données série et des interfaces parallèles. À l’intérieur d’un FPGA ou d’un ASIC de communication, les données sont généralement transférées sur une interface parallèle, les données parallèles étant passées dans le bloc SerDes, où elles sont sérialisées pour la transmission ou vice-versa. La couche PCIe PMA (Physical Media Attachment) est la partie de la couche physique du protocole où se trouve SerDes dans PCIe. L’implémentation exacte de SerDes diffère selon le fournisseur ASIC, mais leurs fonctionnalités de base sont généralement les mêmes.

Lorsqu’il s’agit de produire votre propre matériel PCIe, un moyen simple de commencer est d’utiliser un FPGA avec des blocs SerDes. Il faut toujours charger le FPGA avec une conception qui inclut la liaison de données PCIe réelle et les couches de transaction, mais celles-ci sont souvent disponibles gratuitement, comme avec les FPGA Xilinx.

Cœurs HDL PCIe

Les FPGA Xilinx récents intègrent non seulement les fonctionnalités de point de terminaison SerDes et PCIe, mais Xilinx fournit également des blocs IP PCIe gratuits (limités à x8 à PCIe v2.1) à utiliser avec ces fonctionnalités matérielles qui (basées sur la licence ) peut être utilisé commercialement. Si l’on souhaite une solution légèrement moins propriétaire, il existe également des cœurs PCIe Open Source, comme ce projet PCIe Mini qui a été testé sur un FPGA Spartan 6 sur du matériel réel et fournit un pont PCIe-to-Wishbone, ainsi que son le projet successeur, qui cible les FPGA Kintex Ultrascale +.

De l’autre côté de la clôture, la page IP d’Intel (anciennement Altera) semble fortement suggérer de donner à son vendeur un appel pour un devis personnalisé. De même, Lattice demande à ses vendeurs de répondre à votre appel pour leurs incroyables blocs IP PCIe. Ici, on peut certainement voir le problème avec un protocole comme PCIe: contrairement aux périphériques ISA ou PCI qui pourraient être bricolés avec une poignée de puces logiques 74xx et le microcontrôleur occasionnel ou CPLD, PCIe nécessite un matériel assez spécialisé.

Même si l’on achète le matériel physique (par exemple FPGA), l’utilisation des blocs matériels SerDes avec la fonctionnalité PCIe peut encore nécessiter un achat ou une licence continue (par exemple pour la chaîne d’outils) en fonction de la solution choisie. Pour le moment, il semble que les FPGA Xilinx soient la solution idéale ici, mais cela pourrait changer à l’avenir.

Il convient également de noter ici que le protocole PCIe lui-même est officiellement disponible pour les membres de PCI-SIG. Cela complique une entreprise déjà massive si l’on veut implémenter la spécification gargantuesque PCIe à partir de zéro, et rend encore plus admirable qu’il existe des cœurs HDL Open Source pour PCIe.

Mettre ensemble

Dessin du connecteur de bord PCI Express x1 avec numéros de broches.

La conception de base de la carte d’un PCB PCIe rappelle fortement celle des cartes PCI. Les deux utilisent un connecteur de bord avec une disposition similaire. Les connecteurs de bord PCIe ont une épaisseur de 1,6 mm, utilisent un pas de 1,0 mm (contre 1,27 mm pour PCI), un espacement de 1,4 mm entre les doigts de contact et le même angle de chanfrein de 20 ° que les connecteurs de bord PCI. Un connecteur a au moins 36 broches, mais peut avoir 164 broches dans une configuration de fente x16.

Section transversale du connecteur de bord de carte PCIe.

Une distinction importante avec PCIe est qu’il n’y a pas de longueur fixe du connecteur de bord, comme avec les interfaces ISA, PCI et similaires. Ceux-ci ont une longueur définie par la largeur du bus. Dans le cas de PCIe, il n’y a pas de bus, donc à la place, nous obtenons le brochage du connecteur «core» avec une seule voie (connecteur x1). À cette voie unique, des «blocs» supplémentaires peuvent être ajoutés, chacun ajoutant une autre voie qui est liée de sorte que la bande passante de toutes les voies connectées puisse être utilisée par un seul appareil.

En plus des cartes PCIe ordinaires, on peut également choisir parmi une gamme de différents périphériques PCIe, tels que Mini-PCIe. Quel que soit le facteur de forme choisi, le circuit de base ne change pas.

Cela soulève la question intéressante du type de vitesse dont votre périphérique PCIe aura besoin. D’une part, plus de bande passante est agréable, d’autre part, cela nécessite également plus de canaux SerDes, et tous les emplacements PCIe ne permettent pas l’installation de chaque carte. Alors que n’importe quelle carte de n’importe quelle configuration (x1, x4, x8 ou x16) s’adapte et fonctionne dans un emplacement x16 (mécanique), des emplacements plus petits peuvent ne pas permettre physiquement à une carte plus grande de s’adapter. Certains connecteurs ont une configuration «ouverte», dans laquelle vous pouvez insérer par exemple une carte x16 dans un emplacement x1 si vous y êtes incliné. D’autres connecteurs peuvent être «modifiés» pour permettre à des cartes plus grandes de s’adapter à moins que la garantie ne soit un problème.

La flexibilité de PCIe signifie que la bande passante évolue avec le nombre de voies liées ainsi que la version du protocole PCIe. Cela permet une dégradation gracieuse, où si, par exemple, une carte PCIe 3.0 est insérée dans un emplacement qui n’est capable que de PCIe 1.0, la carte sera toujours reconnue et fonctionnera. La bande passante disponible sera considérablement réduite, ce qui peut être un problème pour la carte en question. Il en va de même avec les voies PCIe disponibles, rappelant l’histoire des mineurs de crypto-monnaie qui ont divisé les emplacements PCIe x16 en 16 emplacements x1, afin qu’ils puissent exécuter un nombre égal de GPU ou de cartes de minage de crypto-monnaie spécialisées.

C’est plein de PCIe

Cette flexibilité de PCIe a également conduit à acheminer les voies PCIe vers de nouveaux endroits étranges et merveilleux. Des spécifications telles que Thunderbolt d’Intel (désormais USB 4) incluent de la place pour plusieurs voies de PCIe 3.0, ce qui permet des solutions de stockage externe rapides ainsi que des cartes vidéo externes qui fonctionnent aussi bien que des cartes internes.

Le stockage SSD est passé du protocole SATA à NVMe, qui définit essentiellement un périphérique de stockage directement connecté au contrôleur PCIe. Ce changement a permis aux périphériques de stockage NVMe d’être installés ou même directement intégrés sur la carte mère principale.

Il est clair que PCIe est la chose à surveiller ces jours-ci. Nous avons même vu que les System-on-Chips (SoC), tels que ceux trouvés sur les cartes Raspberry Pi 4, sont désormais livrés avec une seule voie PCIe qui a déjà été piratée pour étendre ces cartes d’une manière jugée inconcevable. À mesure que PCIe devient de plus en plus omniprésent, cela semble être le bon moment pour en connaître davantage.

LAISSER UN COMMENTAIRE

Rédigez votre commentaire !
Entrez votre nom ici