Sadržaj:

FPGA reakcijska igra: 10 koraka
FPGA reakcijska igra: 10 koraka

Video: FPGA reakcijska igra: 10 koraka

Video: FPGA reakcijska igra: 10 koraka
Video: Embedded FPGA - поднимаем Linux на Zynq-7000 2024, Srpanj
Anonim
FPGA reakcijska igra
FPGA reakcijska igra

By Summer Rutherford i Regita Soetandar

Korak 1: Uvod

Za naš završni projekt za CPE 133, osmislili smo reakcijsku igru u VHDL -u za Basys3 ploču. Ova se igra može najbliže usporediti s arkadnom igrom "Stacker" u kojoj igrač mora ispustiti blokove u pravo vrijeme. Ploča Basys3 spojena je na matičnu ploču koja ima naizmjenične LED diode. Ova LED svjetla izmjenjivat će se na određenoj frekvenciji, ovisno o razini. Ova igra koristi razdjelnik sata i četveroznamenkasti 7 -segmentni zaslon, kao i konačni stroj za stanje. Kad igrač aktivira ispravan prekidač dok svijetli srednja LED dioda, igrač će preći na sljedeću razinu igre, povećavajući frekvenciju izmjeničnih LED dioda. To svaku sljedeću razinu čini težom od prethodne. Kad igrač uspješno pobijedi najvišu razinu 7, na segmentnom zaslonu prikazat će se poruka, a sve LED diode istovremeno će treptati uključeno i isključeno.

Korak 2: Materijali

Materijali
Materijali
Materijali
Materijali
Materijali
Materijali

Materijali koji će vam trebati su:

  • Digilent Basys3 ploča s mikro USB kabelom
  • Oglasna ploča
  • 5 LED dioda
  • 5 otpornika (koristili smo 220 ohma)
  • 11 kratkospojnih žica
  • Računalo s Vivadom

Korak 3: Dijagram najviše razine Dizajn crne kutije

Dijagram najviše razine Dizajn crne kutije
Dijagram najviše razine Dizajn crne kutije
Dijagram najviše razine Dizajn crne kutije
Dijagram najviše razine Dizajn crne kutije

Kao što vidite, naš blok dijagram na najvišoj razini počinje dobivanjem potrebnih satova iz našeg podmodula, ClkDivide. Ovi satovi su ulazi u različite procesne blokove. U biti, igra mora prepoznati da kada korisnik ispravno uključi prekidač, LED diode se moraju početi mijenjati brže i prikaz mora ići na jednu razinu više. Blok dijagram bi mogao izgledati pomalo ludo, ali to je zato što postoji mnogo signala koji se uspostavljaju u određenom procesu, a zatim taj signal definira drugi signal u drugom procesnom bloku.

Na kraju, jedini ulazi koje igra uzima su ulazni sat na ploči Basys3 koja radi na 100 Mhz, sedam prekidača na ploči Basys3 i tipka za resetiranje. Izlazi anoda za sedmo segmentni zaslon, sedam segmenata za zaslon i LED diode.

Korak 4: CLKDivide

CLKDivide
CLKDivide
CLKDivide
CLKDivide
CLKDivide
CLKDivide

Ovaj podmodul razdjelnika sata stvorio je sporiji sat ovisno o vrijednosti koju smo mu preslikali u glavnoj datoteci. Koristili smo ovaj podmodul za određivanje Clk400, PushClk i newlck. Ovaj podmodul uzima sat i 32 -bitni razdjelnik kao ulaze. Izlazi usporeni sat. Postoji blok procesa za razdjelnik i usporeni sat. U tom je procesu privremena varijabla, koju smo nazvali count, koja odbrojava jednu svaki put kad se udari u rastući rub unesenog sata. Kad dosegne broj djelitelja, usporeni sat se prebacio i broj se vraća na nulu.

Korak 5: Promijenite blok procesa

Blok procesa pomaka
Blok procesa pomaka

Blok procesa Shift kontrolira naizmjenično kretanje i brzinu LED dioda. Na popisu osjetljivosti nalaze se signali newclk i Stop. Zaustavljanje uzrokuje kratko kašnjenje kada korisnik prijeđe razinu. Ako Stop nije visok, tada se LED diode izmjenjuju kao i obično ovisno o brzini novog klika. Ovaj izmjenični uzorak kontroliraju dvije varijable: Track and count. Brojanje određuje koja LED dioda treba biti uključena, dok Track određuje treba li odbrojavanje odbrojavati prema gore ili prema dolje. Postoji još jedan signal, Final, koji se primjenjuje samo kada je razina “111”, što znači da je igrač pobijedio igru. Konačno se izmjenjuje između 0 i 1 na svakom rubu sata kako bi se LED diode neprestano uključivale i isključivale. Ovo je samo vizualni element za konačni prikaz.

Ovaj proces smjene savršeno je mjesto za početak ovog projekta. Ako možete ispravno i dosljedno izmjenjivati svoje LED diode, odavde morate samo dodati ponašanje pri izravnavanju!

Korak 6: Stroj konačnih stanja

Stroj konačnih stanja
Stroj konačnih stanja

Stvorili smo stroj konačnih stanja kako bismo odredili ponašanje pri pritisku ulaznog prekidača ili tipke za resetiranje. Svako stanje je "razina" i ako se prekidač uključi u pogrešno vrijeme ili se pritisne reset, razina se vraća na "000". U suprotnom slučaju, ako je prekidač ispravno uključen, razina se pomiče prema gore dok ne dosegne konačno stanje, “111” i pojavi se završni prikaz. FSM se temelji na dva procesna bloka sync_proc i comb_proc. Sync_proc koristi sat koji smo nazvali PushClk. Ovaj sat kontrolira koliko brzo sljedeće stanje postaje trenutno stanje. Ovaj bi sat trebao biti prilično brz; odabrali smo brzinu koja je bila oko dva puta veća od naše najbrže LED brzine.

Ovaj smo kôd implementirali pomoću FSM -a za razine; međutim, nakon ovog projekta shvatili smo da bi učinkovitija uporaba FSM-a mogla biti stanje odbrojavanja, stanje resetiranja ili stanje mirovanja. Ako se ništa ne pritiska, ono je u stanju mirovanja. Ako se pritisne reset ili je igrač pokvaren, on je u resetiranom stanju. Ako se pravilno pritisne, u stanju je odbrojavanja. Postoje i mnogi drugi načini korištenja FSM -a i u ovoj igri!

Korak 7: Upravljanje procesnim blokom zaslona s razinom

Upravljanje procesnim blokom zaslona s razinom
Upravljanje procesnim blokom zaslona s razinom

Razina kontrolira blok procesa prikaza. Varijable na popisu osjetljivosti su Level, Reset i Clk400. Zaslon od 7 segmenata počinje prikazivanjem "1" za prvu razinu. Odbrojava se do 7 svaki put kada korisnik prijeđe razinu kako bi korisniku pokazao na kojoj je razini. Nakon što je korisnik prošao razinu 7, prikazuje se "COOL" kako bi označio da je igrač pobijedio igru. Ovaj "COOL" zaslon radi na taktu od 400 Hz koji smo nazvali Clk400. Ako pritisnete Reset, zaslon se vraća na "1."

Korak 8: Kontrola LED brzine s razinom

Kontrola LED brzine s razinom
Kontrola LED brzine s razinom

Konačno, razina kontrolira brzinu LED dioda. Razina je jedini signal na popisu osjetljivosti. D1 je signal koji ulazi u proces razdjelnika sata kako bi se dobio novi klip. Svaki put kad se promijeni razina ili stanje, blok procesa "Brzina". Ovaj proces određuje vrijednost D1. Postoji 8 definiranih vrijednosti D1 koje smo odabrali ovisno o tome koliko brzo želimo da se svaka razina izvodi. D1 se smanjuje svakim povećanjem razine, tako da newclk radi brže.

Korak 9: Sklapanje hardvera

Sklapanje hardvera
Sklapanje hardvera

Spojili smo ploču s Basys3 jednim od pmod konektora. Šest pmod priključaka korišteno je za uključivanje muškog u muški konektor, jedan za uzemljenje, a ostalih pet za 5 LED dioda. Također smo za svaku LED postavili otpornik. Ovi otpornici su 220Ω i sprječavaju kratki spoj i pregorijevanje LED dioda. Iako svaka LED dioda ima neki otpor, otpor nije dovoljan da ometa napon iz izvora.

Korak 10: Zabavite se

Ova igra je vrlo laka za igranje. Igrač počinje na krajnjem desnom prekidaču 1 ploče, V17. Moraju okrenuti prekidač visoko kad je uključena srednja LED dioda. Zatim pomaknu jedan prekidač ulijevo i učine isto! Ako igrač dođe do kraja, završit će na sedmom prekidaču, W14. Ako pobijede igru, mogu vidjeti zaista zabavan završetak!

Treba napomenuti da pri stvaranju ove igre brzine u potpunosti ovise o vama! Ako su brzine koje smo odabrali presporo, ubrzajte ih i učinite još izazovnijima! Također nema postavljenog broja razina. Ako želite da ima još više razina, potrebno je izmijeniti FSM i blokove procesa određene razinom, ali to su vrlo jednostavne promjene.

Također smo odlučili koristiti prekidače na ploči kao korisnički unos, ali to je moguće i pomoću gumba na ploči Basys3; gumb će ukloniti potrebu za resetiranjem prekidača svaki put kada korisnik počne iznova. U početku smo koristili gumb, no to je uzrokovalo pogreške u definiranju razine jer bi preskočilo više razina ako bi se pritisnula dva rastuća ruba PushClka dok se gumb držao pritisnut.

Ispod je videozapis koji pokazuje kako igrati, prolazi kroz prve 4 razine i prikazuje konačni završetak.

Glavna datoteka za ovaj projekt nalazi se u nastavku.

Izvori

Referentni priručnik Basys3

Inspiracija za projekt - Arduino Stop It igra

Preporučeni: