!!

Willkommen Besucher...

...um das das LabVIEWForum.de als Benutzer in vollem Umfang nutzen zu können, ist eine kostenlose Registrierung nötig...
Registrierte Benutzer können Beiträge schreiben, Dateien uploaden, Beiträge lesen :) uvm.


Antwort schreiben 
Werte im FPGA skalieren
04.08.2010, 11:36 (Dieser Beitrag wurde zuletzt bearbeitet: 04.08.2010 11:38 von Matze.)
Beitrag #1

Matze Offline
LVF-Team
LVF-Team

Beiträge: 987
Registriert seit: Apr 2010

LV-Version: 2011 / 2010 / 2009
LV-Erfahrung seit: 2010
LV-Sprachversion: DE_EN

PLZ: 7xxxx
Land: Deutschland
Werte im FPGA skalieren
Hallo zusammen,

ich möchte mehrere Analogwerte erfassen. Mit der Scan-Engine komme ich an die Grenzen, wenn ich die Signale skaliere und filtere. Daher wollte ich das ins FPGA auslagern.
Den Butterworth-Filter habe ich schon gefunden, nur die Skalierung bereitet mir Probleme (er erinnert jedoch an die Express-VIs ...).
Mir ist der Datentyp "Fixedpoint" irgendwie unsympathisch.Rolleyes

Ich habe versucht, mir ein SubVI für die Skalierung zu schreiben, aber da weiß ich nicht, welche Werte ich übergeben muss.

   

Bei DAQmx kann ich z.B. Double-Werte nutzen und sagen, dass die Werte unskaliert bei 0,004 bis 0,02 mA liegen und skaliert bei 10 - 200 l/min o.ä.
Aber auf FPGA-Ebene kriege ich das (noch) nicht hin.

Wie funktioniert das denn?

Vielleicht ist es auch sinnvoller, alles in Fixedpoint zu berechnen, auch im RealTime-Bereich, wenn das schneller ist. Nur kann ich mir dann noch weniger vorstellen, wie das ablaufen muss. Beispielsweise, wenn es um den Vergleich der Messwerte mit einem Triggerwert geht.

Grüße
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
. .
04.08.2010, 12:45
Beitrag #2

dlambert Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 89
Registriert seit: May 2009

LV-Version: 2010
LV-Erfahrung seit: 2007
LV-Sprachversion: en

PLZ: 12359
Land: Deutschland
Werte im FPGA skalieren
Sofern es geht arbeite ich lieber mit RAW Werten. Die meisten Module die ich verwende haben eine 16bit Auflösung, liefern also I16 Werte.
Dazu werden bei FPGA Initialisierung die Kalibrierwerte der Module an den RT gegeben und können entsprechend verrechnet werden. Triggerschwellen werden dann als I16 an den FPGA zurückgegeben.
(Die Anzahl der Kalibrierdaten hängt von der im Modul verwendeten Anzahl von DAC's/ADC's ab.)

Die Kalibriervorschriften sind je nach Modul unterschiedlich. Die beste Referenz ist hier die LV Hilfe ( benutze ' Converting and Calibrating ' als Suchstring )

Hope it helps
Christian
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
05.08.2010, 10:33
Beitrag #3

Matze Offline
LVF-Team
LVF-Team

Beiträge: 987
Registriert seit: Apr 2010

LV-Version: 2011 / 2010 / 2009
LV-Erfahrung seit: 2010
LV-Sprachversion: DE_EN

PLZ: 7xxxx
Land: Deutschland
Werte im FPGA skalieren
Hallo,

vielen Dank, aber noch fehlt's mir an der Umsetzung. Die FPGA-Schulung ist erst Ende August ...

Ich habe es wie folgt versucht, doch ich erhalte keine skalierten Werte und der FPGA-Compiler bringt die Warnung, dass der reale Takt 39,8 MHz beträgt, ich jedoch 40 MHz eingestellt habe. Niedriger geht es jedoch nicht.
D.h. die Performance stimmt bei meiner Umsetzung absolut nicht.
Und das ganze ist aktuell bei 2 Kanälen so, später habe ich 16. Unsure

Die FPGA-Skalierung:

   

Der FPGA-Code:

   

Und der Real-Time-Code:

   

Welche grundlegenden Fehler mache ich denn bzw. mache ich überhaupt etwas richtig?

Grüße
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
05.08.2010, 17:30
Beitrag #4

dlambert Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 89
Registriert seit: May 2009

LV-Version: 2010
LV-Erfahrung seit: 2007
LV-Sprachversion: en

PLZ: 12359
Land: Deutschland
Werte im FPGA skalieren
Die FPGA Schulung hilft da auch nicht weiter. Die Kurse sind wirklich nicht der Hammer.

Fixed Point frisst Ressourcen ohne Ende. Schau Dir mal die Verarbeitungsbreite bei FixedPoint an. Das geht bis 64bit ! Bei 16Kanälen ist der FPGA garantiert dicht. Du müsstest auch noch FixedPoint-Werte per Control an den RT übergeben, da die DMA FIFO's mit FixedPoint nicht laufen... sinnlos... (Immer dran denken die Backplane-RT Verbindung ist 32bit breit.)

Wenn Du kurzfristig Dein Taktproblem lösen willst musst Du SCTL's einsetzen. Das läuft dann unter FPGA Optimierung (schon x-mal im Forum).

Nochmal meine Empfehlung: Arbeite mit RAW Daten !

Sorry, aber was soll ich sagen !?

Gruß Christian
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
05.08.2010, 19:13 (Dieser Beitrag wurde zuletzt bearbeitet: 05.08.2010 19:16 von chrissyPu.)
Beitrag #5

chrissyPu Offline
LVF-Stammgast
***


Beiträge: 445
Registriert seit: Jun 2006

LV-Version: 8.6.1, 2011 PDS
LV-Erfahrung seit: 2006
LV-Sprachversion: DE_EN

PLZ: 64283
Land: Deutschland
Werte im FPGA skalieren
Hi,

wenn Du doch schon ein RT-Target hast, würde ich folgendes machen:
- Daten im FPGA als I16 (oder was auch immer die Module mitbringen) einlesen
- Daten in FIFO schreiben (wie man das macht, steht ganz gut in den FPGA-Beispielen im Beispielfinder)
- RT liest den FIFO aus, sortiert die Kanäle und skaliert. Filterung würde ich ehrlich gesagt auch da machen, wenn Du nicht auf FPGA-Ebene eine Regelschleife implementierst...

Zur Performance:
NI hat ein paar Hinweise, wie man das auf FPGA-Ebene machen kann. Also z.B. keine Divisionen sondern Multiplikationen mit anschließendem Bitschieben, Pipelining nutzen (das wird wahrscheinlich Deine Compilerwarnung erledigen können: 1. Stufe Einlesen der Module, 2. Stufe Skalierung, 3. Stufe Filtern. Macht einen Time-Lag von 3* der längsten Durchlaufzeit, vermutlich das Einlesen oder die Skalierung.)

Zu dem Punkt, dass du mit dem oben beschriebenen Code keine skalierten Werte bekommst: m.E. logisch, da Du die Module direkt mit den Filtern verbindest und nicht die (wahrscheinlich vorhandenen) Ausgänge deiner Skalierungs-SubVIs.

Wenn Du unbedingt mit FXP arbeiten willst: Mach Dir die Arbeit und schau Dir an, wie breit Deine Daten sein müssen. LV nimmt leider als Standarteinstellung immer die höchsten Werte mit 64 bit Breite und die braucht man meist nicht... Wenn Du das optimierst müssten Deine Skalierungsvorgänge vom Compiler deutlich besser zu implementieren sein...

ch
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Skalieren in FPGA Christian 0 1.622 02.08.2005 14:51
Letzter Beitrag: Christian

Gehe zu: