Forum: Mikrocontroller und Digitale Elektronik Fifo Hardware?


von Markus (Gast)


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

von Frank K. (fchk)


Lesenswert?

Ein FPGA wäre hier wohl die technisch beste Lösung. Viele FPGAs haben 
Speicherblöcke eingebaut, und wenn die nicht reichen, nimmst Du 
beispielsweise ein externes 128k oder 512k SRAM.

fchk

von m.n. (Gast)


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ß.

von Markus (Gast)


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?)

von m.n. (Gast)


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.

von Rufus Τ. F. (rufus) Benutzerseite


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?

von Markus (Gast)


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.

von m.n. (Gast)


Lesenswert?

Rufus Τ. Firefly schrieb:
> Bei 24 Bit pro Sample und 5 MSPS sind das also 120 MBit/sec.  Damit ist
> bereits GBit-Ethernet erforderlich.

Bislang war nicht zu erkennen, daß kontinuierlich erfaßt werden soll.
Falls doch, wäre eine Einsteckkarte für den PC sinnvoll, die die Daten 
von Anfang an parallel verarbeiten kann.

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.