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: Program Your Own FPGA Video Game 2024, Septembra
Anonim
Hra s asteroidmi FPGA
Hra s asteroidmi FPGA

Pre náš konečný projekt CPE 133 sme sa rozhodli vytvoriť hru s asteroidmi na našom FPGA pomocou dvoch tlačidlových spínačov a 7-segmentového displeja. Hra funguje tak, že asteroid sa objaví v jednom z troch náhodne vybraných riadkov a vrhne sa smerom k lodi na druhej strane 7-segmentového displeja. Horné a dolné tlačidlo je možné použiť na presunutie lode mimo cestu asteroidu. Ak tak neurobíte, na displeji sa na chvíľu zobrazí „BAnG“a potom sa hra rýchlo reštartuje, aby to používateľ mohol skúsiť znova. Nasleduje stručný opis toho, ako bol projekt vytvorený, aby ktorýkoľvek používateľ mohol replikovať alebo vylepšiť náš dizajn.

Krok 1: Prehľad

Prehľad
Prehľad
Prehľad
Prehľad

Projekt do značnej miery pozostáva z konečných stavových strojov (FSM), ktoré používajú logiku na prenos FPGA medzi štátmi, ktoré ukladajú a zobrazujú rôzne hodnoty polohy lodí a skál. Dva hlavné moduly sú herné FSM pre rock a loď a binárny až 7-segmentový dekodér displeja FSM, ktoré sú integrované dohromady pomocou veľmi jednoduchého štruktúrneho modelu vo VHDL.

FSM boli vytvorené pre polohu lode, polohu skaly a pre 7-segmentový dekodér. Účelom FSM lode je, aby sa loď mohla presunúť do správnej polohy, keď hráč stlačí tlačidlo nahor alebo nadol. FSM je potrebný, pretože si musí pamätať, v ktorej polohe bol naposledy, aby sa mohol presunúť do správnej polohy.

Účelom FSM skaly je presunúť horninu do správnej polohy na základe toho, v ktorom rade sa nachádza a poslednej polohy v tomto rade. Okrem toho sleduje polohu modulu, ktorý ho bude zobrazovať, a pseudonáhodne vyberie nový riadok, v ktorom sa zobrazí ako ďalší.

FSM pre dekodér so 7 segmentovým displejom slúžil nielen na zobrazenie lode a skaly, ale aj na zobrazenie „BAnG“, ak sú poloha lode a poloha kameňa rovnaké.

Krok 2: Materiály

Na projekt boli použité tieto materiály:

  • Vývojová rada Basys3 od spoločnosti Digilent, Inc.
  • Suita Vivado Design Suite
  • sseg_dec.vhd (Tento súbor nám bol poskytnutý na Polylearn a napísal ho Bryan Mealy)
  • Clk_div.vhd (Tento súbor nám bol poskytnutý na Polylearn a napísal ho Bryan Mealy)
  • Tri stroje s konečným stavom (FSM)

Krok 3: Vytvorenie hry

Výroba hry
Výroba hry
Výroba hry
Výroba hry
Výroba hry
Výroba hry
Výroba hry
Výroba hry

Herný modul bol vytvorený pomocou modelovania správania na opis stavov lode a skaly pre ich vlastné FSM. Výhodou tohto je, že je oveľa jednoduchšie modelovať obvod behaviorálne popisom toho, čo robí, než zisťovaním všetkých komponentov potrebných na návrh hardvéru.

Stavy hornín boli urobené pomocou generátora pseudonáhodných čísel pre prvú polohu horniny. Aby sme to dosiahli, dali sme generátoru vlastné hodiny, ktoré boli extrémne rýchle v porovnaní s rýchlosťou hry. Na každej stúpajúcej hrane sa zvýši trojbitové číslo a všetky jeho hodnoty zodpovedajú jednému z troch počiatočných stavov lode. Preto tri hodnoty zodpovedajú pozícii 3 (vpravo hore), tri zodpovedajú pozícii 7 (stred) a dve zodpovedajú pozícii 11 (vpravo dole).

Akonáhle dôjde k náhodnému generovaniu a asteroid dostane počiatočný stav, prúdi horizontálne smerom k lodi bez prerušenia.

0 ← 1 ← 2 ← 3

4 ← 5 ← 6 ← 7

11 ← 10 ← 9 ← 8

Hodiny použité v ďalšej logike stavu skaly riadia rýchlosť hry; Prostredníctvom pokusu a omylu sme zistili, že 9999999 je dobrá hodnota pre jeho maximálny počet.

Logika lode funguje tak, že sa inicializuje do strednej polohy (pozícia 4) na úplne ľavej strane. Ak stlačíte horné alebo dolné tlačidlo, loď sa presunie hore a dole do polohy 0 a 11 zodpovedajúcej stlačenému tlačidlu.

Aby bol pohyb lode pre používateľa dobrý, nerobili sme jeho pohyb asynchrónnym. Na zmenu stavu sme použili hodiny a použili sme maximálny počet 5555555.

Krok 4: Zobrazenie výsledku

Binárny až 7-segmentový dekodér preberá 4-bitové premenné polohy pre loď a asteroid a zobrazuje príslušný obrázok (buď loď a skala, alebo správa „BAnG“).

Dosiahne to tým, že najskôr skontroluje, či sú tieto dve hodnoty rovnaké, a potom zobrazí správu „BAnG“, ak kontrola vráti hodnotu True.

Ak sa to nevráti, dekodér zobrazí loď a skalu prepnutím medzi nimi na veľmi vysokej hodinovej frekvencii a oklamaním oka, aby ich videl tak, ako keby sa zobrazovali súčasne.

Krok 5: Dajte to všetko dohromady

Dávať to všetko dokopy
Dávať to všetko dokopy

Zahrnuli sme FSM lode a skaly do jedného veľkého FSM, ktorý sme zapojili do displeja FSM. Vstupmi do hry sú tlačidlo hore a dole na doske BASYS3 a systémové hodiny. Výstupmi sú segmentové a anódové vektory so siedmimi segmentovými displejmi.

Tieto vstupy a výstupy budú zobrazené v súbore obmedzení, kde sú mapované porty.

Krok 6: Budúce úpravy

V budúcnosti by bolo vylepšením pridanie ďalších funkcií pohybu lodí do projektu. To sa dá dosiahnuť jednoducho poskytnutím ďalších 2 tlačidlových vstupov a umožnením lodi zaujať polohy (stavy) iné ako 0, 4 a 8. Ďalšou možnou modifikáciou by mohlo byť ovládanie ďalšieho načasovania stavu asteroidu tak, aby sa štartovalo pomaly a aby sa zvýšila rýchlosť 1,5 -krát zakaždým, keď minie loď, kým nedostane zásah, kde sa reštartuje a opäť spomalí. To by zvýšilo obtiažnosť hry a urobilo by to pre používateľa väčšiu zábavu, keby bola implementovaná, a to by bolo možné dosiahnuť vytvorením premennej pre maximálny počet ďalších stavových hodín skaly, vynásobením tejto premennej číslom 1,5 zakaždým, keď asteroid neurobí Nedostanete úder a resetujete ho na pôvodnú hodnotu zakaždým, keď kameň zasiahne.

Krok 7: Záver

Tento projekt nám pomohol lepšie porozumieť automatom, hodinám a interaktívnemu zobrazovaniu na sedemsegmentových displejoch.

Najväčšia vec na strojoch s konečným stavom je, že je dôležité vedieť (zapamätať si), v akom stave sa práve nachádzate, aby ste sa mohli presunúť do ďalšieho požadovaného stavu. Je iróniou, že dobré rady do života; musíte vedieť, kde ste, aby ste vedeli, kam pôjdete.

Manipuláciou s rôznymi prípadmi hodín sme boli schopní náhodne generovať čísla, presunúť skalu na ďalšiu pozíciu a zvládnuť zobrazenie správy o lodi, skale a konci hry.

Dozvedeli sme sa, že nie je možné zobraziť viac ako jednu anódu súčasne. Modul, ktorý sme dostali, využil výhodu, že ľudské oko vidí rozdiel iba do určitej frekvencie. Bola teda zvolená vyššia frekvencia spínacích anód. Vidieť loď a skalu súčasne je vlastne narážka, pretože každá je zobrazená samostatne, ale veľmi rýchlo. Tento koncept bol použitý na zobrazenie pohybu lode, skaly a správy „BAnG“.

Odporúča: