Monitor VGA y VHDL (parte-1)

Buen dia hoy les comparto una descripcion VHDL (a manera de recordar y no olvidar), la generacion de imagenes en un monitor por el puerto VGA.
El puerto VGA tiene cinco señales "claves para su control": señales de sincronización horizontal y vertical (hsync y vsync), y tres señales de vídeo (para el rojo, verde y azul).
Realizar un controlador de video es relativamente sencillo ya que tenemos que generar estas 5 señales y utilizarlas a nuestras necesidades.

En esta primera parte realizaremos un trazado de pantalla de resolucion 640 por 480 px. Con un reloj de 25Mhz para los contadores que realizaremos en vhdl.

Señal HSYNC(sincronia horizontal).-

display          =  640px  (dato cambiable segun la resolucion que se quiera) NOTA 1
right border   =    16px
retrace           =    96px
left border     =    48px
-----------------------------
TOTAL         =  800 px
Entonces podemos generar la señal Hsync utilizando un contador (count_H) modulo 800 de la siguiente manera:
Hsync=0   cuando  count_H sea mayor a 655 y menor a 752  caso contrario Hsync=1
 

Señal VSYNC(sincronia vertical).-

top border     =    33px
display          =  480px  (dato cambiable segun la resolucion que se quiera) NOTA 1
bottom border=   10px
retrace           =     2px
-----------------------------
TOTAL         =  525 px
Entonces podemos generar la señal Vsync utilizando un contador (count_V) modulo 525 de la siguiente manera:
Vsync=0   cuando  count_V sea mayor a 489 y menor a 492  caso contrario Vsync=1
 

Señales de Video  RGB(rojo,verde,azul).-
por ejemplo cuando hay un "1" en la linea de video R se envia el color rojo (lo mismo para las otras señales), pero esta señal solamente se debe enviar cuando estemos en "display" en el sector visible 640x480 definido antes, NO se deberia de enviar esta señal en los margenes no visibles del monitor.
por este motivo como se ve en los anteriores graficos existe 2 señales adicionales h_video_on y v_video_on, que nos indican cuando estamos trazando la parte visible del monitor.

h_video_on=1
cuando  count_H sea mayor a 0 y menor a 640  caso contrario h_video_on=0
v_video_on=1 cuando  count_V sea mayor a 0 y menor a 480  caso contrario v_video_on=0

Ahora si podremos enviar un color a la pantalla del monitor, siempre y cuando h_video_on y v_video_on sean 1 caso contrario no se enviara datos al RGB.


Descripcion VHDL algo de teoria del vga. mas extendido de lo dicho aqui: monitor vga 

Por el momento esta parte deberias de ser capas de comprenderla ya que aqui esta la clave del exito con monitores vga, este modulo es necesario para poder continuar con la siguiente entrega de este mini tutorial del monitor VGA con VHDL

NOTA 1
Si se cambia la resolucion de pantalla tambien hay que cambiar el clock de los contadores.
Para nuestro caso 640x480  obtenimos que el reloj es de 25 Mhz de esta manera:
800px * 525px * f   para un monitor de frecuencia f=60 Hz
entonces  ->   800x525x60 = 25 Mhz  (aproximadamente)