Guten Morgen, mal ne ganz dumme Frage: Ist es eigentlich sehr kompliziert mit einem FPGA Daten aus einem externen RAM zu lesen? Ich bin in diesem Bereich quasi blutiger Anfänger und hab schon von einigen LEuten mit Kenntnissen in der FPGA Programmierung gehört, dass es recht kompliziert ist, das Timing für schreib- und Lese-Zyklus richtig hinzubekommmen. Ich möchte in dem RAM Bilddaten zwischen speichern um Sie dann in den FPGA BlockRam abzulegen. Wie gesagt, ich bin zwar Anfänger, aber würde mich nicht davon abschrecken lassen, wenn es für einen Anfänger machbar ist. Vielen DANK
Du hast nicht gesagt welche Art von RAM ;) Aber SRAM sollte auf jeden Fall machbar sein. Auch für einen Anfänger. Als "blutiger Anfänger" wären wohl DRAM, SDRAM und vor allem DDR vielleicht etwas zu kompliziert. Vor allem DDR hat es echt in sich. Hast Du dir schon einen Typen ausgesucht?
ICh habe eine Development Board von Xilinx. Spartan 3E mit nem XC3S500E FPGA. Auf dem Board ist aber ein 64 MByte DDR SDRAM. Wird wohl etwas komplizierter.
Also mit einem Spartan 3E ist das nicht so wild, da kannst du ja nen Microblaze implementieren und den SDRAM Controller IP von Xilinx nutzen. Damit ist das sehr einfach...
Dieser MicroBlaze ist doch so etwas wie ein im FPGA integrierter Processor, oder? Ich hatte vor das FPGA mit dem XILINX-Blockset unter Matlab zu programmieren. Hat das schon einmal jemand gemacht? Ich könnte mir trotzdem vorstellen, dass das Einstellen des Timings für den SDRAM recht schwierig wird. Oder gibts da irgend welche Tips/Tricks. Muss nämlich Bidler, welche von einem uC gesendet werden irgendwo ablegen.
>>ICh habe eine Development Board von Xilinx. Spartan 3E mit nem XC3S500E >>FPGA. Auf dem Board ist aber ein 64 MByte DDR SDRAM. Wird wohl etwas >>komplizierter. Schaue, ob Xilinx ne Appnote dazu hat. Es ist selten, dass die was auf dem Board platzieren, ohne code dazu beizulegen.
Einfacher als das DDR-SDRAM anzusprechen wäre vieleicht über den FX2-Stecker per Flachbandkabel oder EvalBoard (z.B. FX2BB) ein externes SRAM anzuschliesen. SRAM läst sich um ein vielfaches einfacher ansprechen bzw. in einfache Applicationen (ohne MicroBlaze-Core) einbinden. Falls es aber doch DDR-SDRAM sein soll: Entweder Du schaust mal unter MIG (MemoryInterfaceGenerator), ein Tool zur Generierung von Speicherinterfaces für Xilinx-FPGAs (ist aber auch nicht einfach) oder: Auf der XILINX-Seite unter Documents ist Dein Board in einem PDF beschrieben (glaube "ug230.pdf"). Im Dokument findest Du dann einen Link auf das DDR-SDRAM Micron 512MBDDRx16. Lade das zugeh. Dokument einfach mal runter und entscheide dann selbst, ob Du lieber DDR oder SRAM verwenden willst. Du must Dich an dutzende Parameter halten und für Start,Read,Write bestimmte Protokolle einhalten, Autorefrech,Burst uvm noch mitberücksichtigen. Schreckt vieleicht ein wenig ab, aber falls Du Dich eingearbeitet hast, dann kannst Du einen auf Deine Bedürfnisse zugeschnittene FSM-Automaten (idR. sogar mehrere) schreiben und das RAM optimal ausnutzen. Ist aber SEHR zeitaufwendig. Nebenbei bemerkt: Bilder (z.B. von Videokamera etc.) passen wohl kaum in ein BlockRam, unter Umständen reichen sogar all Deine BlockRams nicht aus (und Du hast 20 davon in (D) einem FPGA), um ein vollständiges Bild zu speichern. Bei normaler (d.h. nicht komprimierter) Textdarstellung brauchst Du idR schon 2 RamBlocks, eins für den Text und eins für den Zeichensatz. Falls Du also Bilder einlesen, verarbeiten und ausgeben willst (und das noch mit max Geschwindigkeit), kommst Du um SRAM wohl nicht herum.
So ist es. Für Bildverarbeitung im FPGA reichen die Bloak RAMs gerade für einige Zeilen. Reicht, um Kantendetektion zu betreiben ...
Ich möchte ja gar keine großen Bildveränderungen vornehmen. Einfach nur Bilder, die auf nem uC hinterlegt sind in den FPGA und vom FPGA über die VGA-Schnittstelle des Entwicklung-Boards wieder ausgeben.
Egal ob Du eine Bildveränderung oder eine Darstellung über VGA machen möchtest. Da Deine Bilder von einem uC kommen, rate ich einfach mal, dass sie nicht "VGA-synchron" übermittelt werden (uC ist dafür viel zu langsam). Und genau in diesem Fall muss nunmal das Bild in irgendeinem hinreichend grossen Speicher zwischengespeichert werden. Und da bleiben Dir wohl nur die Standard-Möglichkeiten SRAM, MIG für SDRAM/DDR-SDRAM oder ein eigenes SDRAM-Interface. Aber so wie ich Deine verschiedenen Forenbeiträge noch in Erinnerung habe, hast Du ein Sparten3E-Starter-Kit. Darauf befindet sich auch ein hinreichend grosser und auch schneller Flash-Speicher. Falls Du also ein Bild übertragen und dann dauerhaft anzeigen möchtest (Prinzip digitaler Bilderrahmen), verwende vieleicht diesen: Flash löschen, Bild speichern und dann über Schleife anzeigen,anzigen,anzeigen...
In der Tat. Du brauchst ein RAM, das mit der Bildwechselfrequenz von mindestens 10 Frames geschrieben wird, und dann mindestens 60x wiedergegeben wird. Am Besten geht das mit einem SRAM und einen Dual Port Arbitter: Das RAM lässt man auf 100MHz laufen, wobei immer blockweise Daten von einem Eingangspuffer geschrieben werden und gleichsam auch Daten rausgelsen werden. An beiden Schnittstellen einen FIFO und dann hat man die volle Datenrate von 50MHz rein und raus. Bezogen auf 16Bit gegen 32 Bit Farbdaten sind das 25 MHz Pixeltakt. Das reicht für VGA640480.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.