Hallo, beim (noch konzeptionellen, theoretischen) Design einer FPGA-basierten Schaltung stehe ich vor einem konzeptionellen Problem: Ich möchte externen RAM als Grafikspeicher verwenden. Mittels FPGA bilde ich zwei Komponenten ab, ein System welches den Grafikspeicher füllt, und eine Grafikeinheit, die die Signale auf ein LCD überträgt. Da die Übertragung zum Display (auf Grund der Beschränkungen des entsprechenden Controllers und der seriellen Schnittstelle) sehr langsam ist, möchte ich den Lesevorgang der Grafikeinheit nicht unterbrechen, während gerade von der anderen Einheit geschrieben oder gelesen wird. Habt ihr eine Idee wie ich das am sinnvollsten realisieren kann? Mir schwebt beispielsweise ein vorgeschalteter Puffer vor, der bei sinkender Taktflanke in den Speicher übernommen wird, jedoch stelle ich mir das für die Lesevorgänge als Schwierig vor. Außerdem hat der Baustein nur eine Adress- und Datenleitung... Irgendwie komme ich hier nicht weiter. Ein weiterer Punkt: Das Display kann auch partiell aktualisiert werden, es muss also nicht immer der komplette Bildschirminhalt übertragen werden. Dazu habe ich mir überlegt die beschriebenen Bereiche irgendwie zu flaggen, damit nur die Übertragen werden. Habt ihr dafür einen Ansatz, oder eine bessere Idee? Danke im Voraus!
Funktioniert aber nur mit teuren Bausteinen oder Block-RAM, oder?
Peter Reither schrieb: > Dazu habe ich mir überlegt die beschriebenen Bereiche irgendwie > zu flaggen, damit nur die Übertragen werden. Habt ihr dafür einen > Ansatz, oder eine bessere Idee? Der Ansatz klingt doch gut: ein tag/ flag für die zu übertragenden Bildschirmzeilen und eine State Machine die alle Nase lang mal nachschaut und die Übertragung anwirft. Duke
Peter Reither schrieb: > Mir schwebt beispielsweise ein vorgeschalteter Puffer vor, der > bei sinkender Taktflanke in den Speicher übernommen wird Du bist da viel zu nah dran an den Bäumen und siehst so den Wald nicht mehr... Es ist eigentlich ganz einfach: du brauchst von 2 Seiten aus Zugriff auf 1 RAM. Das kannst du jetzt realisieren, indem du 1. gleichzeitig drauf zugreifst (DP-RAM) oder 2. nacheinander drauf zugreifst (Multiplexer) Die meisten machen es auf die Variante 2, weil genügend schnelles single-Port RAM viel billiger ist, als genügend großese Dual-Port RAM. Also brauchst du einfach "nur" ein doppelt so schnelles RAM, bei dem du in der ersten Hälfte eines "Zyklus" (Pixel, Zeile, Tupel...) die Daten für das Display ausliest, und in der zweiten Hälfte evtl. anstehende Daten hineinschreibst. Peter Reither schrieb: > Das Display kann auch partiell aktualisiert werden, Nenn doch einfach mal Ross&Reiter: Was ist denn das KONKRET für ein Display? Hat das Display selber schon "Intelligenz" (Verwaltung, Speicher...)? Und wenn du schon dabei bist: welches RAM? Wie groß? Und auch: welches FPGA?
Moin, vielleicht sollte man erst mal folgende Weichen stellen: 1) Display hat selbst Memory a) Blit-Buffer Befehle verfügbar? Dann kann Block-RAM genutzt werden. b) Wenn nicht: RAM-Typ und Geschwindigkeit relativ egal. 2) Display hat kein adressierbares Memory, muss synchron refresht werden a) Statisches RAM: Simpel b) DDR o. SDRAM: Eher komplex, Zeilencache für Burst-Transfers nötig. Zu 1)a) gibt es hier ein Beispiel, da wird über eine Soft-CPU ein simples TFT angesteuert: http://tech.section5.ch/news/?p=251 Von 2)b) würde ich wegen der Komplexität eher abraten.
Fitzebutze schrieb: > Von 2)b) würde ich wegen der Komplexität eher abraten. Das ist im SVGA-Core der grlib realisiert. Allerdings braucht man dann auch die entsprechende Busbandbreite. Gerade bei höher Auflösung mit hoher Farbtiefe kann es eng werden. Duke
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.