Forum: FPGA, VHDL & Co. Mit FPGA exterenen RAM auslesen


von Lo M. (lome)


Lesenswert?

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

von Mathi (Gast)


Lesenswert?

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?

von Lo M. (lome)


Lesenswert?

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.

von findar (Gast)


Lesenswert?

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

von Lo M. (lome)


Lesenswert?

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.

von Der Mitlesende (Gast)


Lesenswert?

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

von Jörg (Gast)


Lesenswert?

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.

von A. F. (chefdesigner)


Lesenswert?

So ist es. Für Bildverarbeitung im FPGA reichen die Bloak RAMs gerade 
für einige Zeilen. Reicht, um Kantendetektion zu betreiben ...

von Lo M. (lome)


Lesenswert?

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.

von Jörg (Gast)


Lesenswert?

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

von Bildheiny (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.