Tartalomjegyzék:

FPGA aszteroida játék: 7 lépés (képekkel)
FPGA aszteroida játék: 7 lépés (képekkel)

Videó: FPGA aszteroida játék: 7 lépés (képekkel)

Videó: FPGA aszteroida játék: 7 lépés (képekkel)
Videó: Cine multi FPGA in Asteroids cocktail CAB 2024, November
Anonim
FPGA aszteroida játék
FPGA aszteroida játék

A CPE 133 végső projektünk során úgy döntöttünk, hogy két nyomógombos kapcsoló és a 7 szegmenses kijelző segítségével létrehozunk egy kisbolygójátékot az FPGA-n. A játék úgy működik, hogy egy aszteroida ívik a három véletlenszerűen kiválasztott sor egyikében, és a 7 szegmenses kijelző túloldalán a hajó felé sántikál. A felső és alsó gombok segítségével elmozdíthatja hajóját az aszteroida útjából. Ha ezt elmulasztja, a kijelzőn egy pillanatra a „BAnG” felirat olvasható, majd gyorsan újraindítja a játékot, hogy a felhasználó újra megpróbálhassa. Az alábbiakban röviden ismertetjük a projekt elkészítését, hogy bármely felhasználó megismételhesse vagy javíthassa a tervezésünket.

1. lépés: Áttekintés

Áttekintés
Áttekintés
Áttekintés
Áttekintés

A projekt nagyrészt véges állapotú gépekből (FSM) áll, amelyek logikát használva továbbítják az FPGA -t a hajó- és sziklaállások különböző értékeit tároló és megjelenítő állapotok között. A két fő modul a játék FSM-ek a rock és a hajó számára, valamint a bináris és 7 szegmenses kijelző dekódoló FSM, amelyeket egy nagyon egyszerű szerkezeti modell segítségével integrálnak a VHDL-ben.

Az FSM-eket a hajó helyzetére, a kőzet helyzetére és a 7 szegmenses dekódolóra hozták létre. A hajó FSM célja, hogy a hajó a megfelelő pozícióba tudjon mozogni, amikor a játékos megnyom egy fel vagy le gombot. Az FSM -re azért van szükség, mert emlékeznie kell arra, hogy melyik pozícióban volt utoljára, hogy a megfelelő pozícióba léphessen.

A szikla FSM célja, hogy a kőzetet a megfelelő pozícióba mozgassa, attól függően, hogy melyik sorban van, és az utolsó pozícióban. Ezenkívül nyomon követi az azt megjelenítő modul pozícióját, és ál-véletlenszerűen kiválaszt egy új sort, amelyen a következő jelenik meg.

A 7 szegmenses kijelző-dekódoló FSM-jét nemcsak a hajó és a kőzet megjelenítésére, hanem a „BAnG” kijelzésére is használták, ha a hajó helyzete és a kőzet helyzete megegyezik.

2. lépés: Anyagok

A projektben felhasznált anyagok a következők voltak:

  • Basys3 Development Board, Digilent, Inc.
  • Vivado Design lakosztály
  • sseg_dec.vhd (Ezt a fájlt a Polylearn -en kaptuk, és Bryan Mealy írta)
  • Clk_div.vhd (Ezt a fájlt a Polylearn -en kaptuk, és Bryan Mealy írta)
  • Három véges állapotú gép (FSM)

3. lépés: A játék elkészítése

A játék elkészítése
A játék elkészítése
A játék elkészítése
A játék elkészítése
A játék elkészítése
A játék elkészítése
A játék elkészítése
A játék elkészítése

A játékmodult viselkedésmodellezéssel hozták létre, hogy leírják a hajó és a kőzet állapotát saját FSM -jük számára. Ennek az az előnye, hogy sokkal egyszerűbb viselkedési modellezni az áramkört azzal, hogy leírja, mit csinál, ahelyett, hogy kitalálná a hardver tervezéséhez szükséges összes összetevőt.

A kőzetállapotokat pszeudo -véletlenszám -generátorral végeztük a kőzet első helyzetéhez. Ennek érdekében a generátornak saját órát adtunk, amely rendkívül gyors volt a játék sebességéhez képest. Minden emelkedő élen egy három bites szám növekszik, és minden értéke megfelel a hajó három indítási állapotának egyikének. Ezért három érték felel meg a 3. pozíciónak (jobb felső sarokban), három a 7. pozíciónak (középen), kettő pedig a 11. pozíciónak (jobb alsó).

Miután a véletlenszerű generáció megtörtént, és az aszteroida kezdeti állapotot kapott, vízszintesen áramlik a hajó felé megszakítás nélkül.

0 ← 1 ← 2 ← 3

4 ← 5 ← 6 ← 7

11 ← 10 ← 9 ← 8

A rock következő állapotlogikájához használt óra szabályozza a játék sebességét; próba és hiba útján azt találtuk, hogy a 9999999 jó érték a maximális számához képest.

A hajó logikája úgy működik, hogy inicializál a középső helyzetbe (4. pozíció) a bal szélső oldalon. Ha megnyomja a felső gombot vagy az alsó gombot, a hajó felfelé és lefelé mozog a megnyomott gombnak megfelelő 0 és 11 pozícióba.

Annak érdekében, hogy a hajó mozgása jól érezze magát a felhasználó számára, nem tettük aszinkron mozgását. Állapotváltozáshoz órát használtunk, és maximum 5555555 -öt.

4. lépés: Az eredmény megjelenítése

A bináris és 7 szegmenses dekóder felveszi a hajó és az aszteroida 4 bites helyzetváltozóit, és megjeleníti a megfelelő képet (akár a hajó és a kőzet, akár a „BAnG” üzenet).

Ezt úgy éri el, hogy először ellenőrzi, hogy a kettő egyenlő -e, majd megjeleníti a „BAnG” üzenetet, ha az ellenőrzés igaz.

Ha nem igaz, akkor a dekódoló a hajót és a kőzetet úgy jeleníti meg, hogy nagyon magas órajel -frekvenciával vált közöttük, és becsapja a szemét, hogy úgy lássa őket, mintha egyszerre jelenítenék meg őket.

5. lépés: Összerakni

Összerakni
Összerakni

A hajó és a szikla FSM -ét egy nagy FSM -be fogtuk, amelyet a kijelző FSM -hez kötöttünk. A játék bemenetei a BASYS3 táblán lévő fel és le gomb, valamint a rendszeróra. A kimenetek a szegmens- és anódvektorok hét szegmens-kijelzője.

Ezek a bemenetek és kimenetek a kényszerfájlban láthatók, ahol port -leképezésre kerülnek.

6. lépés: Jövőbeli módosítások

A jövőben javulást jelentene, ha több hajómozgatási funkciót adna a projekthez. Ez egyszerűen úgy érhető el, ha további 2 gombbemenetet ad meg, és lehetővé teszi a hajó számára, hogy 0, 4 és 8 -tól eltérő pozíciókat (állapotokat) vegyen fel. 1,5 -ször minden alkalommal, amikor nem találja el a hajót, amíg el nem éri az ütést, ahol újraindul és újra lassú lesz. Ez növelné a játék nehézségét, és szórakoztatóbbá tenné a felhasználó számára, ha megvalósítanák, és megtehető úgy, hogy létrehozunk egy változót a szikla következő állapotórájának maximális számához, és megszorozzuk ezt a változót 1,5 -tel minden alkalommal, amikor az aszteroida nem nem üt, és minden alkalommal, amikor a rock üt, visszaállítja az eredeti értékére.

7. lépés: Következtetés

Ez a projekt segített nekünk jobban megérteni a véges állapotú gépeket, órákat és a hét szegmenses kijelzőn való interaktív megjelenítést.

A véges állapotú gépekben a legnagyobb dolog az, hogy fontos tudni (emlékezni), hogy éppen milyen állapotban van, hogy a következő kívánt állapotba léphessen. Ironikus módon jó élettanács; tudnia kell, hol van, hogy tudja, merre tart.

Az órák különböző példányainak manipulálásával véletlenszerűen tudtunk számokat generálni, a sziklát a következő pozícióba helyezni, és kezelni a hajó, a szikla és a játékvégi üzenet megjelenítését.

Megtanultuk, hogy egynél több anód nem jeleníthető meg egyszerre. A rendelkezésünkre bocsátott modul kihasználta, hogy az emberi szem csak bizonyos gyakoriságig látja a különbséget. Tehát az anódok kapcsolási gyakoriságát választották. Az egy időben látható hajó és szikla valójában utalás, mivel mindegyiket külön, de nagyon gyorsan jelenítik meg. Ezt a koncepciót alkalmazták a hajó, a szikla és a „BAnG” üzenet mozgásának megjelenítésére.

Ajánlott: