Kazalo:

Pong igra: 6 korakov
Pong igra: 6 korakov

Video: Pong igra: 6 korakov

Video: Pong igra: 6 korakov
Video: 6 Базовых элементов настольного тенниса #техника 2024, Julij
Anonim
Pong igra
Pong igra

Materiali:

Basys3 FPGA plošča

VGA kabel

Vivado

Namen tega navodila je razviti pong igro, ki bo prikazana na monitorju. Projekt bo za programiranje uporabil VHDL in uporabil Basys3 FPGA za izvajanje kode in prenos slike z vmesnikom VGA. Ta vadnica je namenjena ljudem, ki imajo malo predznanja o VHDL. Vadnica bo razdeljena na 6 različnih razdelkov: Pregled, Proces, Vodnik ocenjevanja, Ustvarjanje slik, Pong igra in VGA.

1. korak: Pregled

Pregled
Pregled

Zgornja slika je celostna shema projekta

Cilj igre:

Igra je sestavljena iz zaslona z drsnim veslom, ki ga lahko upravlja uporabnik, in fiksne stene, ki deluje kot zgornja meja. Ko uporabnik pritisne gumb za zagon, ki je gumb navzgor, se bo žogica začela odbijati navzgor, odbijala pa se bo od stene in poskušala udariti v veslo. Če žoga zadene veslo, se znova odbije in nadaljuje z odbijanjem, dokler ne zgreši vesla. Igra se konča, ko žoga ne zadene vesla. Uporabnik bo lahko z levim in desnim gumbom določil gibanje vesla. Za ponastavitev igre mora uporabnik pritisniti osrednji gumb. Čas teka se zabeleži na 7 -segmentnem zaslonu. Obstaja pet stopenj in vsakih deset sekund se raven povečuje, dokler ne dosežete stopnje 5, kjer ostane, dokler uporabnik ne izgubi. Ravni so določene s hitrostjo žoge; to pomeni, da se vsakih deset sekund hitrost žoge poveča in s tem poveča težavnost igre.

Arhitektura sistema:

Spodnji diagram je osnovni splošni zgornji blokovni diagram sistema. Sistem ima štiri vhode: gumb R, gumb L, zagon in ponastavitev ter uro. Ima vodoravne in navpične izhode za sinhronizacijo, RBG (kar se nanaša na barvo slikovne pike na določeni lokaciji) in Score (ki deluje kot vodilo za 7-segmentni zaslon). Gumb gor se bo uporabil kot začetek gumb, levi in desni gumb pa bosta uporabljena za premikanje vesla v njihovih smereh. Za zapis rezultatov bo uporabljen 7-segmentni zaslon, ki je število sekund, ki jih je uporabnik igral brez izgube igre. Številka bo prikazana kot decimalna številka.

Arhitektura vezja: Naš gizmo bomo zgradili z enim FSM-jem, ki vsebuje manjši FSM, pod-FSM bo nadzoroval težavnost igre, medtem ko bo glavni FSM nadzoroval celoten potek igre. Naš gizmo bo uporabljal tudi vsaj tri delilnike ure, enega za rezultat (čas), enega za hitrost osveževanja zaslona in drugega, ki je priključen na izhod DeMuxa, tako da lahko nadzorujemo, kako hitro se igra bo nadaljeval z naraščajočimi težavami. Dlje ko igrate, se bo igra premikala veliko hitreje. Kontrolni vhod DeMux prisotnega stanja pod-FSM bomo imeli, tako da lahko nadzorujemo, kako hitro bo igra potekala, kako dolgo jo igrate. Uporabili bomo nekaj števcev, enega za osvežitev zaslona in enega za štetje rezultatov, ko nadaljujete z igro. Ta projekt ima dva glavna modula in niz podmodulov, ki bodo upravljali vhodne podatke. Dva glavna podmodula sta gonilnik VGA in logični modul gumbov. Gonilnik VGA bo sestavljen iz programabilnega pomnilnika, delilnika ure in logike, ki bo vplivala na barvni izhod. Gumbni logični modul bo prav tako sestavljen iz delilnika ure in programabilnega pomnilnika ter binarno-decimalnega pretvornika za 7-segmentni zaslon z ustreznim delilnikom ure.

Korak: Postopek slike

Za odsek Image Process v projektu bomo določali gibanje žoge in vesla. Program ima vrata, ki vključujejo levi, desni, zgornji in sredinski gumb, trenutno stanje, uro, položaj X in Y žoge, levi in desni rob vesla in napako. Trenutno stanje se uporablja za določanje signala za omogočanje. Koda gre čez več primerov, da se žogica lahko premika, in ima določene pogoje za določitev poti žoge. Naslednji procesni blok določa smer premikanja vesla na podlagi tega, kateri gumb uporabnik pritisne. Koda za ta del projekta je priložena s podrobnimi komentarji, ki opisujejo, kaj počne vsak odsek.

3. korak: Upravljavec točk

Vodnik rezultatov
Vodnik rezultatov

Ta razdelek je sestavljen iz datotek, ki se nanašajo na prikaz rezultatov v nekaj sekundah na 7 -segmentnem zaslonu na deski Basys3. Vključuje delilnik ure, ki se uporablja za štetje sekund, števec rezultatov šteje sekunde, ki jih igra uporabnik, voznik segmenta vzame rezultat in ga pretvori v anode in katode, ki bodo prikazane na zaslonu, ter določi tudi položaj, ki bo prikazana številka in nazadnje upravljavec segmentov pretvori binarne števke v decimalne števke, ki bodo prikazane na zaslonu. Vodja rezultatov sestavi vse kose in preslika signale. Koda za vseh pet datotek je priložena spodaj.

Razdelilnik ure:

Ločilnik ure ima vhode Clk (ura), CEN (omogoči vhod) in Div (delilec) ter izhod Clk_out. Če je signal za omogočanje vklopljen, bo ura računala na naraščajoči rob.

Števec točk

Števec rezultatov ima vhode Clk (ura) in RST (ponastavitev) ter izhode Clk_Out in Q, ki v bistvu delujeta kot rezultat za rezultat.

Gonilnik segmenta

Segmentacijski gonilnik ima vhode D1, D10, D100, D1000 in uro. Številke za "D" se nanašajo na decimalno mesto na 7 -segmentnem zaslonu. Izhoda sta anodi in številka. Ura šteje in dodeljuje številke in njihov položaj. Na primer, "9" bo prikazano na mestu tistih, kjer je "0" na tisočih, stotinah in deseticah. Ko preklopi na "10", bo število zdaj imelo "1" na mestu desetic in "0" na mestu tisočev, stotin in ena.

Obdelovalec segmentov

Upravljavec segmentov ima za vhod številko, za izhod pa katode. To so v bistvu binarne številke na katodnem zaslonu za prikaz decimalnih števil na zaslonu.

Vodnik rezultatov

Score Handler je sestavljen iz prejšnjih štirih entitet in združuje vse skupaj ter preslika signale. Prav tako omogoča in onemogoča števec glede na trenutno stanje.

4. korak: Ustvarjanje slike

Generiranje slike je sestavljeno iz štirih komponent: Animacija, Števec napak, Osveži sliko in Začni števec. Te datoteke opisujejo, kako ustvariti slike na monitorju.

Animacija

Datoteka z animacijo ima vhode Clk (signal ure), CEN (omogočanje štetja), RST (ponastavitev signala), B_X (položaj X žoge), B_Y (položaj žoge Y), P_L (levi položaj vesla) in P_R (položaj desnega vesla). Izhodi so WA (naslov, na katerega pišemo barvo) in WD (barva, ki se piše na določenem naslovu). Datoteka ima Play_Counter, ki je števec, ki se bo uporabljal kot kontrolni vhod za MUX, kodirnik, ki lahko prikaže prave barve na pravih mestih, in nazadnje multiplekser, ki prikazuje pravilno barvo glede na položaj vesla in žoga.

Osveži sliko

Datoteka Osveži sliko se uporablja za osvežitev slike, ko se položaj žoge in vesla spreminja. Datoteka vsebuje komponente iz datotek Animation, Start Counter in Fail Counter. Preslika signale iz vsake komponente in uporablja logiko stanja za določanje signalov in izhodnih naslovov.

Začni števec

Začetni števec uporablja vhode Clk, RS in CEN ter izhode WA in WD. Za določitev krmilnega vhoda za MUX uporablja števec in pretvorbo. Multiplekser nato uporabi vhod za določitev pravilnih barvnih naslovov in te podatke pošlje gonilniku VGA. To se uporablja za prikaz "Pong", ko uporabnik zažene igro.

Števec napak

Števec napak se uporablja za prikaz "Game Over", ko uporabnik izgubi igro. Ima signal Clk, RST in CEN. Za določitev krmilnega vhoda za MUX uporablja števec in formulo za pretvorbo. Multiplekser nato uporabi vhod za določitev pravilnih barvnih naslovov in te podatke pošlje gonilniku VGA.

5. korak: Pong igra

Pong igra
Pong igra

Ta del projekta vključuje datoteke Pong Master, Finite State Machine (FSM), Timer in Start Debounce.

Časovnik

Časovnik ima kot izhode vhode Clk (Ura) in PS (Trenutno stanje) ter Timer in Clk_out. Časovnik se uporablja za spreminjanje hitrosti igre približno vsakih pet sekund.

Pretok FSM

Pretočni FSM ima vhode Clk, Fail, Timer, Bttn_S (gumb za zagon) in Buttn_RST (gumb za ponastavitev) ter izhod Pres_S (Present State Output). FSM uporablja časovnik za posodabljanje trenutnega stanja v naslednje stanje in posodablja naslednje stanje, dokler igra ne doseže stopnje 5, kjer ostane, dokler se igra ne konča.

Začni Debounce

Start Debounce je začetni odboj žoge. Ima vhode S_in in Clk ter izhod S_out.

Pong Master Ta datoteka uporablja vse prejšnje komponente in omogoča, da so vse komponente takojšnje. Glavna datoteka združuje vse prejšnje komponente, ki smo jih skupaj zgradili.

Korak: Gonilnik VGA

Gonilnik VGA (Visual Graphics Array) je del programske opreme, ki se uporablja za sprejemanje ukazov ali podatkov, ki se pošljejo na zaslon. Voznika nam je dal naš profesor. Z gonilnikom in kablom VGA priključite ploščo Basys3 na monitor.

Zdaj bi morali biti pripravljeni na izdelavo lastne igre Pong z uporabo VHDL!

Priporočena: