Turinys:

FPGA asteroidų žaidimas: 7 žingsniai (su nuotraukomis)
FPGA asteroidų žaidimas: 7 žingsniai (su nuotraukomis)

Video: FPGA asteroidų žaidimas: 7 žingsniai (su nuotraukomis)

Video: FPGA asteroidų žaidimas: 7 žingsniai (su nuotraukomis)
Video: Cine multi FPGA in Asteroids cocktail CAB 2024, Spalio mėn
Anonim
FPGA asteroidų žaidimas
FPGA asteroidų žaidimas

Galutiniam CPE 133 projektui nusprendėme sukurti asteroidų žaidimą savo FPGA, naudodami du mygtukinius jungiklius ir 7 segmentų ekraną. Žaidimas veikia taip, kad asteroidas neršia vienoje iš trijų atsitiktinai parinktų eilučių, o kitoje 7 segmentų ekrano pusėje-link laivo. Viršutinis ir apatinis mygtukai gali būti naudojami jūsų laivui pašalinti iš asteroido kelio. Nepavykus to padaryti, ekrane akimirką rodomas užrašas „BAnG“ir greitai vėl paleidžiamas žaidimas, kad vartotojas galėtų bandyti dar kartą. Toliau pateikiamas trumpas projekto kūrimo aprašymas, kad kiekvienas vartotojas galėtų atkartoti ar patobulinti mūsų dizainą.

1 žingsnis: apžvalga

Apžvalga
Apžvalga
Apžvalga
Apžvalga

Projektą daugiausia sudaro baigtinės būsenos mašinos (FSM), kurios naudoja logiką FPGA perkėlimui tarp būsenų, kuriose saugomos ir rodomos skirtingos laivo ir uolienų padėties vertės. Du pagrindiniai moduliai yra žaidimo FSM, skirti uolienoms ir laivams, ir dvejetainis iki 7 segmentų ekrano dekoderis FSM, kurie yra integruoti kartu naudojant labai paprastą struktūrinį VHDL modelį.

FSM buvo sukurtos laivo padėčiai, uolienų padėčiai ir 7 segmentų dekoderiui. Laivo FSM tikslas yra tas, kad laivas galėtų judėti į teisingą padėtį, kai žaidėjas paspaudžia aukštyn arba žemyn mygtuką. MFV reikalingas, nes norėdamas pereiti į teisingą padėtį, jis turi prisiminti, kurioje pozicijoje jis buvo paskutinis.

Uolos FSM tikslas yra perkelti uolą į teisingą padėtį, atsižvelgiant į tai, kurioje eilėje ji yra, ir paskutinę tos eilės padėtį. Be to, jis stebi modulio, kuris jį parodys, padėtį ir pseudoatsitiktinai parenka naują eilutę, kuri bus rodoma šalia.

7 segmentų ekrano dekoderio FSM buvo naudojamas ne tik laivui ir uolienai rodyti, bet ir „BAnG“, kai laivo padėtis ir uolienos padėtis sutampa.

2 žingsnis: medžiagos

Projekte panaudotos šios medžiagos:

  • „Basys3“plėtros valdyba iš „Digilent, Inc.
  • „Vivado“dizaino liukso numeris
  • sseg_dec.vhd (Šis failas mums buvo pateiktas „Polylearn“ir parašė Bryanas Mealy)
  • Clk_div.vhd (Šis failas mums buvo pateiktas „Polylearn“ir parašė Bryanas Mealy)
  • Trys baigtinės būsenos mašinos (FSM)

3 žingsnis: sukurkite žaidimą

Žaidimo kūrimas
Žaidimo kūrimas
Žaidimo kūrimas
Žaidimo kūrimas
Žaidimo kūrimas
Žaidimo kūrimas
Žaidimo kūrimas
Žaidimo kūrimas

Žaidimo modulis buvo sukurtas naudojant elgesio modeliavimą, kad būtų galima apibūdinti laivo ir uolienų būsenas atitinkamiems FSM. To pranašumas yra tas, kad kur kas lengviau modeliuoti grandinę elgsenai aprašant, ką ji daro, o ne išsiaiškinti visus komponentus, reikalingus aparatinei įrangai suprojektuoti.

Uolienų būsenos buvo padarytos naudojant pseudo atsitiktinių skaičių generatorių pirmajai uolienos padėčiai. Norėdami tai padaryti, davėme generatoriui savo laikrodį, kuris buvo labai greitas, palyginti su žaidimo greičiu. Ant kiekvieno kylančio krašto padidinamas trijų bitų skaičius, o visos jo vertės atitinka vieną iš trijų laivo pradžios būsenų. Todėl trys vertės atitinka 3 poziciją (viršuje dešinėje), trys - 7 poziciją (centras), o dvi - 11 poziciją (apačioje dešinėje).

Kai atsitiktinė karta atsirado ir asteroidui buvo suteikta pradinė būsena, jis be pertrūkių teka horizontaliai link laivo.

0 ← 1 ← 2 ← 3

4 ← 5 ← 6 ← 7

11 ← 10 ← 9 ← 8

Laikrodis, naudojamas kitai roko būsenos logikai, kontroliuoja žaidimo greitį; per bandymus ir klaidas nustatėme, kad 9999999 yra gera vertė, atsižvelgiant į maksimalų skaičių.

Laivo logika veikia inicijuojant į centrinę padėtį (4 padėtis) tolimojoje kairėje pusėje. Paspaudus viršutinį arba apatinį mygtuką, laivas judės aukštyn ir žemyn į 0 ir 11 padėtį, atitinkančią paspaustą mygtuką.

Kad laivo judėjimas jaustųsi naudotojui gerai, nepadarėme jo judėjimo asinchroniniu. Jo būsenai keisti naudojome laikrodį ir maksimalų skaičių 5555555.

4 žingsnis: Rezultato rodymas

Dvejetainis iki 7 segmentų dekoderis priima laivo ir asteroido 4 bitų padėties kintamuosius ir parodo atitinkamą vaizdą (laivas ir uola arba pranešimas „BAnG“).

Tai pasiekiama pirmiausia patikrinus, ar abu yra lygūs, o tada parodę pranešimą „BAnG“, jei patikrinimas pateikia teisingą.

Jei tai negrįš, tiesa, dekoderis parodys laivą ir uolą, perjungdamas juos labai dideliu laikrodžio dažniu ir suklaidindamas akis, kad jie matytų juos taip, tarsi jie būtų rodomi vienu metu.

5 žingsnis: sudėkite viską kartu

Viską sujungti
Viską sujungti

Mes apėmėme laivo ir uolos FSM į vieną didelę FSM, kurią prijungėme prie ekrano FSM. Žaidimo įvestys yra mygtukas aukštyn ir žemyn ant BASYS3 plokštės ir sistemos laikrodis. Išėjimai yra septynių segmentų ir anodų vektoriai.

Šie įėjimai ir išėjimai bus matomi apribojimų faile, kuriame jie yra susieti.

6 žingsnis: būsimi pakeitimai

Ateityje, jei į projektą būtų įtraukta daugiau laivų judėjimo funkcijų, tai būtų patobulinta. Tai galima padaryti tiesiog įvedus dar 2 mygtuko įvestis ir leidžiant laivui užimti kitas pozicijas (būsenas), išskyrus 0, 4 ir 8. Kitas galimas pakeitimas galėtų būti kitos asteroido būsenos laiko valdymas, kad jis lėtai prasidėtų ir padidintų greitį 1,5 karto kiekvieną kartą, kai jis praleidžia laivą, kol jis nukentės, kur jis vėl įsijungtų ir vėl taptų lėtas. Tai padidintų žaidimo sudėtingumą ir padarytų jį smagesnį vartotojui, jei jis būtų įgyvendintas, ir tai būtų galima padaryti sukuriant kintamąjį, skirtą maksimaliam kito roko būsenos laikrodžio skaičiui, padauginus tą kintamąjį iš 1,5 kiekvieną kartą, kai asteroidas to nedaro nepataikykite, ir iš naujo nustatykite pradinę vertę kiekvieną kartą, kai roko smūgis.

7 žingsnis: Išvada

Šis projektas padėjo mums geriau suprasti baigtinių būsenų mašinas, laikrodžius ir interaktyvų rodymą septynių segmentų ekranuose.

Didžiausias dalykas baigtinių būsenų mašinose yra tas, kad norint pereiti į kitą norimą būseną svarbu žinoti (prisiminti), kokios būsenos esate. Ironiška, bet geras gyvenimo patarimas; jūs turite žinoti, kur esate, kad žinotumėte, kur einate.

Valdydami įvairius laikrodžių atvejus, mes galėjome atsitiktinai sugeneruoti skaičius, perkelti uolą į kitą padėtį ir valdyti laivo, uolos ir žaidimo pabaigos pranešimų rodymą.

Mes sužinojome, kad vienu metu negalima rodyti daugiau nei vieno anodo. Mums suteiktas modulis pasinaudojo tuo, kad žmogaus akis mato skirtumą tik iki tam tikro dažnio. Taigi buvo pasirinktas didesnis anodų perjungimo dažnis. Vienu metu matomas laivas ir uola iš tikrųjų yra užuomina, nes kiekvienas rodomas atskirai, bet labai greitai. Ši koncepcija buvo pritaikyta rodyti laivo judėjimą, uolą ir pranešimą „BAnG“.

Rekomenduojamas: