PCIe pour les pirates : anatomie des liens

La dernière fois, nous avons examiné les diffpairs, leurs bases, les règles de routage et les tolérances notoires de PCIe en matière de diffpairs. Examinons maintenant les signaux exacts qui font fonctionner PCIe, et donnons un aperçu des sockets sur lesquels vous pouvez obtenir PCIe.

Je sépare les sockets PCIe en deux catégories – les sockets de bureau, qui sont les sockets PCIe 1x, 16x ou peut-être x4 habituels que nous voyons sur les cartes mères de bureau – et les sockets mobiles : mPCIe et M.2. Il existe également des sockets comme ExpressCard que l’on trouve encore sur certains ordinateurs portables plus anciens, mais ils sont définitivement tombés en désuétude. Sur mobile, M.2 est la voie à suivre en matière de PCIe – si cela vous intéresse, j’ai écrit une courte série sur tout ce qui concerne le M.2 auparavant.

Sur ces prises, la plupart des signaux seront facultatifs et certains signaux seront spécifiques à la prise, mais certains signaux sont requis dans tout périphérique PCIe. Bien sûr, le premier groupe de signaux requis est constitué par les diffpairs PCIe eux-mêmes.

PCIe est juste un UART épicé

Toute interface PCIe a deux types de diffpairs – TX et RX ; pour un lien x1, vous aurez un diffpair TX et un diffpair RX, et un lien x16 a besoin de seize de chaque. Comme vous vous en doutez, RX à une extrémité se connecte à TX à une autre extrémité, et vice-versa – c’est comme UART, mais épicé. Bien sûr, si vous faites une extension PCIe ou un adaptateur socket-to-socket quelconque, vous n’avez pas besoin de faire d’échange. Si vous concevez une carte pour l’une des normes d’extension porteuses de PCIe, la dénomination habituelle est côté hôte. Par exemple, supposons que vous installiez un circuit intégré de contrôleur Ethernet PCIe sur un circuit imprimé qui se branche sur une prise PCIe de bureau – connectez respectivement TX et RX de la carte de prise PCIe aux RX et TX de votre puce Ethernet.

Échanger TX et RX ne fonctionnera pas – j’ai appris à la dure

S’il y a de fortes indications que cette convention a été violée, ne vous inquiétez pas – assurez-vous de comparer à un hôte ou à un appareil existant, et voyez si vous êtes en mesure de déterminer si la dénomination est comme prévu ou bien, de manière inattendue, inversée. Encore une fois, c’est comme UART ! Cela dit, il existe également des condensateurs de couplage AC placés en série sur les lignes TX et RX. Spécifiquement dans le cas des cartes d’extension PCIe, qu’il s’agisse de M.2 ou de PCIe de bureau, la convention les place sur les lignes device-TX (host-RX) sur la carte de périphérique, et du côté host-TX (device-RX) sur le conseil d’accueil. Cela seul est une agréable divergence par rapport à l’UART en matière de conception et de rétro-ingénierie.

Le troisième type de diffpair, celui qui est invariablement présent, est REFCLK – un diffpair d’horloge de 100 MHz. C’est une horloge rapide, et je ne suis pas sûr de son objectif, mais apparemment, elle joue un rôle dans le décodage des données sur TX et RX, en particulier, la récupération d’horloge – restant vitale malgré des ordres de grandeur plus lents que la gamme GBit bande passante des paires PCIe TX et RX. Contrairement à RX et TX, vous ne pouvez pas échanger la polarité REFCLK bon gré mal gré. D’un autre côté, ça ne fera pas de mal comme beaucoup si vous avez REFCLK qui passe par un ensemble de vias ou deux au cas où vous auriez besoin de le retourner – c’est juste 100 MHz. N’oubliez pas de respecter vos diffpairs, et tout ira bien.

REFCLK est requis – sauf, théoriquement, dans certains cas où vous pouvez l’omettre, nécessitant que les deux extrémités de la liaison PCIe prennent en charge la récupération de cette horloge à partir des données transmises par les paires RX et TX, ou génèrent leur propre REFCLK. Cela semble assez réaliste, mais les implémentations PCIe sans REFCLK ne sont pas vraiment disponibles. Même SD-Express, une norme récente qui apporte PCIe aux cartes SD pour des vitesses d’accès ultra-rapides, n’a pas emprunté cette voie – la seule implémentation sans REFCLK disponible pour le grand public est SATA-Express, une norme devenue obsolète par M.2 presque aussitôt que les cartes mères avec ports SATA-Express sont arrivées dans les rayons des magasins. Dans l’état actuel des choses, si vous voulez que votre lien PCIe fonctionne, vous avez absolument besoin de REFCLK.

La ligne « Connector » représente un connecteur porteur de PCIe – si vous en avez un dans votre conception

Et maintenant un peu plus sur les condensateurs. Vous en avez besoin à la fois sur TX et RX pour que la liaison fonctionne, avec des plages de 75 nF à 265 nF selon la génération de liaison PCIe : 200 nF est une bonne valeur globale et 100 nF fonctionnera à la rigueur. En dehors de cela, optez pour le package 0402 ou 0201, et c’est tout. REFCLK n’a généralement pas besoin des condensateurs, mais ils ne devraient pas non plus blesser, et certains appareils peuvent en avoir besoin. De plus, voici quelque chose de déroutant – il y a eu au moins un cas documenté d’un SSD WD fabriqué en série bon marché omettant apparemment ses condensateurs côté TX, ne parvenant pas à s’initialiser avec une carte hôte PCIe personnalisée jusqu’à ce que des condensateurs supplémentaires soient ajoutés du côté de la carte mère. Ce n’est pas quelque chose que vous devriez faire par défaut – simplement une particularité qu’un fabricant a eu le culot de créer.

Les quelques signaux nécessaires

Ensuite, il y a un trio de signaux de contrôle asymétriques – CLKREQ, PEWAKE et PREST. CLKREQ est utilisé pour économiser de l’énergie – l’appareil définit généralement CLKREQ bas pour commencer à recevoir REFCLK, et est capable de désactiver CLKREQ (le mettre haut) pour signaler à l’hôte que l’hôte peut arrêter de fournir REFCLK, économisant ainsi de l’énergie. Le signal CLKREQ est particulier – il est présent sur les appareils mobiles, mais n’est pas utilisé sur les ordinateurs de bureau, au point que les emplacements PCIe de bureau n’avaient même pas initialement de broche dédiée. En conséquence, les cartes « GPU riser » du mineur utilisant le câble USB3 ne passent pas CLKREQ – seulement PEWAKE et PREST. Si votre hôte a une broche CLKREQ mais pas l’appareil, mettez-la à la terre ; si votre appareil a une broche CLKREQ mais pas l’hôte, ignorez-la, sinon, connectez-les ensemble.

Les schémas de cartes mères d’ordinateurs portables et de bureau constituent d’excellentes références schématiques PCIe. Cependant, cela pourrait être une violation du droit d’auteur dans certains cas, et je ne suggérerais jamais cela !

Eh bien, si les mineurs qui coupent les coins prennent la peine de faire passer les signaux PEWAKE et PREST, alors ils doivent être importants, non ? Voyons. PREST est la broche de réinitialisation pour la liaison PCIe, et l’hôte la maintient basse jusqu’à ce que toutes les horloges (y compris REFCLK) et les rails d’alimentation soient stables et que d’autres exigences soient remplies pour que l’hôte commence à parler PCIe ; il est également utilisé pour certaines gestions en mode basse consommation. PEWAKE est utilisé pour la gestion de l’alimentation, tout comme CLKREQ, et semble également nécessaire – il s’agit également d’un signal contrôlé côté appareil. Ces deux signaux sont un peu mystérieux pour moi en ce qui concerne les moyens de les omettre, je recommande donc de les connecter tous les deux à moins qu’ils ne soient carrément indisponibles à l’une des extrémités.

Les emplacements de bureau ont également des signaux PRSNT – en fonction de la largeur du lien, vous devez court-circuiter PRSNT # 1 à l’un des signaux PRSNT # 2. Non pas que cela soit nécessaire – PCIe est plus que capable de détecter correctement la largeur de lien ; cependant, les cartes mères de bureau en ont souvent besoin dans la pratique. Il semble être utilisé pour le hotplug – quelque chose dont PCIe est techniquement capable, et qui fonctionnera même si vous utilisez un système comme Linux ; Windows peut simplement refuser de traiter le hotplug PCIe à moins que vous ne dansiez autour de votre PC en scandant des mots magiques.

Il y a des signaux I2C sur les emplacements PCIe de bureau et les emplacements mobiles comme mPCIe ou M.2. Cependant, ces signaux sont rarement connectés sur la carte mère – lorsqu’ils le sont, cela semble être soit le caprice du fabricant de la carte mère, soit des dispositions pour des fonctionnalités telles que VPro. Sur les cartes serveur, ils sont connectés, ce qui provoque des choses amusantes comme certains contrôleurs SAS provenant du serveur qui ne fonctionnent pas sur certaines cartes de bureau avec I2C câblé aux emplacements de taille bureau. Si vous câblez un emplacement PCIe côté hôte, vous n’avez pas vraiment besoin de câbler I2C, et si vous câblez un périphérique, ne vous attendez pas à ce qu’I2C soit là de manière fiable. Il en va de même pour les signaux JTAG – ils sont utilisés dans les environnements de débogage ou de serveur, et il vaut mieux les laisser non connectés, sauf si vous êtes certain que votre implémentation en bénéficie à l’endroit où vous l’utiliserez.

Les appareils mobiles PCIe fonctionnent généralement sur une alimentation de 3,3 V, tandis que les appareils de bureau peuvent fonctionner à partir de 3,3 V ou de 12 V, respectivement pour des appareils moins ou plus puissants. Par conséquent, si vous ajoutez une prise PCIe de la taille d’un ordinateur de bureau et que vous n’avez pas de 12 V à portée de main, certaines cartes de bureau peuvent ne pas fonctionner de manière aléatoire. Les emplacements x1 sont censés fournir moins de puissance sur 12 V que les emplacements plus grands, et les fabricants de cartes mères de bureau profitent souvent de cette marge de manœuvre – si vous concevez une carte x1, ne vous attendez pas à ce qu’elle fournisse la totalité des 75 W (66 W à 12 V), et si vous concevez une carte mère avec un emplacement x1, la bonne nouvelle est que vous n’avez pas besoin de fournir la totalité des 75 W.

Toutes les différentes largeurs de lien

Le côté hôte et le côté périphérique peuvent avoir des largeurs de liaison différentes – les choix sont x1, x2, x4, x8 et x16, où le nombre indique le nombre de paires utilisées ; en raison de la façon dont les liens PCIe fonctionnent au niveau bas, ceux-ci doivent être des puissances de deux. En tant que tel, ne vous attendez pas à ce qu’un lien x3 fonctionne si vous connectez d’une manière ou d’une autre trois voies d’un hôte à un appareil – il passera à x2. PCIe est flexible en ce qui concerne les largeurs de liaison – l’hôte et le périphérique s’installent sur le plus grand dénominateur commun. Peu importe si votre hôte a un lien x4 et votre appareil est x16, ou votre hôte est x16 et votre appareil est x4, ils s’installeront sur une largeur de lien x4, en utilisant quatre paires, sans se soucier que l’une des extrémités en ait douze de plus à de rechange. Il existe de très rares exceptions à cela, à savoir certaines cartes à usage serveur ; Cela dit, même dans ces cas, « la carte x8 ne fonctionnera pas avec une connexion x4 » et un lien 1x fonctionnera toujours comme une solution de secours.

Cet emplacement est fabriqué de manière ouverte, vous pouvez donc vous attendre à ce qu’il prenne en charge le budget d’alimentation des cartes 16x. Par Hans Haase, CC BY SA 4.0

Cela ajoute un peu de flexibilité – si l’un des côtés n’a pas assez de voies pour correspondre à l’autre, vous pouvez toujours vous attendre à ce qu’au moins un lien x1 fonctionne néanmoins. Par exemple, vous pouvez mettre un GPU x16 dans un emplacement de bureau x1 en coupant une encoche dans l’emplacement, et peut-être en court-circuitant les broches PRSNT sur l’emplacement – cependant, assurez-vous que votre carte ne veut pas plus de puissance fournie par l’emplacement que votre 1x slot est prêt à fournir, ce qui pourrait très bien être le cas si vous branchez directement un GPU supplémentaire dans un slot 1x découpé ! En ce qui concerne les emplacements et cartes PCIe de bureau, vous verrez des largeurs d’emplacement physique x1, x4 et x16, et les emplacements et cartes x8 étant principalement une occurrence de serveur. Certains GPU bas de gamme sont en fait des cartes x8, mais ils utilisent une largeur de bord de carte à fente physique x16, et il en va de même pour les cartes x2 – ils utilisent une largeur de bord de carte à fente x4. Vous verrez rarement, voire jamais, des cartes ou des emplacements physiques x2 et x8.

Lorsque vous effectuez une liaison multi-voies, vous devez vous assurer que vous connectez la voie 0 avec 0, 1 avec 1 et ainsi de suite. Il existe apparemment une possibilité d’inverser l’intégralité du lien au cas où cela pourrait vous aider avec votre mise en page – par exemple, dans le cas d’un lien x4, vous pouvez connecter les voies 0 à 3, 1 à 2, etc. Cependant, il n’est pas clair dans quelle mesure cela est pris en charge – cela semble être facultatif et non automatique.

Et ça marchera quoi qu’il arrive

Tout comme Ethernet, les vitesses de liaison PCIe ont augmenté à chaque génération, grâce à des augmentations progressives du débit de données, du type d’encodage et d’autres améliorations progressives. Même histoire qu’avec les largeurs de lien – il y a une excellente compatibilité vers l’avant et vers l’arrière, un appareil Gen1 fonctionnera dans un emplacement Gen5, et un appareil Gen5 fonctionnera dans un emplacement Gen1, encore une fois, en choisissant le plus grand dénominateur commun. Bien sûr, le lien peut finir par être limité par rapport à l’attente – si vous branchez une carte contrôleur Gen3 x1 USB3 dans l’emplacement Gen1 PCIe x1 d’une ancienne carte mère, attendez-vous à ce que le débit du port USB3 soit limité (et bien sûr, il en va de même pour connectant les GPU via un lien x1). Cependant, cela signifie que généralement, vous n’avez pas à vous soucier des générations PCIe, sauf si vous visez un certain objectif de vitesse.

Heureusement, si vous avez des questions PCIe qui vont sérieusement en profondeur, il y a beaucoup d’informations en ligne, et les spécifications, même pour le PCIe 5.0 de dernière génération, sont assez faciles à trouver. Cela peut être un peu dense par rapport à ce que vous lisez en ce moment, mais quand vous allez en profondeur, cela vous aidera. La prochaine fois, complétons votre carte mentale de PCIe, afin que chaque fois que vous entreprenez de repousser les limites de PCIe, vous sachiez comment l’aborder !

François Zipponi
Je suis François Zipponi, éditorialiste pour le site 10-raisons.fr. J'ai commencé ma carrière de journaliste en 2004, et j'ai travaillé pour plusieurs médias français, dont le Monde et Libération. En 2016, j'ai rejoint 10-raisons.fr, un site innovant proposant des articles sous la forme « 10 raisons de... ». En tant qu'éditorialiste, je me suis engagé à fournir un contenu original et pertinent, abordant des sujets variés tels que la politique, l'économie, les sciences, l'histoire, etc. Je m'efforce de toujours traiter les sujets de façon objective et impartiale. Mes articles sont régulièrement partagés sur les réseaux sociaux et j'interviens dans des conférences et des tables rondes autour des thèmes abordés sur 10-raisons.fr.