Forum: FPGA, VHDL & Co. Machbarkeit - 256 ADC Signale aufnehmen


von bd (Gast)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

da ich bisher keinerlei Erfahrung mit FPGAs habe, möchte ich hier im 
Forum die Experten ansprechen, ob mein Vorhaben so realierbar ist.
Es geht darum, eine Platine zu entwerfen, die insgesamt 256 analoge 
Eingänge mit je ca. 2MHz abtastet. Ich habe bereits diverse 
Mikrocontrollerplatinen und analoge Schaltungen entworfen. Allerdings 
bisher noch keinen FPGA.

Ich würde mich sehr freuen, wenn Ihr mir ein paar Kommentare geben 
könntet, ob die Realisierung so überhaupt möglich ist und evtl. sogar 
Verbesserungsvorchläge einbringt. Oder auch "nur" die richtigen Fragen 
stellt, die ich vorher noch untersuchen/beachten muss.

Wie im Bild zu sehen möchte ich die 256 Kanäle auf je 16 multiplexer 
aufteilen. Jeder kanal soll mit 2MHz abgetastet werden. Die 16 
"Multiplex-Leitungen" gehen auf einen 16Kanal ADC, der je maximal 65MSPs 
Tastrate unterstützt. Dieser gibt über 16LVDS Leitungen die Datenströme 
an einen FPGA weiter, der wiederum die Daten in einen Speicher ablegt. 
Die Verarbeitung der Daten soll in "Aufnahmepausen" stattfinden.

von bd (Gast)


Lesenswert?

Was mir noch einfällt: Kann ein FPGA wie Virtex6 überhaupt 16 LVDS 
datenströme in angegebener Geschwindigkeit verarbeiten bzw. im Speicher 
ablegen?

von Johnny B. (johnnyb)


Lesenswert?

Ich würde das Ganze etwas Modularer aufbauen, da es mir mit den 
Datenraten etwas Grenzwärtig erscheint und wohl auch nicht mehr gross 
Ausbaufähig wäre in der Zukunft.

von bd (Gast)


Lesenswert?

danke, darüber habe ich auch bereits nachgedacht. Vor allem, weil es, 
wie mir gerade aufgefallen ist, im Bild etwas zweideutig ist. Die 
maximale Datenrate der 16LVDS Leitungen ist JE 455Mbps (laut Datenblatt 
des ADC). Jedoch werde ich ungefähr an die Hälfte der Datenraten ran 
kommen.
Die 65MSPs am Eingang des ADCs ist die maximal mögliche Abtastrate je 
Kanal des ADC laut Datenblatt. ich "brauche" hier ungefähr die Hälfte um 
auf 2 MHz an den Eingängen der Multiplexer zu kommen.

von Johnny B. (johnnyb)


Lesenswert?

Wenn Du Dir käufliche Systeme mit solchen Eckdaten ansiehst wie Du es 
realisieren möchtest, dann nehmen die meist einzelne Module mit 8/16/32 
Analogkanälen, welche jeweils einen eigenen ADC haben und manchmal sogar 
einen eigenen Prozessor für die Vorverarbeitung. Ein Hauptrechner 
sammelt dann die Daten aller Module und kann diese zwischenspeichern und 
weitergeben z.B. an eine Datenbank oder in ein lokales Speichermedium 
schreiben.
Die Schwierigkeit in solchen Systemen ist dann natürlich immer, das 
ganze zu synchronisieren.
Aber der Vorteil ist, dass sich die Kanalzahl später gut erweitern 
lassen kann, ohne alles nochmals neu zu entwickeln.

Beispiele:
https://www.adwin.de/de/produkte/proII.html
http://www.ni.com/de-ch/shop/pxi.html

von Martin S. (strubi)


Lesenswert?

Moin,

läuft auf jeden Fall auf ein Divide-Et-Impera-Prinzip raus. 16 Kanäle 
kannst du gut mit einem FPGA abdecken. Frage ist immer, was passiert mit 
den Daten, und was soll an Output weitergeschickt werden.
Wenn's nicht extrem synchron gebündelt laufen muss, tut's ansich ne 
Standardlösung mit Datenversand per UDP/RTP (Echtzeitprotokoll), da 
hätte ich eine Referenzimplementierung, einiges findest du auch beim 
CERN (https://www.ohwr.org/).
Knifflig wird's dann, wenn es sich um fortlaufende Streams handelt, bei 
denen Clock-Drifts ausgeglichen werden müssen. Da kannst du entweder 
Resampling-Techniken anwenden oder musst einen regelbaren Clock-Chip auf 
deine Platine packen.
Da du aber von Aufnahmepausen sprichst, suggeriert das eine paketweise 
Verarbeitung, sowas geht gut mit dem Standard RTP - wenn dir die 90 kHz 
Zeitauflösung (nach Standard) reichen. Dann musst du nur noch die Frage 
nach dem Speicher (Datenpuffer) klären.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

bd schrieb:
> Es geht darum, eine Platine zu entwerfen, die insgesamt 256 analoge
> Eingänge mit je ca. 2MHz abtastet.
Mit welcher Auflösung?

> Die Verarbeitung der Daten soll in "Aufnahmepausen" stattfinden.
Wie lange soll aufgenommen werden, wie lange sind die Pausen und wer 
verarbeitet die Daten?

von Gustl B. (-gb-)


Lesenswert?

Also mit dem MUX hast du das Problem, dass du die Eingänge nicht 
zeitgleich erfasst. Die werden also nacheinander an den ADC 
durchgeschaltet.

Viele größere FPGAs haben deutlich mehr als 256 IOs. Und es gibt auch 
viele ADCs mit 2 MSps oder mehr die nur einen FPGA IO benötigen 
(annähernd wenn man viele solche ADCs verbaut).

Wenn es vom Platz her geht kann man also tatsächlich 256 ADCs verwenden 
die gleichzeitig alle Eingänge abtasten. Es gibt auch Bausteine die 
mehrere ADCs besitzen. Ich verwende den LTC2325, der macht 5 MSps und 16 
Bit mit 4 ADCs. Das Interface ist SPI, also ein IO je ADC und zusätzlich 
noch Chipselect und Clock aber die kann man ja unter allen ADCs 
verbinden. Man bleibt jedenfalls deutlich unter 2 IOs/ADC. Die SPI Clock 
ist 105 MHz, 100 MHz geht aber auch. Das geht ohne LVDS noch schön.

: Bearbeitet durch User
von bd (Gast)


Lesenswert?

Danke schonmal für die vielen hilfreichen Anregungen und Tipps. Das muss 
ich mir jetzt erstmal im Detail anschauen.

Zu den vorgeschlagenen Links kann ich noch nichts sagen, weil ich sie 
mir noch im Detail anschauen muss. Vielen Dank auch dafür schonmal!


Wie genau die Daten weiter verarbeitet werden, dass steht noch nicht 
fest und hängt ja auch damit zusammen, welches Konzept es werden wird.
Im modularen Fall wird es ein weiterer FPGA werden, der die Daten von 
den bisherigen zusammen fasst. Denn die Daten aus den einzelnen Kanälen 
müssen miteinander kombiniert werden. Wichtig wäre für mich noch die 
Frage: Wenn ich es modular aufbaue, mit z.B. jeweils 16 Kanäle + ADC + 
FPGA: Könntet Ihr mir einen FPGA empfehlen, der die reine Datenaufnahme 
ohne Probleme bewältigen kann, aber nicht leistungsstärker (teurer) als 
nötig? Denn von diesen müssten ja um beim o.g. Beispiel zu bleiben 16 
Stück eingesetzt werden. Dann bräuchte quasi nur der "Master", bei dem 
alle Daten zusammen kommen, genügend Leistung.

@Lothar M: Die Aufnahmezeiten liegen bei unter 0,5ms. Die Pausen werden 
zwischen 2 bis 10ms liegen. Die Auflösung wird zwischen 12-16bit liegen.

von Gustl B. (-gb-)


Lesenswert?

bd schrieb:
> Denn die Daten aus den einzelnen Kanälen
> müssen miteinander kombiniert werden.

Wenn das so ist, wieso dann nicht alle ADCs an ein FPGA anschließen?

bd schrieb:
> Die Aufnahmezeiten liegen bei unter 0,5ms. Die Pausen werden
> zwischen 2 bis 10ms liegen. Die Auflösung wird zwischen 12-16bit liegen.

Also 256*2MSps*16Bit ist ein GByte/s. Das bekommt man schlecht vom FPGA 
irgendwo weg vor allem zu welcher Gegenstelle? 0,5 im Vergleich zu 2 ist 
ein Viertel, sind immernoch 256MBytes/s. Aber das kann man schon 
wegschicken.

Die Frage ist aber wieviel Datenreduktion findet im FPGA statt. Also 
wieviele Daten kommen am Ende aus dem FPGA raus wenn darin die Daten der 
ganzen ADCs irgendwie kombiniert und ausgewertet wurden?

Als Beispiel gibt es die Anwendung der Peakerkennung für 
Radioaktivitätsmessung. Da sitzt ein schneller ADC und erzeugt eine 
Menge Daten, aber hinten aus dem ADC fallen nurnoch die Peakwerte mit 
Zeitstempeln, also wenige kBytes/s raus. Vielleicht ist das bei Dir ja 
ähnlich.

von Christian R. (supachris)


Lesenswert?

Wir haben sowas ähnliches (Ultraschall System) mit 128 voll parallelen 
Kanälen. Jeweils 8 Kanäle gehen auf einen Artix und die wiederum gehen 
dann mit jeweils einer MGT Lane auf einen weiteten Artix. Im 
Aufnahmefall kommen so 128*125MS/s*16Bit Daten zusammen die in die Block 
Rams geschaufelt werden. Beim Auslesen geht es dann mit 500MB/s etwas 
gemächlicher zu. Am Ende ist USB 3.0 der Flaschenhals mit etwas über 
300MB/s. Natürlich ist bei dem Sytem die Aufnahmezeit viel kleiner als 
die Transferzeit, aber die 16 FPGAs an den ADCs müssen die Daten ja auch 
erst mal wegstecken. Mit den Artix kein Problem.

von Blechbieger (Gast)


Lesenswert?

16x 455 Mbps LVDS ist nicht wirklich viel. Bei Altera können das Cyclone 
5, Cyclone 10 und manche der Max 10. Die aktuellen Low-End FPGA von 
Xilinx können das mit Sicherheit auch.

Interessanter ist der Speicher. 0.5 ms bei 2 MSps sind 1000 Samples, 256 
 16 Bit  1000 = 4 Mb. Da wird es bei den meisten mit internen Speicher 
schon eng. Alternative wäre externes SRAM aber bei 1 GB/s muss das sehr 
schnell oder breit sein.

von Michael (Gast)


Lesenswert?

Es gibt auch ADCs mit einem SPI-Interface. Der Vorteil ist du benötigst 
nur 4 Leitungen pro ADC. Der ADC hat einen MUX integriert so das du 
zwischen 8 Eingängen umschalten kannst. Wenn Du dann 8 ADCs nimmst dann 
benötigst Du "nur" 4x8 = 32 Leitungen zum FPGA und kannst dann schon 8 x 
8 = 64 Signale gigitalisieren. Jetzt kann man überlegen ob man aus 
Kostengründen noch mal die Anzahl an ADCs erhöht oder ob man einen MUX 
davor schaltet. Auf jedefall hat der FPGA bei dieser Aufgabe fast nichts 
zu tun. Problematisch wird es dann wenn du die Daten vom FPGA in den PC 
übertragen möchtest, denn der FPGA hat nicht sonderlich viel internen 
Speicher.

von Weltbester FPGA-Pongo (Gast)


Lesenswert?

Das Konzept ist ziemlicher Murkx. Die Kanalmultiplexer werden die Daten 
so dermassen versauen, dass man es kaum kalibrieren kann. Da geht 
maximal die halbe Rate durch. Das muss mit einzelnen ADCs gemacht 
werden, was aufgrund der geringen Rate von 2MHz auch leicht geht.

von Gustl B. (-gb-)


Lesenswert?

Wie oben geschrieben kommt man mit SPI ADCs grob auf 1 IO je ADC wenn 
man Clock/CS zusammenhängt. Es gibt mit dem LTC2325 LTC2324 auch ICs mit 
mehreren ADC die gleichzeitig abtasten und eine SPI Schnittstelle haben.

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.