Turinys:
- 1 žingsnis: apžvalga
- 2 žingsnis: vaizdo procesas
- 3 žingsnis: Rezultatų tvarkytojas
- 4 žingsnis: vaizdo generavimas
- 5 žingsnis: teniso žaidimas
- 6 veiksmas: VGA tvarkyklė
Video: Pongo žaidimas: 6 žingsniai
2024 Autorius: John Day | [email protected]. Paskutinį kartą keistas: 2024-01-30 10:47
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
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
Šį 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
Š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:
„Pasidaryk pats“„Leds Arduino“ruletės žaidimas: 3 žingsniai (su nuotraukomis)
„Pasidaryk pats“37 „Leds Arduino“ruletės žaidimas: Ruletė yra kazino žaidimas, pavadintas prancūziško žodžio, reiškiančio mažą ratą, vardu
DINO ŽAIDIMAS NAUDOJANT LDR: 5 žingsniai
DINO ŽAIDIMAS NAUDOJANT LDR: „Dinosaur Game“, dar žinomas kaip „T-Rex Game“ir „Dino Runner“, yra integruotas naršyklės žaidimas „Google Chrome“žiniatinklio naršyklėje. Žaidimą sukūrė Sebastienas Gabrielis 2014 m. Ir jį galima pasiekti paspaudus tarpo klavišą neprisijungus prie „Google Chrome“. L
Simono žaidimas - įdomus žaidimas!: 5 žingsniai
Simono žaidimas - įdomus žaidimas!: Nuoroda: čia Laikas mums treniruoti smegenis, ar ne? Be tų nuobodžių ir beprasmių žaidimų, yra žaidimas „Simono žaidimas“
Andrea pongo žaidimas: 4 žingsniai
Andrea pongo žaidimas: Tai žaidimas, kilęs iš čia. Aš padariau žaidimą, tada atlikdamas keletą pakeitimų. Aš parodysiu jums šio žaidimo kūrimo veiksmus, tada pateiksiu kodą, kurį pakeičiau. Pridėjau keletą pakeitimų prie pradinio kodo, pavyzdžiui, pakeičiau
Lankstus pongo ekranas ant marškinėlių: 8 žingsniai (su nuotraukomis)
Lankstus pongo ekranas su marškinėliais: tai mano 2013 metų Helovino kostiumas. Jis buvo kuriamas maždaug metus ir jo sukūrimas užtruko kelias valandas. Ekranas yra 14 x 15 pikselių, taigi, gana maža raiška, tačiau jis vis tiek gali padaryti įdomių dalykų. Tai fiziškai nuskendo