PCIe-Verzweigung – Anforderung an Switch

Betrachten Sie das folgende Szenario:

Ein Designer möchte 3 Geräte an einem PCIe x4-Finger-Edge-Anschluss anschließen, der häufig auf Hauptplatinen zu finden ist. Alle 3 Geräte werden auf derselben PCIe-Karte bestückt. Ein Gerät hat 1 Port mit 2 Lanes, dh (1 x2 PCIe-Port). Die verbleibenden zwei Geräte haben jeweils 1 Port mit 1 Lane (1 x1 PCIe-Port).

Schema 1:

Mit PCIe-Switch

Schema 2:

Ohne PCIe-Switch

Ich habe Schema 1 in den Datenblättern einiger PCIe-Switches gesehen. Ich möchte wissen, ob in diesem Fall wirklich ein PCIe-Switch erforderlich ist.

Was wäre, wenn wir den Switch weglassen und einfach die PCIe-Lanes wie in Schema 2 aufteilen?

Wird es ein legitimes PCIe-Netzwerk sein?

Wenn ja, wie werden die Busnummern zugewiesen?

Fragen Sie gerne nach, wenn Klärungsbedarf besteht.

Bearbeiten 1:

Zitat von PCI_Express_Base_Specification_Revision_3.0 :

Die Möglichkeit, einen Port in zwei oder mehr Links aufzuteilen, ist optional. Ein Beispiel für dieses Verhalten wäre ein x16-Port, der möglicherweise zwei x8-Links, vier x4-Links oder 16 x1-Links konfigurieren kann.

Weitere Informationen finden Sie unter der Überschrift4.2.4.10.1. Required and Optional Port Behavior

Über " einfach die PCIe-Lanes aufteilen? ", wie schlagen Sie vor, das zu tun?
@AnindoGhosh, Aufteilen von Fahrspuren wie in Schema 2 oder in der Beschreibung beschrieben. Siehe Bearbeiten 1

Antworten (2)

PCIe-Links funktionieren also so, dass sie als Gen 1 x1-Links auftauchen und dann bis zu mehr Lanes und höheren Geschwindigkeiten aushandeln. Wenn Sie die Karte mit mehreren Geräten verkabeln, die mit dem Edge-Anschluss verbunden sind, funktioniert nur das eine, das mit Lane 0 verbunden ist, der Rest wird nicht aufgezählt. Es sei denn natürlich, Sie können den Switch-Port neu konfigurieren, der den fraglichen Steckplatz ansteuert, um den Steckplatz in die benötigte Lane-Konfiguration zu teilen. Darauf können Sie sich sicherlich nicht verlassen - es erfordert nicht nur, dass der Switch oder die Bridge diese Konfiguration unterstützt, sondern es erfordert auch, dass die Möglichkeit, die Konfiguration zu ändern, irgendwo verfügbar ist. All dies hängt stark vom verwendeten Motherboard, den installierten PCIe-Chips, der Verkabelung und der BIOS-Schreibweise ab.

Dies ist konzeptionell sehr einfach zu verstehen, aber vielleicht nicht ganz klar aus der Spezifikation. Ich habe mit diesem Problem vor einiger Zeit gekämpft und so funktioniert es:

Sie können einen einzelnen Port nicht in mehrere Ports aufteilen. Oder anders gesagt: Egal wie viele Fahrspuren ein Hafen hat, Sie können nur alle diese Fahrspuren nutzen, um ein Gerät zu speisen. Wie bei allen anderen verwandten seriellen Protokollen (SATA, USB 3.0 und höher, Thunderbolt) müssen Sie einen Switch verwenden, um mehrere Geräte an einem Port zu verwenden. Solche Switches sind auch keine besonders trivialen Geräte, sie müssen neben der physischen Umschaltung ein Minimum an Arbitrierung durchführen, sodass Sie nicht nur mit Muxes auskommen können. Wenn Sie eine Schiffsladung NDAs unterschreiben, können Sie diese Teile glücklicherweise ziemlich günstig von Unternehmen wie Pericom, JMicron und ParadeTech bekommen.

Bedeutet das, dass die optionale Möglichkeit, einen Port in zwei oder mehr Links aufzuteilen, in praktischen Geräten nicht implementiert ist?
Dies kann implementiert werden, ist aber ein Host-seitiger Parameter. Sie müssen zB den LPC-Bus anzapfen oder mit Chipsatztreibern herumspielen, um diese Art von Funktionalität zu erhalten. Sie können einen einzelnen Port nicht geräteseitig in mehrere Links aufteilen.