Forum: FPGA, VHDL & Co. Dual-Port-RAM mit externem Speicher?


von sunny (Gast)


Lesenswert?

Hallo allerseits,

ich hab hier gerade ein grundlagenproblem. ich möchte mit einem altera 
flex einen controller für ein lcd display bauen. als bildspeicher steht 
ein schnelles SRAM zur verfügung. das will ich nun als quasi-dual-port 
RAM verwenden. also die daten werden displayseitig kontinuirlich 
ausgelesen und dargestellt. eingangsseitig sollen die daten beliebig in 
den speicher geschrieben und wenn möglich auch gelesen werden können.
hab nun schon eine weile drüber nachgegrübelt. eine zufriedenstellende 
lösung ist mir allerdings nicht eingfallen. auch im netz war nicht 
wirklich was zu finden. wenn dort ein dual-port RAM realisiert wurde 
dann immer nur im blockram und nicht mit einem externen ram.

hat schon mal jemand so was realisiert oder kennt ein projekt wo man 
sich sowas mal anschauen kann?

gruß sunny

von Uwe Bonnes (Gast)


Lesenswert?

Wie sind die Taktverhaeltnisse? Geht einfaches Multiplexen zwischen dem 
Display und der Ansteuerung?
Ansonsten hat Cypress auch fertige Dual Port RAMs

von sunny (Gast)


Lesenswert?

hi

weiß jetzt nicht ob ich dich richtig verstanden habe.
von der RAM-geschwindigkeit sollte das mit dem multiplexen gehen. das 
display läuft mit ca. 2mhz und das ram hat eine zugriffszeit von 15ns. 
ich denke aber man muss die daten in richtung display noch mal puffern.

die DP-RAM von cypress kenn ich auch. ich wollte es aber lieber mit 
einem normalen ram machen weil ich das normale ram zum einen hier rum 
liegen habe und man ja auch was bei der sache lernt.

gruß sunny

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

> hat schon mal jemand so was realisiert
Ja, als Video-Overlay-für eine (etwas aufwendigere) Rückwärtskamera...

> oder kennt ein projekt wo man sich sowas mal anschauen kann?
Leider darf ich den Code nicht veröffentlichen, aber im Prinzip baust du 
um dein RAM einen Speichercontroller, der das Schreiben in das RAM und 
die Bedienung des Displays abhandelt.

Es gibt die 8-Bit Graka von Ulrich Radig, der so eine FSM in ein CPLD 
gepackt hat: http://www.ulrichradig.de/home/index.php/cpld/8bit_c_graka

von Kest (Gast)


Lesenswert?

Im Prinzip hast Du 2 FIFOs:
1. Videodaten->FIFO_1 ->SRAM
2. SRAM -> FIFO_2 -> Display

a) Solange FIFO_1 nicht voll -- die Videodaten ins FIFO schreiben
b) Solange FIFO_1 nicht leer -- die Daten aus dem FIFO lesen und ins 
SRAM schreiben.
c) Wenn FIFO_2 nicht voll -- die Daten aus dem SRAM lesen und ins FIFO_2 
schreiben.
d) Wenn FIFO_2 nicht leer -- die Daten aus dem FIFO zum Display 
schreiben.

Das ist die ganze Statemachine, zugegebenermaßen vereinfacht ;-)

Grüße,
Kest

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

> Videodaten-> FIFO_1 ->SRAM
Dieser Weg über einen Fifo ist etwas ungünstig, wenn Daten vom 
uC/Prozessor aus dem Videospeicher ausgelesen werden müssen, z.B. um ein 
XOR auf einem Pixel zu machen...

von sunny (Gast)


Lesenswert?

genau um das prinzip eines solchen ram-controlers ging es mir. der herr 
radig hat da ein schön einfaches konzept.
so was hab ich gesucht. da fehlt jetzt nur noch der kanal in richtung 
uC. das reicht mir als basis für meine experimente vollkommen aus.
vielen dank für eure hilfe.

gruß sunny

von Roman Dietrich (Gast)


Lesenswert?

Hallo zusammen,

Die Idee mit den FIFOs zur Entkopplung zum externen Speicher hab ich 
schon einige Male eingesetzt und kann sowas nur empfehlen.
Da es sich beim eingesetzten FPGA um einen Altera-Chip handelt hab ich 
gedacht, ich kann vielleicht noch ein, zwei Tips geben.

Ich geh im weiteren mal davon aus, dass fuer die SRAM-Ansteuerung die 
passende Altera-Komponente und ein SOPC-System verwendet wird (ansonsten 
kann man den Abschnitt leider einfach ignorieren).
Bei reinem SRAM kann man vielleicht einfach gleichzeitig (gemultiplext) 
zugreifen. Wenn es ein komplizierterer Speicher (z.B. DDR2) ist, so 
bietet es sich an Avalon-Bursts (laengere Schreibzugriffe) 
durchzufuehren, sodass man verhindern kann, dass zu oft umgeschalten 
wird und der Chip an Effizienz verliert.
Wenn man das Auslesen fuer das LCD bevorzugen moechte (sodass es nicht 
stockt) kann man innerhalb des SOPC-Builders noch Arbitrier-Anweisungen 
verteilen, sodass er im Zweifel 4-mal so oft dran kommt.

Unter
http://www.nioswiki.com/Nios2EmbeddedEvaluationKit/Altera's_Video_and_Image_Processing_Suite_Demo_on_the_NEEK
gibt es ein nettes Projekt, das schliesslich ein LCD ansteuert ... es 
ist ein bisschen umfangreich aber vielleicht einen Blick wert.

Hierbei wird noch ein dreifacher Framebuffer eingesetzt, sodass nie ein 
halb-aktualisiertes Bild uebertragen wird => die meisten der 
eingesetzten Komponenten sind Standards von Altera, die man jedoch 
lizensieren muss - kostenlos ausprobieren kann man sie als 
OpenCorePlus-Version jedoch trotzdem mal und hat somit schnell ein 
Ergebnis.

Ich hoffe mal, die Antwort ist nicht ganz am Thema vorbei (mein erster 
Forums-Eintrag).
Auf jeden Fall viel Glueck beim Basteln,

     Roman

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.