www.mikrocontroller.net

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


Autor: sunny (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Uwe Bonnes (Gast)
Datum:

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

Autor: sunny (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Kest (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: sunny (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Roman Dietrich (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...
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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.