LabVIEWForum.de - High Throughput Divide in Single Cycle Timed Loop

LabVIEWForum.de

Normale Version: High Throughput Divide in Single Cycle Timed Loop
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo LabVIEW-Forum,

meine Frage betrifft die Benutzung der "High Throughput Divide" Funktion innerhalb einer "Single Cycle Timed Loop" auf FPGA-Ebene.
Dazu habe ich mal ein Test-Vi programmiert, welches eins zu eins mein Problem wiederspiegelt, welches ich auch bei der Ausführung auf dem FPGA bekomme.
Das VI und ein Bild dazu findet ihr im Anhang.
Mein Ziel ist es beim Wählen des Divide-States, eine Division durchführen zulassen und ein valides Ergebnis zu bekommen.
Meine Problematik ist, dass das irgendwie nur beim ersten Mal klappt, nachdem ich das Programm gestartet habe. Sobald ich wieder eine Division durchführen möchte,
wird das Ergebnis der Division immer um eine Ausführung versetzt angezeigt. Warum?

Hier mal ein konkretes Beispiel:
1. Ausführung: 1/1000 = 0,001
2. Ausführung: 1/2000 = 0,001 <--- altes Ergebnis. Hier sollte 0,0005 stehen.
3. Ausführung: 1/3000 = 0,0005
4. Ausführung: 1/4000 = 0,0003333

Noch als kurze Anmerkung: Die Case-Struktur darf nicht weggelassen werden, da im Original-VI innerhalb der SCTL auf dem FPGA die Berechnung nicht sofort durchgeführt werden soll, sondern erst bei einer bestimmten Startbedinung.

Über Hilfe und Rat wäre ich dankbar!

Krimo
Das Problem ist, dass dein Divide VI 33 Zyklen für die Berechung braucht, aber einen Zyklus mehr braucht, bis das valide Ergebnis ausgegeben wird.

Du übergibst aber bei JEDEM Aufruf Werte an das VI und markierst sie mit "input valid" = TRUE.

Das ergibt folgenden Ablauf:
Beim ersten Aufruf des Divide Case braucht die SCTL insgesamt 35 Durchläufe bis zur Ergebnis-Ausgabe.
Nach dem 33. Aufruf gibt das VI aber aus, dass es wieder bereit ist für eine weitere Eingabe.
Beim 34. Durchlauf übergibst du nochmals die Werte für eine neue Berechnung (input valid = TRUE). Damit wird dann eine neue Division gestartet.
Somit sind schon 2 Berechnungsschritte durchgelaufen, wenn der Case "Divide" das erste Mal beendet wird.

Beim zweiten Aufruf von "Divide" macht das Divide-VI mit der schon gestarteten Berechnung weiter.
Das braucht jetzt noch 31 Aufrufe, bis das VI wieder für eine neue Vorgabe bereit ist, nach ingesamt 33 Durchläufen wird ein valides Ergebnis ausgegeben.

Und das setzt sich jetzt solange fort, bis du das VI wieder ganz von vorne startest.

Gruß, Jens

EDIT: mgl. Lösung:
[attachment=60207]
Hi jg,

Danke für die schnelle Antwort und die Lösung!!!
Es musste tatsächlich nur klar definiert werden, dass beim 0.ten Schleifendurchlauf , also ganz am Anfang, der "input valid" true sein soll. Genau wie du beschrieben hast.
Jetzt brauch auch jede Berechnung konstant 34 Schleifendruchläufe.

Viele Grüße
(18.07.2019 12:01 )Krimo schrieb: [ -> ]Jetzt brauch auch jede Berechnung konstant 34 Schleifendruchläufe.
35 Durchläufe brauchst du, der Schleifenzähler beginnt bei 0.

Gruß, Jens
Referenz-URLs