FPGA Robotics Vision för någon (4 / 5 steg)
Steg 4: Explenation VHDL-kod
VHDL-kod är inte lik C kod. VHDL är faktiskt en beskrivning språk, med detta språk du kan "beskriva" hur FPGA chip bör uppträda. Det är i princip som att rita en schematisk men nu du gör det i ord.
TopLevel
Ta en titt på bilden bifogas detta steg, detta kallas Toplevel. På toplevel alla enskilda kodblock kan ses och jag kommer att kort beskriva vad deras funktioner är.
POWER_ON_RESET_CONTROLLER
Detta block hand tar att alla andra återställs korrekt när kraften är anbringat sig till systemet. Detta sker genom väntar lång tid använder en state-maskin och väntan det gör det har produktionen NOT_POR_RESET låg. Denna signal är ansluten till alla andra block och återställer dem / hindrar dem från att starta tills detta återställa puls är över (kommer till hög nivå).
Blinkled
Bara mitt sätt att hello-world, jag använder detta för att låta min styrelse anger dess alive (genom blinkande lysdioder)
clock_divider
Dividerar klockan med 2 och matar detta till OV7670 eftersom OV7670 inte kan använda den 50MHz från fpga styrelsen (för höga).
datasplitter
Fungerar som en dubbelriktad buss buffert med 3state alternativ. Inte riktigt använt ännu, TFT är endast skriftliga till men är det möjligt att också läsa från TFT registren.
ili9325_16bitcameradata
Detta block först konfigurerar TFT är ansluten till (höger efter makt på återställning är klar). Exempelvis ställer TFT i RGB565 läge. Efter att det går in i skrivläge och allt den gör är ständigt uppdatera vyn TFT (visar antingen kameran eller tresholded bilder. När detta block är gjort signaler och konfigurera det till nästa block att det kan börja sin konfiguration:
OV7670_sccb_initialisation
Detta block tog en hel del arbete. Omnivision Kamera (OV7670) måste konfigureras efter uppstart. Till exempel behöver vi ställa in sin produktion på RGB565 läge (vilket betyder R-faktor på en pixel är 5 bitar, G är 6 och B är 5 igen). Jag valde att göra det matchar med min ILI9325 TFT som har samma funktioner. Sccb påminner mycket om I2C (I-torget-C, protokoll uppfanns av Philips för länge sedan). Men det har sina skillnader som tog mig många många timmar att få rätt!
image_tresholding
Sist men inte minst. Detta är där den verkliga magiskt händer. Blocket får bilder från OV7670 kameran (driven av kamerans HREF och VSYNC linjer som tillsammans visar en start + slutet av RAM (bild)). Inuti blocket görs jämförelsen för varje pixel (realtime!) med kännetecknen av pixel spänna vi leta efter (i detta fall ljusa pixlar). SW1 finns det att välja att se på TFT: vanlig kamera eller tresholded bilder. Image_treshold blocket skickar också raderna VSYNC och HREF av kameran till ili9325 block som krävs för att köra och synkronisera TFT för att visa bilderna.
Så detta var en grundläggande beskrivning av alla block, de som vill ha mer detaljer jag inbjuder att titta i VHDL-codefiles för alla dessa block.