FPGA FIFO - Oszilloscop - Druckversion +- LabVIEWForum.de (https://www.labviewforum.de) +-- Forum: LabVIEW (/Forum-LabVIEW) +--- Forum: LabVIEW Module (/Forum-LabVIEW-Module) +---- Forum: LabVIEW FPGA (/Forum-LabVIEW-FPGA) +---- Thema: FPGA FIFO - Oszilloscop (/Thread-FPGA-FIFO-Oszilloscop) |
FPGA FIFO - Oszilloscop - PxCE_HB - 31.08.2015 14:49 Guten Tag LabVIEW Community, ich versuche eine Art Oszilloskop zu bauen. Um nun die Messwerte zu puffern (wie der Ringspeicher eines digitalen Oszilloskops) habe ich mir überlegt ein FIFO zu nutzen, da ich die Messwerte sowieso aus dem FPGA Programm zum Host übertragen muss. Nun plage ich mich mit dem FIFO in LabVIEW herum. Ich schreibe Werte von zwei AI-Modulen (NI 9223 & NI 9227) in ein FIFO. Die Wartezeit in dem FPGA Programm lässt sich einstellen (siehe Screenshot). Anschließend möchte ich die Werte auf meinem Bildschirm ausgeben. Auch in dem Programm habe ich eine Wartezeit. Diese Wartezeit bestimme ich über die Wartezeit aus dem FPGA Programm multipliziert mit der Anzahl der Elemente die ich aus dem Array lesen möchte. Z.B. 3 µs Wartezeit im FPGA * 1000 Elemente aus FIFO lesen = 3 ms Wartezeit für das Host Programm (alle Werte müssen noch per Hand berechnet und eingestellt werden). Dabei tritt allerdings schon ein Problem auf. Wenn ich 20 µs im FPGA warte und 100 Elemente aus dem FIFO lesen möchte muss ich demnach 2 ms Warten. Allerdings läuft dann der FIFO voll (bis zum überlauf). Aber warum können die Daten nicht schnell genug abgeholt werden? Mache ich Grundsätzlich bei der Nutzung des FIFOs etwas falsch? Kann ich die Verwendung des FIFOs umgehen indem ich die Werte über das Lese/Schreibe-Element übergebe und in dem Host Programm einen Ringspeicher baue? RE: FPGA FIFO - Oszilloscop - GerdW - 31.08.2015 15:17 Hallo PxCE, Zitat:Wenn ich 20 µs im FPGA warte und 100 Elemente aus dem FIFO lesen möchte muss ich demnach 2 ms Warten. Allerdings läuft dann der FIFO voll (bis zum überlauf). Aber warum können die Daten nicht schnell genug abgeholt werden?- Wie groß ist dein FIFO eingerichtet? - Du hast bei der "Anzahl Elemente" beachtet, dass du zwei Kanäle abfragst und deshalb doppelt so viele Samples abfragen musst? (Also nicht 100 wie in deinem Beispiel, sondern 200?) - Andere Vorgehensweise: im Host entweder nur eine kleine oder gar keine Wartezeit einrichten, dafür aber einfach die gewünschte Datenmenge abfragen. Das FIFO-Read sollte warten, bis die gewünschte Anzahl Samples im FIFO geschrieben wurde… Zitat:Kann ich die Verwendung des FIFOs umgehen indem ich die Werte über das Lese/Schreibe-Element übergebe und in dem Host Programm einen Ringspeicher baue?Ich glaube nicht, dein Host wird überhaupt nicht so schnell einzelne Samples über das FPGA.ReadControl abfragen können… RE: FPGA FIFO - Oszilloscop - PxCE_HB - 01.09.2015 12:41 Zitat:- Wie groß ist dein FIFO eingerichtet?- Mein FIFO ist 1023 (Standardwert) groß. Zitat:- Du hast bei der "Anzahl Elemente" beachtet, dass du zwei Kanäle abfragst und deshalb doppelt so viele Samples abfragen musst? (Also nicht 100 wie in deinem Beispiel, sondern 200?)- Auch wenn ich 200 Elemente entnehme läuft der FIFO voll. Das mit den zwei Kanälen habe ich auch schon überlegt, aber warum geht es dann bei dem ersten Beispiel wenn ich alle 3 ms 1000 Werte lese und den mit 3 µs beschreibe? Zitat:- Andere Vorgehensweise: im Host entweder nur eine kleine oder gar keine Wartezeit einrichten, dafür aber einfach die gewünschte Datenmenge abfragen. Das FIFO-Read sollte warten, bis die gewünschte Anzahl Samples im FIFO geschrieben wurde…- Wenn ich warte bis ich die gewünschte Anzahl von Elemente in dem FIFO habe und dann erst lese (Programm siehe Anhang) funktioniert es leider auch nicht besser (oder ist das was ich gebaut habe falsch?) Des Weiteren habe ich festgestellt, dass die Werte in dem Signalverlaufsgraphen nur richtig angezeigt werden wenn die restlichen Elemente in dem FIFO 0 sind. Allerdings bleibt manchmal 1 Element über, so dass der Graph dann nicht mehr richtig angezeigt wird. Nach einem Neustart ist wieder alles gut. Ich habe zusätzlich noch mein Projekt mit angehängt. Außerdem habe ich festgestellt, dass sich das Signalverlaufsdiagramm verändert wenn ich die Anzahl der zu lesenden Elemente anpasse. Dabei bekomme ich die Daten für das Signalverlaufsdiagramm nicht aus dem FIFO sondern über das Lese-/Schreibe Element. Hat dazu jemand eine Erklärung? RE: FPGA FIFO - Oszilloscop - GerdW - 01.09.2015 13:05 Hallo PxCE, Zitat:oder ist das was ich gebaut habe falsch? Die Verbreitung von LV2015 ist noch eher gering, da können viele noch keinen Blick auf deine VIs werfen. Und ein RT/FPGA-VI ohne zugehöriges Projekt ist auch nur bedingt sinnvoll anzuschauen… Zitat:Allerdings bleibt manchmal 1 Element über, so dass der Graph dann nicht mehr richtig angezeigt wird. Nach einem Neustart ist wieder alles gut.Das kommt von dem Decimate1DArray, was du einsetzt. Wenn du beim Lesen aus dem FIFO um ein Sample verrutscht, werden die Samples nicht mehr richtig zugeordnet. Das lässt sich leicht beheben, in dem man 1) immer eine gerade Anzahl Samples aus dem FIFO liest und 2) den FIFO nicht überlaufen lässt… (Oder man baut einen "Marker"/"TermChar" in den FIFO-Datenstrom ein, anhand dessen dann die Samples den Kanälen zugeordnet werden.) Zitat:Außerdem habe ich festgestellt, dass sich das Signalverlaufsdiagramm verändert wenn ich die Anzahl der zu lesenden Elemente anpasse. Dabei bekomme ich die Daten für das Signalverlaufsdiagramm nicht aus dem FIFO sondern über das Lese-/Schreibe Element. Was bedeutet "verändern"? RE: FPGA FIFO - Oszilloscop - PxCE_HB - 01.09.2015 13:29 Das Projekt kann ich leider nicht hochladen, da mir das Forum dieses verbietet. Zitat:Bitte korrigiere die folgenden Fehler, bevor du fortfährst:Kann ich die VIs für ältere Versionen speicher (so wie bei MS Office geht es leider nicht), falls nicht muss ich weiter mit Screenshots arbeiten Verändern soll heißen, dass aus einem Sinussignal welches gemessen wird ein Dreieck wird. Außerdem ändert sich die Aktuallisierungszeit des Signalverlaufsdiagramm. RE: FPGA FIFO - Oszilloscop - GerdW - 01.09.2015 13:32 Hallo PxCE, Zitat:Das Projekt kann ich leider nicht hochladen, da mir das Forum dieses verbietet.ZIP-Dateien sind erlaubt. RAR auch. So hat man alles in einem einzigen Download… Zitat:Kann ich die VIs für ältere Versionen speicher (so wie bei MS Office geht es leider nicht), falls nicht muss ich weiter mit Screenshots arbeitenEinfach mal ins Datei-Menü bei LabVIEW gucken und aufmerksam lesen… Zitat:Verändern soll heißen, dass aus einem Sinussignal welches gemessen wird ein Dreieck wird. Außerdem ändert sich die Aktuallisierungszeit des Signalverlaufsdiagramm.Wenn sich die Aktualisierungszeit (aka "Samplerate") ändert, dann sieht der Signalverlauf auch anders aus. Die Herren Shannon und Nyquist lassen grüßen… RE: FPGA FIFO - Oszilloscop - PxCE_HB - 01.09.2015 13:48 Zitat:ZIP-Dateien sind erlaubt. RAR auch. So hat man alles in einem einzigen Download…Sorry für die unqualifizierte Frage. Vielleicht sollte ich Feierabend machen... Ich habe nochmal das Projekt in LV2014 angehängt. RE: FPGA FIFO - Oszilloscop - GerdW - 01.09.2015 13:54 Hallo PxCE, schnelle Antwort auf dein RAR-Projekt: Das HOST-VI gehört in den RT-Zweig, sprich muss auf dem cRIO ausgeführt werden! Wenn du den FPGA-FIFO auf dem PC abfragst, versucht LabVIEW im Hintergrund, dies evtl. über das Netzwerk zu realisieren: das ist aber nicht der Normalfall und auch nicht empfohlen! Wenn du die Daten auf dem PC haben willst, musst du sie selbst vom cRIO-RT zum PC schicken. LabVIEW kommt mit Beispiel-Projekten, und für das cRIO (bzw. für LV-RT) gibt es da auch fertige Vorlagen! Ansonsten: Du hast einen FIFO. Der FPGA schiebt Daten hinein, die du im RT auslesen musst. Wenn das Auslesen zu langsam erfolgt, läuft der FIFO voll. Also ist die Lösung: FIFO schneller auslesen, ergo: Wartezeit weglassen, einfach Elemente abfragen! RE: FPGA FIFO - Oszilloscop - PxCE_HB - 08.09.2015 14:25 Guten Tag, ich habe mir das Beispiel "Interleaving Channel Data (DMA)" angeschaut und auf meine Hardware angepasst. Das Host Projekt läuft relativ stabil. Allerdings läuft der FIFO-Speicher voll wenn der PC mit anderen Dingen beschäftigt ist. Also habe ich das VI unter cRIO geschoben (siehe Screenshot). Dies habe ich gemacht, damit es ein RT-Projekt wird und stabiler läuft. Allerdings ist genau der gegenteilige Effekt aufgetreten. Nun läuft das Projekt nur noch wenige Sekunden bis der FIFO voll ist. Nachdem ich die Darstellung des Graphen sowie die Wartezeit aus dem RT-Projekt entfernt habe läuft der FIFO nicht mehr voll. Um nun die Daten in einem Diagramm sichtbar zu machen müssen diese auf dem Host transportiert werden. Kann mir jemand sagen wie ich am schnellsten und effektivsten die Daten vom RT zum Host bekommen? Mit Umgebungsvariablen oder ist es besser dafür nochmal ein FIFO zu nutzen? Falls FIFO RT, DMA oder Scope-Target? Oder bin ich mit der Überlegung das Projekt in drei Teile (FPGA-Teil: Daten erfassen, RT-Teil: Daten verarbeiten, Host-Teil: Daten anzeigen) zu zerlegen auf den Holzweg? Vielen Dank im Voraus für die Antworten. Gruß Hendrik RE: FPGA FIFO - Oszilloscop - GerdW - 08.09.2015 14:35 Hallo PxCE, Zitat:Allerdings läuft der FIFO-Speicher voll wenn der PC mit anderen Dingen beschäftigt ist. Also habe ich das VI unter cRIO geschoben (siehe Screenshot)Das Host-VI gehört ja auch auf den RT-Teil deines cRIO, es hat nichts auf dem PC zu suchen! Zitat:Nachdem ich die Darstellung des Graphen sowie die Wartezeit aus dem RT-Projekt entfernt habe läuft der FIFO nicht mehr voll.Dein cRIO hat keinen Monitor, auf dem es etwas anzeigen kann: also ist ein Graph in einem RT-VI vollkommen sinnlos! Das mit der Wartezeit hatten wir doch früher schon erörtert… Zitat:Um nun die Daten in einem Diagramm sichtbar zu machen müssen diese auf dem Host transportiert werden.Auch das hatte ich dir schon geschrieben: du musst die Daten nun vom RT zum PC transportieren. Und ich hatte dir Beispiele empfohlen… |