Sadržaj:

FPGA Asteroid igra: 7 koraka (sa slikama)
FPGA Asteroid igra: 7 koraka (sa slikama)

Video: FPGA Asteroid igra: 7 koraka (sa slikama)

Video: FPGA Asteroid igra: 7 koraka (sa slikama)
Video: Лекция №1 "Что умеют FPGA и зачем они нужны?" 2024, Studeni
Anonim
FPGA Asteroid igra
FPGA Asteroid igra

Za naš završni projekt CPE 133, odlučili smo stvoriti igru asteroida na našem FPGA-u koristeći dva prekidača i 7-segmentni zaslon. Igra funkcionira tako da se asteroid mrijesti u jednom od tri nasumično odabrana reda, te juri prema brodu s druge strane 7-segmentnog zaslona. Gornji gumb i donji gumb mogu se koristiti za pomicanje vašeg broda s puta asteroida. U slučaju da to ne učini, na zaslonu se na trenutak čita ‘BAnG’, a zatim brzo ponovno pokreće igru kako bi korisnik mogao pokušati ponovno. Slijedi kratak opis načina na koji je projekt napravljen tako da svaki korisnik može ponoviti ili poboljšati naš dizajn.

Korak 1: Pregled

Pregled
Pregled
Pregled
Pregled

Projekt se u velikoj mjeri sastoji od konačnih državnih strojeva (FSM), koji koriste logiku za prijenos FPGA -e između država koje pohranjuju i prikazuju različite vrijednosti položaja brodova i stijena. Dva glavna modula su FSM-ovi za igre za stijene i brodove te binarni do 7-segmentni dekoder za prikaz FSM, koji su integrirani zajedno pomoću vrlo jednostavnog strukturnog modela u VHDL-u.

FSM-ovi su stvoreni za položaj broda, položaj stijene i za 7-segmentni dekoder. Svrha brodskog FSM -a je da se brod može pomaknuti u ispravan položaj kada igrač pritisne gumb za gore ili dolje. FSM je potreban jer se mora sjetiti u kojem je položaju zadnji bio kako bi se premjestio na ispravan položaj.

Svrha FSM -a stijene je pomicanje stijene na ispravan položaj ovisno o tome u kojem se redu nalazi i posljednjoj poziciji u tom redu. Osim toga, prati položaj za modul koji će ga prikazati i pseudo-slučajno odabire novi redak koji će se pojaviti na sljedećem.

FSM za 7-segmentni dekoder zaslona korišten je ne samo za prikaz broda i stijene, već i za prikaz "BAnG" kada su položaj broda i stijene isti.

Korak 2: Materijali

Materijali korišteni u projektu bili su:

  • Razvojna ploča Basys3 iz tvrtke Digilent, Inc.
  • Vivado Design Suite
  • sseg_dec.vhd (Ova nam je datoteka poslana na Polylearnu, a napisao ju je Bryan Mealy)
  • Clk_div.vhd (Ova nam je datoteka poslana na Polylearnu, a napisao ju je Bryan Mealy)
  • Tri stroja konačnih stanja (FSM)

Korak 3: Stvaranje igre

Stvaranje igre
Stvaranje igre
Stvaranje igre
Stvaranje igre
Stvaranje igre
Stvaranje igre
Stvaranje igre
Stvaranje igre

Modul igre kreiran je modeliranjem ponašanja za opisivanje stanja broda i stijena za vlastite odgovarajuće FSM -ove. Prednost ovoga je što je daleko lakše modelirati krug ponašanja opisujući ono što radi, a ne utvrđivanjem svih komponenti potrebnih za projektiranje hardvera.

Stanja stijene su rađena pomoću generatora pseudo slučajnih brojeva za prvu poziciju stijene. Da bismo to postigli, dali smo generatoru vlastiti sat koji je bio izuzetno brz u odnosu na brzinu igre. Na svakom rastućem rubu povećava se trobitni broj, a sve njegove vrijednosti odgovaraju jednom od tri početna stanja broda. Stoga tri vrijednosti odgovaraju položaju 3 (gore desno), tri položaju 7 (središte), a dvije položaju 11 (dolje desno).

Nakon što se dogodila slučajna generacija i asteroid je dobio početno stanje, teče vodoravno prema brodu bez prekida.

0 ← 1 ← 2 ← 3

4 ← 5 ← 6 ← 7

11 ← 10 ← 9 ← 8

Sat koji se koristi za sljedeću logiku stanja stijene kontrolira brzinu igre; pokušajem i pogreškom ustanovili smo da je 9999999 dobra vrijednost za svoj maksimalni broj.

Brodska logika funkcionira inicijalizacijom u središnji položaj (položaj 4) s krajnje lijeve strane. Ako se pritisne gornji ili donji gumb, brod će se pomicati gore -dolje u položaje 0 i 11 koji odgovaraju gumbu koji je pritisnut.

Kako bi se kretanje broda dobro osjećalo za korisnika, njegovo kretanje nismo učinili asinhronim. Koristili smo sat za promjene stanja i maksimalno 5555555.

Korak 4: Prikaz rezultata

Binarni do 7-segmentni dekoder prihvaća 4-bitne varijable položaja za brod i asteroid i prikazuje odgovarajuću sliku (ili brod i stijena ili poruka "BAnG").

To postiže tako da prvo provjeri jesu li dva jednaka, a zatim prikazuje poruku “BAnG” ako provjera vraća vrijednost true.

Ako se ne vrati istina, dekoder će prikazati brod i stijenu prebacivanjem između njih na vrlo visokoj frekvenciji takta i zavaravši oko da ih vidi kao da se prikazuju u isto vrijeme.

Korak 5: Sve spojite

Spajajući sve zajedno
Spajajući sve zajedno

Obuhvatili smo FSM broda i stijene u jedan veliki FSM koji smo priključili na FSM zaslona. Ulazi za igru su tipka gore i dolje na ploči BASYS3 i sistemski sat. Izlazi su segmentni i anodni vektori sa sedam segmenata-prikaz.

Ti ulazi i izlazi će se vidjeti u datoteci ograničenja gdje su mapirani portovi.

Korak 6: Buduće izmjene

U budućnosti bi dodavanje više funkcionalnosti kretanja broda projektu bilo poboljšanje. To se može postići jednostavno davanjem još 2 ulaza tipkama i dopuštanjem brodu da zauzme položaje (stanja) različita od 0, 4 i 8. Druga moguća izmjena mogla bi biti kontrola vremena sljedećeg stanja asteroida tako da se polako pokreće i poveća brzinu za 1,5x svaki put kada propusti brod dok ne dobije pogodak, gdje bi se ponovno pokrenuo i opet postao spor. To bi povećalo poteškoće igre i učinilo je korisniku zabavnijom ako bi se implementiralo, a moglo bi se učiniti stvaranjem varijable za maksimalan broj sati sljedećeg stanja stijene, pomnoživši tu varijablu s 1,5 svaki put kad asteroid ne 't hit, i vraćanje na početnu vrijednost svaki put kad rock udari.

Korak 7: Zaključak

Ovaj nam je projekt pomogao da bolje razumijemo strojeve konačnih stanja, satove i interaktivno prikazivanje na sedmosegmentnim zaslonima.

Najveća stvar kod strojeva konačnih stanja je da je važno znati (zapamtiti) u kakvom se stanju trenutno nalazite kako biste prešli na sljedeće željeno stanje. Ironično, dobar životni savjet; morate znati gdje se nalazite da biste znali kamo idete.

Manipuliranjem različitim primjercima satova uspjeli smo nasumično generirati brojeve, pomaknuti stijenu na sljedeću poziciju i upravljati prikazivanjem broda, stijene i poruke o kraju igre.

Saznali smo da se više od jedne anode ne može prikazati istovremeno. Modul koji smo dobili iskoristio je prednost toga što ljudsko oko može vidjeti razliku samo do određene frekvencije. Tako je odabrana veća učestalost uključivanja anoda. Brod i stijena koji se vide u isto vrijeme zapravo je aluzija jer se svaki prikazuje zasebno, ali vrlo brzo. Taj je koncept primijenjen za prikaz kretanja broda, stijene i poruke "BAnG".

Preporučeni: