Forum: FPGA, VHDL & Co. Videospeicher für Spartan 3E


von Matthias K. (Firma: Karl Mayer) (licer)


Lesenswert?

Hi,

Ich muss für eine Studienarbeit einen VGA Bildschirm ansprechen und auf 
diesem eine Benutzeroberfläche mit Maussteuerung realisieren. Jetzt bin 
ich an dem Punkt angelangt, dass ich einen Videospeicher für meine 
VGA-Schnittstelle brauche. Vorgabe ist, dass ich ein Spartan 3E 
Starterkit Board (xc3s500e-5fg320) benutze. Jetzt hab ich allerdings das 
Problem, dass auf dem Board ja nur DDR Ram vorhanden ist und um ehrlich 
zu sein würd ich mich lieber darum drücken diesen zu verwenden. Ich hab 
aber leider keine Idee was ich sonst verwenden könnte. Ich hab jetzt 
zwar schon was vom MIG gehört aber auch da bräuchte ich ja erstmal 
generelle Informationen über DDR Ram.
Generell stell ich mir dass nachher so vor, dass ich zwei 
Speicherbereiche habe. in einem wird geschrieben und aus dem anderen 
wird gelesen. Ist eine Bildschirmseite fertig geschrieben und eine Seite 
fertig gezeichnet werden die Speicher "getauscht" also es wird aus dem 
Speicher gelesen in dem vorher geschrieben wurde und umgekehrt. Daraus 
folgt auch der Wunsch, dass die zwei Speicherbereiche unabhängig von 
einander sind. Das ganze soll in einem 50MHz Takt geschehen. Ich lege 
also sowohl die Daten und Ardesse zum Schreiben als auch zum lesen an 
und beim nächsten Takt hab ich dann einmal die Daten geschrieben und die 
Daten gelesen.

Also:
Hat vielleiht jemand schonmal so einen Block geschrieben und würde ihn 
mir zur verfügung stellen :) wäre mir natürlich am liebsten.
Oder hat jemand ne idee was ich anstelle des DDR Rams verwenden kann.
Naja oder muss ich wohl oder übel mich noch in DDR Ram einarbeiten? Dann 
wäre es ganz hilfreich, wenn jemand ein gutes einsteiger Tutorial zu DDR 
Ram kennt. Ich finde leider meistens nur was zu einbauen in den PC :(.

von Mike (Gast)


Lesenswert?

Der Spartan 3e hat auch internen Speicher (Blockram). Den könntest du 
benutzen. Allerdings hat er nicht sonderlich viel davon. Bei 640x480x1 
würde das gerade mal für eine Seite reichen...

Du könntest das aber auch im Textmodus machen und den Mauszeiger als 
Sprite o.ä. realisieren.

von Matthias K. (Firma: Karl Mayer) (licer)


Lesenswert?

Ja den Blockram hat ich mir auch schon angesehn. Aber es soll schon eine 
Grafische Oberfläche sein auf der mit der Maus Buttons geklickt werden 
können. Und da reicht der Blockram ja leider vorne und hinten nicht... 
Evtl. könnt ich auch aufs Spartan 3 Board umsteigen Dann hätte ich SDRam 
statt DDR Ram. Aber dann würd ich ja wieder Probleme mit dem 
"gleichzeitigen" lesen und schreiben bekommen...

von Gast (Gast)


Lesenswert?

Gleichzeitig lesen und schreiben ist auch nur mit spezieller Hardware 
möglich, SDRAM bzw. DDR bietet diese Möglichkeit nicht (zumindest auf 
dem S3E Board)

Für deine Applikation wirst du ohne Zusatzboard um den DDR-Speicher und 
2 FiFos nicht herumkommen.

DDRX-SDRAM ist auf Wikipedia ganz gut erklärt (habs aber gerade auch nur 
überflogen) und beim MIG wird die Dokumentation miterzeugt, bzw. ist auf 
der Xilinx HP abrufbar. Einfach oben im Suchfeld MIG eingeben.

PS: keine Angst vor dem DDR Ram, der MIG nimmt dir da ziemlich viel 
Arbeit ab (Der FiFo-Gen. übrigens auch)

Gruß und einen schönes WE

von Matthias K. (Firma: Karl Mayer) (licer)


Lesenswert?

Ich will ja auch nur quasi gleichzeitig lesen und schreiben. Aber 
wahrscheinlich werd ich wohl wirklich nicht um den DDR Ram herum kommen.

Danke für die Hilfe

von Morin (Gast)


Lesenswert?

> Aber es soll schon eine Grafische Oberfläche sein auf der mit der Maus Buttons 
geklickt
> werden können.

Als Notfall-Lösung (falls es mit dem DDR-RAM aus irgendeinem Grund nicht 
klappt), bleiben dir trotzdem noch Lösungen mit dem BlockRAM. Damals 
unter DOS gab es auch "graphische" Oberflächen die auf dem Textmodus 
aufgesetzt haben, und im FPGA bist du ja nicht auf irgendwelche 
vorgebauten Graphikmodi beschränkt, kannst also durchaus 
Zwischenlösungen zwischen einem "reinen" Pixelspeicher und einem 
"reinen" Textmodus bauen.

Versuch es aber erstmal mit dem DDR-RAM, das wäre auf jeden fall 
eindrucksvoller.

von Sebastian B. (sfreak) Benutzerseite


Lesenswert?

Hi,

ich habe vor einer Weile einen einfachen Grafikcontroller mit Hilfe des 
wb_ddr Controller von https://roulette.das-labor.org/bzrtrac/wiki/wb_ddr 
geschrieben. wb_ddr ist ein kleiner DDR Controller mit 
WISHBONE-Interface, getrenntem Bus- und Speichertakt. Einen Cache bringt 
er auch mit und ist sehr einfach zu verwenden. Fuer das S3E Starterkit 
ist das ganze auch schon angepasst.

Nebenbei: Der DDR-Controller ist in Verilog geschrieben und mein 
Grafik-Teil war in VHDL. Das laesst sich im Xilinx Webpack zwar 
wunderbar gemeinsam verarbeiten und synthetisieren, aber nicht mit 
Modelsim synthetisieren (die Xilinx-Version ist auf eine Sprache 
beschraenkt). Der ISE-Interne SImulator kommt dagegen auch mit 
gemischten HDLs klar.

Sebastian

von Duke Scarring (Gast)


Lesenswert?

@Matthias Kemper:

Vielleicht hilft Dir das weiter:
http://sourceforge.net/projects/genode-fx/

Duke

von Matthias Kemper (Gast)


Lesenswert?

Hey Danke der WB_DDR ist genau das was ich gesucht habe. Gibt es dazu 
noch eine Anleitung? Ich habe nämlich keine gefunden und da ich mich 
erst seit wenigen Wochen überhaupt mit FPGAs beschäftige(VHDL) werd ich 
aus dem Verilog code nicht schlau.
Um etwas konkreter zu werden: Was machen die Inputs wb_cyc_i, wb_stb_i 
und rot(2:0)? Und kann ich den ddr_clk_fb einfach an den ddr_clk hängen?

von Sebastian B. (sfreak) Benutzerseite


Lesenswert?

Matthias Kemper wrote:
> Hey Danke der WB_DDR ist genau das was ich gesucht habe. Gibt es dazu
> noch eine Anleitung? Ich habe nämlich keine gefunden und da ich mich
> erst seit wenigen Wochen überhaupt mit FPGAs beschäftige(VHDL) werd ich
> aus dem Verilog code nicht schlau.
> Um etwas konkreter zu werden: Was machen die Inputs wb_cyc_i, wb_stb_i
> und rot(2:0)? Und kann ich den ddr_clk_fb einfach an den ddr_clk hängen?

Um das ganze im Detail zu erklaeren fehlt mir im Moment ein bisschen die 
Zeit. Falls beim wb_ddr selbst kein Beipiel dabei ist, schau dir mal 
soc-lm32 an. Das ist ein ziemlich grosses Paket aus 32-Bit Prozessor 
Softcore und einiger Peripherie die ueber WISHBONE angebunden ist. Der 
wb_ddr controller steckt da auch wieder drin. Ist allerdings nen 
ziemlicher Brocken... foerdert vielleicht die Uebersicht zu anfang nicht 
gerade.
Mir hat das Paket aber sehr geholfen da es eine funktionierende 
Demoumgebung fuer das Spartan-3E Starter Kit enthaelt. Die kann man auf 
dem Board ausprobieren oder simulieren und sich die Bustransfers 
angucken.

Ausserdem solltest du dir die Spezifikation zum WISHBONE-Bus auf 
opencores.org ansehen [1]. Dort drin ist (etwas verklausuliert aber 
eindeutig) beschrieben was die verschiedenen Signale machen... wenn du 
dich an diesen Standard haelst kannst du nicht nur wb_ddr verwenden 
sondern auch diverse andere Komponenten von OpenCores.

Schau dir die o.g. Sachen mal an... wenn dann noch Fragen sind kann ich 
mal versuchen zu helfen :-)

Sebastian

[1] Info und Link zur Spec.: 
http://en.wikipedia.org/wiki/Wishbone_(computer_bus)

von Matthias Kemper (Gast)


Lesenswert?

Okay :) Dann hab ich jetzt auf jeden fall mal nen Anhaltspunkt, wo ich 
ansetzen kann. Wenn ich garnicht mehr weiter komm meld ich mich nochmal 
;)

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.