dispositivo RAM / tiempos para pequeños proyectos VGA

2

Para un proyecto de pasatiempo personal, estoy buscando hacer una pequeña pantalla vga con un fpga. Estaba pensando en hacer que la pantalla sea de 640x480 píxeles con un byte de color por píxel a 60 hz (¿creo que esos tiempos deberían funcionar en cualquier monitor?)

Por mi cálculo, significa que necesito leer 640 * 480 * 60 bytes de la memoria RAM cada segundo, lo que es 18432000 bytes por segundo, lo que da un tiempo por byte de poco más de 54 ns por píxel.

Estoy viendo un dispositivo como este para mi memoria.

enlace

La hoja de datos indica que tiene un tiempo de acceso de 45 ns, por lo que, según tengo entendido, debería ser lo suficientemente rápido para que mi fpga pueda leer los datos. Pero tendría que actualizarlo durante el período en el que no se muestran datos, ya que no es lo suficientemente rápido para completar una lectura y escritura en ese momento.

¿Son correctos mis cálculos, y un dispositivo así sería adecuado para usar de esta manera? ¿O me perdí algo?

    
pregunta John Burton

3 respuestas

2

Así es como lo haría ...

Comenzaría con un Xilinx Spartan-6 FPGA. La razón por la que aceptaría esto es porque tienen "núcleos duros" para una interfaz DDR-SDRAM. Por núcleo duro, quiero decir que el circuito para esta interfaz de memoria es una parte dedicada de la lógica y no en el "tejido programado de la lógica" programado por el usuario. Esto significa que vas a cumplir con el tiempo y no tienes que escribir esta lógica por tu cuenta.

A continuación, conecto un poco de SDRAM DDR2 a la parte. DDR2 SDRAM es bastante económico, fácil de obtener, y ciertamente lo suficientemente rápido y lo suficientemente grande para lo que quiere hacer. Comenzaría con un bus de datos de 16 bits de ancho y lo aumentaría si necesita más velocidad. Puede usar Xilinx CoreGen o Memory Interface Generator para obtener su núcleo de interfaz DDR2.

El resto es "relativamente fácil", ya que solo está moviendo datos y generando los pulsos de sincronización adecuados.

Un aspecto negativo importante de este enfoque es que básicamente está limitado a utilizar BGA tanto para la memoria como para FPGA. Un aspecto positivo es que hay tableros de desarrollo FPGA que ya tienen este circuito en él.

    
respondido por el user3624
5

Podría ser mejor usar el bloque RAM en un buen FPGA ya que superará fácilmente el rendimiento de la SRAM externa; Además, si desea crear una PCB, el enrutamiento será crucial con las 54 horas del reloj. Además, parece ser sólo 5V; ¿Qué FPGAs funcionan en 5V? Necesitará una traducción de nivel lógico, lo que introducirá un retraso en el procesamiento.

Supongo que necesita 300 KB y los FPGA pueden tener esta cantidad de memoria a bordo.

    
respondido por el Thomas O
2

Yo sugeriría usar un chip de 64Kx16 o dos chips de 128Kx8; eso reduciría la velocidad de datos requerida a la mitad, permitiendo accesos alternativos de 40 ns entre la pantalla y la CPU. Si no desea utilizar un bus de datos de 16 bits, y no le importa limitar la velocidad de los accesos a la CPU externa, puede obtener la velocidad deseada con un tiempo de acceso de 40 ns si el tiempo de OE es de 20 ns. Cada doce semiciclos de un reloj de 25MHz:

  1. Dirección de píxel de salida 0-1.
  2. Habilitar OE de bajo byte.
  3. Bloquee los datos del píxel 0, deshabilite OE de bajo byte y habilite OE de alto byte.
  4. Bloquee los datos del píxel 1 y envíe la dirección del píxel 2-3.
  5. Habilitar OE de bajo byte.
  6. Bloquee los datos del píxel 2, deshabilite OE de bajo byte y habilite OE de alto byte.
  7. Bloquee los datos del píxel 3 y emita la dirección del píxel 4-5.
  8. Habilitar OE de bajo byte.
  9. Bloquee los datos del píxel 4, deshabilite OE de bajo byte y habilite OE de alto byte.
  10. Latch pixel 5 data y salida de la dirección de la CPU.
  11. Habilita OE o WE de alto o bajo byte.
  12. Datos de salida en el bus (si se escriben) o datos de cierre al final del ciclo.

Esto permitiría el acceso remoto a la CPU a una velocidad de aproximadamente 4MHz. No es instantáneo, pero no está tan mal.

Por cierto, si se necesita un desplazamiento, puede ser útil tener 960 bytes de memoria que contengan la dirección de inicio para cada una de las 480 líneas de datos de visualización. Esto permitiría desplazar regiones de la pantalla sin tener que desplazarse por muchos datos.

    
respondido por el supercat

Lea otras preguntas en las etiquetas