Frage:
Wie kann ein SerDes-basierter Link verwendet werden, um den uralten UART zu ersetzen?
Quantum0xE7
2020-06-30 01:39:31 UTC
view on stackexchange narkive permalink

UART eignet sich hervorragend zum Übertragen von Protokolldaten von einem Prüfling an einen PC.Es ist jedoch nicht schnell genug.Es gibt viele neuere Dinge wie USB, PCIe e.t.c, die viel mehr Daten übertragen und auch die serielle Übertragung verwenden können.Das bringt mich zu der Frage.Wie kann man die SerDes verwenden, um den UART zu ersetzen?SerDes ist nur ein Serializer-Deserializer.Normalerweise wird SerDes als Komponente eines viel größeren Designs verwendet, das mehr Komponenten wie 8b / 18b-Codierung e.t.c.

enthält

Wenn man eine wirklich schnelle, aber einfache Ersetzung für UART wünscht, um Zeichen für Protokolldaten an einen PC-Bildschirm zu senden, welche Methoden sollte man wählen?Die SerDes sind hier auf FPGA vorhanden.

Implementieren Sie einfach eine Hochgeschwindigkeitsversion von UART.
Wie schnell willst du gehen?Ich verwende serielle Standard-FTDI-USB-Geräte mit 3 Mbit / s (300 kByte / s).Wenn Sie Ihre eigene USB-CDC mit einer MCU erstellen, können Sie ungefähr 1 MByte / s erreichen.Ich nehme an, mit einem FPGA könnten Sie ein PCIe-Gerät implementieren, das ein UART ist und für schreckliche Geschwindigkeiten geeignet ist.
Das Problem mit SERDES ist, dass Sie auch auf der PC-Seite eine Implementierung benötigen.Die meisten "gehen wirklich schnell" Dinge wie SDRs haben so etwas wie ein USB-Fifo der späteren Generation verwendet, einige haben möglicherweise eine Variation von SATA verwendet.Diese Schemata enthalten implizit eine SERDES-Funktion, sind aber viel mehr als das.
Denken Sie daran, dass Sie bei Verwendung von SERDES eine Uhr zusammen mit den Daten übertragen müssen.Das ist ein weiterer Draht, und das Senden von Hochgeschwindigkeitsimpulsen über lange Drähte ist nicht trivial.Sie möchten wahrscheinlich die LVDS-Signalisierung verwenden.
@Elliot Alderson, SERDES kann selbstsynchron sein, was bedeutet, dass die Uhr in den seriellen Bitstrom eingebettet ist und mit einer PLL-Technik daraus extrahiert werden muss
Schneller UART ist nicht schnell genug.Grundsätzlich generiert das Design viele Daten in Echtzeit und da der UART-Puffer voll ist, bleibt der Nios-Prozessor hängen und das gesamte Design fällt auseinander.Ich denke, dass eine robuste Methode zum Debuggen des Designs von Anfang an integriert worden sein muss, aber es ist zu spät.
Arbeiten Sie also um die Nios herum.Benötigen Sie das Ding wirklich?
Nios ist der Softprozessor im FPGA
@Justme Die FTDI-Module / Kabel, die den C232 verwenden, können bis zu 12 Mbit / s erreichen
@DKNguyen Gut zu wissen.FT232H hat 1 KByte Puffer.Was ich verwende, hat einen 256-Byte-Puffer, sodass bei 3 Mbit / s keine kontinuierliche Übertragung möglich ist, da der Puffer zwischen USB-Paketen voll wird.
@Justme Der C232 hat immer noch den gleichen 1-KB-Puffer = /
Drei antworten:
frr
2020-06-30 01:54:13 UTC
view on stackexchange narkive permalink

Sie müssen eine der auf dem PC verfügbaren Hochgeschwindigkeitsschnittstellen auswählen und diese in Ihrem FPGA (oder durch einen Companion-Chip) implementieren, einschließlich aller oberen Protokollschichten, die für den Austausch erforderlich sind Daten mit einer App, die auf dem PC ausgeführt wird.

Eine SERDES allein wird es nicht schneiden. Wenn dies nun ein SERDES wäre, der an einen Ethernet-MAC (oder MAC + PHY) gekoppelt ist, der wiederum mit einem internen MCU / CPU-Kern verwendet werden könnte, würde das langsam Sinn machen. P. >

Bei anderen Optionen haben Sie bereits USB erwähnt. Eine andere Möglichkeit ist die PCI-e oder die parallele PCI in früheren Zeiten. Auf dem Host-PC können Sie mit LibUSB vom Benutzer aus mit dem USB-Material sprechen Raum. Benutzerdefinierte PCI- oder PCI-e-Hardware benötigt einen Kernel-Space-Treiber.

Für einen wirklich hohen Durchsatz (effiziente Nutzung der verfügbaren Bandbreite) müssen Sie Pufferung / Blocktransfers / DMA-Daten implementieren. Die vorhandenen PC-Schnittstellen bieten all das, aber Sie müssen dies auf einem Teil Ihres benutzerdefinierten Geräts unterstützen ...

BEARBEITEN:

Bei einmaligen Laboraufbauten verfügten Unternehmen, die industrielle Schnittstellenkarten für die Datenerfassung für den PC herstellen, tendenziell auch über ein Modell für parallele digitale Hochgeschwindigkeits-E / A. Ich erinnere mich an die PCI-1755 von Advantech (vor langer Zeit aus dem Programm genommen), die 32 Bit bei 20 MHz = 80 MByte pro Sekunde ausführen kann. Der externe Bus wurde über von SCSI ausgeliehene Kabel transportiert. Intern auf dem parallelen PCI-Bus verwendete die Karte Bus-Master-DMA. Heutzutage würde ich einen Blick darauf werfen, ob National Instruments etwas hat, und ich weiß, dass Adlink eine ganze Produktfamilie in diesem Sinne hat.

Die PCI-Schnittstelle auf einer Reihe von industriellen E / A-Karten wurde früher mithilfe von "Slave Bridges" von PLX implementiert (vor Jahren von Avago, jetzt Broadcom, übernommen). Ich erinnere mich an Universalchips wie PCI-9052, PCI-9030, PCI-9056 oder PCI-9656 - die beiden letzteren können BM-DMA. Als PLX assimiliert wurde, sah es so aus, als wären diese Chips zum Scheitern verurteilt. Ich denke, einige wurden sogar auslaufen - und ich bin ziemlich überrascht, dass einige von ihnen von Mouser aufgelistet und auf Lager sind, aber sehen Sie sich die an Preise :-) Ich glaube, dass es früher ähnliche Chips mit einer PCI-e-Schnittstelle gab, aber ich kann mich irren. Zu der Zeit, als es so aussah, als wären diese PLX-Slave-Bridges verschwunden, haben Anbieter wie Advantech viele ihrer Boards neu gestaltet, um FPGAs für eine PCI-Schnittstelle zu verwenden. Dadurch wurden ihre Designs proprietärer und weniger öffentlich dokumentiert. Auf einer Karte, die früher einen PCI-Slave-Bridge-Chip hatte, habe ich bei einer kürzlich durchgeführten Überarbeitung einen Chip von Actel gefunden - der eher wie ein FPGA aussieht. Die Liste der IP-Kerne von Actel enthält mehrere interessante Schnittstellenblöcke, z. B. PCI-e.

Ich habe auch einen eigenständigen SERDES-Transceiver von Texas Instruments gefunden, den TLK2501. Ich frage mich, ob dies mit Ihrem vorhandenen FPGA-Design kompatibel wäre. Koppeln Sie den parallelen lokalen 16-Bit-Bus mit einer DMA-fähigen Slave-Brücke von Broadcom (ex-PLX), und es könnte genauso gut funktionieren ...

Chris Stratton hat SATA erwähnt.Das klingt überhaupt nicht dumm.Ich habe sogar einen SATA-Host-IP-Core für ein Xilinx-FPGA gefunden, der über den erforderlichen Differenzialtreiber und -empfänger verfügt.Sata Target-Chips oder IP-Cores sind jedoch schwer zu finden - wahrscheinlich, weil SATA-Target-Boxen nur von einigen großen Anbietern hergestellt werden: zwei Festplattenmarken und möglicherweise einige DVD-ROM-Hersteller.Eine Reihe von Flash-SSD-Zielcontrollern verfügen über eine SATA-kompatible Schnittstelle ... Die in SATA-Laufwerken (Spinnrost) verwendeten HBA-Chips im Zielmodus werden traditionell von Marvell, LSI und möglicherweise anderen solchen Anbietern hergestellt - einige sind wahrscheinlich private Chipmodelle, wo ein öffentliches Datenblatt nicht einmal verfügbar ist ...

Ich habe darüber nachgedacht, die Daten auf eine andere Tochterplatine zu übertragen, wo sie gepuffert und dann an den PC übertragen werden.Die Sache ist, dass ein Softcore-Prozessor stecken bleibt, weil die UART-Daten den Puffer nicht schnell genug verlassen.Hier liegt das Problem.Ich denke, ich muss eine Ethernet-basierte Übertragung oder etwas anderes über eine Tochterplatine in Betracht ziehen, damit die Mühe, eine Konvertierung in ASCII durchzuführen und dann in STDOUT zu schreiben, das Hauptdesign nicht belastet.
@Quantum0xE7 Was ist mit dem Senden der binären Rohdaten auf dem UART und dem Ausführen der "ASCII-Konvertierung" und des "STDOUT-Schreibens" auf dem PC?
Nicht schnell genug, brauche mehrere 10s MB
Jack Creasey
2020-06-30 05:03:18 UTC
view on stackexchange narkive permalink

SERDES ist nur eine Komponente eines Kommunikationsgeräts, das ein Protokoll implementiert. Es handelt sich nicht um Geräte, die Sie ohne nennenswerte Hardwareunterstützung konfigurieren und betreiben können.

Wenn Sie NICHT RS232 verwenden, sind die meisten UART-Implementierungen bis zu 1-3 MBit / s nützlich. Solange Sie eine gute Gemeinsamkeit haben und nicht zu weit gehen (<5m), ist hier ein ganz normaler UART nützlich.

Wenn Sie diese Geschwindigkeit (1-3 Mbit / s) überschreiten oder weiter fahren müssen, können Sie (immer noch mit einem Uart) das RS422-Leitungsprotokoll verwenden. Dies ist normalerweise bis zu 10 Mbit / s und 15 m gut, aber Sie benötigen sehr moderne UART-Implementierungen auf MCU-Basis, um die höheren Taktraten zu erzielen.

Sie können auch einen Ethernet-Controller mit 10 Mbit / s ohne Magnet verwenden. Dies kann bis zu 2-3m gut funktionieren. Sobald Sie auf 100 Mbit / s und mehr umsteigen, ist es sehr schwierig, ohne Magnetik zu entwerfen. Natürlich sind Ethernet-IP-Kerne und -Controller bis zu 1 Gbit / s verfügbar.

Ein weiterer Vorschlag ist die Verwendung von Eindraht-Koaxialmedien für die HF-Kommunikation. Eine Technik, die ich verwendet habe (mit 6 Rx / Tx-Modulen), ist die NRF24L01 + mit SMA-Verbindungen (die Module mit der PA nicht erhalten). Sie können die Module mit Koax- und 50-Ohm-Terminatoren verbinden, die sofort verfügbar sind, und das System funktioniert sehr gut. Der Shockburst-Modus arbeitet mit 2 Mbit / s und ist auf Koaxialkabeln absolut stabil. Die Schnittstelle ist ein einfaches SPI und die Softwaretreiber, die für eine Vielzahl von MCUs verfügbar sind.

Dmitry Grigoryev
2020-06-30 13:10:08 UTC
view on stackexchange narkive permalink

Sie benötigen im Wesentlichen eine Schnittstelle, für die es Standardimplementierungen sowohl auf dem PC (möglicherweise als Adapter) als auch auf Ihrem FPGA als IP-Core gibt.

Wenn Ihr FPGA einen USB-IP-Kern bietet, ist USB ein offensichtlicher Kandidat.Andernfalls besteht die Möglichkeit, einen USB-Konverterchip zu Ihrer FPGA-Karte hinzuzufügen und die von ihr angebotene Schnittstelle zu verwenden: Selbst UART kann auf kurzen Strecken schnell genug sein (FTDI gibt in seinen Produkten Raten von bis zu 12 MBaud an), und wenn dies nicht schnell genug ist,Die nächste Option wäre SPI / Quad SPI.



Diese Fragen und Antworten wurden automatisch aus der englischen Sprache übersetzt.Der ursprüngliche Inhalt ist auf stackexchange verfügbar. Wir danken ihm für die cc by-sa 4.0-Lizenz, unter der er vertrieben wird.
Loading...