Paso 4: Razon del código VHDL
Código VHDL no es como el código de C. Realmente el VHDL es un lenguaje de descripción, con este lenguaje se puede "describir" cómo debe comportarse el chip FPGA. Es básicamente como un esquema de dibujo pero ahora lo haces en palabras.
Nivel superior
Echa un vistazo a la imagen adjunta a este paso, esto se llama nivel. En el nivel superior se pueden ver todos los bloques de código individuales y describiré brevemente cuáles son sus funciones.
POWER_ON_RESET_CONTROLLER
Este bloque se encarga de que todos los demás se reinician correctamente cuando se aplica la alimentación al sistema. Lo hace por una cantidad de tiempo usando una máquina de estado a la espera y la espera se hace tiene salida NOT_POR_RESET bajo. Esta señal está conectada a todos los otros bloqueos y los restablece / les impide iniciar hasta que este reset pulso es largo (va a alto nivel).
Blinkled
A mi forma de Hola mundo, usar esto para dejar mi Consejo indicar su vivo (parpadea el LED)
clock_divider
Se divide el reloj por 2 y esto a la OV7670 porque el OV7670 no puede utilizar lo 50MHz de la tarjeta fpga (demasiado alta).
datasplitter
Actúa como un amortiguador de cable bidireccional con 3state opción. No todavía, sólo se escribe en el TFT pero es posible también leer de los registros TFT.
ili9325_16bitcameradata
Este bloque primero configura el TFT se conecta a (a la derecha después de que termine el power RESET). Por ejemplo establece el TFT en modo RGB565. Después de eso él entra en modo de escritura y todo lo que hace es actualizar constantemente la vista TFT (mostrando imágenes de la cámara o imágenes tresholded. Cuando este bloque es configurarlo señales al siguiente bloque que puede comenzarla configuración:
OV7670_sccb_initialisation
Este bloque tuvo mucho trabajo. La cámara Omnivision (OV7670) debe configurarse después de encender. Por ejemplo necesitamos ajustar su salida a RGB565 modo (es decir, el factor R de un píxel es de 5 bits, G es 6 y B es 5 otra vez). Elegí esta para hacerla coincidir con mi TFT ILI9325 que tiene la misma característica. SCCB es muy similar a I2C (I-Plaza-C, protocolo inventado por Philips hace mucho tiempo). Pero tiene sus diferencias que me llevaron muchas muchas horas a hacer bien!
image_tresholding
Por último pero no menos importante. Es donde ocurre la magia real. El bloque obtiene imágenes desde la cámara OV7670 (impulsada por HREF y VSYNC líneas la cámara juntos indican un inicio + extremo del bastidor (imagen)). Dentro del bloque de la comparación para cada pixel se realiza (en tiempo real!) con las características de la gama de píxeles que buscamos (en este caso brillantes píxeles). SW1 es elegir qué ver en el TFT: imágenes de una cámara normal o las imágenes de tresholded. El bloque de image_treshold también envía las líneas VSYNC y HREF de la cámara al bloque ili9325 que es necesaria para manejar y sincronizar el TFT para mostrar las imágenes.
Así que esto era la descripción básica de los bloques, aquellos que quieren más detalles invito a echar un vistazo en el codefiles VHDL para estos bloques.