Paso 5: Salida - HDMI control parte 2
Suficiente teoría, permite llegar a nuestro proyecto. Mientras que en el controlador de VGA consiguió con un reloj de 148,5 MHz, aquí tendremos que dar 10 veces esa frecuencia porque queremos transmitir 8 bits para cada color y utilizando el 8b/10b que codificación se traduce en 10 bits por píxel y 10 * 148.5 MHz = 1485 MHz. Es una frecuencia enorme que no se puede obtener en la Junta de Zybo. Afortunadamente tenemos un par de trucos bajo la manga. Manejamos 5 * 148.5 MHz = 742,5 MHz y usamos una IP OSERDES (serializador) para transmitir datos en el borde de levantamiento y que cae del reloj 742,5 Mhz, por lo que realmente obtendremos datos transmitidos en 1485 MHz. Vivado nos da algunas advertencias de sincronización y siempre se podría ir de baja resolución con un reloj más pequeño, pero ya funciona , realmente no importa por ahora (las advertencias están relacionados con el hecho de que los almacenadores intermediarios del reloj no son compatibles oficialmente con frecuencias superior 464MHz).
Así que lo que tenemos que hacer es codificar los datos de nuestra salida de controlador VGA en formato 8b/10b y luego serializarlo como se mencionó anteriormente. También necesitamos añadir otro MMCM al proyecto para generar el reloj de 742,5 MHz para la serialización.
Os adjunto a continuación los archivos de vhdl para el codificador y el serializador. Debe primero codificar los canales RGB y luego les serialise.
Ejemplo para el canal rojo:
TMDS_encoder_RED: TMDS_encoder
mapa de puerto (clk148, red_channel_8bits, c_red, video_on, encoded_red_10bits);
Serialiser_RED: Serialiser10_1
mapa de puerto (clk148, clk742, encoded_red_10bits, reset, red_serial_1bit);
La entrada "c" para el TMDS_encoder es "00" para rojo y verde "vsync y hsync" para el azul (esta es parte de la especificación de DVI http://goo.gl/hhh8Ge ).