INHOUDSOPGAWE:

Kompeterende VS -tydsberekening vir 2 spelers: 4 stappe
Kompeterende VS -tydsberekening vir 2 spelers: 4 stappe

Video: Kompeterende VS -tydsberekening vir 2 spelers: 4 stappe

Video: Kompeterende VS -tydsberekening vir 2 spelers: 4 stappe
Video: 28 панфиловцев. Самая полная версия. Panfilov's 28 Men (English subtitles) 2024, Julie
Anonim
Kompetitiewe VS -tydspeletjie vir 2 spelers
Kompetitiewe VS -tydspeletjie vir 2 spelers

Jy sal nodig hê:

1. Digilent Basys 3, FPGA Board (of enige ander FPGA,)

2. 'n Relatief opgedateerde weergawe van Vivado, of 'n ander VHDL -omgewing

3. 'n Rekenaar wat die genoemde program kan uitvoer.

Stap 1: Die spel self

Die spel self
Die spel self

Hoe die FSM met die modules in wisselwerking tree.

Hoe om te speel

Om te begin, druk u op die middelste knoppie. Dit sal veroorsaak dat "99", wat die gesondheid van speler twee verteenwoordig, op die sewe segment vertoon word. Dan sal die LED's opeenvolgend van regs na links brand. Dit vorm 'n kragbalk. Sodra die kragbalk vol is, word dit teruggestel. Die doel van speler een is om hul skakelaar te draai wanneer die balk so hoog as moontlik is. Hoe meer LED's brand, hoe meer skade veroorsaak speler aan speler twee. Nadat speler een hul skakelaar gedraai het, word die skade wat afgetrek word, afgetrek van speler twee se gesondheid. Dan skakel dit oor na speler se beurt. Die getal wat weergegee word, verteenwoordig die gesondheid van die speler en die kragbalk word van links na regs vol. Sodra speler twee sy skuif gemaak het, word die skade afgetrek en is dit weer aan die beurt van speler een. Dit word herhaal totdat een speler 0 gesondheid bereik. Video van hierdie funksie is aangeheg.

Stap 2: FSM

FSM
FSM
FSM
FSM
FSM
FSM
FSM
FSM

Hierdie speletjie is in wese 'n groot eindtoestandmasjien, wat 'n ingewikkelde logika gebeur op grond van die toestand waarin die FSM is.

Staat 1: Spyskaart Die eerste toestand is die spyskaart, wat een van die eenvoudiger toestande is. Dit bevat die sewe segment -skerm wat die woord "PLAY" vertoon, en die knoppie wat die spel laat begin. Die knoppie, BTN, lei ons na die volgende toestand, wat die speler se beurt is.

Staat 2: speler een se beurt

Die beurt van speler een aktiveer 'n sein wat veroorsaak dat die sewe segment -vertoning speler twee se gesondheid vertoon. 'N Ander sein word aangeskakel om 'n skofregister te aktiveer wat ingevoer is uit 'n ander module wat ons geskep het (Pone.vhd). Hierdie skofregister laat die LED's brand soos 'n toenemende kragmeter in ander speletjies, en dit word dan teruggestel na 0 wanneer dit die maksimum aantal LED's bereik wat aangesteek kan word. Dit word bygewerk oor die stygende rand van die klok, verkry vanaf barclock.vhd, wat gewysig is uit 'n geleende laboratoriumlêer. Ons het die speler se balk begin van regs en vul tot links, want die speler se skakelaar is ook aan die linkerkant (vir intuïtiewe gebruikerservaring). Sodra die skakelaar omgedraai is, gaan die toestand oor na die speler se aftrekking, en die hoeveelheid LED's wat aktief is, word in 'n sein gestoor.

Staat 3: speler een aftrek Die sein met die hoeveelheid LED's aktief bepaal die hoeveelheid gesondheid wat afgetrek word. Dit word gedoen deur 'n ander skofregister (deductor1.vhd) te hê wat die LED's in plaas van verhoog, verlaag. Dit neem af op die stygende rand van een van die klok -div -modules wat ons geleen en aangepas het (downcounterclock.vhd). Net soos een LED uit is, word een gesondheidspunt afgetrek van die totale gesondheid van speler twee. As speler twee tydens hierdie proses 0 gesondheid bereik, stop ons en gaan onmiddellik oor na die "Game over" toestand. Andersins, as die LED -vektor '0000000000000000' bereik, gaan ons oor na speler twee se beurt.

Staat 4: Speler Twee se beurt Speler twee se beurt is presies soos speler se beurt, behalwe dat die skofregister daarvoor (Ptwo.bhd) van links na regs gaan, en die skakelaar aan die regterkant van die bord is. 'N Sein word geaktiveer om die gesondheidsvertoning van speler 1 te vertoon. As skakelaar 2 eers aktief is, gaan dit oor na speler twee se aftrekbeurt.

Fase 5: Aftrek van speler twee Net soos speler twee se beurt, speel speler twee aftrek baie soos speler een aftrek. Die belangrikste verskil is dat die skofregister wat die afskakeling van die LED beheer, in die teenoorgestelde rigting gaan, wat maklik is om aan te pas as u die aftrekking van die speler behoorlik laat werk.

Stadium 6: Game Over As enige speler op enige stadium nul gesondheid bereik, skakel die spel oor na hierdie toestand. Niks spoggerige uitstallings nie. As op BTN een gedruk word, word die gesondheid na 99 teruggestel, en die toestand gaan terug na die spyskaart en begin die spel effektief weer.

Stap 3: Modules

Modules
Modules

Black Box Diagram vir spel

Afklok (gebaseer op clk_div.vhd module deur Bryan Mealy):

Dit is die klok wat die tydsberekening van die aftrekkers hanteer. Die konstante met die naam max_count is 3x meer as die max_count -konstante van barclock. Dit sal die aftrekkers 3x stadiger maak as die snelheid van die staaf.

Barclock - (gebaseer op clk_div.vhd module deur Bryan Mealy):

Hierdie klok hanteer die tydsberekening van die kragmeters, wat ons vinnig toegeneem het om die spel moeilik te maak. Hierdie tydsberekening kan na u smaak aangepas word, die snelheid verhoog deur die konstante max_count 'n groter getal te maak of dit te verminder deur max_count 'n kleiner getal te maak. Sseg_dec - (Geskryf deur Bryan Mealy): Hierdie module neem 'n 8 bis getal as invoer, wat dit dekodeer, die getal omskakel na sy desimale ekwivalent, en dan uitsette na die sewe segment vertoning. Om hierdie lêer te laat werk, moet u seker maak dat u beperkings by ons s'n pas.

Pone:

Dit is 'n skofregister wat stukkies na links skuif, en 'n warm bietjie byvoeg om te laat lyk asof die kragmeter toeneem. As al die stukkies warm is, word alle stukkies teruggestel op '0' en begin die siklus weer.

Twee:

Dit is 'n omgekeerde weergawe van die P1 -module.

Aftrekker 1:

Dit is 'n kombinasie van 'n skofregister en 'n aftrekker. Die skofregister gaan in die teenoorgestelde rigting van P1 se skofregister, wat 'n aftrekking aandui. Dit trek ook 1 af van die gesondheid van speler 2 vir elke kloksiklus, dus met die kombinasie van hierdie twee funksies sal dit lyk asof die teenstander se gesondheid met 1 afneem vir elke led van die gesondheidsbalk wat afneem.

Deductor2: Dit is 'n omgekeerde weergawe van die Deductor1 -module.

PlayDecoder (geleen en stellig gewysig van ekchen35649 sy 133 instruksies): Dit word in die spyskaartstatus gebruik om die woord "SPEEL" op die sewe segmentdekodeerder te vertoon.

Stap 4: Toets

Hierdie speletjie is oorspronklik geïnspireer deur een van die minigames van Kirby. Dit is 'n eenvoudige spel vir twee spelers wat op 'n Basys 3 Board of enige FPGA gespeel kan word.

Stap 1: Vereiste materiaal

U benodig: Digilent Basys 3, FPGA Board (of enige ander) 'n Relatief opgedateerde weergawe van Vivado, of 'n ander vhdl -omgewing 'n Rekenaar wat die genoemde program kan uitvoer A brein

Stap 2: Die spel self

Hoe om te speel

Om te begin, druk u op die middelste knoppie. Dit sal veroorsaak dat '99', wat die gesondheid van speler twee verteenwoordig, op die sewe segment -skerm vertoon word. Dan sal die LED's opeenvolgend van regs na links brand. Dit vorm 'n kragbalk. Sodra die kragbalk vol is, word dit teruggestel. Die doel van speler een is om hul skakelaar te draai wanneer die balk so hoog as moontlik is. Hoe meer LED's brand, hoe meer skade veroorsaak speler aan speler twee. Nadat speler een hul skakelaar gedraai het, word die skade wat afgetrek word, afgetrek van speler twee se gesondheid. Dan gaan dit oor na die beurt van speler twee. Die getal wat weergegee word, verteenwoordig die gesondheid van die speler en die kragbalk word van links na regs vol. Sodra speler twee sy skuif gemaak het, word die skade afgetrek en is dit weer aan die beurt van speler een. Dit word herhaal totdat een speler 0 gesondheid bereik. Video van hierdie funksie is aangeheg.

Om die speletjie te speel, laai dit op 'n basiese bord en druk die middelste knoppie. Probeer om die skakelaar met soveel LED's aktief as moontlik te draai, en wag dan en kyk hoe die bord die punte van u teenstander se gesondheid aftrek. Gee dit dan aan u vriend, en

Stap 3: FSM

Hierdie speletjie is in wese 'n groot eindtoestandmasjien, wat 'n ingewikkelde logika gebeur op grond van die toestand waarin die FSM is.

(Staatsdiagram)

Staat 1: Spyskaart

Die eerste toestand is die spyskaart, een van die eenvoudiger state. Dit bevat die sewe segment -skerm wat die woord "PLAY" vertoon, en die knoppie wat die spel laat begin. Die knoppie, BTN, lei ons na die volgende toestand, wat die speler se beurt is.

