LabVIEWForum.de - Probleme beim Compilieren im FPGA

LabVIEWForum.de

Normale Version: Probleme beim Compilieren im FPGA
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo,

zur zeit bin ich gerade am compilieren eines LabVIEW Programmes zum Mitteln der Eingangsanalogwerte einer Anlage.

Nach mehrmaligem Herumprobieren habe ich immer noch keine Lösung gefunden. Beim Aufspielen auf den FPGA
taucht immer diese Meldung auf: Kein Error aber bei dieser Meldung bleibt das compilen stehen und geht auch nicht mehr weiter.

=========================================================================
* HDL Synthesis *
=========================================================================

Performing bidirectional port resolution...
INFO:Xst:2561 - Always blocking tristate driving signal <configd> in unit <toplevel_gen> is removed.

Weiss jemand woran das liegen könnte?

Gibt es vielleicht noch andere Möglichkeiten zur Mittelung der Eingangssignale die relativ einfach sind. Würde gerne 100-1000 Messwerte mitteln.
Ist evt. der Speicher auf dem FPGA zu beschränkt?

Schoneinmal Danke für die Hilfe im Vorraus.

Grüße

Philip

Lv86_img
Also,

das ist ja schon relativ umfangreich... Folgendes würde ich mal zu bedenken geben, ohne zu wissen, ob das ganze wirklich Dein Problem löst:

- Wozu brauchst du die Fehlercluster und die Fehlerabfrage? Wenn die Fehlerkonstante sagt, dass Du keinen Fehler hast, wird der "Fehler-Fall" auch nie eintreten. Selbst wenn der Compiler das merken würde, ists immer noch einfach tierisch unübersichtlich

- Du machst extrem viele Fixkommaoperationen. Würde es nicht langen, diese vor dem allerletzten Schritt zu machen? Hätte auch den Vorteil, dass du keine Genauigkeitsverluste hast, die über ein 1LSB hinaus gehen... Mit der Quotient und Reminder Funktion kann das schon größer werden.

- Generell finde ich die Struktur merkwürdig - allerdings hab ich keine Ahnung, was Du für Anforderungen hast. Generell macht es m.E. wenig Sinn, die Mittelung nach jedem neuen Messwert durchzuführen (was im übrigen auch einfacher gehen würde, als immer das gesamte Array aufzuaddieren, in dem man nämlich einfach die Änderung des MIttelwerts durch den neuen Wert auf den bisherigen Mittelwert aufaddiert (also xQuerNeu = XQuerAlt + neuerWert/AnzahlWerteGesamt). Da die Schleife mit größer werdendem Array auch länger braucht, kommst Du irgendwann an den Punkt, wo nicht mehr dein LoopTimer die Datenrate regelt, sondern die Schleife...
Wenn Du Daten nicht direkt im FPGA für irgendwas brauchst, würde ich da nur Daten aufnehmen, per DMA an den Host übertragen udn Mittelungen etc. dort machen...

- Die beiden Timer für die Digital und Analog-Eingänge widersprecens ich. Weiß nicht, wie LabVIEW damit umgeht. Daher lieber zwei While-Schleifen für beide Funktionen

- Da Deine Mittelung für alle Kanäle gleich zu funktionieren scheint: Sub-VI bauen und alle nur in 1 Schleife packen. Wenn der Compiler gut ist, macht das zwar nix, aber ich bin mir nicht so ganz sicher, wie gut der compiler ist...Wink

Das fällt mir jetzt so auf Anhieb ein... Vielleicht hilft es ja, erstmal jede Funktionalität für einen Kanal zum Funktionieren zu bringen - beim FPGA sind die Chancen sehr hoch, dass eine parallele Vervielfältigung definitiv funktioniert.

Viel Erfolg,

ch
Hallo,

danke erst einmal für die zahlreichen Tipps.

ich stimme Dir da absolut zu. Im Moment sieht das Programm sehr umfangreich aus. Die Mittelwertbildung wurde vorher von einer externen Firma gelöst, von der auch das ganze Hauptprogramm stammt. Ich möchte dabei nur einige Kleinigkeiten verbessern bzw. korriegieren. Ich habe das alte VI davon mal in den Anhang gehängt. -> VI "Eingänge lesen" - LabVIEW 8.6 . Hier wurde die Mittelwertbildung lediglich über 10 Messwerte realisiert. Auch immer wieder durch einfaches aufaddieren. War wohl die schnellste Möglichkeit. Dies war jedoch nicht ausreichend. Es sollen nun 100-1000 realisiert werden. Leider bin ich auch kein richtiger LabVIEW-Profi und habe daher bisehr noch nicht die passende Lösung für das Problem gefunden. Mit einem running average VI (auch im Anhang - LabVIEW 8.6) habe ich das zuletzt gesendete VI versucht aufzubauen, leider ohne Erfolg. Mir wurde ein Tipp gegeben die Werte über einen FIFO auszulesen um einen Überlauf des Speichers vom PC beim Compilieren auszuschliessen. Bei dieser Lösung stecke ich im Moment erst einmal fest. Vielleicht hast Du da noch einen Tipp für mich.

- Die Fehlercluster habe ich nur eingefügt um Fehler vom Compiler zu umgehen. Wirklich Sinn haben die natürlich nicht.

- Die FXP´s habe ich eingefügt um die roten Punkte (Datentypen-Fehler) zu umgehen. Teilweise sind sie jedoch nicht nötig wie Du schon erwähnt hast.

Wie könnte ich die Daten aus dem FPGA rausholen ohne dabei die Mittelwertbildung genau dort zu machen?
[attachment=22190] - LabVIEW 8.6
[attachment=22191]- LabVIEW 8.6
Vielen Dank schonmal für die Hilfe und Freundliche Grüße

Philip
Hi,

ich versteh' Dein Problem jetzt nicht so ganz... Wenn Du Daten im FPGA aufzeichnest und die auf dem Host mitteln willst, gibt es dafür eigentlich eine gute Lösung: einen DMA-FIFO. Wie man den anwendet, findest Du bei NI auf der Homepage. Einfach mal danach suchen.

Wenn Du auf dem FPGA mitteln willst, musst Du halt schauen, was Du brauchst. Wenn's ein Moving Average ist, gibt's von NI vielleicht auch schon irgendwo ein IP dafür oder Du überlegst es Dir selbst, wie man es möglichst geschickt löst... Wenn Geschwindigkeit ein Problem ist, könntest Du über Pipelining bzw. über geschickt platzierte Single Cycle Loops nachdenken...

ch
Referenz-URLs