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.
Was mir noch einfällt: Kann ein FPGA wie Virtex6 überhaupt 16 LVDS datenströme in angegebener Geschwindigkeit verarbeiten bzw. im Speicher ablegen?
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.
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.
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
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.
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?
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
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.
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.
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.
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.
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.