Stap 4: Video Driver
Dit deel van het ontwerp is verantwoordelijk voor de opstelling van de GUI en input golfvormen. Toepassingsgebied golfvormen, trigger niveau lijnen en andere veranderende indicatoren worden opgeslagen in een framebuffer, met elke geheugenadres houden van de waarde van de pixel. Deze framebuffer is een blok ram, die het VGA-stuurprogramma waarden van leest worden verzonden naar de VGA-poort wordt weergegeven op het scherm.
Oorspronkelijk was het scherm gewenst om 640 x 480. Echter, al deze pixelwaarden op te slaan in een blok RAM is niet mogelijk, als de maximale diepte van een blok RAM-geheugen is 262144 (overeenkomt met een adres met 18-bits, 2 ^ 18 = 262144), en 640 x 480 = 307200 pixels. Een compromis werd gemaakt en het scherm zou worden teruggebracht tot 480 x 512, zodat het hele schermbuffer kan worden opgeslagen in een blok RAM-geheugen.
Om te vereenvoudigen later codering, werden de achtergrondafbeelding (raster en contouren van het scherm) op de computer in een afbeeldingseditor getrokken. Een matlab script werd geschreven (meegeleverd) de zwart-wit BMP converteren naar een bestand .coe, dat kan in een blok ram-cel worden voorgeladen. Dit betekent dat de afbeelding al is opgeslagen in het geheugen, en niet hoeft te worden "getrokken" in de code of hardware. Dit is een afzonderlijk blok ram dan de schermbuffer, zodat de twee blok RAMs uitgangen worden uitgevoerd in een aangepaste IP-blok (de bewerker van de kleur) om "besluiten" welke kleur moet worden weergegeven, met toepassingsgebied signalen en indicatoren hebben hogere prioriteit laag over het raster.
-axi_gpio_0: kanaal 1 wordt uitgevoerd. Hiermee bepaalt u de adres gegevens en de inschakelen signalen naar de schermbuffer voor te schrijven. Kanaal 2 wordt ingevoerd. Leest een beetje acknowledge om te bevestigen dat de write-bewerking is voltooid.
-bram_write_controller: neemt een adres, gegevens en inschakelen signaal vanuit een GPIO-module om een blok RAM-geheugen te schrijven. De adres- en data signalen zijn het gewoon gerouteerd via zonder verandering. De complicatie is voorzien van het nl-signaal. Ik was niet zeker hoe lang een schrijven "1" en "0" zou duren vanaf de GPIO (in termen van klokcycli), dus ik wilde om ervoor te zorgen dat het blok wram slechts één keer werd geschreven. Deze schrijven-controller wordt uitgevoerd op de stijgende rand van de de GPIO nl signaal om het maken van een 1 klok breedte inschakelen puls te schrijven inschakelen van de blok ram. Wanneer het proces voltooid is deze puls, kan het acknowledge-signaal worden beweerd hoog om te bevestigen dat het is geschreven.
-signals_buffer1: dit is een 3 bits breed blok ram gebruikt voor het opslaan van de veranderende pixelwaarden op het scherm, zoals de golfvorm, trigger niveau lijn, en spanning/divisie indicator. Elke geheugenadres vertegenwoordigt één pixel. Het adressysteem werkt zodat de top 9 bits zijn de rij van de pixel en de onderkant 9 bits zijn de kolom van de pixel.
-gui_buffer: dit is een 1-bit brede blok ram gebruikt voor het opslaan van de onveranderlijke GUI (raster, overzichten etc) die in via .coe bestand gegenereerd op basis van de afbeelding is geladen. (matlab-script bijgevoegd)
-vga_driver_0: genereert horizontale en verticale sync-signalen voor de VGA-protocol. Genereert kolom en rij waarden die vertegenwoordigen de huidige pixel wordt weergegeven. Deze worden gebruikt om te lezen uit het blok rammen om te lezen van de opgeslagen waarden voor de huidige pixel
-color_processor_0: deze IP beslist welke kleur zal worden weergegeven als een functie van opgeslagen pixelwaarden. Mij troep mijn prioriteiten van hoogste naar laagste als (rode trigger niveau lijn, geel signaal lijn, witte GUI/grid). Waarde van de pixel wordt opgeslagen als een waarde van 3 bits, elke bit vertegenwoordigt een "laag". Hogere prioriteit signalen (zoals de trigger-lijn) moeten worden weergegeven op de "top" laag, terwijl lagere prioriteit signalen (zoals de achtergrond raster) in de "onderste" laag moet.