Doble búfer VGA con bloque RAM

Estoy planeando una consola de juegos discreta para mi propio tiempo libre, basada en la señal VGA. He implementado partes de él en protoboards con muchos cables, pero es muy propenso a errores, por lo que me moví al mundo de FPGA.

Meta:

  • Resolución en torno a 240 columnas x 240 líneas y 8 bits/píxel.
  • Doble búfer para animaciones fluidas.
  • Placa FPGA Micro Nova Mercury (XC3S200A) y SRAM externa de 512 KB.

Preguntas:

¿Cuál es la mejor manera de implementar el doble búfer? El dispositivo SRAM sería un problema cuando se accede continuamente desde la parte del generador de señal, ya que bloquearía la parte del escritor para configurar los píxeles. Los períodos de borrado son demasiado cortos para hacer esto.

Si bajara con la resolución (132 x 132 @ 8 bpp) podría usar el bloque RAM (288 K bits o 36.000 Bytes). ¿Hay alguna desventaja o problema que aún no veo al usar el bloque de RAM para una aplicación de este tipo?

¡Gracias!

¿De verdad quieres inventar la bicicleta? Hay una serie de estándares de consola/PC doméstica de 8 bits que puede reutilizar, que tienen una amplia base de software. ¿Va a escribir software para su nuevo desarrollo usted mismo?
Podría buscar usar un bloque de RAM como un búfer de píxeles y enviarlo a la SRAM durante los períodos de borrado, para acelerar realmente las cosas, podría usar 2 bloques de RAM, uno para la dirección y otro para el valor real del píxel. Puede usarlos como FIFO para ayudar a cubrir los espacios de no poder escribir durante la visualización activa

Respuestas (1)

La SRAM externa en la placa MicroNova Mercury es rápida (velocidad nominal de 10 ns), por lo que no debería haber problemas para acceder a ella a 50 MB/s (o más). Podría leer fácilmente una señal VGA completa a una velocidad bruta de 25,175 MB/s y seguir teniendo la mitad del ancho de banda de la memoria disponible para escritura. Por supuesto, la SRAM no tiene suficiente espacio para dos búferes de 640 × 480 × 8 bits, por lo que tendrá que recortar en alguna parte. Si hace 320 × 240 a 60 Hz, solo necesitará leer 4,608 MB/s en promedio, dejando más del 90 % del ancho de banda de la memoria para la escritura de píxeles y otros fines.

No veo la necesidad de usar BRAM interno para el almacenamiento de píxeles; es un recurso que encontrará mucho más útil para otras cosas, como implementar los controladores que ejecutarán la lógica del juego y dibujarán los píxeles.