Sisukord:

Pongimäng: 6 sammu
Pongimäng: 6 sammu

Video: Pongimäng: 6 sammu

Video: Pongimäng: 6 sammu
Video: Как использовать видеосенсор с направлением по нулям 2024, Juuli
Anonim
Pongimäng
Pongimäng

Materjalid:

Basys3 FPGA plaat

VGA kaabel

Vivado

Selle juhendi eesmärk on töötada välja pongi mäng, mida kuvatakse monitoril. Projekt kasutab programmeerimiseks VHDL -i ja kasutab koodi läbiviimiseks Basys3 FPGA -d ning edastab pildi VGA -liidese abil. See õpetus on mõeldud inimestele, kellel on VHDL -ist eelteadmised. Õpetus jaguneb 6 erinevaks osaks: ülevaade, protsess, skoorihaldur, pildi genereerimine, pongimäng ja VGA.

1. samm: ülevaade

Ülevaade
Ülevaade

Ülaltoodud pilt on projekti üldine skemaatiline disain

Mängu eesmärk:

Mäng koosneb ekraanist, millel on liuglabad, mida saab juhtida kasutaja, ja fikseeritud seinast, mis toimib ülemise piirina. Kui kasutaja vajutab käivitusnuppu, mis on ülesnupp, hakkab pall põrgatama ja põrkab seinalt maha ning üritab mõlale lüüa. Kui pall lööb mõlale, põrkab see uuesti üles ja põrkab edasi, kuni jätab mõla vahele. Mäng on lõppenud, kui pall ei saa mõlale pihta. Kasutaja saab mõla liikumise määramiseks kasutada vasakut ja paremat nuppu. Mängu lähtestamiseks peab kasutaja vajutama keskmist nuppu. Jooksuaeg salvestatakse 7 segmendi ekraanile. Tase on viis ja iga kümne sekundi järel tase tõuseb, kuni jõuate tasemele 5, kus see jääb, kuni kasutaja kaotab. Tasemed määratakse palli kiiruse järgi; see tähendab, et iga kümne sekundi järel suureneb palli kiirus, suurendades seeläbi mängu raskust.

Süsteemi arhitektuur:

Allolev skeem on süsteemi üldine tipptasemel plokkskeem. Süsteemil on neli sisendit: nupp R, nupp L, start ja lähtestamine ning kell. Sellel on horisontaalsed ja vertikaalsed sünkroonimisväljundid, RBG (mis viitab piksli värvile teatud kohas) ja Score (mis toimib seitsme segmendi ekraanile). Alustamiseks kasutatakse ülesnuppu. nuppu ja vasakut ja paremat nuppe kasutatakse mõla liigutamiseks vastavas suunas. Skoori salvestamiseks kasutatakse 7-segmendilist kuva, mis on sekundite arv, mida kasutaja on mänginud mängu kaotamata. Number kuvatakse kümnendarvuna.

Vooluahela arhitektuur: ehitame oma gizmo kasutades ühte FSM-i, mis sisaldab väiksemat FSM-i, sub-FSM kontrollib mängu keerukust, samas kui peamine FSM kontrollib mängu üldist voogu. Meie gizmo kasutab ka vähemalt kolme kellajagurit, üks skoori (aja) jaoks, üks ekraani värskendussageduse jaoks ja teine, mis on ühendatud DeMuxi väljundiga, et saaksime mängu kiirust kontrollida jätkab üha suurenevate raskustega. Mäng liigub palju kiiremini, mida kauem mängite. Meil on DeMuxi juhtimissisend alam-Mikroneesia alaseisundis, et saaksime kontrollida, kui kiiresti mäng läheb ja kui kaua te seda mängite. Kasutame mõnda loendurit, ühte ekraani värskendamiseks ja teist, et mängimise jätkamisel tulemusi lugeda. Sellel projektil on kaks põhimoodulit ja hulk alammooduleid, mis manipuleerivad sisendandmetega. Kaks peamist alammoodulit on VGA draiver ja nuppude loogikamoodul. VGA draiver koosneb programmeeritavast mälust, kellajagurist ja loogikast, mis muudab värvi väljundit. Nuppude loogikamoodul koosneb ka kellajagurist ja programmeeritavast mälust ning 7-segmendilise ekraani binaar- ja kümnendmuundurist koos vastava kellajaguriga.

2. samm: pildiprotsess

Projekti pildiprotsessi osas määrame palli ja mõla liikumise. Programmil on pordid, mis sisaldavad vasak-, parem-, üla- ja kesknuppe, praegust olekut, kella, palli X- ja Y -positsioone, mõla vasakut ja paremat serva ning ebaõnnestumist. Praegust olekut kasutatakse lubamissignaali määramiseks. Kood hõlmab palli liigutamise mitmeid juhtumeid ja on seadnud tingimused palli tee määramiseks. Järgmine protsessiplokk määrab mõla liikumissuuna vastavalt sellele, millist nuppu kasutaja vajutab. Projekti selle osa kood on lisatud üksikasjalike kommentaaridega, mis kirjeldavad iga jaotise tegevust.

3. samm: skoorihaldur

Skoorihaldur
Skoorihaldur

See jaotis koosneb failidest, mis on seotud tulemuse kuvamisega sekundites Basys3 tahvli 7 segmendi ekraanil. See sisaldab kellajaoturit, mida kasutatakse sekundite loendamiseks, skooriloendur loeb sekundeid, mida kasutaja mängib, segmendi juht võtab skoori ja teisendab selle ekraanil kuvatavateks anoodideks ja katoodideks ning määrab ka asukoha, kuvatakse number ja lõpuks teisendab segmendi käitleja binaarkoodid ekraanil kuvatavateks kümnendkohtadeks. Skoorihaldur paneb kõik tükid kokku ja kaardistab signaalid. Kõigi viie faili kood on lisatud allpool.

Kellajaotur:

Kellajaguril on sisendid Clk (kell), CEN (sisselülitamine) ja Div (jagaja) ning väljund Clk_out. Kui lubamise signaal on sisse lülitatud, loeb kell tõusvasse serva.

Skooriloendur

Tulemusloenduril on sisendid Clk (Clock) ja RST (Reset) ning väljundid Clk_Out ja Q, mis toimib sisuliselt skoori väljundina.

Segmendi draiver

Segmendi draiveril on sisendid D1, D10, D100, D1000 ja Kell. Numbrid pärast "D" viitavad kümnendkohale 7 -segmendilisel ekraanil. Väljunditeks on anoodid ja numbrid. Kell loeb ja määrab numbrid ja asukoha. Näiteks kuvatakse "9" ühes kohas ja "0" tuhandetes, sadades ja kümnetes. Kui see lülitub väärtusele "10", on numbril nüüd kümnete kohal "1" ja tuhandete, sadade ja üksikute kohal "0".

Segmendi käitleja

Segmendi käitleja sisendiks on number ja väljundiks katoodid. Põhimõtteliselt on see katoodinäidiku binaarnumbrid ekraanil kümnendarvude väljastamiseks.

Skoorihaldur

Skoorihaldur koosneb neljast eelmisest olemist ja paneb kõik kokku ning kaardistab signaalid. Samuti lubab ja keelab loendur praeguse oleku põhjal.

4. samm: kujutise loomine

Pildi genereerimine koosneb neljast komponendist: animatsioon, ebaõnnestumise loendur, pildi värskendamine ja käivitusloendur. Need failid viitavad sellele, kuidas kuvariekraanil pilte luua.

Animatsioon

Animatsioonifailil on sisendid Clk (kella signaal), CEN (loendamise lubamine), RST (lähtestussignaal), B_X (palli X -asend), B_Y (palli Y -asend), P_L (vasakpoolne mõlaasend) ja P_R (mõla parempoolne asend). Väljunditeks on WA (aadress, millele me värvi kirjutame) ja WD (värv kirjutatakse määratud aadressile). Failil on Play_Counter, mis on loendur, mida kasutatakse MUX -i kontrollisisendina, kodeerija, mis suudab õigeid värve õigetele kohtadele väljastada, ja lõpuks multiplekser, mis kuvab mõla asendi põhjal õige värvi ja pall.

Värskenda pilti

Faili Värskenda pilti kasutatakse pildi värskendamiseks, kui pall ja mõla asend muutuvad. Fail sisaldab Animation, Start Counter ja Fail Counter failide komponente. See kaardistab iga komponendi signaalid ja kasutab olekuloogikat signaalide ja väljundaadresside määramiseks.

Käivita loendur

Stardiloendur kasutab sisendeid Clk, RS ja CEN ning väljundeid WA ja WD. See kasutab MUX -i juhtsisendi määramiseks loendurit ja teisendust. Seejärel kasutab multiplekser sisendit õigete värviaadresside määramiseks ja saadab need andmed VGA draiverile. Seda kasutatakse mängu "Pong" kuvamiseks, kui kasutaja mängu alustab.

Ebaõnnestumise loendur

Ebaõnnestumiste loendurit kasutatakse "Game Over" kuvamiseks, kui kasutaja mängu kaotab. Sellel on Clk, RST ja CEN signaal. See kasutab loendurit ja teisendusvalemit MUX -i juhtsisendi määramiseks. Seejärel kasutab multiplekser sisendit õigete värviaadresside määramiseks ja saadab need andmed VGA draiverile.

Samm 5: Pongimäng

Pongimäng
Pongimäng

Projekti see jaotis sisaldab faile Pong Master, Finite State Machine (FSM), Timer ja Start Debounce.

Taimer

Taimeril on väljunditena sisendid Clk (Clock) ja PS (Present State) ning taimer ja Clk_out. Taimerit kasutatakse mängu kiiruse muutmiseks umbes iga viie sekundi tagant.

Voo FSM

Flow FSM -il on sisendid Clk, Fail, Timer, Bttn_S (Start -nupp) ja Buttn_RST (Reset Button) ning väljund Pres_S (Present State Output). Mikroneesia kasutab taimerit praeguse oleku värskendamiseks järgmisse olekusse ja ajakohastab järgmist olekut, kuni mäng jõuab tasemele 5, kus see jääb mängu lõpuni.

Alustage Debounce'i

Start Debounce on palli algne põrgatus. Sellel on sisendid S_in ja Clk ning väljund S_out.

See fail kasutab kõiki eelnevaid komponente ja muudab selle nii, et kõik komponendid on hetkelised. See on põhifail, mis koondab kokku kõik eelmised komponendid, mille oleme kokku ehitanud.

Samm: VGA draiver

VGA (Visual Graphics Array) draiver on tarkvara, mida kasutatakse ekraanile saadetavate käskude või andmete vastuvõtmiseks. Autojuhi kinkis meile meie professor. Kasutage draiverit ja VGA -kaablit, et ühendada Basys3 -plaat monitoriga.

Nüüd peaksite olema valmis VHDL -i abil oma ponimängu tegema!

Soovitan: