INHOUDSOPGAWE:

Pong -spel: 6 stappe
Pong -spel: 6 stappe

Video: Pong -spel: 6 stappe

Video: Pong -spel: 6 stappe
Video: Vigiland - Pong Dance (Official Video) 2024, November
Anonim
Pong spel
Pong spel

Materiaal:

Basys3 FPGA Board

VGA kabel

Vivado

Die doel van hierdie instruksies is om 'n Pong -speletjie te ontwikkel wat op 'n monitor vertoon sal word. Die projek sal VHDL gebruik om te programmeer en gebruik 'n Basys3 FPGA om die kode uit te voer en die beeld oor te dra met 'n VGA -koppelvlak. Hierdie handleiding is bedoel vir mense met 'n bietjie voorkennis van VHDL. Die tutoriaal sal in 6 verskillende afdelings verdeel word: Oorsig, Proses, Score Handler, Image Generation, Pong Game en VGA.

Stap 1: Oorsig

Oorsig
Oorsig

Die prent hierbo is die algehele skematiese ontwerp van die projek

Doel van die spel:

Die spel bestaan uit 'n skerm met 'n skuifspaan wat deur die gebruiker beheer kan word, en 'n vaste muur wat as die boonste grens dien. As die gebruiker op die startknoppie druk, wat die op -knoppie is, sal die bal begin bons, van die muur af spring en probeer om die spaan te tref. As die bal die spaan tref, weerkaats dit weer en bly bons totdat dit die spaan mis. Die spel is verby as die bal nie die spaan kan raak nie. Die gebruiker kan die linker- en regterknoppies gebruik om die beweging van die paddle te bepaal. Om die spel te herstel, moet die gebruiker op die middelste knoppie druk. Die tyd van die hardloop word aangeteken op 'n 7 -segment vertoning. Daar is vyf vlakke, en elke tien sekondes neem die vlak toe totdat u vlak 5 bereik waar dit bly totdat die gebruiker verloor. Die vlakke word bepaal deur die spoed van die bal; dit beteken dat die snelheid van die bal elke tien sekondes toeneem, wat die moeilikheidsgraad van die spel verhoog.

Stelselargitektuur:

Die onderstaande diagram is die basiese algehele blokdiagram op die hoogste vlak vir die stelsel. Die stelsel het vier insette: knoppie R, knoppie L, begin en herstel, en 'n horlosie. Dit het 'n horisontale en vertikale sinchronisasie-uitset, RBG (wat verwys na die kleur van die pixel op 'n sekere plek) en Score (wat dien as 'n bus na die 7-segment-vertoning). Die op-knoppie sal as begin gebruik word knoppie, en die knoppies links en regs sal gebruik word om die spaan in hul onderskeie rigtings te beweeg. Die 7-segment-skerm sal gebruik word om die telling aan te teken, dit is die aantal sekondes wat die gebruiker gespeel het sonder om die wedstryd te verloor. Die getal sal as 'n desimale getal vertoon word.

Kringargitektuur: ons bou ons opwinding met behulp van een FSM wat 'n kleiner FSM bevat, die sub-FSM beheer die moeilikheidsgraad van die spel, terwyl die belangrikste FSM die algehele vloei van die spel beheer. Ons gizmo gebruik ook ten minste drie klokverdelers, een vir die telling (tyd), een vir die verversingssnelheid van die skerm en een wat gekoppel is aan die uitset van 'n DeMux, sodat ons kan beheer hoe vinnig die spel sal met toenemende moeilikheidsgraad voortgaan. Die spel sal baie vinniger beweeg, hoe langer jy speel. Ons sal die beheerinvoer van die DeMux in die huidige toestand van die sub-FSM hê, sodat ons kan bepaal hoe vinnig die spel gaan, deur hoe lank u dit speel. Ons sal 'n paar tellers gebruik, een om die skerm te verfris en een om die telling te tel terwyl u aanhou speel. Hierdie projek het twee hoofmodules en 'n verskeidenheid submodules wat die insetdata sal manipuleer. Die twee belangrikste submodules is die VGA -bestuurder, sowel as die knoppie -logika -module. Die VGA -bestuurder sal bestaan uit programmeerbare geheue, 'n klokverdeler en die logika wat die uitset vir kleur sal manipuleer. Die knoppie-logika-module bestaan ook uit 'n klokverdeler en 'n programmeerbare geheue, sowel as 'n binêre na desimale omskakelaar vir die 7-segment-skerm met die onderskeie klokverdelers.

Stap 2: Beeldproses

Vir die afdeling Beeldproses van die projek bepaal ons die beweging van die bal en die spaan. Die program bevat poorte wat die linker-, regter-, boonste en middelste drukknoppies insluit, die huidige toestand, 'n klok, die X- en Y -posisies van die bal, die linker- en regterkant van die spaan en 'n mislukking. Die huidige toestand word gebruik om die aktiveer sein te bepaal. Die kode gaan oor die veelvuldige gevalle wat die bal kan beweeg, en het voorwaardes gestel om die pad van die bal te bepaal. Die volgende prosesblok bepaal die rigting waarin die spaan beweeg, gebaseer op die knoppie wat die gebruiker ingedruk het. Die kode vir hierdie deel van die projek is aangeheg met gedetailleerde kommentaar wat beskryf wat elke afdeling doen.

Stap 3: Score Handler

Tellerhanteerder
Tellerhanteerder

Hierdie afdeling bestaan uit lêers wat verband hou met die vertoon van die telling in sekondes op die 7 segment -skerm op die Basys3 -bord. Dit bevat 'n klokverdeler wat gebruik word om die sekondes te tel, 'n tellingteller tel die sekondes wat die gebruiker speel, die segmentbestuurder neem die telling en sit dit om in anodes en katodes wat op die skerm vertoon moet word en bepaal ook die posisie wat die getal sal vertoon word, en laastens, die segmenthanteerder skakel die binêre syfers om in desimale syfers wat op die skerm vertoon moet word. Die tellinghanteerder sit al die stukke saam en karteer die seine. Die kode vir al vyf lêers is hieronder aangeheg.

Klokverdeler:

Die klokverdeler het insette Clk (klok), CEN (aktiveer in) en Div (verdeler) en uitset Clk_out. As die inschakelsein aangeskakel is, sal die klok op die stygende rand reken.

Punteteller

Die tellingteller het insette Clk (Clock) en RST (Reset) en output Clk_Out en Q wat in wese dien as die score -uitset.

Segmentbestuurder

Die segmentbestuurder het insette D1, D10, D100, D1000 en Clock. Die getalle na "D" verwys na die desimale plek op die 7 -segment vertoning. Die uitsette is die anodes en die syfer. Die klok tel en ken die nommers en die posisie toe. Byvoorbeeld, 'n '9' sal op die plek vertoon word met '0' in die duisende, honderde en tiene. As dit oorskakel na "10", sal die getal nou 'n "1" in die tientalle hê en "0" in die duisende, honderde en ene plek.

Segment Hanteerder

Die segmenthanteerder het syfers as sy invoer en katodes as sy uitvoer. Dit is in wese die binêre getalle na die katodevertoning om desimale getalle op die skerm uit te voer.

Tellerhanteerder

Die Score Handler bestaan uit die vorige vier entiteite en voeg alles bymekaar en karteer die seine. Dit maak die teller ook moontlik en deaktiveer op grond van die huidige toestand.

Stap 4: Beeldgenerering

Die beeldgenerasie bestaan uit vier komponente: Animasie, Fail Counter, Refresh Image en Start Counter. Hierdie lêers verwys na hoe om die beelde op die skerm te genereer.

Animasie

Die animasielêer het insette Clk (Clock Signal), CEN (count enable), RST (Reset Signal), B_X (X -posisie van die bal), B_Y (Y -posisie van die bal), P_L (linker paddle -posisie) en P_R (regte paddle -posisie). Die uitsette is WA (die adres waarna ons die kleur skryf) en WD (die kleur wat by die vasgestelde adres geskryf word). Die lêer het Play_Counter, 'n teller wat gebruik sal word as 'n bedieningsinvoer vir die MUX, 'n enkodeerder wat die regte kleure op die regte plekke kan uitvoer, en laastens 'n multiplexer wat die regte kleur vertoon op grond van die posisie van die paddle en bal.

Herlaai prent

Die Refresh Image -lêer word gebruik om die beeld te verfris, aangesien die posisie van die bal en spaan verander. Die lêer bevat die komponente uit die lêers Animation, Start Counter en Fail Counter. Dit karteer die seine van elke komponent en gebruik staatslogika om die seine en uitsetadresse te bepaal.

Begin toonbank

Die Start Counter gebruik insette Clk, RS en CEN en uitsette WA en WD. Dit gebruik 'n teller en omskakeling om die beheerinvoer vir die MUX te bepaal. Die Multiplexer gebruik dan die invoer om die korrekte kleuradresse te bepaal en stuur hierdie data na die VGA -bestuurder. Dit word gebruik om 'Pong' te vertoon wanneer die gebruiker die spel begin.

Mislukking toonbank

Die mislukkingsteller word gebruik om 'Game Over' te vertoon wanneer die gebruiker die spel verloor. Dit het 'n Clk-, RST- en CEN -sein. Dit gebruik 'n teller en 'n omskakelingsformule om die beheerinvoer vir die MUX te bepaal. Die Multiplexer gebruik dan die invoer om die korrekte kleuradresse te bepaal en stuur hierdie data na die VGA -bestuurder.

Stap 5: Pong -speletjie

Pong spel
Pong spel

Hierdie afdeling van die projek bevat die Pong Master, Finite State Machine (FSM), Timer en Start Debounce lêers.

Timer

Die timer het insette Clk (Clock) en PS (Present State) en Timer en Clk_out as uitsette. Die timer word gebruik om die spoed van die spel ongeveer elke vyf sekondes te verander.

Vloei FSM

Die Flow FSM het insette Clk, Fail, Timer, Bttn_S (Start Button) en Buttn_RST (Reset Button) en output Pres_S (Huidige staatsuitset). Die FSM gebruik die timer om die huidige toestand na die volgende staat op te dateer en hou aan om die volgende staat op te dateer totdat die spel vlak 5 bereik waar dit bly totdat die wedstryd verby is.

Begin Debounce

Die Start Debounce is die wegspring van die bal. Dit het insette S_in en Clk, en output S_out.

Pong Master Hierdie lêer gebruik al die vorige komponente en maak dat al die komponente onmiddellik is. Dit is die hooflêer wat al die vorige komponente wat ons saamgestel het, saamstel.

Stap 6: VGA -bestuurder

Die VGA -bestuurder (Visual Graphics Array) is 'n sagteware wat gebruik word om opdragte of data wat na die skerm gestuur word, te aanvaar. Die bestuurder is deur ons professor aan ons gegee. Gebruik die bestuurder en 'n VGA -koord om die Basys3 -kaart aan die monitor te koppel.

U behoort nou gereed te wees om u eie Pong -spel te maak met behulp van VHDL!

Aanbeveel: