Bestes Board-to-Board-Protokoll/Schnittstelle mit geringer Latenz

Ich habe eine ähnliche Frage gestellt, die einige Ablehnungen erhalten hat, also formuliere ich meine Aufgabe neu (hofft, diese gibt mehr Klarheit).

Ich plane, eine serielle Hochgeschwindigkeitsverbindung (3 Gpbs Vollduplex) zwischen zwei FPGA-Karten herzustellen (Abstand zwischen den Chips < 15 cm, einschließlich der Anschlüsse), genauer gesagt zwischen Spartan 6- und Artix 7-Geräten ( diese sind nicht absolut Anforderungen, scheinen aber die billigsten mit integrierten Transceivern zu sein).

Ich bin mir nicht sicher, welches Protokoll ich wählen soll. Ich habe mich in letzter Zeit mit den RapidIO-Spezifikationen beschäftigt, aber es sieht so aus, als müsste ich einen Switch-Chip verwenden, um Geräte anzuschließen, aber Switches sind ziemlich teuer (~ $ 150 / Stück) und führen mindestens 100 ns Verzögerung sowie mehr als 10 Schichten ein PCB-Anforderung ( Beispiel ).

PCIExpress ist keine Option (obwohl der Anschluss nett ist), da es eine Verzögerung von etwa 500 ns einführt, und idealerweise untersuche ich eine Übertragungslatenz von unter 100 ns (vom parallelen Stream in einem FPGA zum parallelen Stream in einem anderen). Aufgrund der hohen Latenzzeiten ist 10-Gbit-Ethernet ebenfalls keine Option.

Es gibt auch ein Aurora-Protokoll von Xilinx ( Link ), aber ich kann keine PHY-Layer-Definitionen und Verzögerungsnummern finden. Mehr noch, obwohl alle Hochgeschwindigkeits-Serdes-Anwendungen mit niedrigen Pinzahlen werben, verwenden alle Entwicklungsplatinen mit eingebetteten Transceivern entweder SMC-, optische oder kryptische Mezzanine-Kartenanschlüsse mit 400 Pins. Gibt es eine andere Möglichkeit? Wie etwa 50-poliger Stecker oder weniger. Also, um das zusammenzufassen, sind die Fragen:

  1. Ist es möglich, mit Serdes eine Verzögerung von unter 100 ns zwischen zwei Chips zu erreichen?
  2. Gibt es PHY-Spezifikationen/Beispiele für Aurora?
  3. Wird es einfacher sein, eine breite BLVDS-Schnittstelle zu verwenden und einen parallelen Bus mit hohem Takt zu verwenden?

Jeder Vorschlag wird sehr geschätzt!

Woher kommt die Latenz bei der Verwendung von PCIe? Ist es für Protokollzwecke unidirektional oder bidirektional - benötigen Sie eine Spurwende oder können Sie dedizierte TX/RX-Spuren haben? Könnten Sie eine DDR3-Schnittstelle verwenden?
neugierig, warum so viel Bandbreite? Nein Datenkomprimierung oder Algorithmen? Wie wäre es mit einem 64-Bit-GPU-Bus?
Wichtige fehlende Informationen: Wie breit ist der parallele Stream?
Haben Sie sich das Serdes-Angebot von TI angesehen - Sie können 5x LVDS-Eingänge mit bis zu 3 Gbit/s serialisieren und natürlich deserialisieren.
@ pjc50 PCIe-Latenzzahlen stammen von hier
Die Breite des parallelen Streams beträgt 64 Bit @DaveTweed
@TonyStewartolderthandirt Es ist im Grunde ein Speicher-/Datenstrom, und die Komprimierung führt zu einer erheblichen zusätzlichen Verzögerung
@Andyaka Kannst du bitte einen Link posten?
Ich kann die DDR3-Schnittstelle verwenden, aber ich denke, dass mir die Pins ausgehen werden. Außerdem erfordert es ein sehr komplexes PCB-Layout und eine sehr komplexe Schichtung
Latenz = FIFO-Speicher x T(clk)*Paketlänge + Overhead (können Sie etwas davon definieren?)
Nein, ich kann keinen Link posten - das ist etwas, das Sie leicht finden können.
3Gps/100ns ~ 3kbit Frame + 0 Overhead oder ? 24kbit Rahmen/8Kanäle + 0 OH oder 192kbit Rahmen/64bit Kanal + 0 OH oder? Wie groß ist dein Framebuffer?
xilinx.com/publications/archives/books/serialio.pdf sieht aus wie ein sehr gründliches Dokument.
Wie groß ist dein Framebuffer? ?
Sie können sehr schnell Punkt-zu-Punkt erreichen, könnten aber an anderer Stelle Engpässe haben (Sie haben einen Switch erwähnt) ... Es ist wichtig, die Latenzanforderungen von Quelle zu Ziel zu kennen und dann den Worst-Case zu analysieren, um zu verstehen, ob Sie sich treffen können die Mindestzeitanforderung. Beispielsweise ist RapidIo ein Store-and-Forward-System. Sobald Sie also einen Schalter drücken, führen Sie eine Latenz ein, wenn XOFF am Schalter vorhanden ist. Auch ohne Switch ist es entscheidend, wie Sie mit den Daten auf beiden Seiten der Verbindung umgehen, um die Latenz des interessierenden Pfads zu kennen.

Antworten (2)

Aurora scheint eine vernünftige Wahl zu sein; Im Grunde sieht es so aus, als würden Sie bauen, wenn Sie versuchen würden, eine generische Schnittstelle aus Hochgeschwindigkeits-SERDES zu bauen. Es hat eine Flusskontrolle. Es hat sogar Channel-Bonding, was anscheinend von Xilinx-Hardware unterstützt wird. Das sollte Ihnen Ihre erforderliche Geschwindigkeit von theoretisch einem einzelnen Verbindungspaar in jede Richtung bei maximal 3 Gpbs geben.

Dieser Link gibt einige Latenzzahlen für einen Loopback-Link an. Die Platine-zu-Platine-Latenz hängt offensichtlich von der Leitungsverzögerung ab.

Es sollte keinen komplexeren Aufbau als das FPGA selbst erfordern (normalerweise mindestens 4?). Ich würde vorschlagen, die PCIe-Anschlüsse zu verwenden, auch wenn Sie das Protokoll nicht verwenden. Alternativ bieten SATA-Anschlüsse möglicherweise eine gute Option für kurze Kabel.

Sie spezifizieren den PHY überhaupt nicht, aber diese App-Note gibt ein Beispiel dafür, wie zwei Evaluierungskarten verbunden werden. Sie sind nur mit Mini-Koaxialkabeln mit SMA-Anschlüssen verdrahtet, also schätze ich, dass die erforderliche Impedanz die üblichen 50 Ohm ist?

Danke! Aber warum haben Sie angegeben, dass ich mindestens 4 FPGAs benötige? Meinst du Transceiver-Module/Kanäle?
Entschuldigung, mindestens 4 Schichten in der Leiterplatte.

Sie sollten unbedingt die Gigabit-Transceiver verwenden. Mit Spartan 6 können Sie mit einem Transceiver bis zu 3,125 Gbps senden, das ist also kein Problem.

Diese Transceiver funktionieren sehr gut und sind sehr einfach zu implementieren.

Wenn Sie SFP-Anschlüsse auf beiden Platinen haben, müssen Sie nur ein SFP-Kupferdrahtkabel kaufen, um die beiden Platinen zu verbinden. Wenn Sie SMA haben, müssen Sie nur vier SMA-Kabel kaufen. Es gibt auch SFP-zu-SMA-Kabel.

Wenn ich diese Art von Projekt durchgeführt habe, definiere ich normalerweise mein eigenes Protokoll, aber Sie müssen einige K-Wörter senden, um die Bytes im seriellen Strom auszurichten. Sie müssen auch eine Leerlaufsequenz für den elastischen Puffer definieren. Normalerweise verwende ich das gleiche K/D wie für Ethernet definiert.