DMA FIFO: Wieviele Elemente sollte man holen?
Tag,
dann versteh ich Deine Frage nicht. Es ist doch so, dass der FPGA bzw. der RT Daten in den Fifo schreibt. Das macht er so lange, bis der Fifo voll ist, wenn das der Fall ist, bekommst Du einen Fehler auf dem FPGA gemeldet. Ggf. kann man das konfigurieren, wie lange er warten und probieren soll, Werte in den Fifo zu schreiben, bevor der Fehler kommt.
Irgendein Prozess, der den FiFo überwacht (der m.E. über den Fifo-Start-Methodenknoten gestartet wird, wobei ich nicht ganz genau weiß, ob das stimmt) schaut dann, das z.B. die Sachen aus dem FiFo auch irgendwie ins Memory geschrieben werden. In Deinem Fall wäre das ein Prozess, der per DMA die Daten aus dem Puffer aus dem FPGA-Memory auf das Memory vom Host schreibt.
Aus diesem Host-Memory rufst Du jetzt mit deinem Methodenknoten die Daten ab und zwar so viele, wie Du haben willst. Auch hier gibt es jetzt die Möglichkeit zu sagen, wieviele Daten abgeholt werden sollen und was passiert, wenn nicht ausreichend Daten da sind bzw. es zu lange dauert, bis diese Daten da sind. Zur Ablaufsteuerung kann man hier z.B. die Eigenschaft der im Fifo vorhandenen Elemente nutzen.
Deine erste Frage aus dem ersten Post hätte ich dementsprechend so beantwortet: Je nach Einstellung des Fifo-Lesen-Knotens aufm Host kommt entweder ein Timeout oder (wenn Du entsprechend auf die Remaining Elements reagierst) ein OK, alle Daten gelesen. Deine zweite Frage aus dem letzten Post entsprechend Nein, denn es kommt drauf an, was passiert: [list]Wenn der Fifo immer weiter reinschreibt und du immer 1000 Werte rausholst, ohne ein Timeout zu haben (das ist m.E. die Voreinstellung), dann holst du so lange alle Werte ab, wie die Abfragemenge des Hostes größer als die Datengenerationsrate des Targets ist. In diesem Fall wird die Fifo-Read-Operation nicht immer gleich lange dauern, weil der Knoten irgendwann an einer Stelle warten wird, bis die 1000 Werte voll sind. Das ganze geht endlos....<>
[st][list]Schreibt der FPGA mit dieser Konfiguration schneller, wird irgendwann der FIFO-Puffer voll sein und du hast eine Fehlermeldung auf dem Target. Wenn Du die nicht abarbeitest, fehlen Dir Daten, was du wahrscheinlich auch nicht merkst, da die RTs glaube ich keine automatische Fehlerhandler haben, wie im normalen LV<>
[st]Wenn man also mehr Kontrolle haben will, hat man entweder die Option, über Interrupts zu synchronisieren oder auf dem Host immer erst den Status des Fifo abzufragen und dann immer diese Anzahl an Elementen auszulesen. Damit ist man (wenn man vorher mal die Datenraten durchgerechnet bzw. sich angeschaut hat) meist auf der sicheren Seite.
So far,
ch
|