Avanxe 7 – Aplicación 6: Cámara OV7670 con salida HDMI

Cámara OV7670 con salida HDMI

En este proyecto se utiliza la cámara OV7670 con la tarjeta Avanxe 7 100T* y su imagen de salida se muestra re-escalada por el puerto HMDI a una resolución Full HD.

Importante: Proyecto no disponible para Avanxe 7 35T debido a la capacidad de memoria limitada que posee. Si se desea implementar para serie 35T se deberá modificar el código.

El proyecto fue realizado en Vivado 2018.3 en lenguaje VHDL. En la siguiente figura se muestran los bloques que lo conforman:

 

Bloque “controlador_camara”: Es el encargado de obtener la imagen desde la cámara OV7670 y guardarla en la memoria BRAM del FGPA.

 

Bloque “interfaz_i2c”: Este bloque se encarga de realizar la configuración de los registros internos de la cámara OV7670.

 

Bloque “camara_ram”: Como su nombre indica, en él se infiere una memoria RAM capaz de almacenar una imagen de la cámara con resolución 640 x 360 a 16 bits de color por pixel (RGB 565). Esta RAM es DUAL PORT, por tanto tiene un puerto de entrada y salida de datos y direccionamiento independientes.

 

Bloque “vga_output”: En este bloque se da lectura de los datos almacenados del bloque “cámara_ram” y se generan las señales de video tipo VGA. Aquí se establecen los “timings” de la resolución deseada. En este proyecto se utiliza resolución de 1920 x 1080 a 60 Hz lo cual requiere un reloj de pixel de 150 MHz. Para llenar la pantalla utilizando la imagen de la cámara almacenada en RAM, se realiza un escalado multiplicativo simple con factor de 3. Así la imagen de 640 x 360 de la cámara, será mostrada como una imagen de 1920 x 1080 llenando completamente la pantalla.

 

Bloque “pll_hdmi_1080p”: Inicializa un PLL interno en el FPGA que genera las frecuencias de reloj requeridas para la resolución 1080p.

 

 

Bloque “vga_to_hdmi”: Este bloque contiene la lógica necesaria para transformar las señales VGA del bloque “vga_output” Internamente se utilizan codificadores y serializadores de datos que  transforman los datos del color y sincronía en señales de alta velocidad TMDS requeridos para el puerto HDMI.

 

Los códigos VHDL del bloque “pll_hdmi_1080p” y “vga_to_hdmi” fueron obtenidos y basados de la página HAMSTERWORKS , créditos al ingeniero y usuario de internet Mike Field ‘Hamster’ por su trabajo y dedicación. Para información didáctica y detallada de la interfaz HDMI recomendamos la lectura del Capítulo 16 “VHDL Design of DVI Video Interfaces” del libro “Circuit Design and Simulation with VHDL, second edition” del autor Volnei A. Pedroni.

Menú