Inhoudsopgave:
2025 Auteur: John Day | [email protected]. Laatst gewijzigd: 2025-01-23 15:01
Je zal nodig hebben:
1. Digilent Basys 3, FPGA-bord (of een andere FPGA,)
2. Een relatief up-to-date versie van Vivado, of een andere VHDL-omgeving
3. Een computer die het genoemde programma kan draaien.
Stap 1: Het spel zelf
Hoe de FSM omgaat met de modules.
Hoe te spelen
Om te beginnen, druk je op de middelste knop. Dit zorgt ervoor dat "99", dat de gezondheid van speler twee vertegenwoordigt, wordt weergegeven op het display met zeven segmenten. Vervolgens zullen de LED's achtereenvolgens van rechts naar links oplichten. Dit vormt een powerbar. Zodra de powerbar vol is, wordt deze gereset. Het doel van speler één is om de schakelaar om te draaien wanneer de lat zo hoog mogelijk ligt. Hoe meer LED's branden, hoe meer schade speler één aan speler twee toebrengt. Nadat speler één zijn schakelaar heeft omgedraaid, wordt de toegebrachte schade afgetrokken van de gezondheid van speler twee. Daarna gaat het over naar de beurt van speler twee. Nu staat het weergegeven getal voor de gezondheid van speler en wordt de krachtbalk van links naar rechts gevuld. Zodra speler twee zijn zet doet, wordt de schade afgetrokken en is speler één weer aan de beurt. Dit herhaalt zich totdat een speler 0 gezondheid bereikt. Video van deze werking is bijgevoegd.
Stap 2: FSM
Deze game is in wezen één grote eindige-toestandsmachine, waarbij een complexe logica plaatsvindt op basis van de staat waarin de FSM zich bevindt.
Status 1: MenuDe eerste status is het menuscherm, dat een van de eenvoudigere statussen is. Het bevat het display met zeven segmenten met het woord "PLAY" en de knop die ervoor zorgt dat het spel begint. De knop, BTN, leidt ons naar de volgende staat, dat is de beurt van speler.
Toestand 2: Speler Een is aan de beurt
De beurt van speler één activeert een signaal dat ervoor zorgt dat het scherm met zeven segmenten de gezondheid van speler twee weergeeft. Een ander signaal gaat aan om een schuifregister te activeren dat is geïmporteerd uit een andere module die we hebben gemaakt (Pone.vhd). Dit schuifregister laat de LED's oplichten zoals een toenemende vermogensmeter zou doen in andere games, en het zou dan worden gereset naar 0 wanneer het maximale aantal LED's bereikt dat kan worden verlicht. Het wordt bijgewerkt op de stijgende flank van de klok verkregen uit barclock.vhd, die is gewijzigd vanuit een geleend lab-bestand. We lieten de balk van speler één van rechts beginnen en naar links vullen, omdat de schakelaar van speler één ook aan de linkerkant zit (voor een intuïtieve gebruikerservaring). Zodra de schakelaar is omgedraaid, gaat de status verder naar speler één aftrek, en het aantal actieve LED's wordt opgeslagen in een signaal.
Toestand 3: Speler Een aftrek Het signaal met het aantal LED's actief bepaalt de hoeveelheid gezondheid die wordt afgetrokken. Dit wordt gedaan door een ander schuifregister (deductor1.vhd) te hebben dat de LED's niet verhoogt, maar verlaagt. Dit neemt af op de stijgende flank van een van de clock div-modules die we hebben geleend en aangepast (downcounterclock.vhd). Op het moment dat één LED uitgaat, wordt één gezondheidspunt afgetrokken van de totale gezondheid van speler twee. Als tijdens dit proces speler twee 0 gezondheid bereikt, stoppen we en gaan we onmiddellijk verder naar de "Game over"-status. Anders, zodra de LED-vector "000000000000000000" bereikt, gaan we verder met de beurt van speler twee.
Toestand 4: De beurt van speler twee De beurt van speler twee is precies zoals die van speler één, behalve dat het schuifregister ervoor (Ptwo.bhd) van links naar rechts gaat en de schakelaar zich aan de rechterkant van het bord bevindt. Er wordt een signaal geactiveerd om de gezondheidsweergave van speler 1 te krijgen. Zodra schakelaar 2 actief is, gaat dit verder naar de aftrekbeurt van speler twee.
Fase 5: Speler twee aftrekken Net als de beurt van speler twee, gedraagt speler twee aftrekken zich net zoals speler één aftrek. Het belangrijkste verschil is dat het schuifregister dat het uitschakelen van de LED's regelt, in de tegenovergestelde richting gaat, wat een gemakkelijke wijziging is die je kunt maken als je eenmaal de aftrek van de speler goed hebt laten werken.
Fase 6: Game Over Als een van de spelers op enig moment nul gezondheid bereikt, schakelt het spel over naar deze status. Niets bijzonders wordt weergegeven. Als BTN één wordt ingedrukt, wordt de gezondheid gereset naar 99 en gaat de status terug naar het menu, waardoor het spel in feite opnieuw begint.
Stap 3: Modules
Black Box-diagram voor spel
Downcounterclock (gebaseerd op clk_div.vhd module door Bryan Mealy):
Dit is de klok die de timing van de deductoren afhandelt. De constante genaamd max_count is 3x meer dan de max_count constante van barclock. Hierdoor zullen de deductoren 3x langzamer zijn dan de snelheid van de balk.
Barclock - (gebaseerd op clk_div.vhd module door Bryan Mealy):
Deze klok regelt de timing van de vermogensmeters, die we snel hebben verhoogd om het spel moeilijker te maken. Deze timing kan naar wens worden aangepast door de snelheid te verhogen door de constante max_count een groter getal te maken, of te verlagen door max_count een kleiner getal te maken. Sseg_dec - (geschreven door Bryan Mealy): Deze module neemt een 8-bits getal als invoer, dat het decodeert, het getal omzet in zijn decimale equivalent en vervolgens uitvoert naar het zevensegmentendisplay. Om dit bestand te laten werken, moet u ervoor zorgen dat uw beperkingen overeenkomen met de onze.
Poon:
Dit is een schuifregister dat bits naar links verschuift, waarbij een hot bit wordt toegevoegd om het te laten lijken alsof de vermogensmeter toeneemt. Wanneer alle bits warm zijn, worden alle bits gereset naar '0' en begint de cyclus opnieuw.
twee:
Dit is een omgedraaide versie van de P1-module.
Afleider1:
Dit is een combinatie van een schuifregister en een aftrekker. Het schuifregister gaat in de tegenovergestelde richting van het schuifregister van P1, wat een aftrek aangeeft. Dit trekt ook 1 af van de gezondheid van speler 2 voor elke klokcyclus, dus met de combinatie van deze twee functies zal het lijken alsof de gezondheid van de tegenstander met 1 afneemt voor elke led van de gezondheidsbalk die naar beneden gaat.
Deductor2: Dit is een omgedraaide versie van de Deductor1-module.
PlayDecoder (geleend en langzaam gewijzigd van ekchen35649 zijn 133 instructable): Dit wordt gebruikt in de menustatus om het woord "PLAY" weer te geven op de decoder met zeven segmenten.
Stap 4: Testen
Deze game is oorspronkelijk geïnspireerd op een van de minigames van Kirby. Het is een eenvoudig spel voor twee spelers dat op een Basys 3-bord of een FPGA kan worden gespeeld.
Stap 1: Benodigde materialen
Je hebt nodig: Digilent Basys 3, FPGA Board (of een ander) Een relatief up-to-date versie van Vivado of een andere vhdl-omgeving Een computer die het genoemde programma kan draaien Een brein
Stap 2: Het spel zelf
Hoe te spelen
Om te beginnen, druk je op de middelste knop. Dit zorgt ervoor dat "99", dat de gezondheid van speler twee vertegenwoordigt, wordt weergegeven op het display met zeven segmenten. Vervolgens zullen de LED's achtereenvolgens van rechts naar links oplichten. Dit vormt een powerbar. Zodra de powerbar vol is, wordt deze gereset. Het doel van speler één is om de schakelaar om te draaien wanneer de lat zo hoog mogelijk ligt. Hoe meer LED's branden, hoe meer schade speler één aan speler twee toebrengt. Nadat speler één zijn schakelaar heeft omgedraaid, wordt de toegebrachte schade afgetrokken van de gezondheid van speler twee. Daarna gaat het over naar de beurt van speler twee. Nu staat het weergegeven getal voor de gezondheid van speler en wordt de krachtbalk van links naar rechts gevuld. Zodra speler twee zijn zet doet, wordt de schade afgetrokken en is speler één weer aan de beurt. Dit herhaalt zich totdat een speler 0 gezondheid bereikt. Video van deze werking is bijgevoegd.
Om het spel te spelen, laadt u het op een basbord en drukt u op de middelste knop. Probeer de schakelaar om te draaien met zoveel mogelijk LED's actief en wacht dan terwijl het bord die punten aftrekt van de gezondheid van je tegenstander. Geef het dan door aan je vriend, en
Stap 3: FSM
Deze game is in wezen één grote eindige-toestandsmachine, waarbij een complexe logica plaatsvindt op basis van de staat waarin de FSM zich bevindt.
(Staatsdiagram)
Staat 1: Menu
De eerste status is het menuscherm, dat een van de eenvoudigere statussen is. Het bevat het display met zeven segmenten met het woord "PLAY" en de knop die ervoor zorgt dat het spel begint. De knop, BTN, leidt ons naar de volgende staat, dat is de beurt van speler.
Toestand 2: Speler Een is aan de beurt
De beurt van speler één activeert een signaal dat ervoor zorgt dat het scherm met zeven segmenten de gezondheid van speler twee weergeeft. Een ander signaal gaat aan om een schuifregister te activeren dat is geïmporteerd uit een andere module die we hebben gemaakt (Pone.vhd). Dit schuifregister laat de LED's oplichten zoals een toenemende vermogensmeter zou doen in andere games, en het zou dan worden gereset naar 0 wanneer het maximale aantal LED's bereikt dat kan worden verlicht. Het wordt bijgewerkt op de stijgende flank van de klok die is verkregen uit barclock.vhd, die is gewijzigd vanuit een geleend laboratoriumbestand. We lieten de balk van speler één van rechts beginnen en naar links vullen, omdat de schakelaar van speler één ook aan de linkerkant zit (voor een intuïtieve gebruikerservaring). Zodra de schakelaar is omgedraaid, gaat de status verder naar speler één aftrek, en het aantal actieve LED's wordt opgeslagen in een signaal.
Staat 3: Speler één aftrek
Het signaal met het aantal actieve LED's bepaalt de hoeveelheid gezondheid die wordt afgetrokken. Dit wordt gedaan door een ander schuifregister (deductor1.vhd) te hebben dat de LED's niet verhoogt, maar verlaagt. Dit neemt af op de stijgende flank van een van de clock div-modules die we hebben geleend en aangepast (downcounterclock.vhd). Op het moment dat één LED uitgaat, wordt één gezondheidspunt afgetrokken van de totale gezondheid van speler twee. Als speler twee tijdens dit proces 0 gezondheid bereikt, stoppen we en gaan we onmiddellijk naar de "Game over"-status. Anders, zodra de LED-vector "000000000000000000" bereikt, gaan we verder met de beurt van speler twee.
Toestand 4: Speler Twee is aan de beurt
De beurt van speler twee is precies zoals die van speler één, behalve dat het schuifregister ervoor (Ptwo.bhd) van links naar rechts gaat en de schakelaar zich aan de rechterkant van het bord bevindt. Er wordt een signaal geactiveerd om de gezondheidsweergave van speler 1 te krijgen. Zodra schakelaar 2 actief is, gaat dit verder naar de aftrekbeurt van speler twee.
Fase 5: Speler twee aftrekken
Net als de beurt van speler twee, gedraagt speler twee aftrekken zich net zoals speler één aftrek. Het belangrijkste verschil is dat het schuifregister dat het uitschakelen van de LED's regelt, in de tegenovergestelde richting gaat, wat een gemakkelijke wijziging is om aan te brengen zodra je de aftrek van de speler goed hebt laten werken.
Fase 6: Game Over Als een van de spelers op enig moment nul gezondheid bereikt, schakelt het spel over naar deze toestand. Niets bijzonders wordt weergegeven. Als BTN één wordt ingedrukt, wordt de gezondheid gereset naar 99 en gaat de status terug naar het menu, waardoor het spel in feite opnieuw begint.
Zwarte doos
Stap 4: Modules
Downcounterclock (gebaseerd op clk_div.vhd module door Bryan Mealy):
Dit is de klok die de timing van de deductoren afhandelt. De constante genaamd max_count is 3x meer dan de max_count constante van barclock. Hierdoor zullen de deductoren 3x langzamer zijn dan de snelheid van de balk.
Barclock - (gebaseerd op clk_div.vhd-module van Bryan Mealy): deze klok verwerkt de timing van de vermogensmeters, die we snel hebben verhoogd om het spel moeilijker te maken. Deze timing kan naar wens worden aangepast door de snelheid te verhogen door de constante max_count een groter getal te maken, of te verlagen door max_count een kleiner getal te maken. Sseg_dec - (geschreven door Bryan Mealy): Deze module neemt een 8-bits getal als invoer, dat het decodeert, het getal omzet in zijn decimale equivalent en vervolgens uitvoert naar het zevensegmentendisplay. Om dit bestand te laten werken, moet u ervoor zorgen dat uw beperkingen overeenkomen met de onze.
Pone: Dit is een schuifregister dat bits naar links verschuift, waarbij een hot bit wordt toegevoegd om het te laten lijken alsof de vermogensmeter toeneemt. Wanneer alle bits warm zijn, worden alle bits gereset naar '0' en begint de cyclus opnieuw.
Ptwo: Dit is een omgedraaide versie van de P1-module.
Deductor1: Dit is een combinatie van een schuifregister en een aftrekker. Het schuifregister gaat in de tegenovergestelde richting van het schuifregister van P1, wat een aftrek aangeeft. Dit trekt ook 1 af van de gezondheid van speler 2 voor elke klokcyclus, dus met de combinatie van deze twee functies zal het lijken alsof de gezondheid van de tegenstander met 1 afneemt voor elke led van de gezondheidsbalk die naar beneden gaat.
Deductor2: Dit is een omgedraaide versie van de Deductor1-module.
PlayDecoder (geleend en enigszins aangepast van ekchen35649 zijn 133 instructable):
Dit wordt gebruikt in de menustatus om het woord "PLAY" weer te geven op de decoder met zeven segmenten.
To Do: foto's, video
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
Competitief zoemersysteem: 5 stappen
Competitief zoemersysteem: het competitieve zoemersysteem dat in dit project is ontworpen, werkt op dezelfde manier als de zoemersystemen die worden gebruikt in de regionale en nationale wetenschappelijke komcompetities. Dit project werd geïnspireerd door mijn betrokkenheid bij het science bowl-team van mijn middelbare school voor drie
Idee voor doe-het-zelf-activiteit voor weerstations voor 12+ jaar: 4 stappen
Idee voor doe-het-zelf-weerstationactiviteit voor 12-plussers: in deze activiteit zullen deelnemers hun weerstation opzetten, de lucht in sturen en de opnames (licht, temperatuur, vochtigheid) in realtime volgen via de Blynk-app. Bovendien leert u hoe u de geregistreerde waarden publiceert
Batterijen van cd-spelers opladen zonder het deksel te openen: 5 stappen
Laad de batterijen van de cd-speler op zonder het deksel te openen: ik gebruik een Sony mp3-cd-speler om naar podcasts te luisteren en naar mijn audiobijbel, ook mp3. Ik heb NiCad AA batterijen erin. Ze waren gratis. Maar als ik ze moet opladen, moet ik het deksel openen om bij het batterijcompartiment te komen. Dat zorgt ervoor dat mijn plaats in mijn a
Zet vertragingsvrije video's van uw computer/Youtube op Sansa-spelers: 4 stappen
Zet vertragingsvrije video's van uw computer/Youtube op Sansa-spelers: Sansa-videospelers ervaren audiovertraging bij de meeste video's van meer dan 5 minuten. My Instructable zal je door de stappen leiden om YouTube-video's en -video's op je eigen computer op je Sansa-videospeler te zetten