Controlador de vídeo
Introducción
El controlador de vídeo es el responsable de realizar el refresco de señal en una pantalla. Su misión estriba en enviar contínuamente la señal de vídeo adecuada a cada punto de la pantalla. Por consiguiente se recorre contínuamente la pantalla píxel a píxel para ir refrescandola, desde la esquina superior-izquierda a la inferior-derecha
Para realizar el refresco se utiliza una señal de vídeo que consta de 5 señales activas:
Dos son señales compatibles TTL que se utilizan para sincronización del vídeo. Corresponden a los sincronismos horizontal y vertical. La señal de sincronismo horizontal genera un pulso cada fin de línea, como reconocimiento de que la señal de refresco debe ir al principio de la línea siguiente. De la misma forma, la señal de sincronismo vertical genera un pulso cada fin de pantalla, como reconocimiento de que la señal debe volver al punto inicial
Tres son señales analógicas (entre 0.7V y 1V, que controlan el color – señales RGB. La señal RGB controla la fuerza del color que debe aplicarse a cada píxel de la pantalla. Dependiendo del número de bits que se utilice para cada señal, R, G o B, tendremos más profundidad de colores o menos. Así, una señal de vídeo que trabaje con un ancho de flujo de 8 bits opr color, tendrá 2^24 matices de color. En el ejemplo, y para simplificar, se trabajará con una profundidad de 1 bit/color, con lo que se podrán tener 8 colores distintos en pantalla
La forma que toma la señal de vídeo que se envía a la pantalla es independiente de la resolución de la misma, pero el número de ciclos y la frecuencia de trabajo sí son función de la resolución de la misma. Por ello el controlador de vídeo es función de la resolución de la pantalla: 640x480, 800x600, 1024x768, etc.
El sincronismo
En el formato VGA estándard la pantalla contiene 640x480 píxeles, y la señal RGB debe refrescar la pantalla 60 veces/segundo. Además, después de cada refresco se requiere cierto tiempo para llevar el haz de luz al principio de línea. Cuando llega al píxel final de la pantalla, debe volver al punto inicial
Ello se traduce en dos sincronismos a tener en cuenta para la señal
- El sincronismo horizontal. Es el pulso hsync que se envía a la pantalla para sintonizar el refresco de cada línea. Aparte del tiempo necesario para enviar el refresco a cada píxel de la línea, debe considerarse el tiempo adicional de vuelta de la señal al principio de la línea siguiente
Ello se traduce en que, el sincronismo horizontal necesita del siguiente número de ciclos de reloj para· Ciclos active_vídeo: corresponde al refresco de los píxeles de la línea. En el caso de un controlador VGA corresponde a 640 ciclos
· Ciclos front_porch: es el numero de ciclos de reloj de espera desde que se refrescó el último píxel de la línea hasta que se activa el pulso de sincronismo horizontal
. Ciclos sync_pulse: ciclos de reloj que dura el señal de sincronismo
· Ciclos back_porch: ciclos de espera desde la señal de sincronismo hasta que se empieza a refrescar el primer píxel de la siguiente líneaLa señal de color (RGB) que se envía a los píxeles sólo está activa durante el active_video
La siguiente figura resume el ciclo de sincronismo horizontal
- El sincronismo vertical. Es el pulso vsync que se envía a la pantalla para sintonizar el refresco de pantalla. Aparte del tiempo necesario para realizar el refresco de las líneas de la pantalla (igual al ciclo de refresco horizontal multiplicado por el número de líneas), debe considerarse el tiempo adicional de vuelta de la señal al principio de pantalla
De forma similar al ciclo de refresco horizontal, el ciclo de refresco vertical contiene el active_video, el front_porch, el sync_pulse y el back_porchLa siguiente figura resume el ciclo de sincronismo vertical
Por consiguiente, el refresco de pantalla, además de 'pintar' sobre
cada píxel, tiene en cuenta una zona pre y post refresco. Ello se traduce
en que la señal que se debe generar debe tener en cuenta los tiempos
comentados
Para una señal VGA, la siguiente tabla resume estos tiempos:
Si se trabaja con un refresco de 60 refrescos/segundo, se tiene:
El sincronismo horizontal tiene una duración de
#ciclosh = AVh + Preh + Hsync + Posth = 640 + 16 + 96 + 48 = 800 ciclos
El sincronismo vertical tiene una duración de
#ciclosv = AVv + Prev + Vsync + Postv = 480 + 11 + 2 + 31 = 524 ciclos
Con ello, FrecuenciaTrabajoReloj = #refrescos · #ciclosh
· #ciclosv = 60 * 800 · 524 = 25.152 MHz
lo que supone un período de reloj de 39,758 ns
Ésta es la frecuencia típica de trabajo para una controladora de VGA que trabaje a 60 refrescos/segundo
Síntesis del modelo
A partir del funcionamiento del controlador VGA es fácil comprender el modelo que se debe generar
Básicamente, este modelo debe contener los entradas y salidas (de acuerdo con la figura) siguientes:
Entradas:
Salidas:
|
![]() |
El correspondiente modelo VHDL controlador de VGA es
Modelo de test
Un modelo de test para este ejemplo es simple de realizar. Tan sólo se requiere la generación de una señal de reloj: dejar R, G y B a un valor fijo significa que se va a comprobar el refresco pixel a pixel bajo un mismo color para toda la pantalla
La figura siguiente, resultado de la simulación, muestra la evolución de la señal h_sinc (sincronismo horizontal). Puede comprobarse como el conteo del píxel horizontal (pixel_c) se detiene en 639 (es decir, ha contado 640 pulsos, de 0 a 639), momento en el que se ejecuta el pulso de sincronismo (de acuerdo con los tiempos anteriormente comentados). Asímismo, a cada pulso de sincronismo horizontal la señal v:sinv se incrementa, indicando que el refresco continúa en la siguiente línea
La siguiente gráfica muestra el sincronismo vertical. En ella se comprueba que se ejecuta cuando pixel_r llega a 479 (con lo que ha contado 480 ciclos de sincronismo horizontal o, lo que es lo mismo, que ha refrescado 480 líneas de la pantalla)
Puede comprobarse que la simulación ya tiene más entidad que las realizadas hasta el momento. El tener que trabajar con muchos ciclos de reloj para comprobar el funcionamiento del modelo implica considerar bien el código de test que se debe implementar para no perderse en la inmensidad de los datos de salida. En este sentido, este es un buen ejemplo
Un ejemplo de uso
El controlador de VGA presentado puede sintetizarse en cualquier placa de desarrollo que permita la introducción de IPs descritos a nivel VHDL sobre FPGAs (com Altera, Xilinx, etc) y que tenga prevista una salida para pantalla
En concreto, sobre una placa educativa de Altera se ha implementado el siguiente diseño
En la figura se observa una realimentación desde la coordenada del píxel que se está refrescando hacia la entrada de color que permite visualizar una configuración concreta de colores en la pantalla de acuerdo con la programación del módulo diagonales
La codificación de este módulo viene dada por
Es fácil comprobar que su función es mostrar un conjunto de
diagonales de colores en la pantalla
La figura adjunta muestra la correspondiente salida
Bibliografía recomendada
· Altera UP1 prototype developing board reference
· Nathan Ickes. Apuntes por Internet