Fifo Hardware?

Gast #4131631
Lesenswert?

Hallo zusammen,

ich arbeite zur Zeit an einem Projekt, bei dem ADC-Daten (2 mal 12 Bit) 
mit 5 MSPS eingelesen und dann per UDP über das Netzwerk verschickt 
werden sollen. Bis jetzt wurde dies mit einem Raspberry Pi realisiert, 
das Problem ist allerdings die fehlende Echtzeitfähigkeit und daraus 
resulierende fehlende Werte.
Um die Daten mit 5 MSPS erfassen zu können, habe ich an einen Fifo 
gedacht, welcher zwischen ADC und Raspberry Pi geschaltet wird. Gibt es 
dafür brauchbare und auch lieferbare Bauteile? Ich habe z.B. die 
SN74V36xx Serie von TI gefunden, aber den findet man auch kaum bei 
gängigen Anbietern...

Als Alternative zu den schwer erhältlichen Fifo-ICs, habe ich an einen 
Mikrocontroller gedacht. Ich habe schon öfters mit den ATXmega 
gearbeitet, allerdings habe ich Zweifel ob ich mit dem maximalen Takt 
von 32 MHz Daten (parallel) mit 5 MHz einlesen kann und diese 
gleichzeitig an einem anderen Port wieder parallel ausgeben kann, ohne 
den Controller zu überfordern. Schafft man dies in 6 Takten?

Gibt es noch andere Möglichkeiten um das Problem zu lösen?

Viele Grüße,
Markus
Gast #4131673
Lesenswert?

Markus schrieb:
> Als Alternative zu den schwer erhältlichen Fifo-ICs, habe ich an einen
> Mikrocontroller gedacht.

Ein µC mit Taktfrequenz >= 100 MHz und internem DMA-Controller würde 
gehen. Favoriten dafür wären RX µCs von Renesas, die vernünftige 
DMA-Controller auf dem Chip haben.
Leider schreibst Du nichts über Breite und Länge des FIFOs. 
Auslaufmodelle gäbe es noch hier: 
https://www.schukat.com/schukat/schukat_cms_de.nsf/index/CMSDF15D356B046D53BC1256D550038A9E0?OpenDocument&wg=Y8251&refDoc=CMSA34D83FF9A8B7149C12570DE003C273D 
und 
https://www.schukat.com/schukat/schukat_cms_de.nsf/index/warengruppe?OpenDocument&wg=Y8258&refDoc=CMSA34D83FF9A8B7149C12570DE003C273D

Unter Umständen geht auch ein STM32F40x, je nachdem, wie man die 
zerklüfteten Ports organisieren kann/muß.
Gast #4131701
Lesenswert?

m.n. schrieb:

> Leider schreibst Du nichts über Breite und Länge des FIFOs.

Ich lese 2 ADC Werte mit 12 Bit ein, d.h. 24 bit sollte der Fifo breit 
sein (oder 12, dann einfach 2 nebeneinander) und die Länge weiß ich auch 
noch nicht wirklich. Kommt ja drauf an wie lang der Raspberry Pi hängt, 
aber 1k 24bit Werte sollten vermutlich reichen. Je nachdem was es 
überhaupt gibt..
Der Atxmega hat ja auch einen eingebauten DMA, allerdings weiß ich nicht 
wie ich da einen Buffer aufbauen soll bei dem ich den leeren und vollen 
Status detektieren soll.
Bei einem "fremden" µC stellt sich dann ja auch wieder die Frage wie man 
sie programmiert (Tools, Programmer?)
Gast #4131727
Lesenswert?

Markus schrieb:
> Der Atxmega hat ja auch einen eingebauten DMA, allerdings weiß ich nicht
> wie ich da einen Buffer aufbauen soll bei dem ich den leeren und vollen
> Status detektieren soll.

Der ATXmega ist einfach zu langsam. Aus µC-Sicht müssen ja 2 x 16 Bit in 
200 ns erfaßt werden.

> Bei einem "fremden" µC stellt sich dann ja auch wieder die Frage wie man
> sie programmiert (Tools, Programmer?)

Schon klar! Aber damit wäre man recht flexibel.
Persönliche Seite #4131795
Lesenswert?

Markus schrieb:
> ADC-Daten (2 mal 12 Bit) mit 5 MSPS eingelesen und dann per UDP über das
> Netzwerk

Bei 24 Bit pro Sample und 5 MSPS sind das also 120 MBit/sec.  Damit ist 
bereits GBit-Ethernet erforderlich.

Wie wurde das mit dem Raspberry Pi erreicht?

Irgendwie beschleicht mich das Gefühl, daß das Projekt noch so einige 
... interessante Problemstellungen haben wird. Was soll mit den 
anfallenden Daten geschehen?
Gast #4131824
Lesenswert?

Rufus Τ. Firefly schrieb:

> Bei 24 Bit pro Sample und 5 MSPS sind das also 120 MBit/sec.  Damit ist
> bereits GBit-Ethernet erforderlich.
>
> Wie wurde das mit dem Raspberry Pi erreicht?

Ja das ist richtig, das wären 120 MBit/s. Die 5 MSPS sind noch nicht 
fest, erst mal als grobes Ziel angenommen. Die Daten können auch 
kurzzeitig gespeichert werden und dann nur ein Zeitfenster von ein paar 
ms über das Netzwerk übertragen werden. Kontinuierlich wäre schön (dann 
mit geringerer Geschwindigkeit, z.B. 2 MSPS), aber eine möglichst 
schnelle zeitweise Erfassung sollte auch möglich sein.

1 MSPS kontinuierlich zu übertragen hat bis auf ca. 0,8% fehlende Werte 
geklappt. Der Raspberry kommt ohne Buffer ja durch Taskwechsel etc. ins 
Stocken und verliert dann Werte...

Die Daten werden dann später von einem "Server"-PC weiterverarbeitet und 
Berechnungen durchgeführt.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren