Indholdsfortegnelse:
- Trin 1: Introduktion
- Trin 2: Materialer
- Trin 3: Diagram med sort kasse på øverste niveau
- Trin 4: CLKDivide
- Trin 5: Skift procesblok
- Trin 6: Finite State Machine
- Trin 7: Kontrol af displayprocesblok med niveau
- Trin 8: Kontrol af LED -hastighed med niveau
- Trin 9: Hardware -samling
- Trin 10: God fornøjelse
Video: FPGA -reaktionsspil: 10 trin
2024 Forfatter: John Day | [email protected]. Sidst ændret: 2024-01-30 08:28
Af Summer Rutherford og Regita Soetandar
Trin 1: Introduktion
Til vores sidste projekt for CPE 133 designede vi et reaktionsspil i VHDL til et Basys3 -bord. Dette spil kan nærmest sammenlignes med arkadespillet "Stacker", hvor spilleren skal tabe blokkene på det rigtige tidspunkt. Basys3 -kortet er forbundet til et brødbræt, som har de skiftende lysdioder. Disse LED -lys skifter med en bestemt frekvens, afhængigt af niveauet. Dette spil bruger urdeleren og det 4 -cifrede 7 -segment display, samt en finite state -maskine. Når spilleren aktiverer den korrekte switch, når den midterste LED lyser, går spilleren videre til det næste niveau i spillet og øger frekvensen af de skiftende LED'er. Dette gør hvert successive niveau sværere end det foregående niveau. Når spilleren med succes slår niveau 7, det højeste niveau, vises der en meddelelse på segmentdisplayet, og alle LED'er blinker samtidigt til og fra.
Trin 2: Materialer
De materialer, du skal bruge, er:
- Digilent Basys3 -kort med mikro -USB -kabel
- Brødbræt
- 5 lysdioder
- 5 modstande (vi brugte 220 ohm)
- 11 springtråde
- Computer med Vivado
Trin 3: Diagram med sort kasse på øverste niveau
Som du kan se, starter vores blokdiagram på øverste niveau med at hente de nødvendige ure fra vores submodul, ClkDivide. Disse ure er input til de forskellige procesblokke. I det væsentlige skal spillet erkende, at når en bruger tænder kontakten korrekt, skal lysdioderne begynde at skifte hurtigere, og displayet skal op et niveau. Blokdiagrammet ser måske lidt skørt ud, men det er fordi der er mange signaler, der etableres i en bestemt proces, og derefter definerer det signal et andet signal i en anden procesblok.
I sidste ende er de eneste input, spillet tager, input -uret på Basys3 -kortet, der kører på 100 Mhz, syv switche på Basys3 -kortet og reset -knappen. Det, der udsendes, er anoden til det syv segment display, de syv segmenter til displayet og LED'erne.
Trin 4: CLKDivide
Denne uropdeler -submodul skabte et langsommere ur afhængigt af den værdi, vi har tilknyttet det i vores hovedfil. Vi brugte denne submodul til at bestemme Clk400, PushClk og newlck. Denne submodul tager et ur og en 32 bit divider som input. Et sænket ur udsendes. Der er en procesblok til skillelinjen og det sænkede ur. I processen er en midlertidig variabel, som vi kaldte count, der tæller en hver gang en stigende kant af det indførte ur bliver ramt. Når det når divisortallet, skiftede det sænkede ur og tællingen nulstilles til nul.
Trin 5: Skift procesblok
Shift -procesblokken styrer lysdiodernes skiftende bevægelse og hastighed. På følsomhedslisten er newclk og Stop signaler. Stop forårsager en kort forsinkelse, når brugeren passerer niveauet. Hvis Stop ikke er højt, skifter lysdioderne som normalt baseret på hastigheden på newclk. Dette vekslende mønster styres af to variabler: Track and count. Count bestemmer hvilken LED der skal være tændt, mens Track bestemmer om count skal tælle op eller ned. Der er et andet signal, Final, der kun gælder, når niveauet er "111", hvilket indikerer, at spilleren har slået spillet. Final skifter mellem 0 og 1 hver urkant for at tænde og slukke lysdioderne kontinuerligt. Dette er blot et visuelt element til den endelige visning.
Denne skiftproces er det perfekte sted at starte for dette projekt. Hvis du kan få dine lysdioder til at skifte korrekt og konsekvent, så skal du herfra bare tilføje adfærd, når du nivellerer!
Trin 6: Finite State Machine
Vi skabte en Finite State Machine til at diktere adfærden, når der trykkes på inputkontakten eller nulstillingsknappen. Hver tilstand er et "niveau", og hvis kontakten tændes på det forkerte tidspunkt eller der trykkes på nulstilling, vender niveauet tilbage til "000." Ellers, hvis kontakten er korrekt tændt, bevæger niveauet sig, indtil det når den endelige tilstand, "111", og slutvisningen vises. FSM er baseret på de to procesblokke sync_proc og comb_proc. Sync_proc bruger det ur, som vi kaldte PushClk. Dette ur styrer, hvor hurtigt den næste tilstand bliver den nuværende tilstand. Dette ur skal være ret hurtigt; vi valgte en hastighed, der var cirka to gange hurtigere end vores hurtigste LED -hastighed.
Vi implementerede denne kode ved hjælp af en FSM til niveauerne; efter dette projekt indså vi imidlertid, at en mere effektiv brug af en FSM kunne have været at have en optællingstilstand, en nulstillingstilstand eller en opholdstilstand. Hvis der ikke trykkes på noget, er det i opholdstilstand. Hvis der trykkes på nulstilling eller afspilleren ødelægger, er den i nulstillingstilstand. Hvis den trykkes korrekt, er den i optællingstilstanden. Der er også mange andre måder at bruge en FSM i dette spil!
Trin 7: Kontrol af displayprocesblok med niveau
Niveau styrer displayprocesblokken. Variablerne i følsomhedslisten er Niveau, Nulstil og Clk400. Displayet med 7 segmenter starter med at vise '1' for det første niveau. Det tæller op til 7, hver gang brugeren passerer et niveau for at vise brugeren, hvilket niveau de er på. Når brugeren har passeret niveau 7, viser den “COOL” for at angive, at spilleren har slået spillet. Denne “COOL” display kører ud af et 400 Hz ur, som vi kaldte Clk400. Hvis der trykkes på Reset, går displayet tilbage til “1.”
Trin 8: Kontrol af LED -hastighed med niveau
Endelig kontrollerer Level hastigheden på lysdioderne. Niveau er det eneste signal i følsomhedslisten. D1 er det signal, der går ind i Clock Divider -processen for at få newclk. Hver gang niveau ændres, eller staten ændres, blokerer procesblokken "hastighed". Denne proces bestemmer værdien af D1. Der er 8 definerede værdier af D1, som vi valgte baseret på, hvor hurtigt vi ønskede, at hvert niveau skulle køre. D1 bliver mindre for hver gang niveauet stiger, så newclk kører hurtigere.
Trin 9: Hardware -samling
Vi sluttede brødbrættet til Basys3 med et af pmod -stik. Seks af pmod -portene blev brugt til at tilslutte et han -til -han -stik, en til jord og de andre fem til de 5 lysdioder. Vi placerede også en modstand for hver LED. Disse modstande er 220Ω og forhindrer lysdioderne i at blive kortsluttet og brændt ud. Selvom hver LED har en vis modstand, er modstanden ikke nok til at hæmme spændingen fra kilden.
Trin 10: God fornøjelse
Dette spil er meget let at spille. Spilleren starter på kontakten yderst til højre 1 på brættet, V17. De skal vende kontakten højt, når den midterste LED er tændt. De flytter derefter en kontakt til venstre og gør det samme! Hvis spilleren gør det til enden, ender de på den syvende switch, W14. Hvis de slår spillet, får de se et virkelig sjovt slutdisplay!
Noget at bemærke er, at når du opretter dette spil, er hastighederne helt op til dig! Hvis de hastigheder, vi har valgt, er for langsomme, er du velkommen til at fremskynde det og gøre det endnu mere udfordrende! Der er heller ikke et bestemt antal niveauer. Hvis du vil få det til at have endnu flere niveauer, er der ændringer, der skal foretages i FSM og procesblokkene bestemt af niveau, men det er meget enkle ændringer.
Vi valgte også at bruge kontakter på kortet som brugerinput, men dette er også muligt med en knap på Basys3 -kortet; knappen fjerner behovet for at nulstille kontakterne hver gang brugeren starter forfra. Vi brugte oprindeligt en knap, men dette forårsagede fejl i definitionen af niveauet, fordi det ville hoppe flere niveauer, hvis to stigende kanter på PushClk blev ramt, når knappen blev holdt nede.
Nedenfor er en video, der demonstrerer, hvordan man spiller, gennemgår de første 4 niveauer og det sidste afsluttende display.
Hovedfilen til dette projekt er inkluderet nedenfor.
Kilder
Basys3 reference manual
Inspiration til projekt - Arduino Stop It -spil
Anbefalede:
FPGA Cyclone IV DueProLogic Controls Raspberry Pi -kamera: 5 trin
FPGA Cyclone IV DueProLogic Controls Raspberry Pi -kamera: På trods af at FPGA DueProLogic er officielt designet til Arduino, vil vi gøre FPGA og Raspberry Pi 4B overførbare. Tre opgaver implementeres i denne vejledning: (A) Tryk samtidigt på de to trykknapper på FPGA for at vende vinklen på
FPGA Cyclone IV DueProLogic - Trykknap og LED: 5 trin
FPGA Cyclone IV DueProLogic - Trykknap og LED: I denne vejledning skal vi bruge FPGA til at styre eksternt LED -kredsløb. Vi skal gennemføre følgende opgaver (A) Brug trykknapperne på FPGA Cyclone IV DuePrologic til at styre LED. (B) Flash LED tændt & fra periodisk Video demo Lab
FPGA Cyclone IV DueProLogic Controls Servomotor: 4 trin
FPGA Cyclone IV DueProLogic Controls Servomotor: I denne vejledning skal vi skrive Verilog -kode til styring af servomotor. Servoen SG-90 er fremstillet af Waveshare. Når du køber servomotoren, modtager du muligvis et datablad, der viser driftsspændingen, det maksimale drejningsmoment og det foreslåede Pu
DIY VR løbebånd- Basys3 FPGA-Digilent konkurrence: 3 trin
DIY VR løbebånd- Basys3 FPGA-Digilent konkurrence: Vil du bygge en VR løbebånd, hvor du kan køre dine desktop applikationer og spil? Så er du kommet til det rigtige sted! I konventionelle spil bruger du musen og tastaturet til at interagere med miljøet. Derfor skal vi sende
Mojo FPGA Development Board Shield: 3 trin
Mojo FPGA Development Board Shield: Tilslut dit Mojo Development Board til eksterne input med dette skjold. Hvad er Mojo Development Board? Mojo Development Board er et udviklingsbord baseret på Xilinx spartan 3 FPGA. Tavlen er lavet af Alchitry. FPGA'er er meget nyttige