Kazalo:

Igra Asteroid FPGA: 7 korakov (s slikami)
Igra Asteroid FPGA: 7 korakov (s slikami)

Video: Igra Asteroid FPGA: 7 korakov (s slikami)

Video: Igra Asteroid FPGA: 7 korakov (s slikami)
Video: АСТЕРОИД ЛЕТИТ ВО ТЬМУ 2024, November
Anonim
Igra Asteroid FPGA
Igra Asteroid FPGA

Za naš zaključni projekt CPE 133 smo se odločili, da na naši FPGA ustvarimo igro asteroidov z dvema stikalnima tipkama in 7-segmentnim zaslonom. Igra deluje tako, da se asteroid pojavi v eni od treh naključno izbranih vrstic in prileti proti ladji na drugi strani 7-segmentnega zaslona. Zgornji in spodnji gumb lahko uporabite za premik vaše ladje s poti asteroida. Če tega ne storite, se na zaslonu za trenutek izpiše „BAnG“in nato hitro znova zažene igro, tako da lahko uporabnik poskusi znova. Sledi kratek opis, kako je bil projekt narejen, tako da lahko vsak uporabnik ponovi ali izboljša našo zasnovo.

1. korak: Pregled

Pregled
Pregled
Pregled
Pregled

Projekt v veliki meri sestavljajo Finite State Machines (FSM), ki uporabljajo logiko za prenos FPGA med državami, ki shranjujejo in prikazujejo različne vrednosti položajev ladij in kamnin. Dva glavna modula sta igro FSM za skalo in ladjo ter binarni do 7-segmentni dekodirnik zaslona FSM, ki sta integrirana skupaj z zelo preprostim strukturnim modelom v VHDL.

FSM so bili ustvarjeni za položaj ladje, položaj skale in za 7-segmentni dekoder. Namen ladijskega FSM je, da se ladja premakne v pravilen položaj, ko igralec pritisne gumb gor ali dol. FSM je potreben, ker se mora spomniti, v katerem položaju je bil nazadnje, da se premakne v pravilen položaj.

Namen FSM kamnine je premakniti skalo na pravilen položaj glede na to, v kateri vrsti je in zadnji položaj v tej vrsti. Poleg tega spremlja položaj modula, ki ga bo prikazal, in psevdo-naključno izbere novo vrstico, ki bo prikazana na naslednji.

FSM za 7-segmentni dekoder zaslona je bil uporabljen ne le za prikaz ladje in skale, ampak tudi za prikaz "BAnG", ko sta položaj ladje in skale enaka.

2. korak: Materiali

Materiali, uporabljeni pri projektu, so bili:

  • Razvojni odbor Basys3 podjetja Digilent, Inc.
  • Vivado Design Suite
  • sseg_dec.vhd (Ta datoteka nam je bila posredovana na Polylearnu, napisal pa jo je Bryan Mealy)
  • Clk_div.vhd (Ta datoteka nam je bila posredovana na Polylearnu, napisal pa jo je Bryan Mealy)
  • Trije končni državni stroji (FSM)

3. korak: Ustvarjanje igre

Ustvarjanje igre
Ustvarjanje igre
Ustvarjanje igre
Ustvarjanje igre
Ustvarjanje igre
Ustvarjanje igre
Ustvarjanje igre
Ustvarjanje igre

Modul igre je bil ustvarjen z vedenjskim modeliranjem za opis stanja ladje in skale za njihove lastne FSM. Prednost tega je, da je vezje veliko lažje modelirati vedenjsko, tako da opišemo, kaj počne, namesto da bi ugotovili vse komponente, potrebne za oblikovanje strojne opreme.

Stanja kamnin so bila narejena z uporabo generatorja psevdo naključnih števil za prvo mesto kamnine. Da bi to dosegli, smo generatorju dali svojo uro, ki je bila glede na hitrost igre izjemno hitra. Na vsakem naraščajočem robu se poveča tribitno število in vse njegove vrednosti ustrezajo enemu od treh zagonskih stanj ladje. Zato tri vrednosti ustrezajo položaju 3 (zgoraj desno), tri ustrezajo položaju 7 (sredina), dve pa položaju 11 (spodaj desno).

Ko pride do naključne generacije in asteroid dobi začetno stanje, teče vodoravno proti ladji brez prekinitev.

0 ← 1 ← 2 ← 3

4 ← 5 ← 6 ← 7

11 ← 10 ← 9 ← 8

Ura, ki se uporablja za logiko naslednjega stanja skale, nadzoruje hitrost igre; S poskusi in napakami smo ugotovili, da je 9999999 dobra vrednost za njegovo največje število.

Logika ladje deluje tako, da se inicializira v srednji položaj (položaj 4) na skrajni levi strani. Če pritisnete zgornji ali spodnji gumb, se bo ladja pomikala navzgor in navzdol v položaj 0 in 11, ki ustreza pritisnjenemu gumbu.

Zaradi lažjega gibanja ladje uporabniku nismo omogočili asinhronega gibanja. Za spreminjanje stanja smo uporabili uro in uporabili največ 5555555.

4. korak: Prikaz rezultata

Binarni do 7-segmentni dekoder sprejme 4-bitne spremenljivke položaja ladje in asteroida ter prikaže ustrezno sliko (ladja in kamen ali sporočilo "BAnG").

To doseže tako, da najprej preveri, ali sta oba enaka, nato pa prikaže sporočilo “BAnG”, če preverjanje vrne res.

Če se ne vrne, bo dekodirnik prikazal ladjo in skalo tako, da med njimi preklaplja na zelo visoki taktni frekvenci in zavede oko, da ju vidi, kot da sta prikazani hkrati.

5. korak: Združite vse skupaj

Vse skupaj
Vse skupaj

Ladjevski in skalski FSM smo zajeli v en velik FSM, ki smo ga povezali z zaslonskim FSM. Vhoda v igro sta gumb gor in dol na plošči BASYS3 ter sistemska ura. Izhodi so segmentni in anodni vektorji sedmih segmentnih zaslonov.

Ti vhodi in izhodi bodo prikazani v datoteki omejitev, kjer so preslikani v vrata.

Korak 6: Prihodnje spremembe

V prihodnosti bi bila dodana več funkcionalnosti premikanja ladij projektu izboljšava. To je mogoče preprosto narediti tako, da vnesete še 2 vhoda gumbov in ladji omogočite, da zavzame položaje (stanja), ki niso 0, 4 in 8. Druga možna sprememba bi lahko bila nadzor naslednjega časa asteroida, tako da se počasi zažene in poveča hitrost za 1,5x vsakič, ko zgreši ladjo, dokler ne dobi zadetka, kjer bi se znova zagnal in spet postal počasen. To bi povečalo težavnost igre in bi bilo uporabniku bolj zabavno, če bi bila izvedena, in bi bilo mogoče to narediti z ustvarjanjem spremenljivke za največje število ure naslednjega stanja skale, pri čemer se ta spremenljivka pomnoži z 1,5 vsakič, ko asteroid ne 't hit, in ga ponastavite na začetno vrednost vsakič, ko rock zadene.

7. korak: Zaključek

Ta projekt nam je pomagal bolje razumeti končne avtomate, ure in interaktivno prikazovanje na sedemsegmentnih zaslonih.

Največja stvar pri strojih s končnim stanjem je, da je pomembno vedeti (zapomniti), v katerem stanju ste trenutno, da se premaknete v naslednje želeno stanje. Ironično, dober življenjski nasvet; vedeti morate, kje ste, da veste, kam greste.

Z manipulacijo različnih primerov ur smo lahko naključno ustvarili številke, premaknili skalo na naslednji položaj in upravljali prikaz ladje, skale in sporočila o koncu igre.

Izvedeli smo, da več anod ni mogoče prikazati hkrati. Modul, ki smo ga dobili, je izkoristil to, da človeško oko vidi razliko le do določene frekvence. Tako je bila izbrana višja frekvenca preklopnih anod. Ladja in skala, ki ju opazimo hkrati, je pravzaprav aluzija, saj se vsaka prikaže ločeno, vendar zelo hitro. Ta koncept je bil uporabljen za prikaz gibanja ladje, skale in sporočila "BAnG".

Priporočena: