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, Juli
Anonim
FPGA reakcijska igra
FPGA reakcijska igra

By Summer Rutherford i Regita Soetandar

Korak 1: Uvod

Za naš konačni projekt za CPE 133, dizajnirali smo reakcijsku igru u VHDL -u za Basys3 ploču. Ova igra se može najbliže usporediti s arkadnom igrom "Stacker" u kojoj igrač mora ispustiti blokove u pravo vrijeme. Basys3 ploča je spojena na matičnu ploču koja ima naizmjenične LED diode. Ova LED svjetla će se izmjenjivati na određenoj frekvenciji, ovisno o razini. Ova igra koristi razdjelnik sata i četveroznamenkasti 7 -segmentni ekran, kao i mašinu konačnih stanja. Kada igrač aktivira odgovarajući prekidač dok svijetli srednja LED dioda, igrač će preći na sljedeći nivo igre, povećavajući frekvenciju izmjenjivih LED dioda. Ovo čini svaki sljedeći nivo težim od prethodnog. Kada igrač uspješno pobijedi najviši nivo 7, na segmentnom displeju će se pojaviti poruka, a sve LED diode će istovremeno 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 sa mikro USB kablom
  • Breadboard
  • 5 LED dioda
  • 5 otpornika (koristili smo 220 ohma)
  • 11 kratkospojnika
  • Računar sa Vivadom

Korak 3: Dizajn crne kutije dijagrama najvišeg nivoa

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 najviše razine započinje dobivanjem potrebnih satova iz našeg podmodula ClkDivide. Ovi satovi su ulazi u različite procesne blokove. U osnovi, igra mora prepoznati da kada korisnik ispravno uključi prekidač, LED diode moraju početi brže naizmjenično da se mijenjaju i prikaz mora ići na jedan nivo više. Blok dijagram može 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 Basys3 ploči koji radi na 100 Mhz, sedam prekidača na Basys3 ploči i tipka za resetiranje. Ono što se emituje je anoda za sedmo segmentni ekran, sedam segmenata za ekran 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 našoj glavnoj datoteci. Koristili smo ovaj podmodul za određivanje Clk400, PushClk i newlck. Ovaj podmodul uzima takt i 32 -bitni razdjelnik kao ulaze. Izlazi usporeni sat. Postoji blok procesa za razdjelnik i usporeni sat. U procesu je privremena varijabla, koju smo nazvali count, koja broji jednu svaki put kad se udari u rastuću ivicu unetog sata. Kad dostigne broj djelitelja, usporeni sat se prebacuje i brojanje se vraća na nulu.

Korak 5: Promijenite blok procesa

Blok procesa pomaka
Blok procesa pomaka

Procesni blok Shift kontrolira naizmjenično kretanje i brzinu LED dioda. Na listi 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 na uobičajen način ovisno o brzini novog klika. Ovaj naizmjenič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 nivo “111”, koji označava da je igrač pobijedio igru. Konačno se izmjenjuje između 0 i 1 na svakoj ivici sata kako bi se LED stalno uključivale i isključivale. Ovo je samo vizuelni element za konačni prikaz.

Ovaj proces smjene savršeno je mjesto za početak ovog projekta. Ako možete omogućiti da se vaše LED diode pravilno i dosljedno izmjenjuju, odavde morate samo dodati ponašanje pri izravnavanju!

Korak 6: Mašina konačnih stanja

Mašina konačnih stanja
Mašina konačnih stanja

Kreirali smo mašinu konačnih stanja koja određuje ponašanje pri pritisku prekidača za unos ili tipke za resetiranje. Svako stanje je "nivo" i ako se prekidač uključi u pogrešno vrijeme ili se pritisne reset, nivo se vraća na "000". U suprotnom slučaju, ako je prekidač ispravno uključen, nivo se pomiče prema gore dok ne dosegne konačno stanje, “111” i pojavi se završni prikaz. FSM je zasnovan 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 sat bi trebao biti prilično brz; odabrali smo brzinu koja je bila oko dva puta veća od naše najbrže LED brzine.

Ovaj kod smo implementirali koristeći FSM za nivoe; međutim, nakon ovog projekta shvatili smo da bi efikasnija upotreba 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 u ovoj igri!

Korak 7: Kontrola bloka procesa prikaza s razinom

Kontrola bloka procesa prikaza s razinom
Kontrola bloka procesa prikaza s razinom

Nivo kontrolira blok procesa prikaza. Varijable na listi osjetljivosti su Level, Reset i Clk400. Zaslon sa 7 segmenata počinje prikazivanjem '1' za prvi nivo. Odbrojava se do 7 svaki put kada korisnik pređe nivo kako bi korisniku pokazao na kom je nivou. Nakon što je korisnik prešao nivo 7, prikazuje se „COOL“kako bi označio da je igrač pobijedio igru. Ovaj "COOL" ekran 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 sa nivoom
Kontrola LED brzine sa nivoom

Konačno, Level kontrolira brzinu LED dioda. Nivo je jedini signal na listi osjetljivosti. D1 je signal koji ulazi u proces razdjelnika sata kako bi dobio novi klip. Svaki put kad se promijeni Nivo 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 svaki nivo izvodi. D1 se smanjuje sa svakim povećanjem razine, tako da newclk radi brže.

Korak 9: Sklapanje hardvera

Sklapanje hardvera
Sklapanje hardvera

Spojimo matičnu ploču na Basys3 jednim od pmod konektora. Šest pmod priključaka je korišteno 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 određeni 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 kada je uključena srednja LED dioda. Zatim pomiču jedan prekidač ulijevo i rade istu stvar! Ako igrač dođe do kraja, završit će na sedmom prekidaču, W14. Ako pobede igru, videće zaista zabavan kraj!

Treba napomenuti da pri kreiranju ove igre brzine u potpunosti ovise o vama! Ako su brzine koje smo odabrali presporo, ubrzajte ih i učinite još izazovnijim! Takođe nema postavljenog broja nivoa. Ako želite da ima još više nivoa, potrebno je izvršiti izmjene u FSM -u i blokovima procesa koje određuje Nivo, ali to su vrlo jednostavne promjene.

Također smo odabrali korištenje prekidača na ploči kao korisnički unos, ali to je moguće i pomoću dugmeta na Basys3 ploči; dugme će ukloniti potrebu za resetovanjem prekidača svaki put kada korisnik počne iznova. U početku smo koristili dugme, međutim to je dovelo do grešaka u definisanju nivoa jer bi preskočilo više nivoa ako bi se pritisnule dvije rastuće ivice PushClk -a dok se dugme držalo pritisnuto.

Ispod je video koji prikazuje kako se igra, prolazi kroz prva 4 nivoa i prikazuje konačni završetak.

Glavni fajl ovog projekta nalazi se ispod.

Izvori

Referentni priručnik Basys3

Inspiracija za projekt - Arduino Stop It igra

Preporučuje se: