Turinys:

Pongo žaidimas: 6 žingsniai
Pongo žaidimas: 6 žingsniai

Video: Pongo žaidimas: 6 žingsniai

Video: Pongo žaidimas: 6 žingsniai
Video: Как пересадить взрослое дерево 2024, Liepa
Anonim
Pongo žaidimas
Pongo žaidimas

Medžiagos:

„Basys3“FPGA plokštė

VGA kabelis

Vivado

Šios instrukcijos tikslas yra sukurti pongo žaidimą, kuris bus rodomas monitoriuje. Projektas naudos VHDL programavimui ir naudoja „Basys3 FPGA“kodui atlikti ir perduoda vaizdą naudodamas VGA sąsają. Ši pamoka skirta žmonėms, kurie turi šiek tiek išankstinių žinių apie VHDL. Pamoka bus suskirstyta į 6 skirtingus skyrius: Apžvalga, Procesas, Rezultatų tvarkytojas, Vaizdo generavimas, Pong žaidimas ir VGA.

1 žingsnis: apžvalga

Apžvalga
Apžvalga

Aukščiau pateiktas vaizdas yra bendras scheminis projekto dizainas

Žaidimo tikslas:

Žaidimą sudaro ekranas su slankiuoju irklu, kurį gali valdyti vartotojas, ir fiksuota siena, kuri veikia kaip viršutinė riba. Kai vartotojas paspaus paleidimo mygtuką, kuris yra aukštyn, kamuolys pradės šokinėti aukštyn, atšoks nuo sienos ir bandys atsitrenkti į irklą. Jei kamuolys atsitrenkia į irklentę, jis vėl atšoka ir toliau šokinėja tol, kol nepataiko irklentės. Žaidimas baigtas, kai kamuolys nepataiko į irklą. Vartotojas galės naudoti kairįjį ir dešinįjį mygtukus, kad nustatytų irklentės judėjimą. Norėdami iš naujo nustatyti žaidimą, vartotojas turi paspausti centrinį mygtuką. Bėgimo laikas bus įrašytas į 7 segmentų ekraną. Yra penki lygiai, ir kas dešimt sekundžių lygis didėja, kol pasieksite 5 lygį, kur jis išliks, kol vartotojas pralaimės. Lygius lemia rutulio greitis; tai reiškia, kad kas dešimt sekundžių rutulio greitis didėja, taip padidėja žaidimo sunkumas.

Architektūros sistema:

Žemiau esanti schema yra pagrindinė sistemos aukščiausio lygio blokinė schema. Sistemoje yra keturi įėjimai: mygtukas R, mygtukas L, pradžia ir atstatymas ir laikrodis. Jis turi horizontalius ir vertikalius sinchronizavimo išėjimus, RBG (kuris nurodo pikselio spalvą tam tikroje vietoje) ir Score (kuris veikia kaip magistralė į 7 segmentų ekraną). Mygtukas aukštyn bus naudojamas kaip pradžia mygtuką, o kairysis ir dešinysis mygtukai bus naudojami irkliui judėti atitinkama kryptimi. 7 segmentų ekranas bus naudojamas rezultatui, kuris yra sekundžių, kurias vartotojas žaidė neprarasdamas žaidimo, įrašyti. Skaičius bus rodomas kaip dešimtainis skaičius.

Grandinės architektūra: Mes sukursime savo „Gizmo“naudodami vieną FSM, kurioje yra mažesnė FSM, antrinė FSM valdys žaidimo sudėtingumą, o pagrindinė FSM kontroliuos bendrą žaidimo srautą. Mūsų „Gizmo“taip pat naudos bent tris laikrodžio skirstytuvus, vieną rezultatui (laikui), vieną ekrano atnaujinimo dažniui ir vieną, prijungtą prie „DeMux“išvesties, kad galėtume kontroliuoti žaidimo greitį tęsis vis sunkiau. Žaidimas judės daug greičiau, kuo ilgiau žaisite. Turėsime „DeMux“valdymo įvestį, esančią sub-FSM būsenoje, kad galėtume kontroliuoti, kaip greitai žaidimas vyks ir kiek laiko jį žaisite. Mes naudosime keletą skaitiklių, vieną norėdami atnaujinti ekraną, o kitą - skaičiuodami rezultatą toliau žaisdami. Šis projektas turi du pagrindinius modulius ir submodulių masyvą, kurie manipuliuos įvesties duomenimis. Du pagrindiniai submoduliai yra VGA tvarkyklė ir mygtukų loginis modulis. VGA tvarkyklę sudarys programuojama atmintis, laikrodžio daliklis ir logika, kuri manipuliuos spalvų išvestimi. Mygtuko logikos modulį taip pat sudarys laikrodžio daliklis ir programuojama atmintis, taip pat dvejetainis dešimtainis keitiklis 7 segmentų ekranui su atitinkamu laikrodžio dalikliu.

2 žingsnis: vaizdo procesas

Projekto vaizdo apdorojimo skyriuje mes nustatysime rutulio ir irklo judėjimą. Programa turi prievadus, kuriuose yra kairysis, dešinysis, viršutinis ir centrinis mygtukai, dabartinė būsena, laikrodis, rutulio X ir Y padėtis, kairysis ir dešinysis irklo kraštas ir gedimas. Dabartinė būsena naudojama įjungimo signalui nustatyti. Kodas apima kelis atvejus, kai kamuolys gali judėti, ir nustatė sąlygas rutulio keliui nustatyti. Kitas proceso blokas nustato irklentės judėjimo kryptį, atsižvelgiant į tai, kurį mygtuką naudotojas paspaudžia. Šios projekto dalies kodas pridedamas su išsamiais komentarais, kuriuose aprašoma, ką daro kiekvienas skyrius.

3 žingsnis: Rezultatų tvarkytojas

Rezultatų tvarkytojas
Rezultatų tvarkytojas

Šį skyrių sudaro failai, susiję su rezultato rodymu sekundėmis 7 segmentų ekrane „Basys3“lentoje. Jame yra laikrodžio daliklis, naudojamas sekundėms skaičiuoti, rezultatų skaitiklis skaičiuoja sekundes, kurias žaidėjas žaidžia, segmento vairuotojas paima rezultatą ir konvertuoja jį į anodus ir katodus, kurie bus rodomi ekrane, taip pat nustato padėtį, skaičius bus rodomas, o galiausiai segmentų tvarkytojas konvertuoja dvejetainius skaitmenis į dešimtainius skaitmenis, kurie bus rodomi ekrane. Rezultatų tvarkytojas sujungia visas dalis ir susieja signalus. Visų penkių failų kodas pridedamas žemiau.

Laikrodžio daliklis:

Laikrodžio daliklis turi įvestis Clk (laikrodis), CEN (įjungti) ir Div (daliklis) ir išvestį Clk_out. Jei įjungimo signalas įjungtas, laikrodis skaičiuoja kylantį kraštą.

Taškų skaitiklis

Rezultatų skaitiklis turi įvestis Clk (Clock) ir RST (Reset) bei išėjimus Clk_Out ir Q, kurie iš esmės veikia kaip rezultato rezultatas.

Segmento vairuotojas

Segmento tvarkyklė turi įėjimus D1, D10, D100, D1000 ir Laikrodis. Skaičiai po „D“reiškia dešimtainę skaičių 7 segmentų ekrane. Išėjimai yra anodai ir skaitmenys. Laikrodis skaičiuoja ir priskiria numerius bei jo padėtį. Pavyzdžiui, vienoje vietoje bus rodomas „9“, o tūkstančiai, šimtai ir dešimtys - „0“. Kai jis persijungs į „10“, dabar skaičius dešimtoje vietoje bus „1“, o tūkstančiai, šimtai ir vienetai - „0“.

Segmentų tvarkytojas

Segmento valdiklio įvestis yra skaitmenis, o išėjimas - katodai. Iš esmės tai yra dvejetainiai skaičiai į katodo ekraną, kad ekrane būtų rodomi dešimtainiai skaičiai.

Rezultatų tvarkytojas

Rezultatų tvarkyklę sudaro keturi ankstesni objektai, ji viską sujungia ir atvaizduoja signalus. Taip pat įjungiamas ir išjungiamas skaitiklis pagal esamą būseną.

4 žingsnis: vaizdo generavimas

Vaizdo generavimą sudaro keturi komponentai: animacija, gedimų skaitiklis, atnaujinamas vaizdas ir pradžios skaitiklis. Šie failai nurodo, kaip sukurti vaizdus ekrano monitoriuje.

Animacija

Animacijos faile yra įvestys Clk (laikrodžio signalas), CEN (skaičiavimo įjungimas), RST (atstatymo signalas), B_X (X rutulio padėtis), B_Y (Y rutulio padėtis), P_L (kairio irklentės padėtis) ir P_R (dešinė irklentės padėtis). Išvestys yra WA (adresas, kuriuo rašome spalvą) ir WD (spalva rašoma nurodytu adresu). Faile yra „Play_Counter“, kuris yra skaitiklis, kuris bus naudojamas kaip MUX valdymo įvestis, kodavimo įrenginys, galintis išvesti tinkamas spalvas reikiamose vietose, ir galiausiai multiplekseris, rodantis teisingą spalvą, atsižvelgiant į irklentės padėtį ir kamuolys.

Atnaujinti vaizdą

Atnaujinimo failas naudojamas vaizdui atnaujinti, kai keičiasi rutulio ir irklo padėtis. Failas apima failus iš animacijos, pradžios skaitiklio ir gedimų skaitiklio. Jis susieja kiekvieno komponento signalus ir naudoja būsenos logiką, kad nustatytų signalus ir išvesties adresus.

Pradėti skaitiklį

Pradžios skaitiklis naudoja įvestis Clk, RS ir CEN bei išėjimus WA ir WD. Jis naudoja skaitiklį ir konversiją, kad nustatytų MUX valdymo įvestį. Tada multiplekseris naudoja įvestį, kad nustatytų teisingus spalvų adresus, ir siunčia šiuos duomenis į VGA tvarkyklę. Jis naudojamas rodyti „Pong“, kai vartotojas pradeda žaidimą.

Gedimų skaitiklis

Nesėkmių skaitiklis naudojamas rodyti „Game Over“, kai vartotojas pralaimi žaidimą. Jis turi Clk, RST ir CEN signalą. Jis naudoja skaitiklį ir konversijos formulę, kad nustatytų MUX valdymo įvestį. Tada multiplekseris naudoja įvestį, kad nustatytų teisingus spalvų adresus, ir siunčia šiuos duomenis į VGA tvarkyklę.

5 žingsnis: teniso žaidimas

Pongo žaidimas
Pongo žaidimas

Ši projekto dalis apima „Pong Master“, „Finite State Machine“(FSM), „Timer“ir „Start Debounce“failus.

Laikmatis

Laikmačio išėjimai yra įėjimai Clk (laikrodis) ir PS (dabartinė būsena), laikmatis ir Clk_out. Laikmatis naudojamas keisti žaidimo greitį maždaug kas penkias sekundes.

Srauto FSM

„Flow FSM“turi įvestis „Clk“, „Fail“, „Timer“, „Bttn_S“(„Start“mygtukas) ir „Buttn_RST“(„Reset Button“) ir išvestį „Pres_S“(dabartinės būsenos išvestis). FMV naudoja laikmatį, kad atnaujintų esamą būseną į kitą būseną, ir nuolat atnaujina kitą būseną, kol žaidimas pasieks 5 lygį, kai jis lieka iki žaidimo pabaigos.

Pradėti Debounce

„Start Debounce“yra pradinis kamuolio atšokimas. Jis turi įėjimus S_in ir Clk, o išėjimus - S_out.

Šiame faile naudojami visi ankstesni komponentai, todėl visi komponentai yra momentiniai. Pagrindinis failas sujungia visus ankstesnius komponentus, kuriuos sukūrėme kartu.

6 veiksmas: VGA tvarkyklė

VGA (Visual Graphics Array) tvarkyklė yra programinė įranga, naudojama komandoms ar duomenims priimti, kurie siunčiami į ekrano ekraną. Vairuotoją mums padovanojo mūsų profesorius. Norėdami prijungti „Basys3“plokštę prie monitoriaus, naudokite tvarkyklę ir VGA laidą.

Dabar turėtumėte būti pasirengę sukurti savo pongo žaidimą naudodami VHDL!

Rekomenduojamas: