Inhoudsopgave:
- Stap 1: Overzicht
- Stap 2: Beeldproces
- Stap 3: Scorebehandelaar
- Stap 4: Afbeelding genereren
- Stap 5: Pong-spel
- Stap 6: VGA-stuurprogramma
Video: Pong-spel: 6 stappen
2024 Auteur: John Day | [email protected]. Laatst gewijzigd: 2024-01-30 11:17
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
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
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
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:
Pong-printplaat voor 2 spelers: 3 stappen
Pong-printplaat voor 2 spelers: In deze gids kun je een draagbaar pongspel voor 2 spelers bouwen. Dit ontwerp is gemaakt rond code die op GitHub is gepost door Onur Avun. Ik heb genoten van het maken van dit project, ik hoop dat je het leuk vindt om het te bouwen
Pong Game door Andrea: 4 stappen
Pong Game van Andrea: Dit is een spel dat hier oorspronkelijk vandaan komt. Ik heb het spel gemaakt en op basis daarvan enkele wijzigingen aangebracht. Ik zal je de stappen laten zien om dit spel te maken en je vervolgens de code geven die ik heb gewijzigd. Ik heb enkele wijzigingen aan de originele code toegevoegd, zoals het wijzigen van de
Pong in Scratch: 16 stappen
Pong in Scratch: dit project geeft je de stappen om Pong, een van de allereerste videogames, opnieuw te maken in het programma Scratch
Autodesk Tinkercad-simulatie van Arduino UNO Ping Pong Game V2.0:: 5 stappen
Autodesk Tinkercad Simulatie van Arduino UNO Ping Pong Game V2.0:: Hallo jongens, in deze instructable leer je hoe je ping pong kunt simuleren op de Autodesk Tikercad-website met behulp van Arduino UNO-ontwikkelbord. Klik op deze YouTube-link om de simulatievideo te bekijken
8x16 LED Matrix Pong Game (2 peddels per spelerversie): 3 stappen
8x16 LED Matrix Pong-spel (2 paddles per spelerversie): Ik ben geïnspireerd door vele variaties van het klassieke Pong-spel dat op Arduino is geïmplementeerd met behulp van een 8x8 LED-matrix. In deze instructable laat ik je zien hoe je mijn favoriete Pong-versie kunt bouwen met twee peddels - spits en keeper - per speler