Digitalizador VGA con FPGA (entrada, no salida)

Tanta gente ha hecho la producción de una señal VGA con un FPGA que es un proyecto inicial común. Lo que no puedo encontrar es información sobre cómo decodificar una señal VGA con un FPGA, por ejemplo, para capturar un cuadro de video en la memoria. Suponga que no hay nada más que R, G, B, VSYNC, HSYNC para trabajar, sin DDC. Suponga que se puede hacer la conversión de RGB analógico a digital.

VSYNC le brinda la frecuencia de actualización y la cantidad de HSYNC entre cada una le brinda la cantidad de líneas. Digamos que es fácil contar 525 líneas y la frecuencia de actualización es de 60 Hz. Esa parte no es difícil.

¿Cómo decide la cantidad de píxeles en cada fila y, por lo tanto, el reloj de píxeles? ¿Se trata de tratar de ajustar varios valores conocidos (de una tabla como VGA Timing o la especificación VESA DMT) en función de la información conocida (líneas, actualización) y simplemente ver qué casos dan como resultado un HSYNC y un porche delantero/trasero en lugares esperados, dando un reloj de píxeles conocido para usar para muestrear píxeles?

Respuestas (1)

La digitalización de video se realiza mejor con un chip diseñado para ese propósito. Muchos fabricantes tienen chips que contienen ADC de video triple. Estos toman las sincronizaciones analógicas RGB y digitales HS/VS. Generan el reloj de píxeles con un PLL basado en la señal HS, en función de cuántos píxeles por línea desea tener. Por lo tanto, es trabajo del programador identificar el formato de video que podría estar basado en la información proporcionada por el chip y configurar los parámetros para que obtenga la salida que desea para ese formato. Los parámetros de detección disponibles suelen incluir líneas por cuadro, polaridades de sincronización y algún tipo de forma de saber la tasa HS o VS en algunas unidades. Si no hay información de detección disponible del chip, entonces MCU/FPGA necesita analizar las señales de sincronización HS/VS.

Entonces, básicamente, podría tener una lista de formatos en una tabla. Si ve que el video que llega actualmente coincide con alguna entrada en la tabla de formato, entonces ese formato está ingresando. Claro, puede usar cualquier método que desee para la detección, para admitir cualquier formato que desee.

Por ejemplo, si detecta que tiene 525 pulsos HS por pulso VS, las polaridades de sincronización son ambos pulsos negativos, y mide el VS para estar lo suficientemente cerca de 59,94 Hz, o HS está lo suficientemente cerca de 31,46875 kHz, entonces eso debería ser el formato que necesita 800 píxeles por línea para obtener el reloj de píxeles correcto de 25,175 MHz.

También me gustaría señalar que la forma "clásica" de los capturadores de fotogramas autoconstruidos para saber qué formato de video están obteniendo es simplemente especificar la menor cantidad de formatos posible en su EDID, de modo que los dispositivos de generación de video adjuntos no No intentes nada divertido.
Gracias. Estoy principalmente interesado en implementaciones de VGA más antiguas donde no hay EDID, pero creo que será posible elegir el modo correcto de la gama de modos posibles. Supuse, por el proceso de adivinación y resincronización de los monitores, que tenía que ser algo así.