Staat 2: speler een se beurt

Die beurt van speler een aktiveer 'n sein wat veroorsaak dat die sewe segment -vertoning speler twee se gesondheid vertoon. 'N Ander sein word aangeskakel om 'n skofregister te aktiveer wat ingevoer is uit 'n ander module wat ons geskep het (Pone.vhd). Hierdie skofregister laat die LED's brand soos 'n toenemende kragmeter in ander speletjies, en dit word dan teruggestel na 0 wanneer dit die maksimum aantal LED's bereik wat aangesteek kan word. Dit word bygewerk oor die stygende rand van die klok verkry vanaf barclock.vhd, wat gewysig is uit 'n geleende laboratoriumlêer. Ons het die speler se balk begin van regs en vul tot links, want die speler se skakelaar is ook aan die linkerkant (vir intuïtiewe gebruikerservaring). Sodra die skakelaar omgedraai is, gaan die toestand oor na die speler se aftrekking, en die hoeveelheid LED's wat aktief is, word in 'n sein gestoor.

Staat 3: speler een aftrek

Die sein met die hoeveelheid aktiewe LED's bepaal die hoeveelheid gesondheid wat afgetrek word. Dit word gedoen deur 'n ander skofregister (deductor1.vhd) te hê wat die LED's in plaas van verhoog, verlaag. Dit neem af op die stygende rand van een van die klok -div -modules wat ons geleen en aangepas het (downcounterclock.vhd). Net soos een LED uit is, word een gesondheidspunt afgetrek van die totale gesondheid van speler twee. As speler twee tydens hierdie proses 0 gesondheid bereik, stop ons en gaan onmiddellik oor na die "Game over" toestand. Andersins, as die LED -vektor '0000000000000000' bereik, gaan ons oor na speler twee se beurt.

Staat 4: speler twee se beurt

Speler twee se beurt is presies soos speler se beurt, behalwe dat die skofregister daarvoor (Ptwo.bhd) van links na regs gaan, en die skakelaar aan die regterkant van die bord is. 'N Sein word geaktiveer om die gesondheidsvertoning van speler 1 te vertoon. As skakelaar 2 eers aktief is, gaan dit oor na speler twee se aftrekbeurt.

Fase 5: speler twee -aftrekking

Net soos speler twee se beurt, speel speler twee aftrek baie soos speler een aftrek. Die belangrikste verskil is dat die skofregister wat die afskakeling van die LED beheer, in die teenoorgestelde rigting gaan, wat maklik is om aan te pas as u die aftrekking van die speler behoorlik laat werk.

Fase 6: Speletjie verby As een van die spelers op enige stadium nul gesondheid bereik, skakel die spel oor na hierdie toestand. Niks spoggerige uitstallings nie. As op BTN een gedruk word, word die gesondheid herstel na 99, en die toestand gaan terug na die spyskaart en begin die spel effektief weer.

Swart boks

Stap 4: Modules

Afklok (gebaseer op clk_div.vhd module deur Bryan Mealy):

Dit is die klok wat die tydsberekening van die aftrekkers hanteer. Die konstante met die naam max_count is 3x meer as die max_count -konstante van barclock. Dit sal die aftrekkers 3x stadiger maak as die snelheid van die staaf.

Barclock - (gebaseer op die clk_div.vhd -module deur Bryan Mealy): hierdie klok hanteer die tydsberekening van die kragmeters, wat ons vinnig gemaak het om die spel moeiliker te maak. Hierdie tydsberekening kan na u smaak aangepas word, die snelheid verhoog deur die konstante max_count 'n groter getal te maak of dit te verminder deur max_count 'n kleiner getal te maak. Sseg_dec - (Geskryf deur Bryan Mealy): Hierdie module neem 'n 8 bis getal as invoer, wat dit dekodeer, die getal omskakel na sy desimale ekwivalent, en dan uitsette na die sewe segment vertoning. Om hierdie lêer te laat werk, moet u seker maak dat u beperkings by ons s'n pas.

Pone: Dit is 'n skofregister wat stukkies na links skuif, en 'n warm bietjie byvoeg om te laat lyk asof die kragmeter toeneem. As al die stukkies warm is, word alle stukkies teruggestel op '0' en begin die siklus weer.

Ptwo: Dit is 'n omgekeerde weergawe van die P1 -module.

Deductor1: Dit is 'n kombinasie van 'n skofregister en 'n aftrekker. Die skofregister gaan in die teenoorgestelde rigting van P1 se skofregister, wat 'n aftrekking aandui. Dit trek ook 1 af van die gesondheid van speler 2 vir elke kloksiklus, dus met die kombinasie van hierdie twee funksies sal dit lyk asof die teenstander se gesondheid met 1 afneem vir elke led van die gesondheidsbalk wat afneem.

Deductor2: Dit is 'n omgekeerde weergawe van die Deductor1 -module.

PlayDecoder (geleen en effens gewysig van ekchen35649 sy 133 instruksies):

Dit word in die spyskaart gebruik om die woord "SPEEL" op die sewe segment dekodeerder te vertoon.

Om te doen: foto's, video

Aanbeveel: