Interfaz VHDL SRAM Controller

1

Estoy diseñando un controlador VGA en VHDL y para la memoria de video decidí usar memoria SRAM . Para administrar la RAM, creé un controlador que debe estar conectado con el controlador VGA. Hasta ahora siempre he programado con lenguajes secuenciales y, por lo tanto, tengo algunos problemas para interconectar los dos controladores. Por ejemplo: escribir un dato en la SRAM toma un tiempo T y cuando el controlador finaliza la operación, se dispara una señal READY. ¿Cómo me aseguro de que el controlador VGA espere esta señal? Por lo que he visto, la instrucción WAIT de VHDL no se puede sintetizar.

    
pregunta Martin Thompson

2 respuestas

1

Simplemente cuenta los ciclos. No hay tal "tiempo" en el diseño sintetizable. Usted tiene N ciclos para escribir más la hoja de datos le dirá a K ciclos que esperen. Eso es todo, usa un contador hasta que llegue N + K.

    
respondido por el Socrates
1

Usted indicó que está diseñando el controlador VGA y la interfaz SRAM. Te sugiero que abandones la señal de "listo". Generar video no es como solicitar un sector de disco o algo; cuando es el momento para el siguiente píxel, es el momento para el siguiente píxel, si el sistema de memoria está listo o no . Si su controlador VGA está esperando una señal de "listo", y no está propagando el siguiente píxel en la sección de salida, obtendrá al menos un problema técnico en la pantalla, b / c el haz de electrones (metafóricamente hablando) no es va a parar Peor aún, si insistes en generar todos los N píxeles en una línea (y deberías), y suficientes de ellos se deslizan así, y la sincronización en toda la línea se soplará hasta el punto en que el monitor perderá la sincronización horizontal.

Ciertamente, hay muchos sistemas en los que el tiempo de acceso a la memoria no es determinista, y tiene que confiar en señales "listas", pero la generación de video no es ese tipo de problema. Por lo general, el tiempo de acceso a la memoria depende de la velocidad de píxeles. Si necesita un nuevo píxel cada 25 ns, por ejemplo, luego, cada 25 ns hace dos cosas simultáneamente: (1) bloquea los datos y (2) actualiza la dirección del búfer. Pero la memoria RAM tiene que ser significativamente más rápida que este tiempo de píxel. De las 25 ns, tiene que deducir el tiempo de configuración para el bloqueo de datos, el tiempo de espera para el mismo y el tiempo para que se asiente la dirección del búfer. Si su cerrojo necesita datos estables para 5 ns antes del límite del reloj y 3 ns después, eso significa que la RAM debe ser más rápida que 25-5-3, es decir, 17 ns o más.

Puede obtener algo de alivio del tiempo dependiendo de lo que defina como un píxel. Si pretende generar solo píxeles en blanco y negro, y tiene una memoria de 8 bits de ancho, y necesita un píxel cada 25 ns, entonces solo necesita un acceso de memoria cada 200 ns. Si puede capturar N píxeles de datos por acceso, solo necesita un acceso cada N ° tiempo de píxeles.

Ahora mencionaste escribiendo en la memoria. Si estás generando un video, esa es una propuesta de solo lectura. De modo que deduzco que intentas alterar dinámicamente el búfer de vídeo de alguna manera. Esto significa que ahora tiene dos fuentes de acceso a la memoria RAM. A menudo, las personas lanzan una memoria RAM de doble puerto en el problema. Al carecer de doble puerto, debe arbitrar quién tiene acceso a la memoria RAM del búfer de video. Puede dejar que el escritor tenga prioridad, en cuyo caso obtendrá errores técnicos si el escritor escribe durante el área de escaneo activa, o puede intentar sincronizar los accesos, lo que reduce el tiempo de respuesta requerido a la mitad nuevamente.

La conclusión es que realmente no desea una 'espera' en su interfaz VGA / RAM, porque el monitor no va a esperar, mostrará algo cuando aparezca el siguiente el tiempo de píxel llega, pase lo que pase.

    
respondido por el JustJeff

Lea otras preguntas en las etiquetas