Para un proyecto de pasatiempo personal, estoy buscando hacer una pequeña pantalla vga usando un fpga. Estaba pensando en hacer que la pantalla fuera 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?)
Según mi cálculo, eso significa que necesito leer 640*480*60 bytes de la RAM cada segundo, lo que equivale a 18432000 bytes por segundo, lo que da un tiempo por byte de poco más de 54 ns por píxel.
Estoy mirando un dispositivo como este para mi memoria.
http://uk.farnell.com/cypress-semiconductor/cy62128ell-45sxi/ic-sram-1mb-128kx8-5v-soic32/dp/1650060
La hoja de datos indica que tiene un tiempo de acceso de 45 ns, por lo que entiendo que debería ser lo suficientemente rápido para que mi fpga lea los datos. Pero tendría que actualizarlo durante el período en que no se muestran datos, ya que no es lo suficientemente rápido para completar una lectura y escritura en ese momento.
¿Mis cálculos son correctos y ese dispositivo sería adecuado para usarlo de esta manera? ¿O me perdí algo?
Así es como lo haría...
Comenzaría con un FPGA Xilinx Spartan-6. La razón por la que elegiría esto es porque tienen "núcleos duros" para una interfaz DDR-SDRAM. Por núcleo duro, me refiero a que el circuito para esta interfaz de memoria es un fragmento de lógica dedicado y no en el "tejido de lógica programado por el usuario" normal. Esto significa que va a cumplir con el tiempo y no tiene que escribir esta lógica por su cuenta.
A continuación, conectaría un poco de SDRAM DDR2 a la pieza. DDR2 SDRAM es bastante económico, fácil de obtener y, sin duda, lo suficientemente rápido y grande para lo que desea 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 se trata de mover datos y generar los pulsos de sincronización adecuados.
Una desventaja importante de este enfoque es que básicamente está limitado a usar BGA tanto para la memoria como para la FPGA. Un lado positivo es que hay placas de desarrollo FPGA que ya tienen este circuito.
Es posible que sea mejor usar el bloque de RAM en un buen FPGA, ya que superará fácilmente el rendimiento de la SRAM externa; Además, si desea hacer una PCB, el enrutamiento será crucial con tiempos de reloj de 54 ns. Además, parece ser de solo 5V; ¿Qué FPGA funcionan en 5V? Necesitaría una traducción de nivel lógico, lo que introduciría un retraso en el procesamiento.
Me imagino que necesita 300 KB y los FPGA pueden tener esta cantidad de memoria integrada.
Sugeriría usar un chip de 64Kx16 o dos chips de 128Kx8; eso reduciría la tasa de datos requerida a la mitad, permitiendo alternar accesos 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 ligeramente la velocidad de los accesos a la CPU externa, aún podría obtener la velocidad deseada con un tiempo de acceso de 40 ns si el tiempo de OE es de 20 ns. Cada doce medios ciclos de un reloj de 25 MHz:
Esto permitiría el acceso remoto a la CPU a una velocidad de aproximadamente 4 MHz. No instantáneo, pero no demasiado malo.
Por cierto, si se necesita desplazamiento, podría 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 desplazarse por regiones de la pantalla sin tener que mover muchos datos.
W5VO
W5VO
Juan Burton
W5VO