Inhoudsopgave:

Pong-spel: 6 stappen
Pong-spel: 6 stappen

Video: Pong-spel: 6 stappen

Video: Pong-spel: 6 stappen
Video: 6 Базовых элементов настольного тенниса #техника 2024, November
Anonim
Pong-spel
Pong-spel

Materialen:

Basys3 FPGA-bord

VGA-kabel

Vivado

Het doel van deze instructable is om een Pong-spel te ontwikkelen dat op een monitor wordt weergegeven. Het project zal VHDL gebruiken om te programmeren en een Basys3 FPGA gebruiken om de code uit te voeren en het beeld over te dragen met behulp van een VGA-interface. Deze tutorial is bedoeld voor mensen die al een beetje voorkennis hebben van VHDL. De tutorial is verdeeld in 6 verschillende secties: Overzicht, Proces, Score Handler, Image Generation, Pong Game en VGA.

Stap 1: Overzicht

Overzicht
Overzicht

De afbeelding hierboven is het algemene schematische ontwerp van het project

Doel van het spel:

Het spel bestaat uit een display met een glijdende peddel die door de gebruiker kan worden bestuurd, en een vaste muur die als bovengrens fungeert. Wanneer de gebruiker op de startknop drukt, de omhoog-knop, begint de bal omhoog te stuiteren en stuitert van de muur en probeert de peddel te raken. Als de bal de peddel raakt, stuitert hij weer omhoog en blijft hij stuiteren totdat hij de peddel mist. Het spel is afgelopen als de bal de peddel niet raakt. De gebruiker kan de linker en rechter drukknoppen gebruiken om de beweging van de peddel te bepalen. Om het spel te resetten, moet de gebruiker op de middelste knop drukken. De tijd van de run wordt geregistreerd op een 7-segments display. Er zijn vijf niveaus en elke tien seconden neemt het niveau toe, totdat je niveau 5 bereikt, waar het blijft totdat de gebruiker verliest. De niveaus worden bepaald door de snelheid van de bal; dit betekent dat elke tien seconden de snelheid van de bal toeneemt, waardoor de moeilijkheidsgraad van het spel toeneemt.

Systeem Architectuur:

Het onderstaande diagram is het algemene blokschema op het hoogste niveau voor het systeem. Het systeem heeft vier ingangen: Knop R, Knop L, Start en Reset, en een Klok. Het heeft horizontale en verticale synchronisatie-uitgangen, RBG (wat verwijst naar de kleur van de pixel op een bepaalde locatie) en Score (die fungeert als een bus naar het 7-segmentendisplay). De omhoog-knop wordt gebruikt als start knop, en de linker en rechter drukknoppen worden gebruikt om de peddel in hun respectievelijke richtingen te bewegen. Het 7-segmentendisplay wordt gebruikt om de score vast te leggen, dit is het aantal seconden dat de gebruiker heeft gespeeld zonder het spel te verliezen. Het getal wordt weergegeven als een decimaal getal.

Circuitarchitectuur: we zullen onze gizmo bouwen met behulp van één FSM die een kleinere FSM bevat, de sub-FSM zal de moeilijkheidsgraad van het spel regelen, terwijl de hoofd-FSM de algehele stroom van het spel zal regelen. Onze gizmo zal ook ten minste drie klokverdelers gebruiken, één voor de score (tijd), één voor de verversingssnelheid van het scherm en één die is aangesloten op de uitgang van een DeMux, zodat we kunnen bepalen hoe snel het spel zal met toenemende moeilijkheidsgraad verlopen. Het spel zal veel sneller gaan naarmate je langer speelt. We zullen de controle-ingang van de DeMux in de huidige staat van de sub-FSM hebben, zodat we kunnen bepalen hoe snel het spel zal gaan door hoe lang je het speelt. We zullen een paar tellers gebruiken, een om het scherm te verversen en een om de score op te tellen terwijl je doorgaat met spelen. Dit project heeft twee hoofdmodules en een reeks submodules die de invoergegevens zullen manipuleren. De twee belangrijkste submodules zijn het VGA-stuurprogramma, evenals de module voor knoplogica. Het VGA-stuurprogramma bestaat uit programmeerbaar geheugen, een klokverdeler en de logica die de uitvoer voor kleur zal manipuleren. De knoplogicamodule zal ook bestaan uit een klokverdeler en een programmeerbaar geheugen, evenals een binair naar decimaal omzetter voor het 7-segments display met de bijbehorende klokverdeler.

Stap 2: Beeldproces

Voor de sectie Beeldproces van het project zullen we de beweging van de bal en de peddel bepalen. Het programma heeft poorten met de linker-, rechter-, boven- en middelste drukknoppen, de huidige staat, een klok, de X- en Y-posities van de bal, de linker- en rechterrand van de paddle en een fail. De huidige toestand wordt gebruikt om het vrijgavesignaal te bepalen. De code gaat over de meerdere gevallen waarin de bal kan bewegen en heeft voorwaarden gesteld om het pad van de bal te bepalen. Het volgende procesblok bepaalt de richting waarin de paddle beweegt op basis van welke knop door de gebruiker wordt ingedrukt. De code voor dit deel van het project is bijgevoegd met gedetailleerde opmerkingen die beschrijven wat elke sectie doet.

Stap 3: Scorebehandelaar

Score handler
Score handler

Dit gedeelte bestaat uit bestanden die betrekking hebben op het weergeven van de score in seconden op het 7 Segment Display op het Basys3-bord. Het bevat een klokverdeler die wordt gebruikt om de seconden te tellen, een scoreteller telt de seconden die de gebruiker speelt, de segmentdriver neemt de score en zet deze om in anoden en kathodes die op het scherm worden weergegeven en bepaalt ook de positie die het nummer wordt weergegeven en tot slot converteert de segmenthandler de binaire cijfers naar decimale cijfers die op het scherm worden weergegeven. De score handler zet alle stukken in elkaar en brengt de signalen in kaart. De code voor alle vijf bestanden is hieronder bijgevoegd.

Klokverdeler:

De klokverdeler heeft ingangen Clk (klok), CEN (inschakelen) en Div (verdeler) en uitgang Clk_out. Als het vrijgavesignaal aan staat, telt de klok op de stijgende flank.

Scoreteller

De scoreteller heeft inputs Clk(Clock) en RST(Reset) en outputs Clk_Out en Q die in wezen fungeren als de score-output.

Segmentstuurprogramma

De segmentdriver heeft ingangen D1, D10, D100, D1000 en Clock. De cijfers na "D" verwijzen naar de decimale plaats op het 7-segments display. De uitgangen zijn de anodes en het cijfer. De klok telt en wijst de nummers en zijn positie toe. Er wordt bijvoorbeeld een "9" weergegeven op de plaats met enen met "0"-en op de plaats van duizenden, honderden en tientallen. Wanneer het overschakelt naar "10", heeft het nummer nu een "1" op de plaats van de tientallen en "0" op de plaats van duizenden, honderden en enen.

Segment-handler

De segmenthandler heeft cijfers als invoer en kathodes als uitvoer. Het zijn in wezen de binaire getallen naar de kathodeweergave om decimale getallen op het scherm weer te geven.

Score handler

De Score Handler bestaat uit de vorige vier entiteiten en zet het allemaal bij elkaar en brengt de signalen in kaart. Het schakelt ook de teller in en uit op basis van de huidige status.

Stap 4: Afbeelding genereren

De beeldgeneratie bestaat uit vier componenten: Animatie, Fail Counter, Refresh Image en Start Counter. Deze bestanden verwijzen naar het genereren van de afbeeldingen op de beeldschermmonitor.

Animatie

Het animatiebestand heeft ingangen Clk (kloksignaal), CEN (telling inschakelen), RST (resetsignaal), B_X (X-positie van de bal), B_Y (Y-positie van de bal), P_L (linker paddle-positie) en P_R (rechter peddelstand). De uitgangen zijn WA (het adres waarnaar we de kleur schrijven) en WD (de kleur die op het bepaalde adres wordt geschreven). Het bestand heeft Play_Counter, een teller die zal worden gebruikt als besturingsingang voor de MUX, een encoder die de juiste kleuren op de juiste plaatsen kan uitvoeren, en tot slot een multiplexer die de juiste kleur weergeeft op basis van de positie van de paddle en bal.

Afbeelding vernieuwen

Het Refresh Image-bestand wordt gebruikt om de afbeelding te vernieuwen als de positie van de bal en de paddle veranderen. Het bestand bevat de componenten uit de bestanden Animatie, Startteller en Failteller. Het brengt de signalen van elke component in kaart en gebruikt statuslogica om de signalen en uitgangsadressen te bepalen.

Teller starten

De startteller gebruikt de ingangen Clk, RS en CEN en de uitgangen WA en WD. Het gebruikt een teller en conversie om de besturingsingang voor de MUX te bepalen. De multiplexer gebruikt vervolgens de invoer om de juiste kleuradressen te bepalen en stuurt deze gegevens naar de VGA-driver. Dit wordt gebruikt om "Pong" weer te geven wanneer de gebruiker het spel start.

Mislukkingsteller

De faalteller wordt gebruikt om "Game Over" weer te geven wanneer de gebruiker het spel verliest. Het heeft een Clk-, RST- en CEN-signaal. Het gebruikt een teller en een conversieformule om de besturingsingang voor de MUX te bepalen. De multiplexer gebruikt vervolgens de invoer om de juiste kleuradressen te bepalen en stuurt deze gegevens naar de VGA-driver.

Stap 5: Pong-spel

Pong-spel
Pong-spel

Dit gedeelte van het project omvat de bestanden Pong Master, Finite State Machine (FSM), Timer en Start Debounce.

Timer

De timer heeft ingangen Clk(Clock) en PS(Present State) en Timer en Clk_out als uitgangen. De timer wordt gebruikt om de snelheid van het spel ongeveer elke vijf seconden te veranderen.

Stroom FSM

De Flow FSM heeft ingangen Clk, Fail, Timer, Bttn_S (Startknop) en Buttn_RST (Resetknop) en uitgang Pres_S (Present State Output). De FSM gebruikt de timer om de huidige staat bij te werken naar de volgende staat en blijft de volgende staat bijwerken totdat het spel niveau 5 bereikt, waar het blijft totdat het spel afgelopen is.

Debounce starten

De Start Debounce is het starten van de bal. Het heeft inputs S_in en Clk, en output S_out.

Pong MasterDit bestand gebruikt alle voorgaande componenten en zorgt ervoor dat alle componenten onmiddellijk zijn. Het is het hoofdbestand dat alle voorgaande componenten samenvoegt die we samen hebben gebouwd.

Stap 6: VGA-stuurprogramma

Het VGA-stuurprogramma (Visual Graphics Array) is een stukje software dat wordt gebruikt om opdrachten of gegevens te accepteren die naar het scherm worden verzonden. De chauffeur werd ons gegeven door onze professor. Gebruik de driver en een VGA-kabel om het Basys3-bord op de monitor aan te sluiten.

Je zou nu klaar moeten zijn om je eigen Pong Game te maken met VHDL!

Aanbevolen: