LabVIEWForum.de
Interpolation auf FPGA - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Module (/Forum-LabVIEW-Module)
+---- Forum: LabVIEW FPGA (/Forum-LabVIEW-FPGA)
+---- Thema: Interpolation auf FPGA (/Thread-Interpolation-auf-FPGA)



Interpolation auf FPGA - cRio - 10.01.2012 12:02

Hallo
Ich spiele im Moment mit LookUpTable 1D und MemoryBlocks herum. Ziel des ganzen ist, dass ich 1 und 2 D Kennfelder auf den FPGA bringe, aus denen ich aber anschließend die Werte Interpolieren muss.
Das LookUpTable 1D Express VI ist für den Interpoliervorgang ideal ABER: Um die LUT zu befüllen, nutze ich ein InitialisierungsVI dass aus einer Excel CSV-Datei die Werte ausliest. Ich schreibe also erst mein VI auf dem FPGA, dann das InitialisierungsVI und muss nun VOR dem Kompilieren auf das LookUpTable VI klicken und bei "Define Table..." -> Call Initialisation VI-> Run/Load Excisting Init VI ausführen. Dann sind die Werte in der LUT, dann erst kann ich kompilieren und meine Werte werden wunderbar interpoliert.
Wenn man aber in seinem FPGA VI mehrere solcher LookUpTables drin hat, ist es ziemlich ätzend, vor dem Kompiliervorgang 10 LUT VIs anzuklicken und jedesmal das InitialisierungsVI auszuführen.
Deshalb: 2. Möglichkeit!
Statt jedesmal ein LookUpTable VI zu verwenden, nimmt man einen MemoryBlock. Überall wo man eine Tabelle hat zum interpolieren, setzt man den MemoryBlock (die Größe des Speichers muss man natürlich vorher wissen). Dazu bastelt man sich ein WinHost VI, dass wieder die CSV-Dateien ausliest und per FIFO DMA auf den FPGA transferiert. Das schöne daran: man baut sich sein FPGA VI und lässt es kompilieren. Lediglich die vorher festgelgeten Größen der MemoryBlöcke müssen stimmen, der Inhalt ist zum Zeitpunkt des Kompilierens Wurst. NACH dem Kompilieren kann man dann bequem alle Memorys befüllen. Meiner Meinung nach wesentlich komfortabler wie das erste vorgehen wo man vor dem Kompilieren alle LUT Vis anklicken muss zum befüllen. Allerdings: jetzt muss man es noch fertig bringen, aus den Werten des MemoryBlocks zu interpolieren. Wie bekommt man den das hin? Ein paar geistige Stützen von euch wären super!
Oder kann man die LookUpTables doch irgendwie so bequem per DMA mit Werten befüllen, ohne überall händisch vor dem Kompilieren das InitialisierungsVI zu starten?

Danke im Vorraus, Grüße


RE: Interpolation auf FPGA - eb - 10.01.2012 12:55

Moin,

also zur linearen Interpolation auf FPGA fällt mir halt das "Linear Interpolation"-VI ein. Das solltest du dir mal genauer anschauen.

Gruß


RE: Interpolation auf FPGA - cRio - 10.01.2012 15:53

Ja klar das fällt mir auch ein. Danke trotzdem! Noch einmal kompilieren, dann kommt eine mögliche Lösung hier online.... Zumindest wie man aus einem MemoryBlock heraus interpoliert. Trotzdem wäre ich dankbar wenn mir jemand eine schnellere/bessere Lösung verrät, bzw den Weg dahin aufzeigt


RE: Interpolation auf FPGA - cRio - 10.01.2012 16:17

Vorteil: Ich kann nun ein FPGA Vi kompilieren und in den MemoryBlöcken befinden sich eben Initialwerte. Wenn es fertig auf dem FPGA läuft, kann ich zur Laufzeit beliebig neue Kennlinien in den Memory per FIFO DMA laden, dazu einfach mein WIN Host VI einmal ausführen. In diesem Fall habe ich die Werte in einer Excel CSV-Datei, weswegen ich erst meine csv-datei mit neuen Werten bedate, abspeichere, und dann WIN Host VI ausführe


RE: Interpolation auf FPGA - cRio - 11.01.2012 16:37

Hat jemand eine Ahnung wie man ein 2D Kennfeld auf dem FPGA erstellt? ZB eine Tabelle die als xAchse Temperatur und yAchse Windstärke hat.
Arrays sind auf dem FPGA ja nur eindimensional. MemoryBlöcke und LUTs haben auch nur eine Zeile und eine bestimmte Anzahl fest definierter Spalten. Muss man sich da behelfen indem man sich sozusagen mehrere 1D MemoryBlöcke (zB 1 Zeile mit 5 Elementen) verwendet und diese sich übereinander vorstellt?
Grüße und schon mal danke für alle Anregungen


RE: Interpolation auf FPGA - eb - 11.01.2012 16:49

Du hast völlig Recht,

auf FPGA sind die Arrays nur eindimensional. weitere Dimensionen muss man sich denken und dann per LUT oder RAM abbilden und entsprechend clever verdrahten. Also z.Bsp. ein 1000elemente-Array reserverieren/beschreiben wovon je 100 Elemente einer Spalte hintereinander stehen. Um einen Wert aus dem Pseudo2D-Array zu ziehen muss man also die Spalten information umrechnen. Á la NummerSpalte * AnzahlWerteProSpalte + Zeilenindex

sry, weiß ich auch nicht mehr.

Gruß


RE: Interpolation auf FPGA - cRio - 11.01.2012 18:08

Das ist schon mal sehr cool! Merci!