Innholdsfortegnelse:

FPGA -reaksjonsspill: 10 trinn
FPGA -reaksjonsspill: 10 trinn

Video: FPGA -reaksjonsspill: 10 trinn

Video: FPGA -reaksjonsspill: 10 trinn
Video: Как добывают самый чистый лед на планете. Мир Наизнанку 13 сезон 10 серия. Эквадор 2024, Juli
Anonim
FPGA Reaction Game
FPGA Reaction Game

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
Materialer
Materialer
Materialer
Materialer

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
Top Level Diagram Black Box Design
Top Level Diagram Black Box Design

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
CLKDel
CLKDel
CLKDel
CLKDel

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

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

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å

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å

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

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

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: