LabVIEWForum.de - FIFO darf überlaufen?

LabVIEWForum.de

Normale Version: FIFO darf überlaufen?
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hi zusammen,

ich nutze ein DMA-FIFO mit folgenden Einstellungen:

[attachment=29098]

Beim Auslesen kann ich über "Elements Remaining" ermitteln, wie viele Werte sich noch im FIFO befinden.
Lasse ich den FIFO voll laufen, gibt mir "Elements Remaining" auch Werte jenseits der 1023-Grenze aus ohne einen Fehler zu werfen (FPGA ist momentan simuliert).
Bei 9960 Werten ist jedoch Schluss und der Wert verändert sich nicht mehr. Es kommt kein Fehler, aber der FIFO ist dann wohl komplett voll.

Habe ich hier einen Denkfehler oder wieso kommt keine Fehlermeldung bzw. wieso kann der FIFO mehr als 1023 Werte aufnehmen?

Was mich auch wundert:
Ich schreibe die Messwerte (aktuell unter Windows) im 1-ms-Takt in den FIFO. Gut, da es unter Windows ist, weicht dieser Wert sicher etwas ab.
Wenn ich die Werte in einer Schleife im Host-VI auslese, die um 200 ms verzögert ist, läuft der FIFO nicht voll, obwohl ich immer nur 50 Werte auf einmal auslese. Erst ab einer Verzögerung von ca. 300 ms läuft der FIFO voll
Ich hätte erwartet, dass bis zu einer Verzögerung von ca. 50 ms der FIFO nicht voll läuft und alles über 50 ms zum Überlauf führt.

Was hat es damit auf sich?
' schrieb:Bei 9960 Werten ist jedoch Schluss und der Wert verändert sich nicht mehr. Es kommt kein Fehler, aber der FIFO ist dann wohl komplett voll.


Ich verwende kein "FXP"-FIFO, aber bei mir ist der Speicher bei 9999 Schluss (ohne Fehler)
' schrieb:Ich verwende kein "FXP"-FIFO, aber bei mir ist der Speicher bei 9999 Schluss (ohne Fehler)
Ist das bei dir auch unabhängig vom eingestellten Wert?
Hi,

zum einen würde ich dem simulierten FPGA nicht ganz trauen, was timing etc. angeht.

Zum zweiten: Die FIFO-Größe, die Du in den Kontext-Menü-Einstellungen angibst, ist der Puffer, der - meine ich - im FPGA-Memory reserviert wird. Wenn Du aber ein Target to Host hast, hat LabView noch einen hinterlegten Prozess, der die Daten aus dem Puffer ins Memory schreibt (daher DMA) und das ist im Vergleich zum FPGA halt relativ groß...;)Und ich meine, wenn man im Host die Fifo-Größe-Property aufruft, bekommt man die Anzahl der Elemente, die gerade im Memory liegen und nicht nur die im Puffer. Ich übertrage über meinen 1023 Werte langen U32-FIFO zum Beispiel auch mal mehrere MB an Messdaten auf diese Weise...

Was die 9960 WErte angeht: Hast Du bei der Fifo-Config die vielleicht angegeben?

Grüße,

ch
Achso hm, dann ist der Begriff "FIFO - Elements Remaining" etwas irreführend, wenn sich das z.T. auf den RAM bezieht, in den die Werte vom FIFO übertragen wurden.

' schrieb:Was die 9960 WErte angeht: Hast Du bei der Fifo-Config die vielleicht angegeben?
Meinst du den Screenshot aus dem ersten Beitrag? Mehr habe ich nicht eingestellt bzw. ich wüsste auch nicht, wo ich noch etwas einstellen kann.
Es gibt auf dem Host ein Fifo-Property "Config" im Blockdiagramm. Dort kann man die Größe des Fifos, was in dem Fall dem Arbeitsspeicher entspreicht,d en LV allokieren soll, entspricht...
Ah, am Host lässt sich was einstellen. Das wusste ich nicht. Ich werde das morgen testen.Smile

Hast du noch eine Idee, wieso der FIFO sich bei einer Verzögerung von 200 ms nicht füllt?
Windows bzw. das simulierte FPGA ist zwar nicht sehr genau, aber dass es so ungenau ist, glaube ich auch weniger.
Guten Morgen,

diese Eigenschaft habe ich bisher nicht verwendet. Setze ich diese jedoch auf 1023 für alle FIFOs, dann liegt das Maximum von "Elements Remaining" bei 983.
Da das Ermitteln der verbleibenden Werte nach dem Auslesen erfolgt, erwarte ich eher 1023 - 50 = 973 Werte. Und in der Zwischenzeit können eigentlich keine 10 Werte mehr hinzukommen, da es sich um einen einzigen Knoten handelt.
Es tritt allerdings kein Fehler auf, den ich bei einem Überlauf eigentlich erwarte.

Edit: So langsam wird es klarer:
Ohne "Configure"-Knoten ist die Standardeinstellung des Host-Memories auf 10.000 Werte eingestellt laut Hilfe.
Mit meinen 9960 Werten erhalte ich somit 40 Werte weniger (obwohl ich 50 auslese). Beim soeben genannten Beispiel mit den 1023 Werten sind es ebenfalls 40 Werte weniger.
Also besteht da schon irgendein Zusammenhang.
Referenz-URLs