banner
Heim / Blog / PCIe für Hacker: Das Diffpair-Vorspiel
Blog

PCIe für Hacker: Das Diffpair-Vorspiel

Sep 10, 2023Sep 10, 2023

PCIe, auch PCI-Express genannt, ist eine äußerst leistungsstarke Schnittstelle. Mal sehen, was nötig ist, um etwas so Mächtiges zu hacken. PCIe ist zunächst etwas einschüchternd, aber es ist ziemlich einfach, mit dem Bau von PCIe-Geräten zu beginnen, und die Schnittstelle ist für Technologie auf Hobby-Niveau recht robust. Es wird eine Zeit kommen, in der wir in unseren Designs einen PCIe-Chip verwenden oder vielleicht die auf einem bestimmten Rechenmodul verfügbare PCIe-Verbindung nutzen möchten, und es ist gut, sicherzustellen, dass wir dafür bereit sind.

PCIe ist mittlerweile überall. Jeder moderne Computer verfügt über eine Reihe von PCIe-Geräten, die wichtige Funktionen ausführen, und sogar iPhones verwenden PCIe intern, um die CPU mit den Flash- und WLAN-Chips zu verbinden. Sie können alle Arten von PCIe-Geräten erwerben: Ethernet-Controller, WLAN-Karten mit hohem Durchsatz, Grafikkarten und alle günstigen NVMe-Laufwerke, die Ihnen bei einer Verbindung über PCIe gerne jede Menge Speicherplatz bieten. Wenn Sie einen Laptop oder einen Einplatinencomputer hacken und ein PCIe-Gerät hinzufügen möchten, können Sie PCIe von einem der PCIe-Steckplätze beziehen oder einfach auf eine vorhandene PCIe-Verbindung zugreifen, wenn keine vorhanden ist Steckdose zum Anschließen. Es ist zwei Jahrzehnte her, seit wir mit der Einführung von PCIe-Geräten begonnen haben – jetzt befindet sich PCIe in der Revision 5.0 und es ist klar, dass es auch in Zukunft Bestand haben wird.

PCIe ist ein Punkt-zu-Punkt-Bus, der zwei Geräte miteinander verbindet – im Gegensatz zu PCI, einem älteren Bus, der eine Reihe von Geräten auf Ihrem Mainboard verbinden könnte. Eine Seite einer PCIe-Verbindung ist ein Gerät und die andere ein Host. In einem Laptop verfügt Ihre CPU beispielsweise über mehrere PCIe-Anschlüsse – einige dienen zum Anschließen der GPU, einige zum Anschließen einer WLAN-Karte, einige für Ethernet und einige für ein NVMe-Laufwerk.

Jeder PCIe-Link besteht aus mindestens drei differenziellen Paaren – eines ist ein 100-MHz-Takt, REFCLK, der (fast) immer für eine Verbindung erforderlich ist, und zwei Paare, die eine PCIe-Lane bilden – eines zum Senden und eines zum Empfangen. Dies ist ein x-Link – Sie können auch 2x-, 4x-, 8x- und 16x-Links mit vier, acht, sechzehn bzw. zweiunddreißig Differentialpaaren sowie wiederum REFCLK haben. Je breiter die Verbindung, desto höher ist ihr Durchsatz!

Nun sind Verbindungsbreiten in PCIe ein unterhaltsames Thema mit vielen coolen Aspekten – aber zunächst wäre es gut, sicherzustellen, dass wir einer Meinung sind, wenn es darum geht, was „Differential Pair“ im Zusammenhang mit PCIe bedeutet. Hier bei Hackaday haben wir Ihnen schon einmal alles über Differenzialpaare im Detail erklärt – schauen Sie sich diesen Artikel unbedingt noch einmal an, wenn Sie mehr über Differenzialpaare erfahren möchten! Hier werde ich Sie kurz mit den Grundlagen vertraut machen und Ihnen dann erklären, was Sie wissen müssen, wenn Sie speziell mit Differentialpaaren für PCIe arbeiten.

Vereinfacht ausgedrückt besteht ein Differentialpaar aus zwei Signalen, von denen eines immer das Gegenteil des anderen ist, eines wird normalerweise als positiv und das andere als negativ bezeichnet. Sie erhalten den Logikpegel des übertragenen Bits, indem Sie die beiden Signale miteinander vergleichen – anstatt den Logikpegel jedes einzelnen Signals mit Masse zu vergleichen, wie wir es normalerweise tun, was als „Single-Ended“ bezeichnet wird. Bei einem Differentialpaar liegen die Signale nahe beieinander und sind bei Kabeln sogar miteinander verwoben. Dadurch wirken sich Störungen gleichermaßen auf die Signale aus – da Signale miteinander verglichen werden, um Informationen zu erhalten, bedeutet dies, dass die empfangenen Informationen erhalten bleiben wird nicht durch Rauschen beeinflusst, das beiden Signalen überlagert ist. Differenzialpaare bewirken außerdem, dass sich die Magnetfelder beider Signale gegenseitig aufheben, was dazu führt, dass die Verbindung weniger verrauscht ist.

Dadurch können Sie mit Differentialpaaren die Übertragungsgeschwindigkeit erhöhen, ohne Geräusche zu erzeugen oder anfällig für Geräusche zu werden. Die überwiegende Mehrheit der Hochgeschwindigkeitsschnittstellen verwendet daher differenzielle Paare: Ethernet, PCIe, HDMI, DisplayPort, LVDS und sogar USB, obwohl USB 2 nur pseudodifferenziell ist, ist USB 3 wirklich differenziell. Robuste Schnittstellen wie RS485 und CAN verwenden ebenfalls Differenzpaare. Für einen Bastler ist es einfach, mit differenziellen Paaren mit Schnittstellen wie CAN zu beginnen, und auch USB 2 stellt kein Problem dar – bei kurzen Entfernungen funktionieren diese auf jeden Fall, obwohl es sich um differenzielle Signale handelt und theoretisch eine besondere Behandlung erforderlich ist.

Allerdings erfordern Differentialpaare beim Verlegen einer Leiterplatte oder beim Durchführen durch Kabel tatsächlich etwas mehr Sorgfalt. Wenn Sie nicht aufpassen, riskieren Sie mysteriöse Störungen oder Schnittstellen, die überhaupt nicht funktionieren. Gehen wir diese Anforderungen durch.

Zunächst möchten Sie, dass beide Signale des Paars über ihre gesamte Länge nahe beieinander bleiben. Je näher die beiden Signale beieinander liegen, desto besser funktioniert die Unterdrückung externer Interferenzen und desto weniger Rauschen strahlen sie aus – da häufig mehrere Diffpaare nebeneinander verlaufen, trägt dies auch zur Signalintegrität anderer Paare bei. Apropos separate Diffpairs nebeneinander: Sie sollten sie voneinander und von anderen Dingen fernhalten – seien es Massefüllungen auf derselben Ebene oder Hochfrequenzsignale. Eine gute Faustregel ist die 5-W-Regel, die besagt, dass zwischen der Leiterbahnmitte eines Diffpairs und anderen Signalen ein Abstand von mindestens fünf Leiterbahnbreiten vorhanden sein muss. Man hat nicht immer so viel Platz, aber es ist gut, sich so weit wie möglich daran zu halten.

Sie sollten außerdem sicherstellen, dass direkt unter diesen Signalen und entlang des gesamten Paars ein ununterbrochener Erdungspfad vorhanden ist – eine Bodenfüllung ist ideal. Obwohl die beiden Signale vom Empfänger miteinander verglichen werden, verhält sich jedes Signal in Bezug auf den Rückstrom immer noch wie ein Single-Ended-Signal. Außerdem kann ein bisschen zusätzliche Abschirmung sicher nicht schaden. Wenn Sie PCIe an einen benutzerdefinierten Anschluss anschließen, stellen Sie sicher, dass sich zwischen jedem Paar mindestens ein GND-Pin befindet. Zu guter Letzt – stellen Sie sicher, dass beide Schienen innerhalb eines Paares die gleiche Länge haben. Wenn Ihr Paar seinen Winkel ändert, wird eine seiner beiden Spuren etwas kürzer, und Ihr PCB-Editor-Diffpair-Tool sollte es Ihnen ermöglichen, dieser Spur einen „Wigkel“ hinzuzufügen, um sicherzustellen, dass beide Spurlängen gleich sind.

Dann ist da noch die wenig diskutierte Angelegenheit – die Impedanzanpassung. Wenn Sie ein Differenzialpaar von Punkt A nach B verwenden, sollten Sie sicherstellen, dass Sie die richtige Impedanz haben, und die Grundlagen sind einfacher, als Sie vielleicht denken. Impedanz ist wie Widerstand, aber für Signale, die sich ändern. Jeder Teil des Reisewegs des Differenzialpaars hat seine eigene Impedanz: der Empfänger und der Sender in den verwendeten ICs, die IC-Pins, PCB-Leiterbahnen und alle dazwischen liegenden Anschlüsse oder Kabel, wenn Sie das Differenzialpaar durch diese hindurchführen. An jedem Punkt, an dem sich die Impedanz des Signals ändert, wird ein Teil des Signals vom Fehlanpassungspunkt reflektiert, und wenn die Impedanzänderung signifikant genug ist, beeinträchtigt dies Ihr Signal beim Empfang.

Das bedeutet nun, dass Sie sicherstellen müssen, dass die Impedanz für Ihre PCIe-Verbindung über den gesamten Pfad gut ist – was in der Praxis bedeutet, dass Sie geeignete Steckverbinder auswählen und die Breiten und Abstände der Leiterplattenleiterbahnen anpassen müssen. PCIe-Hardware ist meist für eine Impedanz von 85 Ω ausgelegt. Dinge wie Empfänger, Sender und für PCIe vorgesehene Anschlüsse liegen außerhalb Ihrer Kontrolle, und damit die Impedanz des gesamten Pfads einigermaßen gleichmäßig ist, müssen Sie die von Ihnen kontrollierten Teile auf den gleichen Wert einstellen. Wenn Sie für Ihre PCIe-Verbindung Steckverbinder verwenden müssen, wählen Sie zunächst solche aus, bei denen die Impedanz nicht zu stark abweicht. Eine gute Wahl ist die Verwendung von Hochgeschwindigkeitsanschlüssen oder Anschlüssen, die für PCIe-ähnliche Signale entwickelt wurden – PCIe in voller Größe, M.2, mPCIe, USB3, USB-C und viele Hochgeschwindigkeitssteckverbinderfamilien verschiedener Hersteller.

Nun geht es darum, die Impedanz der PCB-Leiterbahnen Ihres Diffpairs abzustimmen. Die Differenzialpaarimpedanz hängt in der Realität von vielen Variablen ab, aber wenn Sie ein Hacker-Anfänger sind, gibt es vereinfachte Taschenrechner, die Ihnen den größten Teil des Weges dorthin bringen – dieser ist mein Favorit. Scrollen Sie nach unten zu „Edge-Coupled Surface Microstrip“, belassen Sie die Leiterbahnhöhe bei 35, um Diffpairs auf 1-Unzen-Kupferschichten zu verlegen, und belassen Sie die Dielektrizitätskonstante bei 4,3, es sei denn, Ihre Leiterplattenfertigung gibt einen anderen Wert an. Stellen Sie dann die Isolationshöhe auf den Abstand von Ihren Diffpairs ein – um dies zu erhalten, gehen Sie zu den Informationen Ihres PCB-Herstellers und suchen Sie nach Informationen zum PCB-Stackup. Angenommen, Ihre Diffpairs befinden sich auf der obersten Ebene und der Boden befindet sich auf der Ebene direkt darunter. Achten Sie dazu auf die „Prepreg“-Dicke zwischen der oberen Kupferschicht und der Schicht darunter – dieser Wert ist Ihre Isolationshöhe. Spielen Sie dann mit den Leiterbahnbreiten und -abständen herum und streben Sie eine Differenzimpedanz von 85 Ohm an. Die Spezifikation gibt Ihnen sogar einen Bereich von 70 bis 100 Ohm!

Praktische Übung – schauen wir uns den 4-Lagen-Aufbau von OSHPark an. Seine Dielektrizitätskonstante (dk) beträgt 3,6 und unsere minimale Leiterbahnbreite und -abstände betragen beide 5 mil, was 0,127 mm oder 127 μm für die Zwecke des Rechners entspricht; die Prepreg-Dicke beträgt 202 µm. Geben Sie die Dielektrizitätskonstante und die Prepreg-Dicke in den Rechner ein und spielen Sie dann mit den Werten.

Sie werden feststellen, dass eine Vergrößerung der Leiterbahnbreite die Impedanz verringert, ebenso wie eine Verringerung des Leiterbahnabstands – stellen Sie diesen auf den kleinstmöglichen Wert ein. Wie Sie sehen werden, können Sie, wenn Sie sich dafür entscheiden, bei 85 Ohm zu bleiben, entweder 0,3/0,127 (Breite/Abstand) Paare wählen und 84,8 Ohm erhalten – viel mehr als nah genug. Wenn Sie sich solche breiten Leiterbahnen nicht leisten können, verwenden Sie 0,2/0,127, um auf 106 Ω zu kommen – etwas außerhalb des empfohlenen Bereichs, aber wenn es sein muss, ist es auch in Ordnung!

Zu guter Letzt: Halten Sie Ihr Routing sauber. Verlegen Sie die Differenzialpaare möglichst nicht über Durchkontaktierungen zu verschiedenen Schichten – jedes Durchkontaktierungspaar fügt dem Signal eine gewisse Induktivität hinzu, was zu Störungen bei den Hochgeschwindigkeitssignalen führen kann. Normalerweise befinden sich der End- und der Startpunkt Ihres PCIe-Links beide auf der obersten Ebene – behalten Sie dies so weit wie möglich bei. Wenn Sie die Schichten wechseln müssen, fügen Sie in der Nähe der Diffpairs einige geerdete Durchkontaktierungen hinzu. Halten Sie außerdem andere schnelle und sich schnell ändernde oder verrauschte Signale so weit wie möglich von den Differentialpaaren entfernt. Wenn Sie in Ihren Projekten Hochleistungs-, Differentialpaar- und Single-Ended-Verbindungen verwenden, legen Sie zuerst die Differentialpaare an.

Also fünf wichtige Dinge: Verlegen Sie Diff-Paare mit nahe beieinander liegenden Signalen, achten Sie darauf, dass sie untereinander geerdet sind, verwenden Sie geeignete Anschlüsse, passen Sie die Breite und den Abstand der Differenzleitungen an die PCIe-Impedanz an und sorgen Sie für eine saubere Verlegung. Dies sind die Grundlagen – das wird von Ihnen erwartet, wenn Sie möchten, dass Ihre Differentialpaare Ihnen gute Dienste leisten.

Wenn Sie schon einmal an PCIe herumgebastelt haben, sind Sie vielleicht auf ein verbotenes Wissen gestoßen: In der Praxis müssen Sie nicht wirklich alle oben genannten Dinge tun.

Sie haben vielleicht gehört, dass PCIe über nasse Saiten läuft – der erste bekannte Hinweis darauf findet sich in einer Präsentation aus dem Jahr 2016 über Konsolen-Hacking bei 33C3. Das ist die Hacker-mutige Art, über PCIe zu sprechen – man kann viele der oben genannten Richtlinien falsch machen, wenn man PCIe-Geräte miteinander verbindet, und es wird trotzdem ruckeln. Und es überrascht nicht, dass da ein großer Körnchen Wahrheit steckt: PCIe funktioniert immer noch unter suboptimalen Bedingungen, und es gibt ein Beispiel nach dem anderen in Hacker- und Verbraucherwelten! Das vielleicht am weitesten verbreitete Beispiel für PCIe-Missbrauch ist das Weiterleiten einer 1x PCIe-Verbindung über USB3-Kabel, was die „Mining“-PCIe-Riser tun – was bedeutet, dass Sie einfach zu Ihrem Computerzubehörgeschäft gehen und ein Produkt kaufen können, das nur dank möglich ist etwas PCIe-Missbrauch.

Etwas anderes, das Sie vielleicht wie einen bösen Traum gesehen und vergessen haben, ist, dass [TobleMiner] einen x8-PCIe-Link durch schaudernde Prototyping-Kabel führt – um eine Adapteridee für billige Hochgeschwindigkeits-Netzwerkkarten von HP-Servern zu testen , nicht kompatibel mit regulären PCIe-Steckplätzen, sowohl hinsichtlich der Pinbelegung als auch mechanisch. Dieser Prototyping-Aufbau ermöglichte es ihm, eine richtige Version des Adapters zu entwerfen, den wir später hier auf Hackaday besprochen haben! Sie können eine PCIe-Verbindung über einen FPC herstellen, um eine schnelle und unkomplizierte Platine-zu-Platine-Verbindung herzustellen. eGPU-Extender haben hierfür auch HDMI-Kabel verwendet, und Sie können es wahrscheinlich mit Magnetdraht zum Laufen bringen. Hier ist ein Experiment von Linus Tech Tips, bei dem sie immer wieder PCIe-Extender stapelten und eine fünf Meter lange Kette erreichten, bevor die Verbindung instabil wurde.

PCIe ist um einiges nachsichtiger als einige andere Schnittstellen, beispielsweise USB3. Es gibt Verbindungstrainingsmechanismen: Wenn eine PCIe-Verbindung hergestellt wird, spielen Empfänger und Sender mit ihren internen Parametern herum und passen sie an, bis sie die höchstmögliche Geschwindigkeit erreichen, während die Fehlerrate niedrig bleibt, und verwenden diese Parameter anschließend für die gesamte Verbindung. Es gibt auch Neuübertragungen für Pakete, die nicht empfangen werden konnten. PCIe weist in der Praxis eine außergewöhnliche Stabilität auf.

Es ist klar, dass das PCIe-Link-Training einige einzigartige Aspekte hat. Um Ihnen beispielsweise dabei zu helfen, Ihr Layout zu verbessern, können Sie mit PCIe auch jedes Differentialpaar außer REFCLK umkehren, indem Sie die negativen und positiven Signale vertauschen. Dies wird erkannt und erkannt beim Linktraining einwandfrei kompensiert. Andere Technologien wie USB3, HDMI oder DisplayPort unterstützen solche Funktionen für die Lebensqualität von Ingenieuren nicht. Andere Schnittstellen erfordern oft, dass mehrere Lanes die gleiche Länge haben – um sicherzustellen, dass Daten auf einem Satz von Paaren nicht schneller ankommen als auf dem anderen. PCIe kommt jedoch auch mit paarübergreifenden Nichtübereinstimmungen zurecht und erkennt und kompensiert diese auch während des Link-Trainings. Bei diesen beiden handelt es sich nicht so sehr um Widerstandsfunktionen, sondern vielmehr um Funktionen zur Vereinfachung des Layouts, die Ihnen helfen sollen, Leiterplatten schneller und besser zu entwerfen, aber es hilft auf jeden Fall, dass sie vorhanden sind.

Hilft diese Widerstandsfähigkeit Hackern? Ja, absolut – diese beiden Funktionen zur einfachen Gestaltung werden praktisch in jedem professionellen PCIe-Design verwendet, und wenn weniger sterile Bedingungen herrschen, können Sie PCIe auf eigenes Risiko weiter vorantreiben. Auf der anderen Seite sollten Sie nicht einfach jede Regel umgehen, nur weil Sie das bei jemandem gesehen haben. Bemühen Sie sich nach Treu und Glauben, diese fünf Richtlinien zu befolgen, selbst wenn Sie auf eine zweischichtige Leiterplatte beschränkt sind und diese möglicherweise nie bekommen Perfekter Impedanzwert. Wenn Sie diese Regeln befolgen, lernen Sie nicht nur etwas Diffpair-Disziplin für spätere Projekte, sondern machen Ihre PCIe-Signale auch noch stabiler und fehlerfreier und Ihre PCIe-Geräte zufriedener. Es mag sich gut anfühlen, alle oder einige dieser Richtlinien zu verwerfen, da es manchmal einfach klappt, aber die zusätzliche halbe Stunde, in der Sie die richtige Impedanz auf Ihrer Platine berechnen, hilft Ihnen dabei, sicherzustellen, dass Ihre Leiterplatte keiner zweiten Überarbeitung bedarf und ihr treu bleibt Ihre Interessen ein Leben lang.

Hier ist also eine Richtlinie: Behandeln Sie Ihre PCIe-Differentialpaare mit Respekt. Wenn Sie eine zweischichtige Leiterplatte verwenden und kostengünstig einen Prototyp erstellen und eine schnelle Durchlaufzeit wünschen, geben Sie nicht einfach die Impedanz auf, denn die Leiterbahnen müssten viel zu breit sein, um 85 Ohm zu erreichen – Öffnen Sie den Rechner und sehen Sie, um wie viel Sie die Impedanz trotzdem senken können. Durch die Verringerung der Isolationshöhe wird die Impedanz verringert. Wenn die mechanischen Aspekte Ihres Projekts dies zulassen, sollten Sie sich daher für eine 0,8-mm-Leiterplatte entscheiden. Verschieben Sie Ihre Komponenten, wenn dies dazu beiträgt, dass Ihre PCIe-Leitungen einem besseren Weg folgen und unterwegs weniger Lärm verursachen. Vielleicht wird ein Link-Training einen unvollständigen Link um eine oder zwei Generationen zerstören, aber das ist besser, als überhaupt keinen stabilen Link zu erreichen. Geben Sie Ihr Bestes, um diese Richtlinien mit dem, was Ihnen gegeben wird, zu befolgen, und die Differentialpaare werden Ihre Absichten im Gegenzug respektieren.

Wenn Sie beispielsweise KiCad verwenden, finden Sie hier eine einfache Demonstration, wie Sie eine PCIe 1x-Verbindung von einem Punkt zu einem anderen herstellen, indem Sie Differentialpaare verlegen und dabei auf Impedanz, Abstände und Via-Stitching achten.

Jetzt sehen Sie, was nötig ist, um PCIe-Differentialpaare auf einer Platine zu leiten, und diese Richtlinien gelten für alle Arten anderer differenzialpaarbasierter Schnittstellen. Das nächste Mal werde ich Ihnen mehr über die Bedeutung von PCIe-Signalen, Verbindungsbreiten und Durchsatz erzählen – die Grundlagen sowie alle angenehmen Überraschungen, die Ihnen PCIe bieten kann. Und wenn Sie tiefer in die Funktionsweise von PCIe eintauchen möchten, schauen Sie sich diesen früheren Artikel von uns an – er ist genau das Richtige, wenn Sie auf der Suche nach eigenen PCIe-Geräten mit FPGAs sind!