Innehållsförteckning:

FPGA -reaktionsspel: 10 steg
FPGA -reaktionsspel: 10 steg

Video: FPGA -reaktionsspel: 10 steg

Video: FPGA -reaktionsspel: 10 steg
Video: TOP 10 Лучший талант в мире !!! (Посмотрите и убейте) 2024, Juli
Anonim
FPGA -reaktionsspel
FPGA -reaktionsspel

Av Summer Rutherford och Regita Soetandar

Steg 1: Introduktion

För vårt slutprojekt för CPE 133 designade vi ett reaktionsspel i VHDL för ett Basys3 -kort. Detta spel kan närmast jämföras med arkadspelet "Stacker" där spelaren måste släppa blocken vid rätt tidpunkt. Basys3 -kortet är anslutet till en brödbräda, som har alternerande lysdioder. Dessa LED -lampor växlar med en specifik frekvens, beroende på nivån. Detta spel använder klockavdelaren och den fyrsiffriga 7 -segmentskärmen, samt en finite state -maskin. När spelaren aktiverar rätt omkopplare när den mellersta lysdioden tänds, går spelaren vidare till nästa nivå i spelet, vilket ökar frekvensen för de växlande lysdioderna. Detta gör varje successiv nivå svårare än föregående nivå. När spelaren lyckas slå nivå 7, den högsta nivån, kommer ett meddelande att visas på segmentdisplayen och alla lysdioder blinkar samtidigt på och av.

Steg 2: Material

Material
Material
Material
Material
Material
Material

Materialet du behöver är:

  • Digilent Basys3 -kort med mikro -USB -kabel
  • Bakbord
  • 5 lysdioder
  • 5 motstånd (vi använde 220 ohm)
  • 11 bygelkablar
  • Dator med Vivado

Steg 3: Design på högsta nivå med svart låda

Top Level Diagram Black Box Design
Top Level Diagram Black Box Design
Top Level Diagram Black Box Design
Top Level Diagram Black Box Design

Som du kan se börjar vårt högsta blockdiagram med att hämta de nödvändiga klockorna från vår delmodul, ClkDivide. Dessa klockor är ingångar till de olika processblocken. I grund och botten måste spelet inse att när en användare slår på omkopplaren korrekt måste lysdioderna börja växla snabbare och displayen måste gå upp en nivå. Blockdiagrammet kan se lite galet ut, men det beror på att det finns många signaler som etableras i en viss process och sedan definierar den signalen en annan signal i ett annat processblock.

I slutändan är de enda ingångar spelet tar in ingångsklockan på Basys3 -kortet som går på 100 Mhz, sju omkopplare på Basys3 -kortet och återställningsknappen. Det som matas ut är anoden för displayen med sju segment, de sju segmenten för displayen och lysdioderna.

Steg 4: CLKDivide

CLKDivide
CLKDivide
CLKDivide
CLKDivide
CLKDivide
CLKDivide

Denna klockdelningsundermodul skapade en långsammare klocka beroende på det värde vi mappade till den i vår huvudfil. Vi använde denna submodul för att bestämma Clk400, PushClk och newlck. Denna submodul tar en klocka och en 32 bitars avdelare som ingångar. En saktad klocka matas ut. Det finns ett processblock för avdelaren och den saktade klockan. I processen är en tillfällig variabel, som vi kallade count, som räknar upp en varje gång en stigande kant av den inmatade klockan träffas. När den når delarens nummer växlade den långsammare klockan och räkningen återställs till noll.

Steg 5: Skift processblock

Växla processblock
Växla processblock

Shift -processblocket styr lysdiodernas växlande rörelse och hastighet. I känslighetslistan finns newclk- och stoppsignalerna. Stopp orsakar en kort fördröjning när användaren passerar nivån. Om stoppet inte är högt växlar lysdioderna som normalt baserat på hastigheten för newclk. Detta alternerande mönster styrs av två variabler: Track and count. Count avgör vilken lysdiod som ska vara på, medan Track avgör om antalet ska räkna upp eller ner. Det finns en annan signal, Final, som endast gäller när nivån är “111”, vilket indikerar att spelaren har slagit spelet. Final växlar mellan 0 och 1 varje klockkant för att slå på och stänga av lysdioderna kontinuerligt. Detta är bara ett visuellt element för den sista visningen.

Denna skiftprocess är den perfekta platsen att börja för detta projekt. Om du kan få dina lysdioder att växla korrekt och konsekvent, härifrån måste du bara lägga till beteendet när du höjer nivån!

Steg 6: Finite State Machine

Finite State Machine
Finite State Machine

