Taula de continguts:

Joc de Pong: 6 passos
Joc de Pong: 6 passos

Vídeo: Joc de Pong: 6 passos

Vídeo: Joc de Pong: 6 passos
Vídeo: 6 Базовых элементов настольного тенниса #техника 2024, De novembre
Anonim
Joc de Pong
Joc de Pong

Materials:

Taula FPGA Basys3

Cable VGA

Vivado

El propòsit d’aquest instructiu és desenvolupar un joc de Pong que es mostrarà en un monitor. El projecte utilitzarà VHDL per programar i utilitzar un Basys3 FPGA per dur a terme el codi i transfereix la imatge mitjançant una interfície VGA. Aquest tutorial està pensat per a persones que tinguin un coneixement previ de VHDL. El tutorial es dividirà en 6 seccions diferents: Visió general, Procés, Gestor de puntuacions, Generació d’imatges, Joc de taula i VGA.

Pas 1: Visió general

Visió general
Visió general

La imatge superior és el disseny esquemàtic general del projecte

Objectiu del joc:

El joc consisteix en una pantalla amb una pala lliscant que pot ser controlada per l'usuari i una paret fixa que actua com a límit superior. Quan l'usuari prem el botó d'inici, que és el botó amunt, la pilota començarà a rebotar i rebotarà a la paret i intentarà colpejar el pal. Si la pilota colpeja la pala, torna a botar i continua rebotant fins que es perda la pala. El joc s’acaba quan la pilota no arriba a tocar el pàdel. L'usuari podrà utilitzar els botons esquerre i dret per determinar el moviment de la paleta. Per restablir el joc, l’usuari ha de prémer el botó central. El temps de la prova es gravarà en una pantalla de 7 segments. Hi ha cinc nivells, i cada deu segons el nivell augmenta, fins que toques el nivell 5 on es manté fins que l'usuari perd. Els nivells estan determinats per la velocitat de la pilota; això significa que cada deu segons, la velocitat de la pilota augmenta, augmentant així la dificultat del joc.

Arquitectura del sistema:

El diagrama següent és el diagrama de blocs bàsic general de nivell superior del sistema. El sistema té quatre entrades: el botó R, el botó L, l’inici i el restabliment i un rellotge. Té sortides de sincronització horitzontals i verticals, RBG (que fa referència al color del píxel en una ubicació determinada) i Puntuació (que actua com a bus a la pantalla de 7 segments). El botó amunt s’utilitzarà com a inici i els botons esquerre i dret es faran servir per moure la paleta en les seves respectives direccions. La pantalla de 7 segments s’utilitzarà per registrar la puntuació, que és el nombre de segons que ha estat jugant l’usuari sense perdre el joc. El número es mostrarà com a número decimal.

Arquitectura de circuits: construirem el nostre aparell amb un FSM que contingui un FSM més petit, el sub-FSM controlarà la dificultat del joc mentre que el FSM principal controlarà el flux general del joc. El nostre aparell també utilitzarà com a mínim tres divisors de rellotge, un per a la puntuació (temps), un per a la freqüència d’actualització de la pantalla i un altre que està connectat a la sortida d’un DeMux perquè puguem controlar la velocitat del joc continuarà amb quantitats creixents de dificultat. El joc es mourà molt més ràpid quan més jugueu. Tindrem l'entrada de control de l'estat present de DeMux del sub-FSM perquè puguem controlar la velocitat del joc durant el temps que el jugueu. Utilitzarem uns quants comptadors, un per actualitzar la pantalla i un altre per comptar la puntuació mentre continueu jugant. Aquest projecte té dos mòduls principals i un conjunt de submòduls que manipularan les dades d’entrada. Els dos submòduls principals són el controlador VGA, així com el mòdul lògic de botons. El controlador VGA constarà de memòria programable, un divisor de rellotge i la lògica que manipularà la sortida pel color. El mòdul lògic de botons també constarà d’un divisor de rellotge i una memòria programable, a més d’un convertidor binari a decimal per a la pantalla de 7 segments amb el seu respectiu divisor de rellotge.

Pas 2: procés d'imatges

Per a la secció Procés d’imatges del projecte, determinarem el moviment de la pilota i la pala. El programa té ports que inclouen els polsadors esquerra, dreta, superior i central, l’estat actual, un rellotge, les posicions X i Y de la pilota, la vora esquerra i dreta de la paleta i un error. L'estat actual s'utilitza per determinar el senyal d'activació. El codi repassa els múltiples casos que pot moure la pilota i ha establert condicions per determinar el recorregut de la pilota. El següent bloc de procés determina la direcció del moviment de la paleta en funció del botó que l'usuari prem. El codi d'aquesta part del projecte s'adjunta amb comentaris detallats que descriuen què fa cada secció.

Pas 3: gestor de puntuacions

Gestor de puntuacions
Gestor de puntuacions

Aquesta secció consta de fitxers relacionats amb la visualització de la puntuació en segons a la pantalla de 7 segments al tauler Basys3. Inclou un divisor de rellotge que s’utilitza per comptar els segons, un comptador de puntuació compta els segons que juga l’usuari, el conductor del segment pren la puntuació i la converteix en ànodes i càtodes per mostrar-se a la pantalla i també determina la posició que es mostrarà el número i, finalment, el controlador de segments converteix els dígits binaris en dígits decimals que es mostraran a la pantalla. El gestor de partitures ajunta totes les peces i mapeja els senyals. A continuació s’adjunta el codi dels cinc fitxers.

Divisor de rellotge:

El divisor de rellotge té entrades Clk (rellotge), CEN (habilitació d’entrada) i Div (divisor) i sortida Clk_out. Si el senyal d’activació està activat, el rellotge comptarà amb la vora ascendent.

Comptador de puntuacions

El comptador de puntuació té les entrades Clk (Clock) i RST (Reset) i les sortides Clk_Out i Q que actuen essencialment com a sortida de puntuació.

Controlador del segment

El controlador de segment té entrades D1, D10, D100, D1000 i Clock. Els números després de "D" fan referència a la posició decimal a la pantalla de 7 segments. Les sortides són els ànodes i el dígit. El rellotge compta i assigna els números i la seva posició. Per exemple, es mostrarà un "9" als llocs on hi hagi "0" als milers, centenars i desenes. Quan es canvia a "10", el nombre ara tindrà un "1" en el lloc de les desenes i "0" en els milers, centenars i un.

Gestor de segments

El controlador de segments té dígits com a entrada i càtodes com a sortida. Bàsicament, els números binaris de la pantalla del càtode generen números decimals a la pantalla.

Gestor de puntuacions

El Gestor de puntuacions consta de les quatre entitats anteriors i posa tot junt i assigna els senyals. També habilita i desactiva el comptador en funció de l'estat actual.

Pas 4: generació d'imatges

La generació d’imatges consta de quatre components: Animació, Comptador d’errors, Actualització d’imatge i Comptador d’inici. Aquests fitxers fan referència a com es generen les imatges al monitor de la pantalla.

Animació

El fitxer d’animació té entrades Clk (Clock Signal), CEN (count enable), RST (Reset Signal), B_X (posició X de la pilota), B_Y (posició Y de la pilota), P_L (posició de la paleta esquerra) i P_R (posició del pàdel dret). Les sortides són WA (l'adreça a la qual escrivim el color) i WD (el color s'escriu a l'adreça determinada). El fitxer té Play_Counter que és un comptador que s’utilitzarà com a entrada de control per al MUX, un codificador que pot produir els colors correctes als llocs adequats i, finalment, un multiplexor que mostra el color correcte en funció de la posició de la paleta i pilota.

Actualitza la imatge

El fitxer Actualitzar imatge s’utilitza per actualitzar la imatge a mesura que canvien la posició de la pilota i del pàdel. El fitxer inclou els components dels fitxers Animació, Inici de comptador i Comptador de falles. Mapea els senyals de cada component i utilitza la lògica d'estats per determinar els senyals i les adreces de sortida.

Inicia el comptador

El comptador inicial utilitza les entrades Clk, RS i CEN i les sortides WA i WD. Utilitza un comptador i una conversió per determinar l'entrada de control del MUX. El multiplexor utilitza l'entrada per determinar les adreces de color correctes i envia aquestes dades al controlador VGA. S'utilitza per mostrar "Pong" quan l'usuari inicia el joc.

Comptador de fallades

El comptador de fallades s'utilitza per mostrar "Game Over" quan l'usuari perd el joc. Té un senyal Clk, RST i CEN. Utilitza un comptador i una fórmula de conversió per determinar l'entrada de control del MUX. A continuació, el multiplexor utilitza l'entrada per determinar les adreces de color correctes i envia aquestes dades al controlador VGA.

Pas 5: joc de pong

Joc de Pong
Joc de Pong

Aquesta secció del projecte inclou els fitxers Pong Master, Finite State Machine (FSM), Timer i Start Debounce.

Temporitzador

El temporitzador té entrades Clk (Clock) i PS (Present State) i Timer i Clk_out com a sortides. El temporitzador s’utilitza per canviar la velocitat del joc aproximadament cada cinc segons.

Flux FSM

El flux FSM té entrades Clk, Fail, Timer, Bttn_S (botó d’inici) i Buttn_RST (botó de reinici) i sortida Pres_S (sortida d’estat actual). El FSM utilitza el temporitzador per actualitzar l’estat actual al següent estat i continua actualitzant el següent estat fins que el joc assoleix el nivell 5, on es manté fins que s’acaba el joc.

Inicieu Debounce

El Start Debounce és el rebot inicial de la pilota. Té entrades S_in i Clk, i sortida S_out.

Pong Master Aquest fitxer utilitza tots els components anteriors i fa que tots els components siguin instantanis. És el fitxer mestre que uneix tots els components anteriors que hem construït junts.

Pas 6: controlador VGA

El controlador VGA (Visual Graphics Array) és un programa utilitzat per acceptar ordres o dades que s’envien a la pantalla. El conductor ens el va donar el nostre professor. Utilitzeu el controlador i un cable VGA per connectar la placa Basys3 al monitor.

Ara hauríeu d’estar preparats per crear el vostre propi joc de Pong amb VHDL.

Recomanat: