Construyendo un framebuffer

2

Estoy tratando de construir un framebuffer usando un FPGA y una memoria externa. Tengo una CPU de núcleo suave que se ejecuta en el FPGA y también una pequeña parte de la lógica para enviar señales a una pantalla LCD. Mi objetivo es hacer que la CPU renderice / escriba un marco en una pequeña parte de la memoria externa y luego haga que el módulo de escritura de LCD lea desde esa memoria externa.

Mi problema es que la pantalla LCD y el código de escritura están en un cristal - > PLL a 9Mhz y la CPU está en el cristal original a 50Mhz. ¿Tengo que poner la CPU en el PLL también o hay una manera de interconectar la lógica de tal manera que funcione como está?

Especificaciones:

Memoria = > SDRAM @ ??? Mhz

CPU = > NIOS II @ 50Mhz

LCD = > Sharp 480x272 @ 9Mhz

FPGA = > Ciclón III

    
pregunta pdel

2 respuestas

3

Tendrías que configurar registros de sincronización a través de los límites del reloj. Y como los relojes están desfasados entre sí, siempre existe la posibilidad de metastabilidad, pero supongo que los FPGA no son muy susceptibles a la metastabilidad.

Le sugeriría que ejecute su CPU en un múltiplo "fácil" de 9 MHz, quizás 9 x 4 = 36 MHz o 9 x 8 = 72 Mhz y divida el reloj de 9 MHz a la pantalla LCD desde allí. Sería mucho más fácil y confiable. Los relojes estarían alineados en fase entre sí; ninguna posibilidad de metastabilidad, nunca, y reglas de diseño sincrónicas normales podrían ser utilizadas. Te sugiero que lo consideres.

    
respondido por el PkP
2

Recomendaría usar un FIFO asíncrono para la sincronización. Escriba un módulo que se ejecute a 9 MHz y extraiga datos del FIFO para enviarlos a la pantalla. Es posible que deba enviar algunas señales de banda lateral a través de la FIFO, así como los datos, para que el código de la interfaz sepa dónde comienzan el marco y las filas. Luego, escriba otro fragmento de código que leerá los datos del cuadro de la memoria y escríbalos en el FIFO, deteniéndose cuando el FIFO esté lleno. Este código se ejecutaría en el mismo dominio de reloj que la CPU principal para eliminar cualquier problema de sincronización entre los dos.

    
respondido por el alex.forencich

Lea otras preguntas en las etiquetas