LabVIEWForum.de
Eigene SCAN Engine - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Module (/Forum-LabVIEW-Module)
+---- Forum: LabVIEW FPGA (/Forum-LabVIEW-FPGA)
+---- Thema: Eigene SCAN Engine (/Thread-Eigene-SCAN-Engine)



Eigene SCAN Engine - gfzk - 25.01.2016 15:37

Hallo,

das letzte Mal, dass ich ein cRio System programmiert habe ist schon einige Jahre her. Damals habe ich aus Zeitgründen vornehmlich die Scan-Engine eingesetzt, nun möchte ich mich näher mit FPGA auseinander setzen.

Üblicherweise erfasse ich Spannungen mit einem Compact DAQ oder PCI Karten. Dabei reicht es mir wenn jede Sekunde ein neuer Messwert angezeigt und aufgezeichnet wird. Um die ganze Sache statistisch aussagefähiger zu machen sample ich 1000x schneller und bilde dann Mittelwert und Standardabweichung.

Nun will ich mir eine Art eigene Scan Engine basteln, die alle analogen Kanäle im Chassis mit 1 kHz sampelt, Mittelwert und Standardabweichung berechnet und diese Werte einmal pro Sekunde den RT-VIs auf dem Rio zur Verfügung stellt.

Macht es Sinn diese Geschichte unter FPGA zu implementieren?

LG
Georg


RE: Eigene SCAN Engine - GerdW - 25.01.2016 15:59

Hallo Georg,

das hängt davon ab, wieviele Kanäle du bedienen willst und wie du die Avg/StdDev-Berechnung implementierst: auf dem FPGA läuft man schnell in Platzprobleme.

Ansonsten erstelle ich mir auch immer meine "ScanEngine", die alle I/O-DInge auf dem FPGA handhabt. Allerdings habe ich dort für Spannungssignale meist nur einen laufenden Mittelwert über 4-8 Samples implementiert… Bei einer Werteübergabe im 1Hz-Bereich würde ich den Datenaustausch RT-FPGA über das Lesen/Schreiben von FPGA-Controls erledigen.


RE: Eigene SCAN Engine - gfzk - 25.01.2016 17:10

Hallo Gerd,

die Anzahl der Kanäle bzw. Samples ist genau das Problem in das ich reingelaufen bin. Für jeden Kanal (16 diff) meines AI Moduls (NI 9205) habe ich die FPGA Math Funktion "Mean, Variance, and Standard Deviation Express VI" benutzt. Da ist natürlich schnell Schluß mit den FPGA Resourcen. Auf die 1k Samples pro Kanal kann ich aber leider nicht verzichten um die Qualität des Signals zu charakterisieren für die Fehlerrechnung. Ausserdem habe ich mehrere Module, die ich mit dieser Rate erfassen möchte.

Bleibt mir dann nur der Weg, mit dem FPGA die I/Os zu erfassen, in einen FIFO zum RT Host zu übertragen und dort meine Mittelung vornehmen zu lassen?

Gruß, Georg


RE: Eigene SCAN Engine - gfzk - 02.02.2016 09:00

Guten Morgen

bei meinem Vorhaben benötige ich noch ein paar Denkanstösse:

Ich möchte mehrere Module zur analogen Signalerfassung gleichzeitig mit unterschiedlichen Sampleraten betreiben. Pro Sekunde sollen dann alle gesammelten Einzelwerte (=feste Anzahl) vom FPGA an den RT Host übermittelt werden zwecks Mittellung und so. Umgesetzt hätte ich dies indem ich zunächst mal jedes Modul in seiner eigenen While-Schleife mit dem der Samplerate entsprechenden Timing die Daten in einen Zwischenspeicher hätte schreiben lassen. Haben alle Module die gewünschte Anzahl an Werten erfasst sammelt ein weiterer Task diese ein, bündelt sie und überträgt sie per DMA an den Host. Dies geschieht aus dem Grund, da ja die Anzahl der DMA Kanäle beschränkt ist.

Leider macht mir die Handhabung solcher Datenmengen dabei Probleme. Auf einem Host System würde ich einfach einen Cluster mit 2D Arrays (Kanal/Messwert) pro Modul erstellen. Das kann ich ja auf dem FPGA leider nicht in der Form machen.
Wäre es möglich einen gemeinsamen, festen Speicherbereich auf dem FPGA zu definieren den sich verschiedene Tasks teilen und der periodisch per DMA an den Host übermittelt wird?

Viele Grüße
Georg


RE: Eigene SCAN Engine - GerdW - 02.02.2016 09:09

Hallo Georg,

du kannst doch ein Memory auf dem FPGA anlegen: du musst dich auf eine (Maximal-)Größe festlegen und selbst die "Speicheradressierung" übernehmen, da der Memoryblock nur eindimensional (=Länge) angesprochen wird.

So z.B.: Adresse = Kanal * (max. Kanallänge) + Samplenummer…
Hier mache ich gerade etwas ähnliches:
[attachment=55217]
Ist noch in der Entwicklung und nicht debugged…


RE: Eigene SCAN Engine - gfzk - 02.02.2016 17:01

Hallo Gerd,

zum Memory habe ich zwei Fragen:

1) wie groß ist der Block Memory eigentlich? Ein Rechtsklick auf das FPGA Target liefert mir nur die Auskunft: ...Block RAMs: 32...

2) gibts da keine Probleme wenn zwei voneinander unabhängige Loops auf den gleichen Speicher zugreifen? Hat das nicht auch was mit der Clock Domain zu tun?

LG
Georg


RE: Eigene SCAN Engine - GerdW - 02.02.2016 18:38

Hallo Georg,

1) Die Größe des MemoryBlocks gibst du im Einstellungs-Assistenten an. Man sollte sich auf "vernünftige" Werte beschränken, im Bild oben geht es um 256 FXP(±,26,5)-Werte (32 Kanäle mit je 8 Werten)…

2) Wie bei anderen FPGA-Strukturen auch handhabt der LV-FPGA-Compiler solche Zugriffsfragen aber die "Arbitrierung", welche man ebenfalls in den Einstellungen zum MemoryBlock festlegen/bearbeiten kann.