Kazalo:

Reakcijska igra FPGA: 10 korakov
Reakcijska igra FPGA: 10 korakov

Video: Reakcijska igra FPGA: 10 korakov

Video: Reakcijska igra FPGA: 10 korakov
Video: NOGOMETNA TEHNIKA I REAKCIJSKA SVJETLA, HEKSA OBRUČ I LUK 2024, Julij
Anonim
Reakcijska igra FPGA
Reakcijska igra FPGA

Avtor: Summer Rutherford in Regita Soetandar

1. korak: Uvod

Za naš končni projekt za CPE 133 smo oblikovali reakcijsko igro v VHDL za ploščo Basys3. To igro lahko najbolj primerjamo z arkadno igro "Stacker", kjer mora igralec ob pravem času izpustiti bloke. Plošča Basys3 je povezana s ploščo, ki ima izmenične LED. Te LED luči se bodo menjavale pri določeni frekvenci, odvisno od stopnje. Ta igra uporablja delilnik ure in 4 -mestni 7 -segmentni zaslon ter končni avtomat. Ko igralec aktivira pravilno stikalo, ko zasveti srednja LED, bo igralec napredoval na naslednjo stopnjo igre in povečal frekvenco izmeničnih LED. Zaradi tega je vsaka naslednja stopnja težja od prejšnje. Ko predvajalnik uspešno premaga najvišjo stopnjo 7, se na segmentnem zaslonu prikaže sporočilo in vse LED -diode hkrati utripajo in vklapljajo.

2. korak: Materiali

Materiali
Materiali
Materiali
Materiali
Materiali
Materiali

Materiali, ki jih boste potrebovali, so:

  • Plošča Digilent Basys3 s kablom mikro USB
  • Ogledna plošča
  • 5 LED
  • 5 uporov (uporabili smo 220 ohmov)
  • 11 mostičnih žic
  • Računalnik z Vivadom

3. korak: Zasnova črne škatle na diagramu najvišje ravni

Diagram najvišje ravni Oblikovanje črne škatle
Diagram najvišje ravni Oblikovanje črne škatle
Diagram najvišje ravni Oblikovanje črne škatle
Diagram najvišje ravni Oblikovanje črne škatle

Kot lahko vidite, se naš blokovni diagram na najvišji ravni začne z pridobivanjem potrebnih ur iz našega podmodula ClkDivide. Te ure so vložki v različne procesne bloke. V bistvu se mora igra zavedati, da se morajo LED -diode, ko uporabnik pravilno vklopi stikalo, začeti menjati hitreje in prikaz se mora dvigniti za eno raven. Blokovni diagram je lahko videti nekoliko nor, vendar je to zato, ker je v določenem procesu vzpostavljenih veliko signalov, nato pa ta signal definira drug signal v drugem bloku procesa.

Na koncu je edini vhod, ki ga igra vnese, vhodna ura na plošči Basys3, ki deluje pri 100 Mhz, sedem stikal na plošči Basys3 in gumb za ponastavitev. Izhod je anoda za sedem segmentni zaslon, sedem segmentov za zaslon in LED.

4. korak: CLKDivide

CLKDivide
CLKDivide
CLKDivide
CLKDivide
CLKDivide
CLKDivide

Ta podmodul delilnika ure je ustvaril počasnejšo uro, odvisno od vrednosti, ki smo jo preslikali v naši glavni datoteki. Ta podmodul smo uporabili za določanje Clk400, PushClk in newlck. Ta podmodul za vhod uporablja uro in 32 -bitni delilnik. Pojavi se upočasnjena ura. Za delilnik in upočasnjeno uro obstaja procesni blok. V tem procesu je začasna spremenljivka, ki smo jo poimenovali count, ki šteje eno vsakič, ko pritisnemo naraščajoči rob vnesene ure. Ko doseže številko delitelja, se upočasnjena ura preklopi in štetje se ponastavi na nič.

5. korak: Prestavite procesni blok

Blok procesa premika
Blok procesa premika

Procesni blok Shift nadzoruje izmenično gibanje in hitrost LED. Na seznamu občutljivosti sta signala newclk in stop. Stop povzroči kratko zakasnitev, ko uporabnik preide raven. Če Stop ni visok, se LED diode zamenjajo kot običajno glede na hitrost newclk. Ta izmenični vzorec nadzirata dve spremenljivki: Sledenje in štetje. Count določa, katera LED mora biti prižgana, Track pa, ali naj šteje gor ali dol. Obstaja še en signal, Final, ki velja le, če je raven "111", kar kaže, da je igralec premagal igro. Končno se izmenjuje med 0 in 1 na vsakem robu ure, da neprekinjeno vklopi in izklopi LED. To je le vizualni element za končni prikaz.

Ta premik je idealen kraj za začetek tega projekta. Če lahko nastavite, da se vaše LED diode pravilno in dosledno izmenjujejo, morate od tu le dodati vedenje!

6. korak: Stroj končnega stanja

Končni državni stroj
Končni državni stroj

Ustvarili smo stroj za končno stanje, ki določa vedenje, ko pritisnete vhodno stikalo ali gumb za ponastavitev. Vsako stanje je "raven" in če se stikalo vklopi ob napačnem času ali pritisne ponastavitev, se raven vrne nazaj na "000". V nasprotnem primeru, če je stikalo pravilno vklopljeno, se raven premakne navzgor, dokler ne doseže končnega stanja, “111” in pojavi se zaključni prikaz. FSM temelji na dveh procesnih blokih sync_proc in comb_proc. Sync_proc uporablja uro, ki smo jo poimenovali PushClk. Ta ura nadzoruje, kako hitro naslednje stanje postane trenutno stanje. Ta ura bi morala biti precej hitra; izbrali smo hitrost, ki je bila približno dvakrat hitrejša od naše najhitrejše LED hitrosti.

To kodo smo uporabili s pomočjo FSM za ravni; vendar smo po tem projektu spoznali, da bi bila učinkovitejša uporaba FSM morda stanje štetja, stanje ponastavitve ali stanje mirovanja. Če nič ne pritisnete, je v stanju mirovanja. Če pritisnete reset ali je predvajalnik pokvarjen, je v ponastavljenem stanju. Če je pravilno pritisnjen, je v stanju štetja. Obstaja tudi veliko drugih načinov uporabe FSM tudi v tej igri!

7. korak: Nadzor bloka procesa zaslona z ravnjo

Upravljanje procesnega bloka zaslona z nivojem
Upravljanje procesnega bloka zaslona z nivojem

Raven nadzoruje procesni blok zaslona. Spremenljivke na seznamu občutljivosti so Level, Reset in Clk400. Prikaz 7 segmentov se začne s prikazom "1" za prvo stopnjo. Odšteje do 7 vsakič, ko uporabnik preide raven, da uporabniku pokaže, na kateri ravni je. Ko uporabnik preide stopnjo 7, se na zaslonu prikaže "COOL", kar pomeni, da je igralec premagal igro. Ta zaslon "COOL" deluje na taktu 400 Hz, ki smo ga poimenovali Clk400. Če pritisnete Ponastavi, se zaslon vrne na »1.«

8. korak: Nadziranje hitrosti LED z ravnjo

Nadzor hitrosti LED z nivojem
Nadzor hitrosti LED z nivojem

Nazadnje, Level nadzoruje hitrost LED. Raven je edini signal na seznamu občutljivosti. D1 je signal, ki gre v postopek delitelja ure, da pridobi nov kl. Vsakič, ko spremenite raven ali stanje, blok procesa »Hitrost«. Ta postopek določa vrednost D1. Obstaja 8 opredeljenih vrednosti D1, ki smo jih izbrali glede na to, kako hitro želimo, da se vsaka raven izvaja. D1 se vsakič zmanjšuje, tako da newclk teče hitreje.

9. korak: Sestavljanje strojne opreme

Sestavljanje strojne opreme
Sestavljanje strojne opreme

Ohišje smo povezali z Basys3 z enim od priključkov pmod. Šest vrat pmod je bilo uporabljenih za priključitev moškega na moški konektor, enega za ozemljitev, drugih pet pa za 5 LED. Za vsako LED smo postavili tudi upor. Ti upori so 220 Ω in preprečujejo kratek stik in izgorevanje LED. Čeprav ima vsaka LED določen upor, upor ni dovolj, da bi oviral napetost iz vira.

10. korak: Zabavajte se

To igro je zelo enostavno igrati. Igralec začne na skrajnem desnem stikalu 1 na deski, V17. Ko je prižgana srednja LED, morajo stikalo dvigniti visoko. Nato premaknejo eno stikalo v levo in storijo isto! Če bo igralec prišel do konca, bo končal na sedmem stikalu, W14. Če premagajo igro, si ogledajo res zabaven zaključni prikaz!

Pri ustvarjanju te igre je hitrost v celoti odvisna od vas! Če so hitrosti, ki smo jih izbrali, prepočasne, jih pospešite in naredite še večji izziv! Prav tako ni določenega števila ravni. Če želite, da ima še več ravni, je treba spremeniti FSM in bloke procesa, ki jih določi raven, vendar so to zelo preproste spremembe.

Za uporabniški vnos smo se odločili tudi za stikala na plošči, vendar je to mogoče tudi z gumbom na plošči Basys3; gumb odpravi potrebo po ponastavitvi stikal vsakič, ko uporabnik začne znova. Sprva smo uporabili gumb, vendar je to povzročilo napake pri določanju ravni, ker bi preskočilo več stopenj, če bi pritisnila dva naraščajoča roba PushClk, ko bi držal gumb.

Spodaj je videoposnetek, ki prikazuje, kako igrati, skozi prve 4 stopnje in prikaz končnega konca.

Glavna datoteka tega projekta je navedena spodaj.

Viri

Referenčni priročnik Basys3

Navdih za projekt - igra Arduino Stop It

Priporočena: