Eingänge mit verschiedenen Abtastfrequenzen in FIFOs schreiben
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!
RE: Eingänge mit verschiedenen Abtastfrequenzen in FIFOs schreiben
Hallo nochmal,
FPGA: Du hast nun auf beiden FIFOs FXP als Datentyp. OK. Evtll ist es noch sinnvoll sich den genauen Datentyp des FXP anzuschauen, damit keine Genauigkeit verloren geht: Wenn du zum Bsp. für die FIFO einen FXP +-10,5 eingestellt hast, dann geht dir eine Menge beim Transfer flöten weil die Daten auf FPGA-Seite beim BuildArray FXP +-20,5 sind. Achte also darauf das die Datentypen der FIFO zu den FPGA-Werten passt. (das kann man aus deinen VIs nicht genau sehen, weil die Definition der FIFO im ProjektExplorer liegt)
Host: Du hast noch immer ziemlich wenig Elemente als Puffergröße definiert. (Genau 11*400*3=13200 Elemente) Das reicht noch lange nicht für 1s zwischenpuffern, sollte aber schon funktionieren.
Der Hauptfehler liegt beim Auslesen (schnelle Schleife): Du musst (wie in meinem vorherigen Post beschrieben) 1/10 der Elemente lesen, die pro Sekunde erzeugt werden. Du erzeugst 20kHz pro Kanal. Das macht bei 11 Kanälen 220000 Werte pro Sekunde! Du musst also 22000 Werte pro SDL auslesen, wenn dein Timing 100ms beträgt. Da du nur 11*400*3Werte (13200) ausließt, läuft dir wahrscheinlich auch hier der Puffer voll.
RE: Eingänge mit verschiedenen Abtastfrequenzen in FIFOs schreiben
Der schnelle Buffer war nicht das Problem. Habe aus der 3 eine 5 gemacht und ist jetzt auch die Sekunde.
Der langsame Buffer war das Problem. Habe jetzt in der langsamen Schleife einen Buffer von 0. Klingt zu klein ist aber das einzige was fehlerfrei läuft.
Im Anhang sind jetzt die FIFO-Einstellungen, die sind bei beiden identisch.
Wenn das jetzt endlich alles läuft fange ich an zurückzurechnen und die Daten in einem csv zu speichern.
RE: Eingänge mit verschiedenen Abtastfrequenzen in FIFOs schreiben
Folgende Punkte sind hier problematisch:
Die Größe des Puffers entspricht der Abfragegröße, das führt unweigerlich zu Pufferüberlauf
NI9203: du generierst 19 Elemente je Sekunde und willst dann 57 Elemente je Sekunde lesen. Resultat ist, dass du aller 3 Sekunden 57 Elemente bekommst.
NI9215: du generierst 220000 Elemente je Sekunde und willst dann 132000 Elemente je Sekunde lesen. Resultat ist, dass du zwar immer die maximale Anzahl an Daten siehst aber sehr viel einfach verlierst.
Du solltest die RT-seitige Puffergröße der DMAs einfach ordentlich groß machen. Z.B. 1 Million für das 9215 und beim 9203 einfach paar Tausend. Rechne nochmal genau durch was du überall auslesen willst und an Puffern einstellst. Das passt aktuell alles nicht wirklich zusammen.
Die Clock an der Timed Loop gibt im Prinzip die zugrundeliegende Taktquelle an und damit die mögliche erreichbare Taktrate und Grundeinheit der rückgegebenen Taktzähler. Der "dt"-Eingang gibt dir dein Ausführungsintervall der Schleife an. Aktuell läuft deine obere Schleife mit 100 ms und deine untere mit 1000 ms.
RE: Eingänge mit verschiedenen Abtastfrequenzen in FIFOs schreiben
(16.07.2013 20:04 )Holy schrieb: [*]Die Größe des Puffers entspricht der Abfragegröße, das führt unweigerlich zu Pufferüberlauf
Die Aussage versteh ich nicht.
(16.07.2013 20:04 )Holy schrieb: [*]NI9203: du generierst 19 Elemente je Sekunde und willst dann 57 Elemente je Sekunde lesen. Resultat ist, dass du aller 3 Sekunden 57 Elemente bekommst.
lese jetzt je Sekunde nur noch 19 Werte aus, jetzt geht es auch
(16.07.2013 20:04 )Holy schrieb: [*]NI9215: du generierst 220000 Elemente je Sekunde und willst dann 132000 Elemente je Sekunde lesen. Resultat ist, dass du zwar immer die maximale Anzahl an Daten siehst aber sehr viel einfach verlierst.
Ist auch korrigiert.
(16.07.2013 20:04 )Holy schrieb: Du solltest die RT-seitige Puffergröße der DMAs einfach ordentlich groß machen. Z.B. 1 Million für das 9215 und beim 9203 einfach paar Tausend. Rechne nochmal genau durch was du überall auslesen willst und an Puffern einstellst. Das passt aktuell alles nicht wirklich zusammen.
Für 9203 habe ich jetzt 8192 gewählt sollte locker reichen.
Für 9215 habe ich 1048575 gewählt aber die aktuelle Anzahl steht nur auf 16383. Weiß wer warum?
RE: Eingänge mit verschiedenen Abtastfrequenzen in FIFOs schreiben
Kurzer Grundlagenkurs DMA-FIFOS:
DMA-FIFOS die zwischen FPGA und RT Daten austauschen bestehen aus 2 Teilen. Dem FPGA Teil, konfigurierbar unter dem FPGA-Target, und dem RT Teil, konfigurierbar über den Eigenschaftsknoten Configure.
Der FPGA Teil ist limitiert durch deine Ressourcen auf dem FPGA und der RT-Teil durch den RAM des cRIO.
Wenn du jetzt Daten in den DMA schreibst, auf FPGA Seite, erfolgt der Transfer in den RT-Teil automatisch. D.h. dein FIFO läuft typischerweise erst über wenn die RT-Seite voll ist.
Für deine Konfiguration bedeutet das folgendes:
- FPGA Seite des FIFOs war so bisher in Ordnung da ausreichend groß
- RT Seite war einfach viel zu klein
Also erhöhe bitte die Größe des FIFOs im RT-Teil und lass den FPGA Teil wie er war! Da du jetzt in deinem Code z.b. exakt gleich viel Elemente angefragt hast wie der RT Teil des FIFOs groß war kam die Funktion erst mit Daten zurück wenn der RT Teil auch voll war. Du hast dann zwar den FPGA Teil noch als Puffer aber das kann sehr schnell auch problematisch werden.
Deine konfigurierten Größen im FPGA gehen einfach nicht weil dafür garnicht genug Ressourcen vorhanden sind.
RE: Eingänge mit verschiedenen Abtastfrequenzen in FIFOs schreiben
Jetzt habe ich es Endlich verstanden.
Danke Holy. Nun habe ich ne extra Konstante angelgt un die auf die entsprechende configure gelegt und Oh Wunder es geht nun auch alles.
Mal sehen ob ich das Trennen und Rückrechnen der Daten nun hin bekomme.