INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

Fragen zu DMA FIFO



Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!

18.10.2011, 10:50
Beitrag #1

gfzk Offline
LVF-Grünschnabel
*


Beiträge: 47
Registriert seit: Sep 2009

2012
2007
DE_EN

76344
Deutschland
Fragen zu DMA FIFO
Hallo,

ich schlag mich seit einiger Zeit mit dem DMA FIFO Transfer von Daten von FPGA nach Realtime herum.

Mein Vorhaben ist folgendes:
Unter FPGA möchte ich 32 AI Kanäle (2x NI 9205, diff) alle 1 ms samplen und die Daten in einen FIFO schreiben.
Dieser soll auf RT alle 100 ms ausgelesen werden wo aus den 100 Werte pro Kanal der Mittelwert und die Standartab-
weichung gebildet werden sollen.

Gut, das ließe sich mit der Scan Engine auch machen, auf diese muss ich jedoch verzichten, da ich das Chasis im
FPGA Modus programmieren muss, da ein anderes Modul (CAN) dies verlangt. Zudem denke ich, dass sich für so
etwas ein FIFO geradezu anbietet und das Rechenleistung spart im Vergleich zu einer Scan Engine Variante.

Mein Problem ist nun, dass ich wie schon geschrieben mit dem FIFO nicht zurechtkomme. Fangen wir mal bei den Puffern
an, wie ich sehe gibts den FIFO Puffer auf dem FPGA und die "Tiefe" des Puffers in meiner RT Anwendung.
Wie hängen die beide zusammen und welche Werte trage ich hier sinnvollerweise ein?

Gruß,
Georg
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
18.10.2011, 12:07
Beitrag #2

GerdW Offline
______________
LVF-Team

Beiträge: 17.398
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: Fragen zu DMA FIFO
Hallo Georg,

Zitat:Gut, das ließe sich mit der Scan Engine auch machen, auf diese muss ich jedoch verzichten, da ich das Chasis im
FPGA Modus programmieren muss, da ein anderes Modul (CAN) dies verlangt.
Nur, weil das CAN-Modul den FPGA voraussetzt, musst du trotzdem nicht auf die ScanEngine verzichten. Du kannst sie parallel nutzen... (1ms Abtastung bleibt aber mit der ScanEngine hakelig.)

Zitat:welche Werte trage ich hier sinnvollerweise ein?
Der Puffer sollte groß genug sein, um deine 32Kanäle über 100ms puffern zu können. Wenn dein RT beim Lesen des Puffers nicht hinterherkommt, hast du eh ein größeres Problem...

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
18.10.2011, 12:42
Beitrag #3

gfzk Offline
LVF-Grünschnabel
*


Beiträge: 47
Registriert seit: Sep 2009

2012
2007
DE_EN

76344
Deutschland
RE: Fragen zu DMA FIFO
Hallo Gerd,

von diesem Hybridmodus hab ich schon gehört, gut zu wissen, dass ich damit auch arbeiten könnte.

In der LabView Hilfe "How DMA Transfer Work (FPGA Module)" steht, dass es einen FPGA Buffer und einen Host Buffer
gibt, die über einen DMA Channel verbunden sind. Ich geh mal davon aus, dass wenn keine Daten aus
dem Host Puffer ausgelesen werden, zuerst der Host Puffer volläuft und danach der FPGA Puffer, ist das richtig?
Das hieße zum Beispiel, dass ich mich entscheiden kann wie ich die Gesamtmenge an Elementen der beiden Puffer,
sagen wir 32 Kanäle * 100 Samples = 3200 Elemente, auf die jeweiligen Puffer aufteile? Z.b. den FPGA Puffer nur
32 Elemente groß machen, dafür den Host Puffer 3200-32=3168 Elemente groß, oder umgekehrt - ginge das?

Gruß, Georg
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
18.10.2011, 12:49
Beitrag #4

GerdW Offline
______________
LVF-Team

Beiträge: 17.398
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: Fragen zu DMA FIFO
Hallo Georg,

der FIFO, den ich nutze, hat nur eine einzige Größeneinstellung... Da gibt es also keine explizite Aufteilung nach Host und Target...

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
18.10.2011, 13:12 (Dieser Beitrag wurde zuletzt bearbeitet: 18.10.2011 13:16 von gfzk.)
Beitrag #5

gfzk Offline
LVF-Grünschnabel
*


Beiträge: 47
Registriert seit: Sep 2009

2012
2007
DE_EN

76344
Deutschland
RE: Fragen zu DMA FIFO
Jetzt bin ich verwirrt,

den von mir angelegte FIFO im Projekt unter FPGA hab ich 32 Elemente groß gemacht,
das FPGA VI wird alle 10 ms ausgeführt.
Auf dem Host VI, das auf dem cRio läuft, hab ich mittels eines Methoden Knotens und
der Option Konfigurieren die "Tiefe" auf 3200 festgelegt.
Nun lese ich den FIFO periodisch aus mittels zweier While Schleifen. Die äußere Schleife
ist mit 1000 ms getaktet, die innere Schleife ließt je 32 Elemente solange, bis der FIFO leer ist.
Und die Schleife die den FIFO ausließt wird 100 mal ausgeführt, ließt also 3200 Elemente!


Angehängte Datei(en) Thumbnail(s)
   
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
24.10.2011, 17:23
Beitrag #6

gfzk Offline
LVF-Grünschnabel
*


Beiträge: 47
Registriert seit: Sep 2009

2012
2007
DE_EN

76344
Deutschland
RE: Fragen zu DMA FIFO
Hallo,
ich komm in der Sache mit dem FIFO leider nicht so richtig weiter :-(

Ich poste hier mal den Code, den ich für den FPGA geschrieben habe. Wie man erkennt erfasse ich unter anderem 32 Kanäle
jede Milisekunde und schreibe die Werte in einen FIFO. Hier fangen die Unklarheiten schon an, was trage ich am Timeoutanschluss
des FIFO hier sinnvollerweise ein? In der Hilfe steht folgendes:

Zitat:Timeout specifies the time, in number of clock ticks, that the method waits for available space in the FIFO if the FIFO is full. A value of –1 prevents the function from timing out. A value of 0 indicates no wait.
Mir ist nich klar, wie sich -1 von 0 unterscheidet. Und was passiert wenn der FIFO voll ist, wir der dann einfach überschrieben?

Bisher hatte ich Probleme in der Art, dass nach einem Pufferüberlauf die Reihenfolge der Kanäle im Array nicht mehr stimmt. Kanal 0, im Array auf Index 0 wanderte plötzlich ans Ende des Arrays und die anderen rückten dementsprechend einen Platz nach vorne. Dieses Phänomen trat auf als ich unter besagtem Timeout 5 (Ticks) angegeben hatte.
Diesen habe ich nunmal auf -1 gestellt, worauf die Kanäle auch bei einem Pufferüberlauf im Array an der gleichen Stelle blieben.
Allerdings sind die Werte dann fraglich, an Kanal 0 hab ich z.B. 8 Volt angeschlossen, dieser Wert sinkt kontinuierlich ganz langsam ab.

Irgendwie weiss ich grad garnicht was ich mache, deshalb frag ich Euch ;-)

Gruß,
Georg


Angehängte Datei(en) Thumbnail(s)
       
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
Question Timeout bei FIFO Speicher otto.kranz 15 35.661 19.09.2016 12:20
Letzter Beitrag: GerdW
  RT FIFO Frage gfzk 1 14.409 02.07.2015 15:56
Letzter Beitrag: GerdW
  RT FIFO Verständnis Michiel 3 9.959 13.06.2014 14:02
Letzter Beitrag: jg
  DMA FIFO + TDMS File IO NoD 1 8.374 30.10.2009 15:21
Letzter Beitrag: dlambert
  Problem mit RT-FIFO Benjamin84 4 8.511 01.07.2008 10:11
Letzter Beitrag: cb
  2-d-dblArray in RT-FIFO 23uwe 0 5.514 04.01.2008 20:10
Letzter Beitrag: 23uwe

Gehe zu: