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
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