![FPGA -reaksjonsspill: 10 trinn FPGA -reaksjonsspill: 10 trinn](https://i.howwhatproduce.com/images/001/image-1368-88-j.webp)
Innholdsfortegnelse:
- Trinn 1: Introduksjon
- Trinn 2: Materialer
- Trinn 3: Black Level Design på toppnivå
- Trinn 4: CLKDivide
- Trinn 5: Skift prosessblokk
- Trinn 6: Finite State Machine
- Trinn 7: Kontrollere skjermprosessblokk med nivå
- Trinn 8: Kontrollere LED -hastighet med nivå
- Trinn 9: Maskinvaremontasje
- Trinn 10: Ha det gøy
2025 Forfatter: John Day | [email protected]. Sist endret: 2025-01-23 15:02
![FPGA Reaction Game FPGA Reaction Game](https://i.howwhatproduce.com/images/001/image-1368-89-j.webp)
Av Summer Rutherford og Regita Soetandar
Trinn 1: Introduksjon
For vårt siste prosjekt for CPE 133 designet vi et reaksjonsspill i VHDL for et Basys3 -brett. Dette spillet kan nærmest sammenlignes med arkadespillet "Stacker" hvor spilleren må slippe blokkene til rett tid. Basys3 -kortet er koblet til et brødbrett, som har vekslende lysdioder. Disse LED -lysene vil skifte med en bestemt frekvens, avhengig av nivået. Dette spillet bruker klokkeavdeleren og det firesifrede 7 -segmentet display, samt en finite state -maskin. Når spilleren aktiverer den riktige bryteren når den midterste LED -lampen lyser, vil spilleren gå videre til neste nivå i spillet, og øke frekvensen av de vekslende lysdiodene. Dette gjør hvert påfølgende nivå vanskeligere enn forrige nivå. Når spilleren lykkes med å slå nivå 7, det høyeste nivået, vil en melding vises på segmentdisplayet, og alle lysdiodene blinker av og på samtidig.
Trinn 2: Materialer
![Materialer Materialer](https://i.howwhatproduce.com/images/001/image-1368-90-j.webp)
![Materialer Materialer](https://i.howwhatproduce.com/images/001/image-1368-91-j.webp)
![Materialer Materialer](https://i.howwhatproduce.com/images/001/image-1368-92-j.webp)
Materialene du trenger er:
- Digilent Basys3 -kort med mikro -USB -kabel
- Brødbrett
- 5 lysdioder
- 5 motstander (vi brukte 220 ohm)
- 11 hoppetråder
- Datamaskin med Vivado
Trinn 3: Black Level Design på toppnivå
![Top Level Diagram Black Box Design Top Level Diagram Black Box Design](https://i.howwhatproduce.com/images/001/image-1368-93-j.webp)
![Top Level Diagram Black Box Design Top Level Diagram Black Box Design](https://i.howwhatproduce.com/images/001/image-1368-94-j.webp)
Som du kan se, begynner vårt blokkdiagram på toppnivå med å hente de nødvendige klokkene fra undermodulen vår, ClkDivide. Disse klokkene er innganger i de forskjellige prosessblokkene. I hovedsak må spillet innse at når en bruker slår på bryteren riktig, må lysdiodene begynne å skifte raskere og displayet må gå opp ett nivå. Blokkediagrammet kan se litt sprøtt ut, men det er fordi det er mange signaler som etableres i en bestemt prosess, og deretter definerer det signalet et annet signal i en annen prosessblokk.
Til slutt er de eneste inngangene spillet tar inngangsklokken på Basys3 -kortet som går på 100 Mhz, syv brytere på Basys3 -kortet og tilbakestillingsknappen. Det som sendes ut er anoden for displayet med syv segmenter, de syv segmentene for displayet og lysdiodene.
Trinn 4: CLKDivide
![CLKDel CLKDel](https://i.howwhatproduce.com/images/001/image-1368-95-j.webp)
![CLKDel CLKDel](https://i.howwhatproduce.com/images/001/image-1368-96-j.webp)
![CLKDel CLKDel](https://i.howwhatproduce.com/images/001/image-1368-97-j.webp)
Denne klokkeskilleundermodulen skapte en tregere klokke avhengig av verdien vi kartla til den i hovedfilen vår. Vi brukte denne submodulen for å bestemme Clk400, PushClk og newlck. Denne submodulen tar en klokke og en 32 bit divider som innganger. En redusert klokke sendes ut. Det er en prosessblokk for skillelinjen og den reduserte klokken. I prosessen er en midlertidig variabel, som vi kalte count, som teller en hver gang en stigende kant av den innlagte klokken treffes. Når den når divisortallet, slo den reduserte klokken seg og tellingen nullstilles.
Trinn 5: Skift prosessblokk
![Skift prosessblokk Skift prosessblokk](https://i.howwhatproduce.com/images/001/image-1368-98-j.webp)
Shift -prosessblokken styrer den vekslende bevegelsen og hastigheten til lysdiodene. I sensitivitetslisten er newclk og Stop -signalene. Stopp forårsaker en kort forsinkelse når brukeren passerer nivået. Hvis Stopp ikke er høy, veksler lysdiodene som normalt basert på hastigheten til ny kl. Dette vekslende mønsteret styres av to variabler: Spor og tell. Count bestemmer hvilken LED som skal være på, mens Track bestemmer om tellingen skal telle opp eller ned. Det er et annet signal, Final, som bare gjelder når nivået er “111”, som indikerer at spilleren har slått spillet. Final veksler mellom 0 og 1 hver klokkekant for å slå LEDene på og av kontinuerlig. Dette er bare et visuelt element for den endelige visningen.
Denne skiftprosessen er det perfekte stedet å starte for dette prosjektet. Hvis du kan få lysdiodene dine til å veksle riktig og konsekvent, så herfra må du bare legge til adferden når du nivellerer!
Trinn 6: Finite State Machine
![Finite State Machine Finite State Machine](https://i.howwhatproduce.com/images/001/image-1368-99-j.webp)
Vi opprettet en Finite State Machine for å diktere oppførselen når inndatabryteren eller tilbakestillingsknappen trykkes. Hver tilstand er et "nivå", og hvis bryteren slås på til feil tid eller nullstilling trykkes, går nivået tilbake til "000". Ellers, hvis bryteren er riktig slått på, beveger nivået seg til den når sluttilstanden, "111" og sluttvisningen vises. FSM er basert på de to prosessblokkene sync_proc og comb_proc. Sync_proc bruker klokken som vi kalte PushClk. Denne klokken styrer hvor raskt den neste tilstanden blir nåværende tilstand. Denne klokken skal være ganske rask; vi valgte en hastighet som var omtrent to ganger raskere enn vår raskeste LED -hastighet.
Vi implementerte denne koden ved å bruke en FSM for nivåene; etter dette prosjektet innså vi imidlertid at en mer effektiv bruk av en FSM kan ha vært å ha en opptellingstilstand, en tilbakestillingstilstand eller en oppholdstilstand. Hvis ingenting blir presset, er det i oppholdstilstanden. Hvis det trykkes på tilbakestilling eller spilleren rotet, er den i tilbakestillingsstatus. Hvis den trykkes riktig, er den i opptellingstilstanden. Det er mange andre måter å bruke en FSM i dette spillet også!
Trinn 7: Kontrollere skjermprosessblokk med nivå
![Kontrollere skjermprosessblokk med nivå Kontrollere skjermprosessblokk med nivå](https://i.howwhatproduce.com/images/001/image-1368-100-j.webp)
Nivå styrer visningsprosessblokken. Variablene i sensitivitetslisten er Nivå, Tilbakestill og Clk400. Displayet med 7 segmenter starter med å vise ‘1’ for første nivå. Det teller opptil 7 hver gang brukeren passerer et nivå for å vise brukeren hvilket nivå de er på. Når brukeren har passert nivå 7, viser den “COOL” for å indikere at spilleren har slått spillet. Denne "COOL" -skjermen går fra en 400 Hz -klokke som vi kalte Clk400. Hvis du trykker på Reset, går displayet tilbake til "1."
Trinn 8: Kontrollere LED -hastighet med nivå
![Kontrollerer LED -hastighet med nivå Kontrollerer LED -hastighet med nivå](https://i.howwhatproduce.com/images/001/image-1368-101-j.webp)
Til slutt kontrollerer Level hastigheten på lysdiodene. Nivå er det eneste signalet i sensitivitetslisten. D1 er signalet som går inn i Clock Divider -prosessen for å få newclk. Hver gang nivået endres, eller staten endres, prosessblokken "Hastighet". Denne prosessen bestemmer verdien av D1. Det er 8 definerte verdier for D1 som vi valgte basert på hvor fort vi ønsket at hvert nivå skulle kjøres. D1 blir mindre hver gang nivået øker slik at newclk kjører raskere.
Trinn 9: Maskinvaremontasje
![Maskinvare montering Maskinvare montering](https://i.howwhatproduce.com/images/001/image-1368-102-j.webp)
Vi koblet brødbrettet til Basys3 med en av pmod -kontaktene. Seks av pmod -portene ble brukt til å koble en mann til mann -kontakt, en for bakken og de fem andre for de 5 lysdiodene. Vi plasserte også en motstand for hver LED. Disse motstandene er 220Ω og forhindrer at lysdiodene blir kortsluttet og brent ut. Selv om hver LED har en viss motstand, er ikke motstanden nok til å hemme spenningen fra kilden.
Trinn 10: Ha det gøy
![](https://i.ytimg.com/vi/O_y9fu1N-9w/hqdefault.jpg)
Dette spillet er veldig enkelt å spille. Spilleren starter helt til høyre bryter 1 på brettet, V17. De må snu bryteren høyt når den midterste LED -lampen er på. De flytter deretter en bryter til venstre og gjør det samme! Hvis spilleren kommer til slutten, vil de ende på den syvende bryteren, W14. Hvis de slår spillet får de se en virkelig morsom avslutningsvisning!
Noe å merke seg er at når du lager dette spillet, er hastighetene helt opp til deg! Hvis hastighetene vi har valgt er for lave, kan du fremskynde den og gjøre den enda mer utfordrende! Det er heller ikke et bestemt antall nivåer. Hvis du vil at den skal ha enda flere nivåer, er det endringer som må gjøres i FSM og prosessblokkene bestemt av nivå, men dette er veldig enkle endringer.
Vi valgte også å bruke brytere på brettet som brukerinngang, men dette er også mulig med en knapp på Basys3 -kortet; knappen vil eliminere behovet for å tilbakestille bryterne hver gang brukeren starter på nytt. Vi brukte først en knapp, men dette forårsaket feil i definisjonen av nivået fordi det ville hoppe flere nivåer hvis to stigende kanter på PushClk ble truffet når knappen ble holdt nede.
Nedenfor er en video som viser hvordan du spiller, går gjennom de fire første nivåene og den endelige visningen.
Hovedfilen for dette prosjektet er inkludert nedenfor.
Kilder
Basys3 referansehåndbok
Inspirasjon til prosjekt - Arduino Stop It -spill
Anbefalt:
FPGA Cyclone IV DueProLogic Controls Raspberry Pi -kamera: 5 trinn
![FPGA Cyclone IV DueProLogic Controls Raspberry Pi -kamera: 5 trinn FPGA Cyclone IV DueProLogic Controls Raspberry Pi -kamera: 5 trinn](https://i.howwhatproduce.com/images/001/image-1646-19-j.webp)
FPGA Cyclone IV DueProLogic Controls Raspberry Pi -kamera: Til tross for at FPGA DueProLogic er offisielt designet for Arduino, skal vi gjøre FPGA og Raspberry Pi 4B kommuniserbare. Tre oppgaver implementeres i denne opplæringen: (A) Trykk samtidig på de to trykknappene på FPGA for å snu vinkelen på
FPGA Cyclone IV DueProLogic - Trykknapp og LED: 5 trinn
![FPGA Cyclone IV DueProLogic - Trykknapp og LED: 5 trinn FPGA Cyclone IV DueProLogic - Trykknapp og LED: 5 trinn](https://i.howwhatproduce.com/images/001/image-1648-12-j.webp)
FPGA Cyclone IV DueProLogic - Trykknapp og LED: I denne opplæringen skal vi bruke FPGA til å kontrollere ekstern LED -krets. Vi skal implementere følgende oppgaver (A) Bruk trykknappene på FPGA Cyclone IV DuePrologic for å kontrollere LED. (B) Flash LED på & av periodisk Video demo Lab
FPGA Cyclone IV DueProLogic Controls Servomotor: 4 trinn
![FPGA Cyclone IV DueProLogic Controls Servomotor: 4 trinn FPGA Cyclone IV DueProLogic Controls Servomotor: 4 trinn](https://i.howwhatproduce.com/images/002/image-3532-21-j.webp)
FPGA Cyclone IV DueProLogic Controls Servomotor: I denne opplæringen skal vi skrive Verilog -kode for å kontrollere servomotor. Servoen SG-90 er produsert av Waveshare. Når du kjøper servomotoren, kan du motta et datablad som viser driftsspenningen, maksimalt dreiemoment og den foreslåtte Pu
DIY VR tredemølle- Basys3 FPGA-Digilent-konkurranse: 3 trinn
![DIY VR tredemølle- Basys3 FPGA-Digilent-konkurranse: 3 trinn DIY VR tredemølle- Basys3 FPGA-Digilent-konkurranse: 3 trinn](https://i.howwhatproduce.com/images/005/image-12116-j.webp)
DIY VR tredemølle- Basys3 FPGA-Digilent-konkurranse: Vil du bygge en VR tredemølle som du kan kjøre skrivebordsprogrammer og spill på? Da har du kommet til rett sted! I konvensjonelle spill bruker du musen og tastaturet til å samhandle med miljøet. Derfor må vi sende
Mojo FPGA Development Board Shield: 3 trinn
![Mojo FPGA Development Board Shield: 3 trinn Mojo FPGA Development Board Shield: 3 trinn](https://i.howwhatproduce.com/images/008/image-23794-j.webp)
Mojo FPGA Development Board Shield: Koble Mojo utviklingskortet til eksterne innganger med dette skjoldet. Brettet er laget av Alchitry. FPGA -er er veldig nyttige