VGA-Doppelpuffer mit Block-RAM

Ich plane für meine Freizeit eine unauffällige Spielekonsole auf Basis des VGA-Signals. Ich habe Teile davon auf Steckbrettern mit vielen Drähten implementiert, aber es ist sehr fehleranfällig, daher mein Wechsel in die FPGA-Welt.

Ziel:

  • Auflösung etwa 240 Spalten x 240 Zeilen und 8 Bit/Pixel.
  • Double Buffering für flüssige Animationen.
  • Micro Nova Quecksilber-FPGA-Board (XC3S200A) und 512 KB externer SRAM.

Fragen:

Was ist der beste Weg, um den doppelten Puffer zu implementieren? Die SRAM-Vorrichtung wäre ein Problem, wenn von dem Signalgeneratorteil kontinuierlich darauf zugegriffen würde, da sie den Schreiberteil zum Setzen von Pixeln sperren würde. Dafür sind die Austastzeiten zu kurz.

Wenn ich mit der Auflösung (132 x 132 @ 8 bpp) runtergehen würde, könnte ich den Block-RAM (288 Kbit oder 36.000 Bytes) nutzen. Gibt es irgendwelche Nachteile oder Probleme, die ich noch nicht sehe, wenn ich den Block-RAM für eine solche Anwendung aufbrauche?

Danke!

Willst du wirklich das Fahrrad erfinden? Es gibt eine Reihe von 8-Bit-Konsolen-/Heim-PC-Standards, die Sie wiederverwenden können und die über eine umfangreiche Softwarebasis verfügen. Werden Sie selbst Software für Ihre Neuentwicklung schreiben?
Sie könnten versuchen, einen Block-RAM als Pixelpuffer zu verwenden und diesen während der Austastperioden in den SRAM zu sprengen. Um die Dinge wirklich zu beschleunigen, könnten Sie 2 Block-RAMs verwenden, einen für die Adresse und einen für den tatsächlichen Pixelwert. Sie könnten diese als FIFOs verwenden, um die Lücken zu schließen, die dadurch entstehen, dass Sie während der aktiven Anzeige nicht schreiben können

Antworten (1)

Der externe SRAM auf dem MicroNova Mercury Board ist schnell – 10 ns Nenngeschwindigkeit – daher sollte es kein Problem geben, mit 50 MB/s (oder mehr) darauf zuzugreifen. Bei einer Rohrate von 25,175 MB/s könnte man locker ein volles VGA-Signal auslesen und hätte trotzdem die Hälfte der Speicherbandbreite zum Schreiben zur Verfügung. Natürlich hat der SRAM nicht genug Platz für zwei 640×480×8-Bit-Puffer, also muss man irgendwo Abstriche machen. Wenn Sie 320 × 240 @ 60 Hz verwenden, müssen Sie im Durchschnitt nur 4,608 MB / s auslesen, sodass mehr als 90% der Speicherbandbreite für das Schreiben von Pixeln und andere Zwecke übrig bleiben.

Ich sehe keine Notwendigkeit, internes BRAM für die Pixelpufferung zu verwenden. Es ist eine Ressource, die Sie für andere Dinge viel nützlicher finden werden, z. B. für die Implementierung der Controller, die die Spiellogik ausführen und die Pixel zeichnen.