Cuprins:
- Pasul 1: Prezentare generală
- Pasul 2: Procesul de imagine
- Pasul 3: Handler Scor
- Pasul 4: Generarea imaginii
- Pasul 5: Joc Pong
- Pasul 6: Driver VGA
Video: Joc Pong: 6 pași
2024 Autor: John Day | [email protected]. Modificat ultima dată: 2024-01-30 11:44
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ă
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
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
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:
Creați-vă propriul joc 1D Pong: 5 pași (cu imagini)
Asigurați-vă propriul joc 1D Pong: Pentru acest proiect vă voi arăta cum am combinat o placă MDF cu butoane sonore, LED-uri și un Arduino Nano pentru a crea un joc 1D Pong care este foarte distractiv de jucat. Pe parcurs vă voi arăta cum să creați circuitul electronic și cât de diferit
Joc Simon - Joc distractiv !: 5 pași
Joc Simon - Joc distractiv !: Referință: Aici După un weekend lung, trebuie să fii cu adevărat greu să îndeplinești toate sarcinile și munca de care ești responsabil. Este timpul să ne antrenăm creierul, nu-i așa? Pe lângă acele jocuri plictisitoare și fără sens, există și un joc numit Simon Game
Joc Pong de Andrea: 4 pași
Pong Game de Andrea: Acesta este un joc care a venit inițial de aici. Am făcut jocul, apoi am făcut câteva modificări pe baza acestui lucru. Vă voi arăta pașii de realizare a acestui joc, apoi vă voi da codul pe care l-am schimbat. Am adăugat câteva modificări la codul original, cum ar fi schimbarea
Controler de joc DIY bazat pe Arduino - Controler de joc Arduino PS2 - Jucând Tekken cu DIY Arduino Gamepad: 7 pași
Controler de joc DIY bazat pe Arduino | Controler de joc Arduino PS2 | Jucând Tekken cu DIY Arduino Gamepad: Bună, băieți, jocul este întotdeauna distractiv, dar jocul cu propriul controler personalizat DIY este mai distractiv
Consola de joc Arduino Pocket + A-Maze - Joc Maze: 6 pași (cu imagini)
Arduino Pocket Game Console + A-Maze - Maze Game: Bine ați venit la primul meu instructable! Proiectul pe care vreau să îl împărtășesc astăzi este jocul de labirint Arduino, care a devenit o consolă de buzunar la fel de capabilă ca Arduboy și consolele similare bazate pe Arduino. Poate fi intermitent cu jocurile mele (sau ale dvs.) viitoare datorită expo