Cuprins:

Joc Pong: 6 pași
Joc Pong: 6 pași

Video: Joc Pong: 6 pași

Video: Joc Pong: 6 pași
Video: TENIS DE MASA sau PING PONG - reguli de baza si cum se joaca 2024, Iulie
Anonim
Jocul Pong
Jocul Pong

Materiale:

Placa Basys3 FPGA

Cablu VGA

Vivado

Scopul acestui instructable este de a dezvolta un joc Pong care va fi afișat pe un monitor. Proiectul va utiliza VHDL pentru a programa și folosește un Basys3 FPGA pentru a realiza codul și transferă imaginea utilizând o interfață VGA. Acest tutorial este destinat persoanelor care au cunoștințe anterioare despre VHDL. Tutorialul va fi împărțit în 6 secțiuni diferite: Prezentare generală, Proces, Ghid de scor, Generarea de imagini, Jocul Pong și VGA.

Pasul 1: Prezentare generală

Prezentare generală
Prezentare generală

Imaginea de mai sus este proiectarea schematică generală a proiectului

Obiectivul jocului:

Jocul constă dintr-un afișaj cu o paletă glisantă care poate fi controlată de utilizator și un perete fix care acționează ca limita superioară. Când utilizatorul apasă butonul Start, care este butonul sus, mingea va începe să sară în sus și va sări de pe perete și va încerca să lovească paleta. Dacă mingea lovește paleta, ea sare din nou și continuă să sară până când pierde paleta. Jocul s-a terminat când mingea nu reușește să lovească paleta. Utilizatorul va putea utiliza butoanele stânga și dreapta pentru a determina mișcarea paletei. Pentru a reseta jocul, utilizatorul trebuie să apese butonul central. Ora alergării va fi înregistrată pe un afișaj pe 7 segmente. Există cinci niveluri și la fiecare zece secunde nivelul crește, până când atingi nivelul 5, unde rămâne până când utilizatorul pierde. Nivelurile sunt determinate de viteza mingii; asta înseamnă că la fiecare zece secunde, viteza mingii crește, crescând astfel dificultatea jocului.

Arhitectura sistemului:

Diagrama de mai jos este diagrama generală de bază de nivel superior de bază pentru sistem. Sistemul are patru intrări: butonul R, butonul L, Start și resetare și un ceas. Are ieșiri de sincronizare orizontale și verticale, RBG (care se referă la culoarea pixelului la o anumită locație) și Scor (care acționează ca un autobuz către afișajul cu 7 segmente). Butonul sus va fi folosit ca start butonul, iar butoanele stânga și dreapta vor fi folosite pentru a muta paleta în direcțiile respective. Afișajul cu 7 segmente va fi folosit pentru a înregistra scorul, care este numărul de secunde pe care le-a jucat utilizatorul fără a pierde jocul. Numărul va fi afișat ca număr zecimal.

Arhitectură de circuite: Vom construi dispozitivul nostru folosind un FSM care conține un FSM mai mic, sub-FSM va controla dificultatea jocului, în timp ce FSM principal va controla fluxul general al jocului. Aparatul nostru va utiliza, de asemenea, cel puțin trei divizoare de ceas, unul pentru scor (timp), unul pentru rata de reîmprospătare a afișajului și unul conectat la ieșirea unui DeMux, astfel încât să putem controla cât de rapid este jocul va continua cu cantități tot mai mari de dificultate. Jocul se va mișca mult mai repede cu cât joci mai mult. Vom avea intrarea de control a stării prezente a DeMux a sub-FSM, astfel încât să putem controla cât de repede va trece jocul cât timp îl jucați. Vom folosi câteva contoare, unul pentru a reîmprospăta afișajul și unul pentru a număra scorul pe măsură ce continuați să jucați. Acest proiect are două module principale și o serie de submodule care vor manipula datele de intrare. Cele două submodule principale sunt driverul VGA, precum și modulul logic al butoanelor. Driverul VGA va consta din memorie programabilă, un divizor de ceas și logica care va manipula ieșirea pentru culoare. Modulul logic al butoanelor va consta, de asemenea, dintr-un divizor de ceas și o memorie programabilă, precum și un convertor binar în zecimal pentru afișajul cu 7 segmente, cu divizorul său de ceas respectiv.

Pasul 2: Procesul de imagine

Pentru secțiunea Proces de imagine a proiectului, vom stabili mișcarea mingii și a paletei. Programul are porturi care includ butoanele stânga, dreapta, sus și centrală, starea actuală, un ceas, pozițiile X și Y ale mingii, marginea stângă și dreaptă a paletei și un eșec. Starea actuală este utilizată pentru a determina semnalul de activare. Codul trece peste cazurile multiple pe care mingea le poate mișca și a stabilit condiții pentru a determina calea mingii. Următorul bloc de proces determină direcția de deplasare a paletei pe baza butonului care este apăsat de utilizator. Codul pentru această parte a proiectului este atașat cu comentarii detaliate care descriu ce face fiecare secțiune.

Pasul 3: Handler Scor

Handler de scor
Handler de scor

Această secțiune constă din fișiere care se referă la afișarea scorului în câteva secunde pe afișajul cu 7 segmente de pe placa Basys3. Acesta include un divizor de ceas care este folosit pentru a număra secundele, un contor de scor contează secundele pe care le joacă utilizatorul, driverul segmentului ia scorul și îl convertește în anodi și catodoși pentru a fi afișat pe ecran și, de asemenea, determină poziția pe care numărul va fi afișat și, în sfârșit, gestionarul de segmente convertește cifrele binare în cifre zecimale care vor fi afișate pe ecran. Manipulatorul de scoruri pune laolaltă toate piesele și mapează semnalele. Codul pentru toate cele cinci fișiere este atașat mai jos.

Divizorul ceasului:

Divizorul de ceas are intrări Clk (clock), CEN (enable in) și Div (divider) și output Clk_out. Dacă semnalul de activare este activat, atunci ceasul va conta pe marginea ascendentă.

Scorul contorului

Numărul de scoruri are intrări Clk (Clock) și RST (Reset) și ieșiri Clk_Out și Q care acționează în esență ca ieșire de scor.

Driver de segment

Driverul de segment are intrările D1, D10, D100, D1000 și Clock. Numerele după „D” se referă la poziția zecimală pe afișajul pe 7 segmente. Ieșirile sunt anodii și cifra. Ceasul contează și atribuie numerele și poziția sa. De exemplu, un „9” va fi afișat în cele cu „0” în mii, sute și zeci. Când trece la „10”, numărul va avea acum un „1” în locul zecilor și „0” în mii, sute și unii.

Manevrarea segmentelor

Manipulatorul de segmente are cifra ca intrare și catodii ca ieșire. În esență, numerele binare pe afișajul catodului pentru a afișa numerele zecimale pe ecran.

Handler de scor

Handlerul de scor este format din cele patru entități anterioare și pune totul împreună și mapează semnalele. De asemenea, activează și dezactivează contorul pe baza stării actuale.

Pasul 4: Generarea imaginii

Generarea imaginii este formată din patru componente: animație, contor de eșec, reîmprospătare imagine și contor de pornire. Aceste fișiere se referă la modul de generare a imaginilor pe monitor.

Animaţie

Fișierul de animație are intrări Clk (Clock Signal), CEN (count enable), RST (Reset Signal), B_X (poziția X a mingii), B_Y (poziția Y a mingii), P_L (poziția stânga a paletei) și P_R (poziția dreaptă a paletei). Ieșirile sunt WA (adresa către care scriem culoarea) și WD (culoarea fiind scrisă la adresa determinată). Fișierul are Play_Counter, care este un contor care va fi folosit ca intrare de control pentru MUX, un codificator care poate emite culorile corecte la locurile potrivite și, în cele din urmă, un multiplexor care afișează culoarea corectă în funcție de poziția paletei și minge.

Reîmprospătați imaginea

Fișierul Reîmprospătare imagine este folosit pentru a reîmprospăta imaginea pe măsură ce poziția mingii și a paletei se schimbă. Fișierul include componentele din fișierele Animation, Start Counter și Fail Counter. Acesta mapează semnalele de la fiecare componentă și folosește logica de stare pentru a determina semnalele și adresele de ieșire.

Porniți Counter

Contorul de pornire utilizează intrările Clk, RS și CEN și ieșirile WA și WD. Folosește un contor și o conversie pentru a determina intrarea de control pentru MUX. Multiplexorul folosește apoi intrarea pentru a determina adresele de culoare corecte și trimite aceste date către driverul VGA. Acesta este folosit pentru a afișa „Pong” atunci când utilizatorul începe jocul.

Fail Counter

Contorul de eșec este utilizat pentru a afișa „Game Over” atunci când utilizatorul pierde jocul. Are un semnal Clk, RST și CEN. Folosește un contor și o formulă de conversie pentru a determina intrarea de control pentru MUX. Multiplexorul utilizează apoi intrarea pentru a determina adresele de culoare corecte și trimite aceste date către driverul VGA.

Pasul 5: Joc Pong

Jocul Pong
Jocul Pong

Această secțiune a proiectului include fișierele Pong Master, Finite State Machine (FSM), Timer și Start Debounce.

Temporizator

Cronometrul are intrări Clk (Clock) și PS (Prezent State) și Timer și Clk_out ca ieșiri. Cronometrul este folosit pentru a schimba viteza jocului aproximativ la fiecare cinci secunde.

Flux FSM

Flow FSM are intrări Clk, Fail, Timer, Bttn_S (buton Start) și Buttn_RST (buton Reset) și ieșire Pres_S (ieșire de stare actuală). FSM folosește temporizatorul pentru a actualiza starea actuală la starea următoare și continuă să actualizeze starea următoare până când jocul atinge nivelul 5, unde rămâne până când jocul se termină.

Porniți Debounce

Start Debounce este săritul inițial al mingii. Are intrări S_in și Clk și ieșire S_out.

Pong Master Acest fișier folosește toate componentele anterioare și îl face astfel încât toate componentele să fie instantanee. Este fișierul master care reunește toate componentele anterioare pe care le-am construit împreună.

Pasul 6: Driver VGA

Driverul VGA (Visual Graphics Array) este un software folosit pentru a accepta comenzi sau date trimise pe ecran. Șoferul ne-a fost dat de profesorul nostru. Utilizați driverul și un cablu VGA pentru a conecta placa Basys3 la monitor.

Acum ar trebui să fiți gata să vă creați propriul joc Pong folosind VHDL!

Recomandat: