Forum: Mikrocontroller und Digitale Elektronik Abwärtskompatibilität von PCIe


von pcie (Gast)


Lesenswert?

Hallo,
Das neue RPI 4 Modul "CM4" hat eine PCIe gen 2 verausgeführt. Ich kenne 
mich mit PCIe garnicht so aus aber kann man PCIe Gen 3.0 am CM4 
verwenden, also ich meine sind aktuelle PCIe devices Abwärtskompatibel?
mfg

von Vermeintlich Wissender (Gast)


Lesenswert?

Hallo,

ja, die höheren Versionen sind abwärtskompatibel. Der Bus/Protokoll 
handelt das entsprechend aus, was der langsame Teilnehmer noch schafft.

Gruß,

von portwandler (Gast)


Lesenswert?

Das ist mechanisch narrensicher.
Wenn die Karten in den Slot passen, so ist das auch kompatibel.

von fchk (Gast)


Lesenswert?

pcie schrieb:

> Das neue RPI 4 Modul "CM4" hat eine PCIe gen 2 verausgeführt. Ich kenne
> mich mit PCIe garnicht so aus aber kann man PCIe Gen 3.0 am CM4
> verwenden, also ich meine sind aktuelle PCIe devices Abwärtskompatibel?

JEDER PCIe Link startet als Gen1 Link. Per Handshake wird dann auf die 
nächsthöhere Generation geschaltet, solange beide Linkparner das dann 
unterstützen. Sagt einer Stop, ist die Aushandlung zuende. Damit ist die 
Rückwärtskompatibilität gegeben.

Beim Pi wirst Du eher ein Treiberproblem haben. Viele PCIe Devices sind 
nicht beim Kernel dabei. Dazu gibt es noch das BAR-Problem. BAR sind die 
Base Address Registers, d.h. die Register, wo der Kernel den Karten 
Adressräume zuordnet. Der Pi hat standardmäßig einen relativ kleinen 
Adressraum für PCIe-Karten, so dass Du beispielsweise keine 
PCIe-Grafikkarten zum Laufen bekommen wirst, weil die ein 256MB-Fenster 
haben wollen, und das gibts halt beim Pi nicht.

Manche Treiber enthalten auch x86-Spezialitäten, die es auf ARM so nicht 
gibt. Das musst Du dann entsprechend per #ifdef anpassen.

fchk

von pcie (Gast)


Lesenswert?

Vielen Dank für eure Antworten.
Deine Erklärung, fchk war sehr Aufschlussreich. Du sagtest, dass man 
wird ein Treiberproblem bekommen. Wo kann ich mir ansehen, welche 
treiber im Kernel implementiert sind?
Mit geht es vorallem um eine PCIe-PCIe bridge, da ich noch 4 Lanes, für 
4 Devices benötige. Diese sind 3 Mac-Controller (z.b. LAN7430) und eine 
PCIe zu PCI bridge, z.b. der xio2001.

Beide Devices habe ich schonmal gefunden:
https://github.com/raspberrypi

Auf www.kernel.org finde ich keine BCM2711_defconfig :(

von Frank K. (fchk)


Lesenswert?

Schau mal hier:
https://github.com/geerlingguy/raspberry-pi-pcie-devices

Der Typ hat auch einen Youtube Kanal.
https://www.youtube.com/watch?v=x0wl3ZaOq_g

Er hat sehr viel Arbeit in diese Geschichten investiert. Das ist die 
Top-Quelle.

fchk

PS: Für Dein Vorhaben ist ein Jetson Nano oder ein Xavier NX deutlich 
besser geeignet. Der Jetson Nano hat PCIe Gen2 x4 (also 4 Lanes anstelle 
nur einer beim Pi), und damit hast Du viermal so viel Bandbreite. Die 
wird bei dreimal Gigabit Ethernet schon ein Problem. Du wirst die drei 
Ports eher nicht mit voller Geschwindigkeit betreiben können. Beim Nano 
kein Problem. Da solltest Du eine i340-basierte 4GBE-Netzwerkkarte mit 
voller Last bereiten können.
Xavier NX hat noch deutlich mehr Rechenleistung und einen PCIe Gen2 x1 
extra, den Du z.B. für Deine PCIe-PCI-Brige verwenden kannst.

: Bearbeitet durch User
von pcie (Gast)


Lesenswert?

Danke sehr fchk,

ich bleibe aber bei dem Cm4. Die Ethernetschnittstellen werden nicht 
vollgebrummt. Außerdem ist der Preis bei RPI4 unschlagbar. Das NVIDIA 
kostet 10x soviel. Und Wärmeentwicklung ist auch ein thema, da ist RPI4 
im Vorteil.

von Frank K. (fchk)


Lesenswert?

pcie schrieb:
> Und Wärmeentwicklung ist auch ein thema, da ist RPI4
> im Vorteil.

Woher weißt Du das? Hast Du mal ein Nano in den Fingern gehabt?

fchk

von pcie (Gast)


Lesenswert?

Ich hab ein paar sachen im netz gesucht, Leistungsaufnahme. Ja das 
NVIDIA ist schon sehr sehr schnell aber es braucht auch 15W und das ist 
für meien Anwendung schon zuviel :)
Das RPI4 brauchte dagegen bei volllast 7W. Um welchen faktor das NVIDIA 
bestimmte sachen schneller rechnet, dazu kannn ich nichts sagen.

von M. Н. (Gast)


Lesenswert?

Vermeintlich Wissender schrieb:
> Der Bus/Protokoll
> handelt das entsprechend aus, was der langsame Teilnehmer noch schafft.

Das klingt ein wenig so, als wäre PCIe noch ein paralleler Bus zu allen 
Geräten. Dem ist allerdings nicht so. PCIe sind Point-to-Point 
Verbindungen zwischen zwei Geräten. Dieser Link kann dementsprechend auf 
den kleinsten gemiensamen Nenner der beiden Endstellen gebracht werden.

Das hat zur Folge, dass auch eine langsame PCIe Karte mit Gen 1 nicht 
das komplette PCIe System lahmlegt.

(Die Aussage PCIe Bus kommt hauptsächlich aus der Software-Ecke, da es 
die Leute tatsächlich geschafft haben, trotz der massiven Hardware- und 
Topologieänderungen von PCI zu PCIe die Softwareabstraktion nahezu 
identisch zu halten)

von pcie (Gast)


Lesenswert?

Wieviel Geräte lassen sich an einer einzelnen Lane anschliesen, wenn man 
ständig mit PCIe-switches erweitert? Da gibt es doch sicherlich eine 
begrenzung.

von Frank K. (fchk)


Lesenswert?

pcie schrieb:
> Wieviel Geräte lassen sich an einer einzelnen Lane anschliesen, wenn man
> ständig mit PCIe-switches erweitert? Da gibt es doch sicherlich eine
> begrenzung.

PCIe ist immer und grundsätzlich eine Punkt-zu-Punkt Verbindung. Ein 
Gerät an einem Ende, eines am anderen. Die Bridge ist auch ein Gerät.

Brigdes solltest Du eher nicht kaskadieren, sondern eher eine mit der 
passenden Anzahl an Downlink-Ports nehmen.

Sowas z.B.
https://www.diodes.com/assets/Datasheets/PI7C9X2G608EL.pdf

Dazu brauchst Du noch EINEN Clock Buffer mit der passenden Anzahl an 
Ausgängen, der RefClk an die einzelnen Downlinks verteilt.

Sowas z.B.

https://www.silabs.com/documents/public/data-sheets/Si53156.pdf

Oder aber Du nimmst Netzwerk-Controller mit mehreren Ports. Ein Intel 
i350-AM4 wäre beispielsweise eine übliche Wahl. Marvell und Broadcom 
haben da auch einiges im Angebot.

fchk

PS: Die offiziellen PCIe Standards solltest Du gelesen haben. Und beim 
Leiterplattenentwurf sollten Dir Sachen wie Impedanzkontrolle, Length 
Matching (auf 0.15mm innerhalb einer Differential Pairs) und die 
üblichen Layout-Regeln bekannt sein.

: Bearbeitet durch User
von pcie (Gast)


Lesenswert?

> PS: Die offiziellen PCIe Standards solltest Du gelesen haben. Und beim
> Leiterplattenentwurf sollten Dir Sachen wie Impedanzkontrolle, Length
> Matching (auf 0.15mm innerhalb einer Differential Pairs) und die
> üblichen Layout-Regeln bekannt sein.

- Skew kleinhalten bei Leiterpaaren
- diffs bei PCIe >= Gen. 2 auf 85 Ohm routen.
- single ended Signale bei PCIe >= gen. 2 auf 50 Ohm routen.
- bei Switch:
    -> Clock auftrennen und mit Clock-expander verteilen
    -> Längenmatching für jedes Lane. (schön gedenglischt)
    -> Platz zwischen zwei Diff´s >= 2*w+s
    -> AC-Coupling in alle Transmit diffs?
        -> hab das an einem Beispiel vom LAN7430 gesehen, ich mutmaße 
das jedes Transmit paar AC-mäßig entkoppelt wird. Auch das Transmit 
zwischen Prozessor/PCIe host und PCIe switch?
    -> müssen die Diff-Signal terminiert werden?
       -> wieso befinden sich bei diesem Beispiel (siehe link unten) die 
CAP´s im RX?



https://blog.mbedded.ninja/electronics/communication-protocols/pci-express-pcie/pcie-hardware-design-guide/pcie-edge-connector-schematic-symbol-and-example-design.png

von Frank K. (fchk)


Lesenswert?

pcie schrieb:
> - Skew kleinhalten bei Leiterpaaren
> - diffs bei PCIe >= Gen. 2 auf 85 Ohm routen.
> - single ended Signale bei PCIe >= gen. 2 auf 50 Ohm routen.
hier hast Du nur clkreq, wake und perst, und die sind völlig unkritisch.

> - bei Switch:
>     -> Clock auftrennen und mit Clock-expander verteilen
>     -> Längenmatching für jedes Lane. (schön gedenglischt)
>     -> Platz zwischen zwei Diff´s >= 2*w+s
>     -> AC-Coupling in alle Transmit diffs?
>         -> hab das an einem Beispiel vom LAN7430 gesehen, ich mutmaße
> das jedes Transmit paar AC-mäßig entkoppelt wird. Auch das Transmit
> zwischen Prozessor/PCIe host und PCIe switch?
TX von einer Seite kommen zum RX auff der anderen Seite, und die 
Kondensatoren (max 0402) kommen immer auf die TX-Seite.

>     -> müssen die Diff-Signal terminiert werden?
nein

>        -> wieso befinden sich bei diesem Beispiel (siehe link unten) die
> CAP´s im RX?
Weil das RX von der Karte das TX vom Host ist, und am TX kommen die Cs 
hin.

fchk

von pcie (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

Wenn ich einen switch verwende, dann muss der CLK durch nen Buffer wie 
z.b. den Si53156 aufgetrennt werden. Stimmt die grundsätzliche Struktur, 
wie ich sie auf der Abbildung zeige?

Wie lang muss die Clockleitung zwischen Host und Switch sein? Ich 
mutmaße das die Strecken L_CLK0a + L_CLK0b == L_{Rx, Tx} sein müssen.

Wie funktioniert das negotiation? Mal angenommen der Host gang Gen2, der 
switch könnte Gen3 und drei devices an dem switch könnten Gen1, Gen2 und 
Gen3. In diesem Fall würde die Kommunikation (mit dem Si53156) nur mit 
Gen2 funktionieren, also das Device 1 dürfte nicht funktionieren können, 
da es den höheren Takt nicht kann. Für so einen Fall bräuchte ich dann 
ein Buffer mit PLL, der die Clocks anpasst, muss ich das dann händisch 
per I2C machen oder kann das z.b. der P16C20800S übernehmen?

Bei meinem Projekt wird es aber so sein, dass ich einen Gen2 Host habe 
und einen Gen2 Switch verwende. Die devices sind Gen4 oder Gen5. In 
diesem Fall dürfte einer "dummer" Clockbuffer  wie der Si53156 
ausreichen.

von Frank K. (fchk)


Lesenswert?

pcie schrieb:

> Wenn ich einen switch verwende, dann muss der CLK durch nen Buffer wie
> z.b. den Si53156 aufgetrennt werden. Stimmt die grundsätzliche Struktur,
> wie ich sie auf der Abbildung zeige?

Ja, alle differentiellen Signale sind immer Punkt-zu-Punkt Verbindungen, 
da darfst Du keinerlei Verzweigungen oder Stichleitungen haben. Das gilt 
auch für Refclk. Und: Refclk hat keine AC-Kopplung.

> Wie lang muss die Clockleitung zwischen Host und Switch sein? Ich
> mutmaße das die Strecken L_CLK0a + L_CLK0b == L_{Rx, Tx} sein müssen.

Das ist unkritisch. Der eigentliche Bitclock läuft auf den TX und RX 
Lanes mit. Und die TX Lanes müssen auch nicht mit den RX Lanes 
abgeglichen sein. Schau in den PCIe Standard, da steht alles drin.

> Wie funktioniert das negotiation? Mal angenommen der Host gang Gen2, der
> switch könnte Gen3 und drei devices an dem switch könnten Gen1, Gen2 und
> Gen3. In diesem Fall würde die Kommunikation (mit dem Si53156) nur mit
> Gen2 funktionieren, also das Device 1 dürfte nicht funktionieren können,
> da es den höheren Takt nicht kann.

Falsch. Der PCIe RefClk ist immer konstant 100MHz, egal bei welcher PCIe 
Generation. Die Anforderungen an die Stabilität des Clocks wird mit 
jeder Generation höher, nicht aber die Frequenz.

fchk

von pcie (Gast)


Lesenswert?

Danke sehr fchk,

noch zwei Fragen: Wozu wird der refclock benötigt? Alle devices haben 
eine eigene Taktquelle, außerdem ist der Takt in tx und rx mit 
eingebettet.

Ich lese in den Artikel immer wieder, das man sogar die polarität 
vertauschen und lanes vertauschen kann. Aber ich bin mir nicht sicher ob 
das eine besonderheit von Gen4 doer höher ist oder ob das PCIe schon 
immer konnte.

von Frank K. (fchk)


Lesenswert?

pcie schrieb:

> noch zwei Fragen: Wozu wird der refclock benötigt? Alle devices haben
> eine eigene Taktquelle, außerdem ist der Takt in tx und rx mit
> eingebettet.

Die lokalen Oszilatoren können auseinanderdriften, und dann müsste man 
in den Datenstrom Bits einfügen oder wegnehmen. Durch einen gemeinsamen 
Referenztakt vermeidet man das. Der Receiver wird dadurch einfacher 
realisierbar.

> Ich lese in den Artikel immer wieder, das man sogar die polarität
> vertauschen und lanes vertauschen kann. Aber ich bin mir nicht sicher ob
> das eine besonderheit von Gen4 doer höher ist oder ob das PCIe schon
> immer konnte.

Das ist unabhängig von der Generation, aber ich bin mir nicht sicher, ob 
alle Bausteine das unterstützen müssen. Die Idee dahinter ist, dass man 
das Layout einfacher und aus HF-technischer Sicht besser hinbekommt, 
denn Du solltest ja nach Möglichkeit möglichst keine Vias haben. Schau 
in die Datenblätter der beteiligten ICs.

fchk

von pcie (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,
ich dachte mir, ich nutze diesen Thread weiter. Ich beschäfftige mich 
gerade mit dem PI7C9X2G404EL. Im Datenblatt wird leider nicht geklärt 
wohin IREF mit einem 475 Ohm Widerständ verbunden werden soll.

von späte Korrektur (Gast)


Lesenswert?

Frank K. schrieb:
> alle differentiellen Signale sind immer Punkt-zu-Punkt Verbindungen

CAN, RS485, RS422 ...
PTP und differentielle Übertragung sind zwei paar Schuhe.

von Frank K. (fchk)


Lesenswert?

späte Korrektur schrieb:
> Frank K. schrieb:
>> alle differentiellen Signale sind immer Punkt-zu-Punkt Verbindungen
>
> CAN, RS485, RS422 ...
> PTP und differentielle Übertragung sind zwei paar Schuhe.

Hier ging es ausschließlich um PCIe.

von Frank K. (fchk)


Lesenswert?

pcie schrieb:
> Hallo,
> ich dachte mir, ich nutze diesen Thread weiter. Ich beschäfftige mich
> gerade mit dem PI7C9X2G404EL. Im Datenblatt wird leider nicht geklärt
> wohin IREF mit einem 475 Ohm Widerständ verbunden werden soll.

Geht gegen GND.

Wenn Du Dich als Firma registrierst, bekommst Du Zugriff auf ein Design 
Kit zu dem Teil. Da ist auch ein Demoboard als Orcad/Allegro Dateien und 
als PDF Schaltplan dabei, sowie Errata, Design Guidelines etc.

fchk

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.