Stap 4: Explenation van de VHDL-code
VHDL wetboek zit niet zoals C-code. VHDL is eigenlijk een beschrijvingstaal, met de taal die u "beschrijven kunt" hoe de FPGA-chip zich dient te gedragen. Is het fundamenteel als een schematische tekening maar nu je het in woorden.
Toplevel
Neem een kijkje op de afbeelding die is gekoppeld aan deze stap, dit heet Toplevel. Op de toplevel alle afzonderlijke codeblokken kunnen worden gezien en zal ik kort beschrijven wat hun functies zijn.
POWER_ON_RESET_CONTROLLER
Dit blok ervoor zorgt dat alle anderen goed wanneer de macht wordt toegepast op het systeem worden gereset. Zij doet dit door een hoeveelheid tijd met behulp van een statusmachine wachten en tijdens het wachten het maakt het NOT_POR_RESET laag heeft output. Dit signaal is aangesloten op alle andere blokken en stelt ze / hen verhindert beginnen totdat dit puls reset is voorbij (gonna op hoog niveau).
Blinkled
Gewoon mijn manier van hello-wereld, ik gebruik deze te laat mijn Raad geven haar leven (door knipperende leds)
clock_divider
De klok worden gedeeld door 2 en voert dit in de OV7670 omdat de OV7670 niet de 50MHz van de fpga-board (te hoog) gebruiken.
datasplitter
Fungeert als een bidirectionele databus buffer met 3state optie. Nog niet echt gebruikt, de TFT is enkel geschreven naar maar het is mogelijk ook lezen uit de TFT-registers.
ili9325_16bitcameradata
Dit blok eerst configureert de TFT is aangesloten (rechts nadat macht op reset is voltooid). Bijvoorbeeld daarin de TFT in RGB565 modus. Na dat het gaat in schrijfmodus en alles wat het doet is voortdurend actualiseren van de TFT weergave (camerabeelden of tresholded beelden. Wanneer dit blok gebeurt signalen configureren het naar het volgende blok dat het zijn configuratie kunt beginnen:
OV7670_sccb_initialisation
Dit blok kostte een hoop werk. De camera van Omnivision wordt (OV7670) moet configureren na het opstarten. We moeten bijvoorbeeld het uitvoer ingesteld op RGB565 modus (wat betekent dat de R-factor van een pixel is 5 bits, G 6 en B 5 weer). Ik koos voor dit zodat het overeenkomt met mijn ILI9325 TFT die dezelfde functie heeft. Sccb is zeer vergelijkbaar met I2C (ik-plein-C, protocol uitgevonden door Philips een lange tijd geleden). Maar er zijn verschillen die kostte me vele vele uren om goed te krijgen!
image_tresholding
Last but not least. Dit is waar de echte magie gebeurt. Het blok krijgt beelden van de camera van de OV7670 (aangestuurd door de camera's HREF en VSYNC lijnen die samen wijzen op een start + einde van frame (afbeelding)). Binnen het blok is de vergelijking voor elke pixel (realtime!) met de kenmerken van het bereik van de pixel dat we zoeken (in dit geval helder pixels) gedaan. SW1 is er om te kiezen wat te zien op de TFT: normale camerabeelden of de beelden van de tresholded. Het image_treshold blok stuurt ook de VSYNC en HREF lijnen van de camera naar het ili9325 blok die vereist is om te rijden en synchroniseren van de TFT om aan te tonen van de beelden.
Dus dit de eenvoudige beschrijving van alle blokken was, wie wil meer details nodig ik uit om eens een kijkje in de VHDL-codefiles voor alle deze blokken.