banner
Nachrichtenzentrum
Umfangreiche Erfahrung gepaart mit modernster Ausrüstung

PCIe für Hacker: Link Anatomy

Aug 20, 2023

Letztes Mal haben wir uns Diffpairs, ihre Grundlagen, Routing-Regeln und die berüchtigten Toleranzen von PCIe bei Diffpairs angesehen. Werfen wir nun einen Blick auf die genauen Signale, die PCIe auslösen, und geben wir Ihnen einen Überblick darüber, auf welchen Sockeln Sie PCIe erhalten können.

Ich unterteile PCIe-Sockel in zwei Kategorien – Desktop-Sockel, bei denen es sich um die üblichen 1x-, 16x- oder vielleicht x4-PCIe-Sockel handelt, die wir auf Desktop-Motherboards sehen – und mobile Sockel: mPCIe und M.2. Es gibt auch Buchsen wie ExpressCard, die zwar noch in einigen älteren Laptops zu finden sind, aber definitiv an Relevanz verloren haben. Auf Mobilgeräten ist M.2 der Weg nach vorne, wenn es um PCIe geht – wenn Sie interessiert sind, habe ich eine kurze Serie geschrieben, in der ich über alles bisherige M.2 spreche.

Auf diesen Sockeln sind die meisten Signale optional und einige Signale sind sockelspezifisch, aber es gibt einige Signale, die in jedem PCIe-Gerät erforderlich sind. Die erste Gruppe erforderlicher Signale sind natürlich die PCIe-Diffpairs selbst.

Jede PCIe-Schnittstelle verfügt über zwei Arten von Diffpairs – TX und RX; Für einen x1-Link benötigen Sie ein TX-Diffpair und ein RX-Diffpair, und für einen x16-Link sind jeweils sechzehn erforderlich. Wie zu erwarten ist, verbindet sich RX an einem Ende mit TX am anderen Ende und umgekehrt – es ist genau wie UART, aber scharf. Wenn Sie einen PCIe-Extender oder einen Socket-to-Socket-Adapter verwenden, müssen Sie natürlich nichts austauschen. Wenn Sie eine Karte für einen der PCIe-tragenden Erweiterungsstandards entwerfen, ist die übliche Benennung hostseitig. Angenommen, Sie montieren einen PCIe-Ethernet-Controller-IC auf einer Platine, die in einen Desktop-PCIe-Sockel gesteckt wird. Verbinden Sie TX und RX der PCIe-Sockelplatine jeweils mit dem RX und TX Ihres Ethernet-Chips.

Wenn es deutliche Anzeichen dafür gibt, dass gegen diese Konvention verstoßen wurde, machen Sie sich keine Sorgen – stellen Sie sicher, dass Sie einen Vergleich mit einem vorhandenen Host oder Gerät durchführen und prüfen Sie, ob Sie feststellen können, ob die Benennung wie erwartet oder tatsächlich unerwartet umgekehrt ist. Auch hier ist es genau wie UART! Allerdings gibt es auch AC-Kopplungskondensatoren, die sowohl auf der TX- als auch auf der RX-Leitung in Reihe geschaltet sind. Insbesondere bei PCIe-Erweiterungskarten, sei es M.2 oder Desktop-PCIe, besteht die Konvention darin, sie auf Geräte-TX-Leitungen (Host-RX) auf der Geräteplatine und auf der Host-TX-Seite (Gerät-RX) zu platzieren der Gastgebervorstand. Dies allein ist eine angenehme Abweichung von UART, wenn es um Design und Reverse Engineering geht.

Die dritte Art von Diffpair, die immer vorhanden ist, ist REFCLK – ein 100-MHz-Takt-Diffpair. Es handelt sich um eine schnelle Uhr, und ich bin mir über ihren vollen Zweck nicht sicher, aber offenbar spielt sie eine Rolle bei der Dekodierung der Daten auf TX und RX, insbesondere bei der Taktwiederherstellung – und bleibt wichtig, obwohl sie um Größenordnungen langsamer als der GBit-Bereich ist Bandbreite von PCIe TX- und RX-Paaren. Anders als bei RX und TX können Sie die REFCLK-Polarität nicht beliebig vertauschen. Andererseits schadet es nicht so sehr, wenn Sie REFCLK durch ein oder zwei Durchkontaktierungen leiten lassen, falls Sie es umdrehen müssen – es sind nur 100 MHz. Denken Sie daran, Ihre Diffpairs zu respektieren, dann wird es Ihnen gut gehen.

REFCLK ist erforderlich – außer theoretisch gibt es Fälle, in denen Sie es weglassen können, sodass beide Enden der PCIe-Verbindung die Wiederherstellung dieses Takts aus Daten unterstützen müssen, die über RX- und TX-Paare übertragen werden, oder ihr eigenes REFCLK generieren müssen. Es klingt ziemlich realistisch, doch REFCLK-freie PCIe-Implementierungen sind nicht wirklich verfügbar. Sogar SD-Express, ein neuer Standard, der PCIe für rasante Zugriffsgeschwindigkeiten auf SD-Karten bringt, ging diesen Weg nicht – die einzige für Verbraucher verfügbare REFCLK-freie Implementierung ist SATA-Express, ein Standard, der veraltet ist von M.2 fast sobald Motherboards mit SATA-Express-Anschlüssen in den Handel kommen. Wenn Sie möchten, dass Ihre PCIe-Verbindung funktioniert, benötigen Sie derzeit unbedingt REFCLK.

Und jetzt etwas mehr über die Kondensatoren. Sie benötigen sie sowohl auf TX als auch auf RX, damit die Verbindung funktioniert. Sie liegen je nach PCIe-Link-Generation zwischen 75 nF und 265 nF: 200 nF ist ein guter Gesamtwert und 100 nF reichen zur Not aus. Ansonsten entscheiden Sie sich für das Paket 0402 oder 0201, und das ist im Grunde alles. REFCLK benötigt die Kondensatoren normalerweise nicht, aber sie sollten auch nicht schaden, und bestimmte Geräte könnten sie erfordern. Außerdem gibt es hier etwas Rätselhaftes: Es gab mindestens einen dokumentierten Fall einer billigen WD-SSD aus Massenproduktion, bei der scheinbar die TX-seitigen Kondensatoren fehlten und die Initialisierung mit einem benutzerdefinierten PCIe-Hostboard scheiterte, bis zusätzliche Kondensatoren auf der Mainboard-Seite hinzugefügt wurden. Das sollten Sie nicht standardmäßig tun – es handelt sich lediglich um eine Besonderheit, die ein Hersteller mit der Frechheit geschaffen hat.

Dann gibt es noch ein Trio von Single-Ended-Steuersignalen – CLKREQ, PEWAKE und PEST. CLKREQ wird zum Energiesparen verwendet – das Gerät setzt CLKREQ normalerweise auf niedrig, um mit dem Empfang von REFCLK zu beginnen, und kann CLKREQ deaktivieren (hoch setzen), um dem Host zu signalisieren, dass der Host die Bereitstellung von REFCLK beenden kann, um Strom zu sparen. Das CLKREQ-Signal ist eigenartig – es ist auf mobilen Geräten vorhanden, wird aber auf Desktops nicht verwendet, bis zu dem Punkt, an dem Desktop-PCIe-Steckplätze anfangs nicht einmal einen eigenen Pin dafür hatten. Infolgedessen leiten die Miner-„GPU-Riser“-Boards, die das USB3-Kabel durchsuchen, CLKREQ nicht durch, sondern nur PEWAKE und PEST. Wenn Ihr Host über einen CLKREQ-Pin verfügt, das Gerät jedoch nicht, erden Sie ihn; Wenn Ihr Gerät über einen CLKREQ-Pin verfügt, der Host jedoch nicht, ignorieren Sie ihn. Andernfalls verbinden Sie sie miteinander.

Nun, wenn sich die Minenarbeiter die Mühe machen, PEWAKE- und PEST-Signale weiterzuleiten, dann müssen sie doch wichtig sein, oder? Mal sehen. PEST ist der Reset-Pin für die PCIe-Verbindung, und der Host hält ihn niedrig, bis alle Takte (einschließlich REFCLK) und Stromschienen stabil sind und andere Anforderungen erfüllt sind, damit der Host mit der Kommunikation über PCIe beginnen kann; Es wird auch für die Verwaltung einiger Energiesparmodi verwendet. PEWAKE wird wie CLKREQ zur Energieverwaltung verwendet und scheint auch erforderlich zu sein – es handelt sich hierbei ebenfalls um ein geräteseitig gesteuertes Signal. Diese beiden Signale sind mir ein wenig rätselhaft, wenn es darum geht, wie man sie weglassen kann. Ich empfehle daher, beide anzuschließen, es sei denn, sie sind an einem Ende überhaupt nicht verfügbar.

Desktop-Steckplätze verfügen auch über PRSNT-Signale – je nach Linkbreite müssen Sie PRSNT#1 mit einem der PRSNT#2-Signale kurzschließen. Nicht, dass dies erforderlich wäre – PCIe ist mehr als in der Lage, die Verbindungsbreite korrekt zu erkennen; Allerdings ist dies bei Desktop-Motherboards in der Praxis oft erforderlich. Es scheint für Hotplug verwendet zu werden – etwas, wozu PCIe technisch in der Lage ist und das sogar funktioniert, wenn Sie ein System wie Linux verwenden; Windows weigert sich möglicherweise einfach, PCIe-Hotplug zu verarbeiten, es sei denn, Sie tanzen um Ihren PC herum und singen magische Worte.

Es gibt I2C-Signale sowohl auf Desktop-PCIe-Steckplätzen als auch auf mobilen Steckplätzen wie mPCIe oder M.2. Allerdings werden diese Signale selten auf dem Mainboard angeschlossen – wenn das der Fall ist, scheint es entweder an der Laune des Mainboard-Herstellers zu liegen oder an der Bereitstellung von Funktionen wie VPro. Auf Server-Mainboards sind sie miteinander verbunden, was zu lustigen Dingen führt, wie zum Beispiel, dass einige vom Server stammende SAS-Controller auf bestimmten Desktop-Mainboards nicht funktionieren, wenn I2C mit den Steckplätzen in Desktop-Größe verkabelt ist. Wenn Sie einen hostseitigen PCIe-Steckplatz verkabeln, müssen Sie I2C nicht wirklich verkabeln, und wenn Sie ein Gerät verkabeln, können Sie nicht davon ausgehen, dass I2C zuverlässig vorhanden ist. Das Gleiche gilt für JTAG-Signale – sie werden in Debugging- oder Serverumgebungen verwendet und sollten am besten unverbunden bleiben, es sei denn, Sie sind sicher, dass Ihre Implementierung an dem Ort, an dem Sie sie verwenden, von ihnen profitiert.

Mobile PCIe-Geräte werden normalerweise mit einer Spannung von 3,3 V betrieben, während Desktop-Geräte entweder mit 3,3 V oder mit 12 V betrieben werden können, jeweils für weniger bzw. leistungsstärkere Geräte. Wenn Sie einen PCIe-Sockel in Desktop-Größe hinzufügen und keine 12 V zur Hand haben, kann es daher passieren, dass einige Desktop-Karten zufällig nicht funktionieren. Von x1-Steckplätzen wird erwartet, dass sie bei 12 V weniger Strom liefern als von größeren Steckplätzen, und Hersteller von Desktop-Motherboards machen sich diesen Spielraum oft zunutze – wenn Sie eine x1-Karte entwerfen, können Sie nicht damit rechnen, dass sie die vollen 75 W liefert (66 W bei 12 V), und wenn Sie ein Motherboard mit einem x1-Steckplatz entwerfen, ist die gute Nachricht, dass Sie nicht die vollen 75 W bereitstellen müssen.

Sowohl die Host-Seite als auch die Geräteseite können unterschiedliche Verbindungsbreiten haben – zur Auswahl stehen x1, x2, x4, x8 und x16, wobei die Zahl die Anzahl der verwendeten Paare angibt; Aufgrund der Art und Weise, wie PCIe-Verbindungen auf niedriger Ebene funktionieren, müssen diese Zweierpotenzen sein. Erwarten Sie daher nicht, dass ein x3-Link funktioniert, wenn Sie auf irgendeine Weise drei Lanes von einem Host mit einem Gerät verbinden – er wird auf x2 heruntergestuft. PCIe ist hinsichtlich der Verbindungsbreiten flexibel – Host und Gerät vereinbaren den größten gemeinsamen Nenner. Ganz gleich, ob Ihr Host einen x4-Link und Ihr Gerät ein x16-Gerät hat oder ob Ihr Host ein x16-Gerät und Ihr Gerät ein x4-Gerät ist, sie entscheiden sich für eine x4-Link-Breite und verwenden vier Paare, ohne sich darum zu kümmern, dass eines der Enden zwölf weitere hat Ersatzteil. Es gibt sehr seltene Ausnahmen hiervon – nämlich einige Serverkarten; Allerdings handelt es sich auch hier um Fälle, in denen „x8-Karten mit einer x4-Verbindung nicht funktionieren“ und ein 1x-Link immer noch als Fallback funktioniert.

Dies bringt einiges an Flexibilität mit sich – wenn eine Seite nicht über genügend Lanes verfügt, um mit der anderen übereinzustimmen, können Sie immer davon ausgehen, dass mindestens ein x1-Link trotzdem funktioniert. Sie können beispielsweise eine x16-GPU in einen Desktop-x1-Steckplatz einbauen, indem Sie eine Kerbe in den Steckplatz schneiden und möglicherweise die PRSNT-Pins am Steckplatz kurzschließen. Stellen Sie jedoch sicher, dass Ihre Karte nicht mehr vom Steckplatz bereitgestellte Leistung benötigt als Ihre Karte 1x-Steckplatz bereit, bereitzustellen, was durchaus der Fall sein kann, wenn Sie eine zusätzliche GPU direkt in einen zerschnittenen 1x-Steckplatz anschließen! Wenn es um Desktop-PCIe-Steckplätze und -Karten geht, werden Sie physische Steckplatzbreiten von x1, x4 und x16 sehen, während x8-Steckplätze und -Karten meist bei Servern vorkommen. Es gibt einige Low-End-GPUs, bei denen es sich tatsächlich um x8-Karten handelt, die jedoch eine x16-Kantenbreite der physischen Steckplatzkarte verwenden, und das Gleiche gilt für x2-Karten – sie verwenden eine x4-Kantenbreite der Steckplatzkarte. Sie werden selten, wenn überhaupt, physische x2- und x8-Karten oder -Steckplätze sehen.

Wenn Sie eine mehrspurige Verbindung erstellen, müssen Sie sicherstellen, dass Sie Spur 0 mit 0, 1 mit 1 usw. verbinden. Es gibt offenbar eine Möglichkeit, den gesamten Link umzukehren, falls dies Ihnen bei Ihrem Layout helfen kann – sagen wir, im Falle eines x4-Links könnten Sie Lane 0 mit 3, 1 mit 2 usw. verbinden. Es ist jedoch nicht klar, wie weit dies unterstützt wird – es scheint optional und nicht automatisch zu sein.

Genau wie bei Ethernet sind auch die Verbindungsgeschwindigkeiten von PCIe mit jeder Generation gestiegen, und zwar durch schrittweise Erhöhungen der Datenrate, des Kodierungstyps und anderer inkrementeller Verbesserungen. Die gleiche Geschichte wie bei den Verbindungsbreiten – es gibt eine hervorragende Vorwärts- und Abwärtskompatibilität, ein Gen1-Gerät funktioniert in einem Gen5-Steckplatz und ein Gen5-Gerät funktioniert in einem Gen1-Steckplatz, wobei wiederum der größte gemeinsame Nenner gewählt wird. Natürlich kann es sein, dass die Verbindung nicht wie erwartet gedrosselt wird – wenn Sie eine Gen3 x1 USB3-Controllerkarte in den Gen1 PCIe x1-Steckplatz auf einem alten Motherboard stecken, müssen Sie damit rechnen, dass der USB3-Port-Durchsatz begrenzt ist (und das Gleiche gilt natürlich auch). GPUs über einen x1-Link verbinden). Dies bedeutet jedoch, dass Sie sich normalerweise keine Gedanken über PCIe-Generationen machen müssen, es sei denn, Sie streben ein bestimmtes Geschwindigkeitsziel an.

Wenn Sie Fragen zu PCIe haben, die wirklich in die Tiefe gehen, gibt es zum Glück online viele Informationen, und Spezifikationen selbst für PCIe 5.0 der letzten Generation sind recht leicht zu finden. Im Vergleich zu dem, was Sie gerade lesen, kann es etwas dicht sein, aber wenn Sie tiefer in die Materie einsteigen, wird es helfen. Lassen Sie uns das nächste Mal Ihre mentale Karte von PCIe vervollständigen, damit Sie wissen, wie Sie vorgehen müssen, wann immer Sie die Grenzen von PCIe ausreizen möchten!