Étape 4: Explication du code VHDL
Code VHDL n’est pas comme le code C. En fait, VHDL est un langage de description, avec cette langue, vous pouvez « décrire » comment la puce FPGA doit se comporter. C’est un peu comme un schéma de dessin, mais maintenant vous le faire en mots.
Toplevel
Regardez l’image jointe à cette étape, c’est ce qu’on appelle Toplevel. Sur le toplevel tous les blocs de code individuel peuvent être vu et je vais vous décrire brièvement quelles sont leurs fonctions.
POWER_ON_RESET_CONTROLLER
Ce bloc prend en charge que tous les autres sont correctement réinitialisés lorsque l’alimentation est appliquée au système. Il le fait en un laps de temps à l’aide d’une machine d’État en attente et en attendant il fait il a sortie NOT_POR_RESET faible. Ce signal est connecté à tous les autres blocs et réinitialise le / les empêche de partir jusqu'à ce que cela réinitialiser impulsion est terminée (passant à haut niveau).
Blinkled
Juste ma façon de Bonjour tout le monde, j’utilise ceci pour laisser ma planche indiquent son vivant (en clignotant leds)
clock_divider
Divise l’horloge par 2 et cela alimente à la OV7670 car l’OV7670 ne pouvez pas utiliser le 50MHz de la carte fpga (trop élevée).
datasplitter
Agit comme un tampon de databus bidirectionnelle avec option de type 3state. Pas vraiment encore utilisé, l’écran TFT est uniquement conçu pour, mais il est possible aussi de lire dans les registres de la TFT.
ili9325_16bitcameradata
Ce bloc configure d’abord le TFT il est connecté à (juste après que la remise en marche est terminée). Par exemple, il définit le TFT en mode RGB565. Après que qu’il se met en mode écriture et elle n’est constamment mettre à jour l’affichage TFT (affichage des images de la caméra ou des images de tresholded. Lorsque ce bloc se fait en la configurant signale au bloc suivant qu’il peut commencer sa configuration :
OV7670_sccb_initialisation
Ce bloc a eu beaucoup de travail. La caméra Omnivision (OV7670) doit être configuré après mise sous tension. Par exemple, nous avons besoin régler sa sortie RGB565 mode (ce qui signifie que le facteur R d’un pixel est 5 bits, G est 6 et B 5 nouveau). J’ai choisi ce faire correspondre avec mon TFT ILI9325 qui a la même fonction. Chajid est très similaire à I2C (Protocole I-carré-C, inventé par Philips il y a longtemps). Mais il a ses différences qui m’a pris beaucoup beaucoup d’heures pour obtenir le droit !
image_tresholding
Last but not least. C’est là la véritable magie opère. Le bloc obtient des images de la caméra de OV7670 (pilotée par l’appareil photo HREF et VSYNC lignes qui ensemble indiquent un début + fin de trame (image)). Dans le bloc de la comparaison pour chaque pixel est faite (en temps réel!) avec les caractéristiques de la gamme de pixel que nous recherchons (en l’occurrence lumineux pixels). SW1 est là pour choisir ce qu’il faut voir sur l’écran TFT : images de la caméra normale ou la tresholded. Le bloc d’image_treshold envoie également les lignes VSYNC et HREF de la caméra vers le bloc d’ili9325 qui est nécessaire pour conduire et synchroniser le TFT pour afficher les images.
Donc c’était la description de base de tous les blocs, ceux qui veulent plus de détails je vous invite à jeter un oeil dans les codefiles VHDL pour tous ces blocs.