LabVIEWForum.de
16 Kanal AI mit FPGA und DMA FIFO - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Module (/Forum-LabVIEW-Module)
+---- Forum: LabVIEW FPGA (/Forum-LabVIEW-FPGA)
+---- Thema: 16 Kanal AI mit FPGA und DMA FIFO (/Thread-16-Kanal-AI-mit-FPGA-und-DMA-FIFO)

Seiten: 1 2


16 Kanal AI mit FPGA und DMA FIFO - derandyk - 19.11.2018 13:04

Hallo Leute,

also FPGA Newbie hätte ich folgende Verständnisfrage: Meine Aufgabenstellung besteht darin, eine schnelle Datenerfassung für 16 AI Kanäle zu realisieren (8x2 zusammengehörige Werte). Die Analogwerte sollen erfasst und archiviert werden. Ich würde dies gerne mittels DMF FIFOs realisieren und dann im RT Teil auslesen und per Network Stream an den PC weiterleiten. Wenn ich mir die Examples ansehe wird zum Beispiel im Projekt "LabView FPGA Waveform Acquisition and Logging on cRIO" ein FIFO verwendet, in dem nacheinander 4 AI Werte in einen FIFO geschoben werden. Theoretisch kann man das sicherlich auch mit 16 AIs machen, oder?

Jetzt ist es nur so, dass ich am anderen Ende die 16 Werte auch wieder aus dem FIFO lesen und zuordnen muss. Durch meine 8 Sensoren mit jeweils zwei Werten muss ich das an der anderen Seite ja anhand von Indizes oder dergleichen machen. Ich frage mich nun, ob es nicht einfacher wäre gleich 8 DMA FIFOs anzulegen und damit eine eindeutige Zurordnung der Daten zu haben. Mein cRIO ist das 9063 mit 16 DMA Channels laut Datenblatt.

Wie wäre hier Eure Designempfehlung. Auf was muss ich achten? Kann ich auch mehrere DMA FIFOs in einer FPGA Schleife beschreiben?

Vielen Dank für Eure Hilfe im Voraus!

VG

Andy


RE: 16 Kanal AI mit FPGA und DMA FIFO - GerdW - 19.11.2018 14:59

Hallo Andy,

Zitat:ein FIFO verwendet, in dem nacheinander 4 AI Werte in einen FIFO geschoben werden. Theoretisch kann man das sicherlich auch mit 16 AIs machen, oder?
Ja klar! Nicht nur theoratisch, sondern auch praktisch!

Zitat:Wie wäre hier Eure Designempfehlung. Auf was muss ich achten? Kann ich auch mehrere DMA FIFOs in einer FPGA Schleife beschreiben?
Du kannst auch mehr als einen DMA verwenden - aber die sind eben auch eine begrenzte Resource!
Ich halte es für übertrieben, jeden Sensor (oder gar AI-Channel) in einen eigenen DMA-FIFO zu schieben…

Worauf du bei einem FIFO achten musst: du solltest NIE in die Situation kommen, dass Sender und Receiver "out of sync" laufen: Ich schreibe gern noch einen Füllwert als Separator in den Datenstrom, mit dem der Receiver garantiert immer an der richtigen Stelle die Daten aufdröseln und zuordnen kann…


RE: 16 Kanal AI mit FPGA und DMA FIFO - derandyk - 19.11.2018 16:02

Hallo GerdW,

vielen Dank für Deine Antwort. Genau das ist mit dem "Out of Sync" ist nämlich meine Befürchtung. Bei 8x2 AIs mit 10kHz Datenerfassung kommt ordentlich Datenstrom zusammen den ich dann erstmal wieder den einzelnen Sensoren zuordnen muss. Aus dem Grund dachte ich eben an die Verwendung von 8 DMA FIFOs (Für jeden Sensor einen). Damit hätte ich zumindest die Daten der Sensoren schon einmal separiert. Die Hardware gibt es ja scheinbar her mit 16 FIFOs laut Datenblatt. Jedoch fehlt mir die Erfahrung ob dies eine sinnvolle, praktikable Idee ist, oder ob sich daraus neue Fettnäpfchen ergeben, welche ich durch meine begrenzte Erfahrung noch nicht sehe.

VG

Andy


RE: 16 Kanal AI mit FPGA und DMA FIFO - GerdW - 19.11.2018 16:58

Hallo Andy,

Zitat:ob dies eine sinnvolle, praktikable Idee ist,
Und was machst du, wenn noch ein paar Messkanäle hinzukommen?
"Praktikabel" bedeutet (manchmal/meist) auch, dass die Lösung skalierbar ist…

Zitat:Die Hardware gibt es ja scheinbar her mit 16 FIFOs laut Datenblatt.
Ich weiß nicht, wieviel Platz im FPGA durch einen DMA-FIFO belegt wird. Wenn du alle 16 benutzt, hast du vielleicht nur noch wenig Platz für die eigentliche FPGA-Logik?

Zitat:Bei 8x2 AIs mit 10kHz Datenerfassung kommt ordentlich Datenstrom zusammen den ich dann erstmal wieder den einzelnen Sensoren zuordnen muss.
Das sind 160kS/s, die du in sinnvollen Blockgrößen wegschaufeln musst. Und das auch unabhängig davon, wieviele FIFOs du verwendest.
Die Zuordnung zu den einzelnen Sensoren ist ja durch die Position im Array gegeben: du schreibst im FPGA eben 16 Messwerte (+ evtl. einen Marker) in den FIFO und liest im Host eben ein Mehrfaches der 16 (+1) Werte aus. Neu synchronisieren musst du nur, wenn es im FIFO einen Overflow gab - den du ja tunlichst vermeiden solltest!


RE: 16 Kanal AI mit FPGA und DMA FIFO - derandyk - 19.11.2018 17:51

Hallo GerdW,

für den unerwünschten Fall, dass tatsächlich ein FIFO Overflow auftreten sollte: Was meinst Du dann konkret mit neu synchronisieren?

Vielen Dank im Voraus!

Andy


LabView DMA FIFO to PC - derandyk - 20.11.2018 08:58

Hallo Leute,

ich habe nochmal eine Frage bezüglich der Architektur meiner geplanten cRIO LabView Applikation:

Ziel ist es 16 AI Kanäle mit einer Rate von 10kHz mittels des FPGA über längere Zeiten abzutasten und als TDMS zu speichern.

Ursprünglich hatte ich den Plan die Daten im FPGA in einen DMA FIFO zu schieben, diesen im RT auszulesen und von dort per Network Stream an den Host PC zu schicken um die Daten dort in eine TDMS Datei zu streamen. Jetzt habe ich bemerkt, dass ich mittels DMA FIFO auch direkt am PC auf die Daten zugreifen kann. Kann mir jemand erklären ob das sinnvoll ist? Ich wäre sicherlich nicht traurig auf den Network Stream verzichten zu können.

Was wäre Euer Designvorschlag für die Programmarchitektur für die oben genannte Aufgabenstellung?

Danke im Voraus

Andy


RE: 16 Kanal AI mit FPGA und DMA FIFO - GerdW - 20.11.2018 09:58

Hallo Andy,

nein, du kannst nicht direkt per DMA vom PC auf dein cRIO zugreifen: da ist nach wie vor nur ein LAN-Kabel zwischen beiden, welches die Verbindung herstellt!


RE: 16 Kanal AI mit FPGA und DMA FIFO - derandyk - 20.11.2018 11:29

Seltsamerweise funktioniert dies aber sehr gut bei mir...

Mein cRIO ist über LAN am Prüfrechner angeschlossen.

Ich betreibe auf dem PC "RT_Test.vi" in dem ich mittels FPGA Referenz auf das FPGA VI "FPGAVI.vi" zugreife. (siehe Screenshots)
Die FPGA Referenz referenziert auf das FPGA VI im Projekt.

Ich verstehe es noch nicht. Warum funktioniert das auch so???

Viele Grüße

Andy


RE: 16 Kanal AI mit FPGA und DMA FIFO - GerdW - 20.11.2018 12:25

Hallo Andy,

Zitat:Warum funktioniert das auch so???
Du bist mit deinem PC und deiner LabVIEW-IDE mit dem cRIO verbunden: hier wird LabVIEW mit aller Macht alles möglich machen (und notfalls simulieren).
Unter der Haube besteht trotzdem "nur" eine LAN-Verbindung mit dem cRIO - und darüber läuft nun mal kein DMA-FIFO, sondern eben nur "normaler" Netzwerkverkehr!
(Dieses Thema hatten wir hier schon mal, kannst ja mal die alten Beiträge durchsuchen.)

Wenn du diesen Weg (DMA-FIFO direkt mit dem PC) weiterverfolgst, bekommst du vielleicht (!) auch in der EXE einen Datenaustausch hin. Dieser wird aber auf keinen Fall deterministisch oder zuverlässig vonstatten gehen, da ja eben eine Netzwerkverbindung dazwischenhängt.
Ich schlage weiterhin die NetworkStreams vor, um Daten vom cRIO zum PC zu schicken: da hat LabVIEW schon einen Buffer eingebaut, der schlechte Netzwerkverbindungen ausgleicht…

Zu deinen Bildern:
- Du bekommst Integerdaten aus deinem DAQ-Modul? Üblicherweise kenne ich da nur FXP-Daten… (Liest du Raw-Daten?)
- Warum liest du im Host nicht einfach eine feste Anzahl an Daten aus dem FIFO, z.B. 256 oder 1024 Elements (Mehrfache von 16)?
- Statt Decimate und BuildArray könntest du auch ReshapeArray verwenden…


RE: 16 Kanal AI mit FPGA und DMA FIFO - derandyk - 20.11.2018 15:44

Zitat:Du bist mit deinem PC und deiner LabVIEW-IDE mit dem cRIO verbunden: hier wird LabVIEW mit aller Macht alles möglich machen (und notfalls simulieren).
Unter der Haube besteht trotzdem "nur" eine LAN-Verbindung mit dem cRIO - und darüber läuft nun mal kein DMA-FIFO, sondern eben nur "normaler" Netzwerkverkehr!
(Dieses Thema hatten wir hier schon mal, kannst ja mal die alten Beiträge durchsuchen.)

In der Realität des Prüfplatzes wird tatsächlich auch der Prüfrechner permanent mit dem cRIO verbunden sein. Das dies am Zweck eines cRIO ein bisschen vorbeigeht steht auf einem anderen Blatt. Fakt ist: Es funktioniert auch mit DMA FIFOs direkt auf den Host PC zu lesen/schreiben. Der Code wird dadurch halt wesentlich schlanker, da ich mir mindestens einen Network Stream Listener/Writer sparen würde. Die Frage ist ob es auch dauerhaft robust ist.
Gibt es hier im Forum Erfahrungsträger, die mit der Anwendung dieser direkten DMA FIFO --> Host PC Erfahrung haben?

Ja ich experimentiere gerade mit Raw Daten um die Dateigröße der TDMS Dateien kleiner zu halten. Aber das ist ein anderes Thema.

Viele Grüße und Danke im Voraus

Andy