Vi skapade en Finite State Machine för att diktera beteendet när ingångsbrytaren eller återställningsknappen trycks in. Varje tillstånd är en "nivå" och om omkopplaren slås på vid fel tidpunkt eller om återställningen trycks in återgår nivån till "000". Annars, om omkopplaren är korrekt påslagen, flyttas nivån upp tills den når det slutliga tillståndet, "111" och slutdisplayen visas. FSM är baserat på de två processblocken sync_proc och comb_proc. Sync_proc använder klockan som vi kallade PushClk. Denna klocka styr hur snabbt nästa tillstånd blir det nuvarande tillståndet. Denna klocka borde vara ganska snabb; vi valde en hastighet som var ungefär två gånger snabbare än vår snabbaste LED -hastighet.

Vi implementerade denna kod med hjälp av en FSM för nivåerna; men efter det här projektet insåg vi att en effektivare användning av ett FSM kan ha varit att ha ett uppräkningstillstånd, ett återställningstillstånd eller ett uppehållstillstånd. Om ingenting trycks, är det i vistelsetillståndet. Om nollställningen trycks in eller om spelaren trasslar, är den i återställningsläge. Om den trycks in korrekt är den i räkningsläget. Det finns många andra sätt att använda en FSM i det här spelet också!

Steg 7: Kontroll av displayprocessblock med nivå

Styr displayprocessblock med nivå
Styr displayprocessblock med nivå

Nivå styr displayprocessblocket. Variablerna i känslighetslistan är Level, Reset och Clk400. 7 -segmentets display börjar med att visa '1' för första nivån. Det räknas upp till 7 varje gång användaren passerar en nivå för att visa användaren vilken nivå de är på. När användaren har passerat nivå 7 visar den "COOL" för att indikera att spelaren har slagit spelet. Den här "COOL" -skärmen körs från en 400 Hz -klocka som vi kallade Clk400. Om du trycker på Reset går displayen tillbaka till “1.”

Steg 8: Kontrollera LED -hastighet med nivå

Kontrollera LED -hastighet med nivå
Kontrollera LED -hastighet med nivå

Slutligen styr Level hastigheten på lysdioderna. Nivån är den enda signalen i känslighetslistan. D1 är signalen som går in i Clock Divider -processen för att få newclk. Varje gång nivå ändras eller staten ändras, blockerar processblocket”Hastighet”. Denna process bestämmer värdet av D1. Det finns 8 definierade värden för D1 som vi valde baserat på hur snabbt vi ville att varje nivå skulle köras. D1 blir mindre varje gång nivån ökar så att newclk körs snabbare.

Steg 9: Hårdvarumontage

Hårdvara Montering
Hårdvara Montering

Vi kopplade brödbrädan till Basys3 med en av pmod -kontakterna. Sex av pmod -portarna användes för att ansluta en han till en hane, en för jord och de andra fem för de 5 lysdioderna. Vi placerade också ett motstånd för varje LED. Dessa motstånd är 220Ω och förhindrar att lysdioderna kortsluts och bränns ut. Även om varje lysdiod har ett visst motstånd är motståndet inte tillräckligt för att hindra spänningen från källan.

Steg 10: Ha kul

Detta spel är väldigt lätt att spela. Spelaren startar längst till höger omkopplare 1 på brädet, V17. De måste vrida omkopplaren högt när mittlampan lyser. De flyttar sedan en strömbrytare till vänster och gör samma sak! Om spelaren tar sig till slutet hamnar de på den sjunde omkopplaren, W14. Om de slår spelet får de se en riktigt rolig slutvisning!

Något att notera är att när du skapar detta spel är hastigheterna helt upp till dig! Om de hastigheter vi har valt är för långsamma kan du snabba på det och göra det ännu mer utmanande! Det finns heller inget bestämt antal nivåer. Om du vill få den att ha ännu fler nivåer, det finns modifieringar som måste göras i FSM och processblocken bestäms av nivå, men det här är mycket enkla ändringar.

Vi valde också att använda switchar på kortet som användarinmatning, men detta är också möjligt med en knapp på Basys3 -kortet; knappen kommer att eliminera behovet av att återställa omkopplarna varje gång användaren börjar om. Vi använde inledningsvis en knapp, men detta orsakade fel i att definiera nivån eftersom den skulle hoppa flera nivåer om två stigande kanter på PushClk träffades när knappen hölls nere.

Nedan finns en video som visar hur man spelar, går igenom de fyra första nivåerna och den sista avslutningsvisningen.

Huvudfilen för detta projekt ingår nedan.

Källor

Basys3 referensmanual

Inspiration för projektet - Arduino Stop It -spel

Rekommenderad: