De opdrachten
Zevensegmentendriver
Een herbruikbare driver die de cijfers 0–15 toont op een zevensegmentendisplay met een case-statement, met twee hulpfuncties: alle segmenten omkeren en de bitvolgorde omdraaien. Gecontroleerd met een golfvormsimulatie in Active-HDL.
Stoplicht
Een stoplichtenkruispunt op twee zevensegmentendisplays, waarbij de drie middelste segmenten van elk display rood, geel en groen zijn. We schreven een generieke klokvertraging (een teller die een uitgangsklok omklapt) en combineerden die met de PLL van het bord voor een normale modus van 1 Hz en een testmodus van 5 Hz, met pauze en reset via de schakelaars en knoppen. De toestandsmachine zelf werd door de cursus aangeleverd.
Draaiende segmenten
Een draaiend-lichteffect op de zes displays, gebouwd uit een demultiplexer, een flipflop en een generate-statement dat de trap voor elk segment herhaalt, samen een circulair schuifregister. Schakelaars bepalen de richting en aan/uit, en een knop bevriest het patroon.
VGA-controller
Een VGA-controller die drie gekleurde vakken tekent en twee witte cirkels die over het scherm bewegen en de kleur aannemen van het vak waar ze langs komen. We schreven de horizontale en verticale timingtellers en de tekenfuncties voor rechthoeken en cirkels, en met schakelaars zet je elk vak aan of uit.
Hoe het is gebouwd
- Eerst simuleren, dan testen op hardware. Elk ontwerp is eerst gesimuleerd met een testbench in Aldec Active-HDL, daarna gesynthetiseerd met Intel Quartus en getest op het DE10-Lite-bord. Voor de VGA-opdracht was geen testbench nodig, dus die hebben we direct op een monitor getest.
- Generiek en herbruikbaar. De klokvertraging krijgt de ingangs- en gewenste frequentie als generics en telt inClockFreq / (2 × desiredClock) − 1 ingangsklokken voordat de uitgang omklapt, zodat hetzelfde onderdeel elke klok kan vertragen tot wat nodig is.
- Packages met types en functies. Voor de VGA-opdracht definieerden we types voor coördinaten, rechthoeken en cirkels en functies die bepalen of een pixel binnen een vorm valt, zodat de tekencode leesbaar blijft.
- Opbouw uit het cursusboek. Het circulaire schuifregister volgt de opbouw uit het boek Circuit Design with VHDL, met een generate-statement voor de herhaalde trappen.
- Vastgelegd gedrag van de hardware. Elke opdracht heeft een vastgelegd gedrag voor de schakelaars, knoppen en LED's, bijvoorbeeld pauzeren met een knop en de actieve kloksnelheid tonen op een LED.
Wie wat gebouwd heeft
Dit was een duoproject. De cursus leverde de opdrachten, het bord en een paar bouwstenen aan (bijvoorbeeld de toestandsmachine van het stoplicht en een bit-omdraaifunctie); de rest hebben we zelf geschreven.
Tools
Meer weten over dit project?
Ik loop je graag door het project heen.