Decodificación VGA - Manejo de tolerancias

Actualizar:

El Simulador VGA está listo y funcionando. Puede ir a simular sus propios diseños o simplemente usar el archivo de ejemplo para verlo funcionar. También escribí una publicación de blog para ayudar a cualquiera a comenzar a usarlo para sus propios diseños de VHDL.


Estoy haciendo un simulador VGA o monitor virtual porque Xilinx tarda mucho en sintetizar VHDL (en mi pc, y en general para proyectos grandes). Con este simulador VGA, puedo simplemente ejecutar mi banco de pruebas que registra un archivo mientras se ejecuta en un simulador normal como Isim y luego usar ese archivo de registro en mi simulador VGA para generar los marcos.

El simulador VGA decodifica hsync, vsync y rgb (5 señales principales) para generar los marcos.

¿Hay alguna manera de obtener la resolución o la frecuencia de reloj de píxeles de solo las 5 señales principales? En este momento solo tengo algunos campos de texto que debes ingresar manualmente (ver formulario). Necesito la frecuencia del reloj de píxeles para realizar un seguimiento de en qué píxel está trabajando el sistema.

Campo de texto para resolución y frecuencia de reloj px

Supongo que cada monitor usa 640x480 a 60 Hz como configuración predeterminada para VGA porque no tengo que jugar con nada para que funcione. Entiendo que hay algunos pines EDID y algunas interfaces seriales más nuevas que están especificadas, pero ¿realmente se usan para determinar una resolución diferente o fps/Hz? En los Basys 2 , solo están conectados a tierra.

Mi simulador está funcionando muy bien en este momento, pero no tiene en cuenta el back porchespacio en blanco en la parte superior izquierda y algo cortado en la parte inferior derecha. Esto se debe a que solo busco un flanco ascendente en hsync y vsync y empiezo a capturar. Esto no es un gran problema y es fácil de arreglar, pero no estoy seguro del valor correcto para poner para back porchtrabajar con una variedad de archivos de registro de personas.

Mi diseño VHDL (basado en este diseño ) tiene back porch48 ciclos de reloj y, por ejemplo , este documento dice que debería ser 45, y este dice 48. ¿Cuál es la tolerancia correcta back porcho la forma correcta de sincronizar para evitar estas discrepancias?

Por supuesto, un monitor está diseñado para tener todo esto en cuenta, pero ¿cuáles son las formas adecuadas de lidiar con la tolerancia no solo en el reloj de píxeles, sino también en cuántos ciclos toma cada proceso (porche delantero, porche trasero, resolución, fps)?

Un ejemplo de una discrepancia: mi diseño simplemente divide el reloj de 50 Mhz en el Basys 2 por dos para obtener un reloj de píxel de 25 Mhz para controlar el VGA cuando está especificado a 25.175 hz en todas partes pero, por supuesto, tiene que poner su píxel reloj en el formulario, por lo que no es un problema en este momento para mi diseño.


Aquí hay solo un buen diagrama de tiempo de hsync y vsync (solo una buena referencia):

Temporización VGA

Puede ser útil recordar que en el pasado, el video se producía dirigiendo un haz de electrones. Los pulsos de sincronización eran aproximadamente esos intervalos en los que el haz podía volver a girar hacia la izquierda (HS) o hacia arriba (VS). Los 'pórticos' no son más que un margen para permitir que el haz vuelva al área de visualización visible. Los tiempos de porche básicamente ajustan el centrado de la imagen. Obtenga el tiempo de línea general correcto y puede dividirlo entre los porches y los píxeles activos más o menos como desee.
@JustJeff Sabía que un CRT funcionaba con un haz de electrones y lo escaneaba a través de la pantalla, pero no hizo clic en que la señal que estoy enviando a la pantalla controla explícitamente el circuito analógico en el monitor en lugar de interpretarlo y emitirlo ( el haz es solo la tecnología que ejecuta la pantalla en lugar de un LCD). Cuando cambia la opción de posición en el monitor, esencialmente modifica los back porchvalores y he agregado un par de entradas de rango para que las personas puedan alinear su señal.
@JustJeff: aunque la salida de VGA generalmente se realiza mediante cables separados para las señales de sincronización, no era poco común alimentarlo en monitores que esperan que la sincronización se superponga a la señal "verde". La extracción de sincronización de una señal compuesta requiere que la señal tenga un voltaje estable constante antes del pulso de sincronización; el porche delantero asegura que ese sea el caso. Si VGA no incluyera un porche delantero, los adaptadores de VGA a 3 cables habrían tenido que retrasar la sincronización horizontal para agregar uno.
@JustJeff: el comportamiento "analógico" de los monitores hace posible que los monitores (especialmente los monocromáticos) muestren una variedad de resoluciones "perfectamente", a diferencia de las pantallas LCD que tienen una resolución fija particular y tienen que escalar cualquier otra resolución hacia arriba o hacia abajo.
@supercat: solo trato de darle algo de perspectiva a la situación. A menudo, en la electrónica encontramos interfaces aparentemente extrañas que conservan bits extraños de la tecnología OBE. Gracias por ampliar esto.

Respuestas (1)

EDID se utiliza, entre otras cosas, para consultar al monitor los tiempos que le gustaría. No se utiliza para transmitir ninguna información de vídeo.

Supongo que ha pasado tanto tiempo que nadie lo recuerda, pero los monitores VGA en el pasado tenían ajustes para la ubicación de la imagen en el CRT. Puede moverlo hacia la izquierda o hacia la derecha, hacia arriba o hacia abajo, o escalarlo horizontal o verticalmente. Los monitores más avanzados tenían ajustes adicionales. Esto le permite compensar cualquier sincronización que se haya utilizado, cualquier campo magnético local que pueda estar distorsionando la imagen, etc.

Por supuesto, lo que estos ajustes están haciendo detrás de escena es ajustar los parámetros de tiempo. Eran necesarios porque la señal VGA no dice explícitamente cuánto tiempo de borrado hay. Como habrá notado, existen algunas convenciones generales, y el monitor puede (a través de EDID) anunciar soporte para tiempos particulares, pero no hay ningún requisito de que esos tiempos sean los que se enviarán al monitor.

Lo que puede hacer, y lo que hacen los monitores LCD que todavía tienen interfaces VGA cuando presiona el botón de "ajuste automático", es adivinar cuál podría ser el tiempo de borrado simplemente observando las señales R, G y B. Estos deben ser negros durante el tiempo de borrado, y probablemente no sean negros de otra manera. Por supuesto, alguien podría estar mirando una pantalla negra y este enfoque no funcionará.

Del mismo modo, no creo que haya nada en la señal VGA que te diga cuál es la resolución. Puede adivinarlo buscando los bordes entre los píxeles y cronometrándolos, y esto es nuevamente lo que hacen los monitores LCD. Pero recuerde, VGA es una señal analógica, diseñada para mostrarse en un dispositivo analógico. No tiene el concepto de "píxeles".

Ahh, acabo de mirar y aunque el monitor que estoy usando no tiene perillas, tiene un botón de opciones para ajustar la posición horizontal y vertical, la forma y el zoom. Recuerdo que otros monitores que solía tener tenían perillas, pero eso fue cuando era pequeño y, por supuesto, me dijeron que no me metiera con ellos. Parece que tendré que agregar más campos de texto/entradas de rango para estos parámetros para que las personas puedan ajustar sus marcos. ¡Gracias!