Tartalomjegyzék:

Pong játék: 6 lépés
Pong játék: 6 lépés

Videó: Pong játék: 6 lépés

Videó: Pong játék: 6 lépés
Videó: 6 Creative Party Games With Ping Pong Balls (Minute to Win It)[PART 1] 2024, Július
Anonim
Pong játék
Pong játék

Anyagok:

Basys3 FPGA kártya

VGA kábel

Vivado

Ennek az utasításnak a célja egy pong játék kifejlesztése, amely megjelenik a monitoron. A projekt VHDL programozást végez, és Basys3 FPGA -t használ a kód végrehajtásához, és a képet VGA interfészen keresztül továbbítja. Ez az oktatóanyag azoknak szól, akik rendelkeznek egy kis előzetes ismerettel a VHDL -ről. Az oktatóanyag 6 különböző részre lesz osztva: Áttekintés, Folyamat, Pontszámkezelő, Képgenerálás, Pongjáték és VGA.

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

Áttekintés
Áttekintés

A fenti kép a projekt általános vázlatos kialakítása

A játék célja:

A játék egy kijelzőből áll, a felhasználó által vezérelhető csúszó lapáttal, és egy rögzített falból, amely felső határként működik. Amikor a felhasználó megnyomja a start gombot, amely a fel gomb, a labda felpattan, majd leugrik a falról, és megpróbálja eltalálni a lapátot. Ha a labda a lapáthoz üt, ismét felpattan, és addig ugrál, amíg ki nem hagyja a lapátot. A játéknak akkor van vége, amikor a labda nem találja el a lapátot. A felhasználó a bal és jobb nyomógombokkal meghatározhatja a lapát mozgását. A játék visszaállításához a felhasználónak meg kell nyomnia a középső gombot. A futás idejét egy 7 szegmenses kijelző rögzíti. Öt szint van, és tíz másodpercenként a szint emelkedik, amíg el nem éri az 5 -ös szintet, és ott marad, amíg a felhasználó veszít. A szinteket a labda sebessége határozza meg; ez azt jelenti, hogy tíz másodpercenként növekszik a labda sebessége, ezáltal növelve a játék nehézségét.

Rendszer Felépítés:

Az alábbi diagram a rendszer alapvető felső szintű blokkdiagramja. A rendszer négy bemenettel rendelkezik: R gomb, L gomb, Start és Reset, valamint egy óra. Vízszintes és függőleges szinkron kimenetekkel, RBG-vel (amely a pixel színére utal egy adott helyen) és Score-val (amely buszként működik a 7 szegmenses kijelzőhöz). A fel gombot használjuk kezdőként gombot, és a bal és jobb nyomógombok a lapát megfelelő irányú mozgatására szolgálnak. A 7 szegmenses kijelzővel rögzíthetjük a pontszámot, vagyis azt a másodpercet, amelyet a felhasználó játszott anélkül, hogy elvesztette volna a játékot. A szám tizedes számként jelenik meg.

Áramkör-architektúra: A gizmo-t egyetlen FSM-ből építjük fel, amely kisebb FSM-et tartalmaz, az al-FSM pedig a játék nehézségeit fogja irányítani, míg a fő FSM a játék teljes folyását. A mi gizmónk legalább három óraosztót is használ, egyet a pontszámhoz (idő), egyet a kijelző frissítési gyakoriságához, egyet pedig a DeMux kimenetéhez csatlakoztatva, hogy ellenőrizni tudjuk a játék sebességét egyre nagyobb nehézségekkel fog haladni. A játék sokkal gyorsabban fog haladni, minél tovább játszol. Rendelkezünk a DeMux vezérlő bemenetével az sub-FSM jelen állapotában, hogy tudjuk szabályozni, hogy milyen gyorsan megy a játék, és mennyi ideig játszod. Néhány számlálót fogunk használni, az egyiket a kijelző frissítésére, a másikat pedig a pontszámok összeszámlálására játék közben. Ez a projekt két fő modulból és egy sor almodulból áll, amelyek manipulálják a bemeneti adatokat. A két fő almodul a VGA illesztőprogram, valamint a gomb logikai modul. A VGA illesztőprogram programozható memóriából, óraosztóból és logikából fog állni, amely manipulálja a kimenetet a szín érdekében. A gombok logikai modulja egy óraosztóból és egy programozható memóriából, valamint egy bináris-tizedes átalakítóból áll a 7 szegmenses kijelzőhöz és a megfelelő óraosztóhoz.

2. lépés: Képfeldolgozás

A projekt Képfeldolgozás szakaszában meghatározzuk a labda és a lapát mozgását. A programnak vannak portjai, amelyek tartalmazzák a bal, jobb, felső és középső nyomógombokat, a jelenlegi állapotot, egy órát, a labda X és Y pozícióját, a lapát bal és jobb szélét és egy hibát. A jelenlegi állapot az engedélyező jel meghatározására szolgál. A kód áttekinti azokat a több esetet, amikor a labda mozoghat, és feltételeket szabott a labda útjának meghatározásához. A következő folyamatblokk határozza meg a lapát mozgásának irányát, attól függően, hogy melyik gombot nyomja meg a felhasználó. A projekt ezen részének kódját mellékeljük részletes megjegyzésekkel, amelyek leírják az egyes szakaszok tevékenységét.

3. lépés: Pontszámkezelő

Pontszámkezelő
Pontszámkezelő

Ez a rész olyan fájlokból áll, amelyek a pontszám másodpercekben történő megjelenítésére vonatkoznak a Basys3 Board 7 szegmenses kijelzőjén. Tartalmaz egy óraosztót, amely a másodpercek számolására szolgál, a pontszámláló megszámolja a felhasználó által játszott másodperceket, a szegmens vezetője veszi a pontszámot, és anódokká és katódokká alakítja át, hogy megjelenjen a képernyőn, és meghatározza a pozíciót is. a szám megjelenik, és végül a szegmenskezelő átalakítja a bináris számjegyeket tizedesjegyekké, hogy megjelenjenek a képernyőn. A pontszámkezelő összerakja az összes darabot, és feltérképezi a jeleket. Mind az öt fájl kódja az alábbiakban található.

Óraosztó:

Az óraosztó Clk (óra), CEN (engedélyezés) és Div (osztó) bemenetekkel és Clk_out kimenettel rendelkezik. Ha az engedélyező jelzés be van kapcsolva, akkor az óra a növekvő élre számít.

Pontszámláló

A pontszámoló Clk (Óra) és RST (Reset) bemenetekkel, valamint Clk_Out és Q kimenetekkel rendelkezik, amelyek lényegében a pontszám kimeneteként működnek.

Szegmens meghajtó

A szegmens meghajtó D1, D10, D100, D1000 és Óra bemenettel rendelkezik. A "D" utáni számok a tizedesjegyre utalnak a 7 szegmenses kijelzőn. A kimenetek az anódok és a számjegyek. Az óra megszámolja és hozzárendeli a számokat és pozícióját. Például egy "9" jelenik meg az egy helyen, a "0" pedig ezer, száz és tíz helyen. Amikor átvált "10" -re, a szám most "1" lesz a tízes helyen, és "0" lesz ezer, száz és egy helyen.

Szegmenskezelő

A szegmenskezelő bemenete számjegy, kimenete pedig katód. Lényegében ez a bináris szám a katód kijelzőn, hogy tizedes számokat adjon ki a képernyőn.

Pontszámkezelő

A Pontszámkezelő az előző négy entitásból áll, és mindent összerak, és leképezi a jeleket. Ezenkívül engedélyezi és letiltja a számlálót a jelenlegi állapot alapján.

4. lépés: Képgenerálás

A képgenerálás négy összetevőből áll: Animáció, Fail Counter, Refresh Image és Start Counter. Ezek a fájlok bemutatják, hogyan lehet képeket létrehozni a kijelzőn.

Élénkség

Az animációs fájl Clk (órajel), CEN (számolás engedélyezése), RST (visszaállítási jel), B_X (labda X helyzet), B_Y (labda Y helyzet), P_L (bal lapát helyzet) és P_R bemeneteket tartalmaz (jobb lapát helyzet). A kimenetek WA (az a cím, amelyre a színt írjuk) és WD (a szín, amelyet a megadott címre írnak). A fájl Play_Counter számlálóval rendelkezik, amelyet a MUX vezérlő bemeneteként fog használni, egy kódolóval, amely a megfelelő színeket a megfelelő helyen tudja kiadni, és végül egy multiplexerrel, amely a lapát helyzete alapján a megfelelő színt jeleníti meg, és labda.

Kép frissítése

A Kép frissítése fájl a kép frissítésére szolgál a labda és a lapát helyzetének változásakor. A fájl tartalmazza az Animation, Start Counter és Fail Counter fájlok összetevőit. Térképezi az egyes komponensek jeleit, és állapotlogika segítségével határozza meg a jeleket és a kimeneti címeket.

Indítsa el a számlálót

A Startszámláló Clk, RS és CEN bemeneteket, valamint WA és WD kimeneteket használ. Számláló és konverzió segítségével határozza meg a MUX vezérlő bemenetét. A Multiplexer ezután a bemenet segítségével határozza meg a helyes színcímeket, és elküldi ezeket az adatokat a VGA illesztőprogramnak. Ez a "Pong" megjelenítésére szolgál, amikor a felhasználó elindítja a játékot.

Sikertelen számláló

A sikertelen számláló a "Game Over" megjelenítésére szolgál, amikor a felhasználó elveszíti a játékot. Clk, RST és CEN jelekkel rendelkezik. Számlálót és konverziós képletet használ a MUX vezérlő bemenetének meghatározásához. A Multiplexer ezután a bemenet segítségével határozza meg a helyes színcímeket, és elküldi ezeket az adatokat a VGA illesztőprogramnak.

5. lépés: Pong játék

Pong játék
Pong játék

A projekt ezen része tartalmazza a Pong Master, a Finite State Machine (FSM), az Timer és a Start Debounce fájlokat.

Időzítő

Az időzítő kimenetei a Clk (Óra) és a PS (Jelenlegi állapot) bemenetek, valamint az Időzítő és a Clk_out. Az időzítővel körülbelül öt másodpercenként lehet megváltoztatni a játék sebességét.

Flow FSM

A Flow FSM Clk, Fail, Timer, Bttn_S (Start gomb) és Buttn_RST (Reset gomb) bemenettel rendelkezik, és Pres_S (Present State Output) kimenettel rendelkezik. Az FSM az időzítő segítségével frissíti a jelenlegi állapotot a következő állapotra, és folyamatosan frissíti a következő állapotot, amíg a játék el nem éri az 5. szintet, ahol a játék befejezéséig marad.

Indítsa el a Debounce -t

A Start Debounce a labda kezdő visszapattanása. S_in és Clk bemenettel rendelkezik, és S_out kimenettel.

Ez a fájl az összes korábbi összetevőt használja, és úgy teszi, hogy minden összetevő azonnali legyen. Ez a mesterfájl, amely összegyűjti az összes korábbi összetevőt, amelyet együtt építettünk.

6. lépés: VGA illesztőprogram

A VGA (Visual Graphics Array) illesztőprogram egy szoftver, amely parancsok vagy adatok fogadására szolgál, és amelyeket a kijelzőre küld. A sofőrt professzorunk adta nekünk. Az illesztőprogram és a VGA -kábel segítségével csatlakoztassa a Basys3 kártyát a monitorhoz.

Most készen kell állnia arra, hogy saját Pongjátékot készítsen a VHDL segítségével!

Ajánlott: