Obsah:

FPGA Asteroid Game: 7 Steps (with Pictures)
FPGA Asteroid Game: 7 Steps (with Pictures)

Video: FPGA Asteroid Game: 7 Steps (with Pictures)

Video: FPGA Asteroid Game: 7 Steps (with Pictures)
Video: What's an FPGA? 2024, Říjen
Anonim
Hra asteroidů FPGA
Hra asteroidů FPGA

Pro náš závěrečný projekt CPE 133 jsme se rozhodli vytvořit hru asteroidů na našem FPGA pomocí dvou tlačítkových spínačů a 7segmentového displeje. Tato hra funguje tak, že se asteroid objeví v jedné ze tří náhodně vybraných řad a vrhne se směrem k lodi na druhé straně 7segmentového displeje. Horní a dolní tlačítko lze použít k přesunutí lodi mimo cestu asteroidu. Pokud tak neučiní, na displeji se na okamžik zobrazí „BAnG“a poté se hra rychle restartuje, aby to uživatel mohl zkusit znovu. Následuje stručný popis toho, jak byl projekt vytvořen, aby každý uživatel mohl replikovat nebo vylepšit náš design.

Krok 1: Přehled

Přehled
Přehled
Přehled
Přehled

Projekt do značné míry sestává z konečných stavových strojů (FSM), které pomocí logiky přenášejí FPGA mezi státy, které ukládají a zobrazují různé hodnoty polohy lodi a skály. Dva hlavní moduly jsou herní FSM pro skálu a loď a binární až 7segmentový dekodér displeje FSM, které jsou integrovány dohromady pomocí velmi jednoduchého strukturálního modelu ve VHDL.

FSM byly vytvořeny pro polohu lodi, polohu skály a pro 7segmentový dekodér. Účelem FSM lodi je, aby se loď mohla přesunout do správné polohy, když hráč stiskne tlačítko nahoru nebo dolů. FSM je potřebný, protože si musí pamatovat, ve které pozici byl naposledy, aby se mohl přesunout do správné polohy.

Účelem FSM skály je přesunout horninu do správné polohy na základě toho, ve které řadě se nachází a poslední polohy v této řadě. Kromě toho sleduje polohu modulu, který jej zobrazí, a pseudonáhodně vybere nový řádek, na kterém se objeví další.

FSM pro dekodér se 7 segmentovým displejem byl použit nejen k zobrazení lodi a skály, ale také k zobrazení „BAnG“, když jsou poloha lodi a poloha skály stejné.

Krok 2: Materiály

Materiály použité v projektu byly:

  • Vývojová rada Basys3 od společnosti Digilent, Inc.
  • Vivado Design Suite
  • sseg_dec.vhd (Tento soubor nám byl poskytnut na Polylearn a napsal jej Bryan Mealy)
  • Clk_div.vhd (Tento soubor nám byl poskytnut na Polylearn a napsal jej Bryan Mealy)
  • Tři stroje s konečným stavem (FSM)

Krok 3: Vytvoření hry

Vytváření hry
Vytváření hry
Vytváření hry
Vytváření hry
Vytváření hry
Vytváření hry
Vytváření hry
Vytváření hry

Herní modul byl vytvořen pomocí modelování chování k popisu stavů lodi a skály pro jejich vlastní FSM. Výhodou je, že je mnohem snazší modelovat obvod behaviorálně popisem toho, co dělá, než zjišťováním všech komponent potřebných k návrhu hardwaru.

Stavy hornin byly provedeny pomocí generátoru pseudonáhodných čísel pro první polohu horniny. Abychom toho dosáhli, dali jsme generátoru vlastní hodiny, které byly extrémně rychlé vzhledem k rychlosti hry. Na každé stoupající hraně se zvyšuje tříbitové číslo a všechny jeho hodnoty odpovídají jednomu ze tří počátečních stavů lodi. Tři hodnoty tedy odpovídají poloze 3 (vpravo nahoře), tři odpovídají poloze 7 (střed) a dvě odpovídají poloze 11 (vpravo dole).

Jakmile dojde k náhodnému generování a asteroid dostane počáteční stav, proudí vodorovně směrem k lodi bez přerušení.

0 ← 1 ← 2 ← 3

4 ← 5 ← 6 ← 7

11 ← 10 ← 9 ← 8

Hodiny použité pro další logiku stavu skály řídí rychlost hry; metodou pokusu a omylu jsme zjistili, že 9999999 je dobrá hodnota pro jeho maximální počet.

Logika lodi funguje tak, že se inicializuje do střední polohy (pozice 4) na zcela levé straně. Pokud stisknete horní nebo dolní tlačítko, loď se bude pohybovat nahoru a dolů do polohy 0 a 11 odpovídající stisknutému tlačítku.

Aby byl pohyb lodi pro uživatele dobrý, neudělali jsme jeho pohyb asynchronní. Ke změně stavu jsme použili hodiny a použili jsme maximální počet 5555555.

Krok 4: Zobrazení výsledku

Binární až 7segmentový dekodér převezme 4bitové polohové proměnné pro loď a asteroid a zobrazí příslušný obrázek (buď loď a skála, nebo zpráva „BAnG“).

Toho dosáhne tak, že nejprve zkontroluje, zda jsou tyto dvě hodnoty stejné, a poté zobrazí zprávu „BAnG“, pokud kontrola vrátí hodnotu true.

Pokud se nevrací, dekodér zobrazí loď a skálu přepnutím mezi nimi na velmi vysoké hodinové frekvenci a oklamáním oka, aby je viděl tak, jako by se zobrazovaly současně.

Krok 5: Dát to všechno dohromady

Dát to všechno dohromady
Dát to všechno dohromady

Zahrnuli jsme FSM lodi a skály do jednoho velkého FSM, který jsme propojili s displejem FSM. Vstupy do hry jsou tlačítko nahoru a dolů na desce BASYS3 a systémové hodiny. Výstupy jsou segmentové a anodové vektory se sedmi segmentovými displeji.

Tyto vstupy a výstupy budou vidět v souboru omezení, kde jsou mapovány porty.

Krok 6: Budoucí úpravy

V budoucnu by bylo vylepšení přidání dalších funkcí pohybu lodi do projektu. Toho lze dosáhnout jednoduše tak, že přidáte další 2 tlačítkové vstupy a umožníte lodi zaujmout polohy (stavy) jiné než 0, 4 a 8. Další možnou modifikací by mohlo být řízení dalšího načasování stavu asteroidu tak, aby se startovalo pomalu a zvyšovalo rychlost 1,5krát pokaždé, když mine loď, dokud nedostane zásah, kde se restartuje a znovu zpomalí. To by zvýšilo obtížnost hry a učinilo by to pro uživatele zábavnější, kdyby byla implementována, a to by bylo možné provést vytvořením proměnné pro maximální počet dalších stavových hodin skály, vynásobením této proměnné 1,5 vždy, když asteroid nedělá Nezasáhnu a resetuji ji na původní hodnotu pokaždé, když kámen zasáhne.

Krok 7: Závěr

Tento projekt nám pomohl lépe porozumět strojům s konečným stavem, hodinám a interaktivně zobrazovat na sedmisegmentových displejích.

Největší věcí na strojích s konečným stavem je, že je důležité vědět (pamatovat si), v jakém stavu se právě nacházíte, abyste se mohli přesunout do dalšího požadovaného stavu. Je ironií, že dobré rady do života; musíte vědět, kde jste, abyste věděli, kam jdete.

Manipulací s různými instancemi hodin jsme byli schopni náhodně generovat čísla, přesunout kámen na další pozici a spravovat zobrazení zprávy o lodi, kameni a konci hry.

Dozvěděli jsme se, že nelze zobrazit více než jednu anodu současně. Modul, který jsme dostali, využil výhody, že lidské oko vidí rozdíl pouze do určité frekvence. Byla tedy zvolena vyšší frekvence spínacích anod. Vidět loď a skálu současně je ve skutečnosti narážka, protože každá je zobrazena samostatně, ale velmi rychle. Tento koncept byl použit k zobrazení pohybu lodi, skály a zprávy „BAnG“.

Doporučuje: