Forum: Mikrocontroller und Digitale Elektronik Schnelle Datenübertragung von LVDS an PC


von Hans-Georg L. (h-g-l)


Lesenswert?

Ich spiele mit einem TDC (AS6501) und der kann bei 50Mhz SPI 
Datenübertragung  direkt jede Periode bis 100Khz messen und das 32 Bit 
Ergebnis über 50MHz SPI an einem STM32h7 einwandfrei übertragen.
Der AS6501 hat aber auch noch eine serielle LVDS (250Mhz DDR) 
Schnittstelle damit könnte ich 10MHz Perioden noch messen und 
übertragen.

Es geht also darum 32 bit über LVDS mit 10MHz Taktrate, also 40Mbyte/s 
zu empfangen und erst mal direkt an den PC übertragen. MCs mit LVDS 
Deserializer sind mir nicht bekannt. Ich habe noch Trenz TE6000 Spartan6 
Boards mit Gbit Lan oder ZedBoards (ZYNC) die sollten das können. 
Zwischenspeichern/ Komprimieren  und USB 2.0 zum PC ginge auch noch.

Gibt es noch andere Wege oder ist meine Überschlags-Rechnung falsch?

Warum ich das machen will sieht man auf den angefügten Bildern:

Beitrag "Re: [F] OCXO 10-MHz-Frequenzstandardreferenzmodul"

von Rainer W. (rawi)


Lesenswert?

Hans-Georg L. schrieb:
> Warum ich das machen will sieht man auf den angefügten Bildern:
>
> Beitrag "Re: [F] OCXO 10-MHz-Frequenzstandardreferenzmodul"

Die Achsenbeschriftung der Abszisse in Hist.JPG muss man nicht 
verstehen, oder? ;-)

von N. M. (mani)


Lesenswert?

Hans-Georg L. schrieb:
> Es geht also darum 32 bit über LVDS mit 10MHz Taktrate, also 40Mbyte/s
> zu empfangen

Es ist sogar noch schlimmer. Die 40MB/s ist ja deine Nutzdatenrate!
Da wird noch bisschen was drauf kommen für Anfang/Ende Kennung, 
Datenintegrität (CRC o.ä), usw.
Da läuft es von den Schnittstellen schon in Richtung Gigabit Ethernet 
oder USB3.x
Zumindest wenn du einen kontinuierlichen Stream übertragen möchtest.

Hans-Georg L. schrieb:
> und erst mal direkt an den PC übertragen.

Würde es auch ausreichen einen fertigen und evtl vorbeiarbeiteten Blob 
an Daten zu übertragen? Also z.B. eine fertige Messereihe?
Das macht die Anforderung der Zwischenspeicherung der Daten auf 
Messsystemseite zwar größer, dafür schrumpfen die Anforderungen an die 
Datenrate evtl sehr stark.
Kleines FPGA Board mit ausreichend Speicher für die Pufferung und dann 
eine Humane Datenrate an den PC.
Bei deinem Beispielbild sind es ja nur 132k Punkte.
Also kein MB an Zwischenspeicher.

Ich Frage deshalb, weil ja die PC Seite mit den Daten auch irgendwas 
anfangen werden muss. Man kann auch schnell einen PC mit Daten 
zuscheißen ohne dass da noch etwas geht wenn das ein kontinuierlicher 
Stream werden soll :-)

: Bearbeitet durch User
von Vanye R. (vanye_rijan)


Lesenswert?

> Gibt es noch andere Wege oder ist meine Überschlags-Rechnung falsch?

TigerShark von Analog hat auch noch LVDS. Aber stimmt wohl, in der
Regel bist du da bei FPGA.

Vanye

von Christian R. (supachris)


Lesenswert?

Das könnte mit dem Infineon FX3 (früher Cypress) direkt klappen, wenn du 
das LVDS in single ended wandelst, dafür gibt's ja einfache Chips. Der 
hat genug internen Puffer, so dass du die 40MB/s im SuperSpeed sicher 
übertragen können solltest.

von Hans-Georg L. (h-g-l)


Lesenswert?

N. M. schrieb:

> Würde es auch ausreichen einen fertigen und evtl vorbeiarbeiteten Blob
> an Daten zu übertragen? Also z.B. eine fertige Messereihe?
> Das macht die Anforderung der Zwischenspeicherung der Daten auf
> Messsystemseite zwar größer, dafür schrumpfen die Anforderungen an die
> Datenrate evtl sehr stark.
> Kleines FPGA Board mit ausreichend Speicher für die Pufferung und dann
> eine Humane Datenrate an den PC.
Zwischenspeichern wäre mit dem Trenz Board kein Problem das hat 2 Banks 
mit je 256 MB Ram.

> Bei deinem Beispielbild sind es ja nur 132k Punkte.
> Also kein MB an Zwischenspeicher.

Das Beispiel stammt von der SPI Version und einem STM32H753 mit 512K 
(AXI) Speicher.

> Ich Frage deshalb, weil ja die PC Seite mit den Daten auch irgendwas
> anfangen werden muss. Man kann auch schnell einen PC mit Daten
> zuscheißen ohne dass da noch etwas geht wenn das ein kontinuierlicher
> Stream werden soll :-)

Der PC soll die Daten erstmal nur auf Platte schreiben.

So wie es aussieht sind die Messungen hauptsächlich mit weißem Rauschen 
behaftet und das gibt bei MDEV einen Slope von -1 pro Dekade. Mit der 
10Mhz Version würde ich 2 Dekaden mehr haben und den eventuellen 
Einfluss des CPLD-Teilers eliminieren.

von Hans-Georg L. (h-g-l)


Lesenswert?

Christian R. schrieb:
> Das könnte mit dem Infineon FX3 (früher Cypress) direkt klappen, wenn du
> das LVDS in single ended wandelst, dafür gibt's ja einfache Chips. Der
> hat genug internen Puffer, so dass du die 40MB/s im SuperSpeed sicher
> übertragen können solltest.

Können diese einfachen Chips und der FX3 auch mit Double Data Rate 
umgehen ?

von Hans-Georg L. (h-g-l)


Lesenswert?

Rainer W. schrieb:
> Hans-Georg L. schrieb:
>> Warum ich das machen will sieht man auf den angefügten Bildern:
>>
>> Beitrag "Re: [F] OCXO 10-MHz-Frequenzstandardreferenzmodul"
>
> Die Achsenbeschriftung der Abszisse in Hist.JPG muss man nicht
> verstehen, oder? ;-)

Die Zahlen sind auch nicht so interessant, ich wollte damit nur Zeigen 
das es sich um eine Normal Verteilung handelt und es weisses Rauschen 
ist. Was der MDEV ja auch bestätigt.

von Christian R. (supachris)


Lesenswert?

Hans-Georg L. schrieb:
> Christian R. schrieb:
>> Das könnte mit dem Infineon FX3 (früher Cypress) direkt klappen, wenn du
>> das LVDS in single ended wandelst, dafür gibt's ja einfache Chips. Der
>> hat genug internen Puffer, so dass du die 40MB/s im SuperSpeed sicher
>> übertragen können solltest.
>
> Können diese einfachen Chips und der FX3 auch mit Double Data Rate
> umgehen ?

Nee, das nicht. Da braucht es dann wohl schon ein kleines FPGA oder 
CPLD.
Aber was denn nun? 10MHz oder 250MHz? Und 40MiByte/s passen nicht zu 
10MHz und DDR mit 32 Bit. Da kommt man auf 80MiByte/s.

von Hans-Georg L. (h-g-l)


Lesenswert?

Christian R. schrieb:
> Hans-Georg L. schrieb:
>> Christian R. schrieb:
>>> Das könnte mit dem Infineon FX3 (früher Cypress) direkt klappen, wenn du
>>> das LVDS in single ended wandelst, dafür gibt's ja einfache Chips. Der
>>> hat genug internen Puffer, so dass du die 40MB/s im SuperSpeed sicher
>>> übertragen können solltest.
>>
>> Können diese einfachen Chips und der FX3 auch mit Double Data Rate
>> umgehen ?
>
> Nee, das nicht. Da braucht es dann wohl schon ein kleines FPGA oder
> CPLD.
> Aber was denn nun? 10MHz oder 250MHz? Und 40MiByte/s passen nicht zu
> 10MHz und DDR mit 32 Bit. Da kommt man auf 80MiByte/s.

10 Mhz möchte ich messen. Ein Messwert hat 32Bit. Fmax der LVDS 
Übertragung ist 250MHz und die Übertragung kann mit SDR oder DDR 
erfolgen.

Der Übertragungstakt muss extern bereit gestellt werden, was auch für 
ein FPGA spricht.

Gibt es CPLDs mit Deserializer und LVDS ?

: Bearbeitet durch User
von Mi N. (msx)


Lesenswert?

Hallo Hans-Georg,

gerade heute spiele ich auch wieder mit AS6501 und STM32H7xx ;-)
Da ich beim AS6501 einiges vergessen habe, kann ich Deine 100 kHz 
Ereignisrate nicht so recht nachvollziehen.
Mit einem SPI Takt von 50 MHz, könnten die insgesamt 48 Bit von Index- 
und Stop-Register in 1 µs übertragen werden. Das wäre Faktor 10 
schneller.

Bei der Ausgabe über LVDS werden typ. 40 Bit ausgegeben, die man auf 34 
Bit verkürzen könnte. Für 10 ps Auflösung, die Du vermutlich mindestens 
haben möchtest, müßten es 37 Bit sein. Bei 250 MHz LVDS Takt, wäre 
meines Erachtens ein Messwert / 200 ns möglich.

Vielleicht wäre ein Weg, die LVDS-Daten per FPGA mit FIFO 
zwischenzuspeichern und dem H7 per DMA über den Datenbus zu übergeben.
Oder habe ich etwas übersehen?

von Rainer W. (rawi)


Lesenswert?

Hans-Georg L. schrieb:
> Rainer W. schrieb:
>> Hans-Georg L. schrieb:
>>> Beitrag "Re: [F] OCXO 10-MHz-Frequenzstandardreferenzmodul"
>>
>> Die Achsenbeschriftung der Abszisse in Hist.JPG muss man nicht
>> verstehen, oder? ;-)
>
> Die Zahlen sind auch nicht so interessant, ich wollte damit nur Zeigen
> das es sich um eine Normal Verteilung handelt ...

Dass du dich traust, so eine Achsenbeschriftung überhaupt hochzuladen 
...
So ist sie einfach nur peinlich, egal, was du zeigen willst.
Das ist nicht einmal 9.Schulklasse und passt nicht zum restlichen Niveau 
des eigentlichen Themas, sorry.

back to topic

von Christian R. (supachris)


Lesenswert?

Hans-Georg L. schrieb:
> 10 Mhz möchte ich messen. Ein Messwert hat 32Bit. Fmax der LVDS
> Übertragung ist 250MHz und die Übertragung kann mit SDR oder DDR
> erfolgen.
> Der Übertragungstakt muss extern bereit gestellt werden, was auch für
> ein FPGA spricht.
> Gibt es CPLDs mit Deserializer und LVDS ?

Wenn dir bis zu 100MHz und SDR reichen, dann könntest du das 
wahrscheinlich über das programmierbare GPIF des FX3 abbilden, der kann 
auch den Takt ausgeben. Dazwischen müssen dann nur ein paar LVDS 
Receiver.
Die 400MB/s schafft der aber nicht kontinuierlich an den PC, in der 
Praxis haben wir mit WinUSB 320MiB/s geschafft.

von Hans-Georg L. (h-g-l)


Lesenswert?

Mi N. schrieb:
> Hallo Hans-Georg,
>
> gerade heute spiele ich auch wieder mit AS6501 und STM32H7xx ;-)
> Da ich beim AS6501 einiges vergessen habe, kann ich Deine 100 kHz
> Ereignisrate nicht so recht nachvollziehen.
> Mit einem SPI Takt von 50 MHz, könnten die insgesamt 48 Bit von Index-
> und Stop-Register in 1 µs übertragen werden. Das wäre Faktor 10
> schneller.
>
Ich brauche die 24 bit aus dem Stop Register und weil da ein Überlauf 
stattfinden kann lese ich das Byte1 des Referenz Registers gleich mit. 
Dazu kommt noch ein Füllbyte das sind 40 bit (5Byte). Dazu habe ich bei 
100Khz, nach dem Interrupt, 10µs zur Verfügung. Bei der "alten" Version 
habe ich die HAL ohne DMA verwendet und bin auf 8µs Übertragungszeit 
gekommen. Hal mit DMA hat um die 10µs gebraucht und es gab Aussetzer. 
Ein weiterer Effekt ist man muss HAL_ReceiveTransmit verwenden. Weil Bei 
nur Receive der Empfangsbuffer auch zum Senden verwendet wird, dabei 
kann es passieren das anstelle eines Leerbytes ein command gesendet 
wird.
Bei meinen neuesten Test Untersuchungen ohne HAL mit dem H743 bin ich 
jetzt mit Overhead bei 2µs.

> Bei der Ausgabe über LVDS werden typ. 40 Bit ausgegeben, die man auf 34
> Bit verkürzen könnte. Für 10 ps Auflösung, die Du vermutlich mindestens
> haben möchtest, müßten es 37 Bit sein. Bei 250 MHz LVDS Takt, wäre
> meines Erachtens ein Messwert / 200 ns möglich.
>
 Das sind nur 5MHz ;-)  Deshalb DDR.  Und für meine 20MHz Rubidium 
Normale reicht das immer noch nicht ...

> Vielleicht wäre ein Weg, die LVDS-Daten per FPGA mit FIFO
> zwischenzuspeichern und dem H7 per DMA über den Datenbus zu übergeben.
> Oder habe ich etwas übersehen?

Auch beim BGA Gehäuse sind irgendwann die nötigen Pins nicht mehr frei.
Das soll ja kein Produkt werden sondern ist reine Selbstbeschäftigung 
;-)
Der ZYNQ auf dem Zedboard hat gleich 2 Cortex A9 Kerne eingebaut was 
soll da noch ein H7 tun ?

Für ein lokales Messgerät mit Anzeige reicht mir jetzt erstmal die SPI 
Version mit dem H743 und seinem externen RAM. Das andere ist Zukunft.

von Hans-Georg L. (h-g-l)


Lesenswert?

Christian R. schrieb:
> Hans-Georg L. schrieb:
>> 10 Mhz möchte ich messen. Ein Messwert hat 32Bit. Fmax der LVDS
>> Übertragung ist 250MHz und die Übertragung kann mit SDR oder DDR
>> erfolgen.
>> Der Übertragungstakt muss extern bereit gestellt werden, was auch für
>> ein FPGA spricht.
>> Gibt es CPLDs mit Deserializer und LVDS ?
>
> Wenn dir bis zu 100MHz und SDR reichen, dann könntest du das
> wahrscheinlich über das programmierbare GPIF des FX3 abbilden, der kann
> auch den Takt ausgeben. Dazwischen müssen dann nur ein paar LVDS
> Receiver.
> Die 400MB/s schafft der aber nicht kontinuierlich an den PC, in der
> Praxis haben wir mit WinUSB 320MiB/s geschafft.

Der FX3 hatte mich auch mal interessiert, vielleicht kauf ich mir mal 
das Entwicklungsboard .. als Logic Analyzer.

Ich muss nur aufpassen das ich nicht mehr einkaufe als ich in diesem 
Leben noch verarbeiten kann ;-)

von Hans-Georg L. (h-g-l)


Lesenswert?

Rainer W. schrieb:
> Hans-Georg L. schrieb:
>> Rainer W. schrieb:
>>> Hans-Georg L. schrieb:
>>>> Beitrag "Re: [F] OCXO 10-MHz-Frequenzstandardreferenzmodul"
>>>
>>> Die Achsenbeschriftung der Abszisse in Hist.JPG muss man nicht
>>> verstehen, oder? ;-)
>>
>> Die Zahlen sind auch nicht so interessant, ich wollte damit nur Zeigen
>> das es sich um eine Normal Verteilung handelt ...
>
> Dass du dich traust, so eine Achsenbeschriftung überhaupt hochzuladen
> ...
> So ist sie einfach nur peinlich, egal, was du zeigen willst.
> Das ist nicht einmal 9.Schulklasse und passt nicht zum restlichen Niveau
> des eigentlichen Themas, sorry.
>
> back to topic

Das darfst du gerne an W.J. Riley weitergeben von dem ist das Programm.
http://www.stable32.com/

Aber bevor du das machst solltest du dich vorsichtshalber erst 
informieren wer dieser "Schüler" ist ...

von Harald K. (kirnbichler)


Lesenswert?

Hans-Georg L. schrieb:
> Das darfst du gerne an W.J. Riley weitergeben von dem ist das Programm.
> http://www.stable32.com/

Vielleicht sollte man das Programm auch bedienen lernen?

von Hans-Georg L. (h-g-l)


Lesenswert?

Harald K. schrieb:
> Hans-Georg L. schrieb:
>> Das darfst du gerne an W.J. Riley weitergeben von dem ist das Programm.
>> http://www.stable32.com/
>
> Vielleicht sollte man das Programm auch bedienen lernen?

Da gibt es ein Button "Histogramm" zum drauf klicken ...

von N. M. (mani)


Lesenswert?

Wenn du unbedingt einen Zynx haben möchtest, dann mach gleich Linux und 
einen Webserver mit drauf. Dann brauchst du die Daten evtl garnicht 
übertragen :-) sondern nur vorverarbeiteten. Großteil im FPGA. Evtl 
direkt in den DDR Speicher. Und die Applikation / Webserver wird nur als 
GUI verwendet.

Hans-Georg L. schrieb:
> Zwischenspeichern wäre ... kein Problem

Hans-Georg L. schrieb:
> Das Beispiel stammt von der SPI Version und einem STM32H753 mit 512K
> (AXI) Speicher.

Hans-Georg L. schrieb:
> Der PC soll die Daten erstmal nur auf Platte schreiben.

Ja OK. Aber der Hauptpunkt ist ja ob du das endlos OHNE Lücke machen 
möchtest. Dann musst du ja die Datenrate die vom ADC anfällt auch zum PC 
haben um die Daten los zu bekommen.

Oder ob es dir reicht X MB aufzuzeichnen, die Aufzeichnung zu stoppen, 
die Daten zu übertragen und evtl erst danach eine neue Messung zu 
starten.
Für diesen Fall reicht auch ein echt kleines Board. z.B was in der 
Größenordnung eines MAX1000 oder ähnliches:
https://shop.trenz-electronic.de/de/TEI0001-04-FBC88A-MAX1000-IoT-Maker-Board-16kLE-32-MByte-SDRAM-8-MByte-Flash-6-15-x-2-5-cm

Das hätte 64 Mal mehr Speicher auf dem Board als dein H7.
Der FTDI kann glaube ich 12MBaud.
Du könntest also 0,8s aufzeichnen und müsstest dann grob 3s übertragen.

von Harald K. (kirnbichler)


Lesenswert?

Vielleicht ist ja das hier was für die Aufgabe:


https://ftdichip.com/products/ft601q-b/

von Hans-Georg L. (h-g-l)


Lesenswert?

N. M. schrieb:
> Wenn du unbedingt einen Zynx haben möchtest, dann mach gleich Linux und
> einen Webserver mit drauf. Dann brauchst du die Daten evtl garnicht
> übertragen :-) sondern nur vorverarbeiteten. Großteil im FPGA. Evtl
> direkt in den DDR Speicher. Und die Applikation / Webserver wird nur als
> GUI verwendet.
>
Ich habe ZYNQ Zedboards mit Linux drauf.

> Ja OK. Aber der Hauptpunkt ist ja ob du das endlos OHNE Lücke machen
> möchtest. Dann musst du ja die Datenrate die vom ADC anfällt auch zum PC
> haben um die Daten los zu bekommen.
>
Der AS6501 ist ein TDC (Time to Digital Converter) kein ADC.

> Für diesen Fall reicht auch ein echt kleines Board. z.B was in der
> Größenordnung eines MAX1000 oder ähnliches:
> 
https://shop.trenz-electronic.de/de/TEI0001-04-FBC88A-MAX1000-IoT-Maker-Board-16kLE-32-MByte-SDRAM-8-MByte-Flash-6-15-x-2-5-cm

Da würde ich mir eher das Spartan7 mini Board kaufen, kostet die Hälfte.
Aber ich habe Spartan 6 LX100 Boards mit RAM und Gigabit LAN. Problem 
die werden nicht von der freien ISE Version unterstützt, das müsste ich 
erst mal alte Connections checken. ;-)

> Das hätte 64 Mal mehr Speicher auf dem Board als dein H7.
Nö, mein neues H7 Board hat intern 1MB und extern 32MB Ram.

Eine Alternative wäre vielleicht auch noch die Aufzeichnung auf 
SD-Karte. Den Steckplatz dafür haben meine Spartan Boards.

Danke für die Anregungen.

von Hans-Georg L. (h-g-l)


Lesenswert?

Harald K. schrieb:
> Vielleicht ist ja das hier was für die Aufgabe:
>
>
> https://ftdichip.com/products/ft601q-b/

Interessant.
Das Entwicklungsmodul kostet ca 70€, das ist billiger als ein FX3 Board 
+ FMC Adapter. Ich könnte es direkt auf mein Zedboard stecken.

Leider hat das Zedboard nur einen FMC Steckplatz. Dann müsste ich für 
den TDC ein Board kreieren das zusätzlich einen Steckplatz für das FTDI 
Board hat.

Aber für andere Super Speed Anwendungen gefällt mir das.

Was mir gerade auch noch für ein stand alone Gerät einfällt wäre 
vielleicht ein kleines CPLD/FPGA das serial LVDS auf quad/oct SPI 
umsetzt und den H7 damit füttert.  Vielleicht das Spartan7 mini Board 
für ca. 40€.

von Uwe B. (Firma: TU Darmstadt) (uwebonnes)


Lesenswert?

Was spricht gegen z.B. New! Dragon XC7M FPGA board 
https://www.knjn.com/show.html?pg=img&src=5160

von Hans-Georg L. (h-g-l)


Lesenswert?

Uwe B. schrieb:
> Was spricht gegen z.B. New! Dragon XC7M FPGA board
> https://www.knjn.com/show.html?pg=img&src=5160

Das ist doch ein Steckkarte für einen PC PCIE Slot oder ?

von Gustl B. (gustl_b)


Lesenswert?

Hat denn hier Jemand korrekte Timing Constraints für den FT600 die auch 
eingehalten werden? Das Timing laut Datenblatt ist extrem knackig.

von Hans-Georg L. (h-g-l)


Lesenswert?

Gustl B. schrieb:
> Hat denn hier Jemand korrekte Timing Constraints für den FT600 die auch
> eingehalten werden? Das Timing laut Datenblatt ist extrem knackig.

Schau mal hier 
https://ftdichip.com/wp-content/uploads/2020/07/AN_376-Xilinx-FPGA-FIFO-master-Programming-Guide.pdf

Da ist am Ende ein Link auf die Xilinx Firmware.

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.