Innehållsförteckning:

Spelet Binary to Decimal Matcher: 10 steg
Spelet Binary to Decimal Matcher: 10 steg

Video: Spelet Binary to Decimal Matcher: 10 steg

Video: Spelet Binary to Decimal Matcher: 10 steg
Video: How To Fix Dll Missing Problem | Without Any Software || DLL file missing windows 10 2024, November
Anonim
Image
Image
Ställa in klockavdelaren
Ställa in klockavdelaren

Denna instruerbara visar processen och modulerna som krävs för att skapa vårt matchande binära till decimala matchande spel. Inom 60 sekunder kommer användare att översätta och mata in så många slumpmässigt genererade decimaltal på sju segmentdisplayen till binär genom att växla omkopplarna och skicka med en gissningsknapp. När det är klart visas ett slutresultat och återställs för att spela igen.

Att förstå binära och snabba reflexer är fördelaktigt att göra bra, men återställningsknappen tillhandahålls om man direkt vill försöka igen.

Steg 1: Konfigurera klockavdelaren

Ryggraden i hela detta projekt kommer från korrekt synkronisering av alla delar i detta gizmo. Vår Finite State Machine använder den interna klockan, men den sju segmentiga displayen och timern måste använda en ändrad version av klockan.

Denna "nya klocka" kommer från att dela den interna klockan med en önskad period för att uppnå en viss frekvens som behövs för varje specifik komponent. Detta har gjorts i tidigare labb och av erfarenhet vet vi att timern har "ens" -siffran inställd på 0,1 Hz, och "tio" -siffran är 1 Hz

Ingångar: ClkIn, divisor (32 bit)

Utgångar: ClkOut

Steg 2: Skapa en Finite-State Machine (FSM)

Skapa en Finite-State Machine (FSM)
Skapa en Finite-State Machine (FSM)
Skapa en Finite-State Machine (FSM)
Skapa en Finite-State Machine (FSM)
Skapa en Finite-State Machine (FSM)
Skapa en Finite-State Machine (FSM)

I vår Finite-State Machine bestämde vi att fem tillstånd (Start, Display, Check, Score och End) skulle vara nödvändiga med fem ingångar (start, reset, gissa, lika, timeout). Den enda utmatningen i vår tillståndsmaskin är ett 3 -bitars tal som representerar vilket tillstånd användaren är i (000, 001, 011, 101, 100) med avseende på tillstånden nedan.

Kom ihåg att en Finite State Machine faktiskt inte förfunktionerar nedanstående funktioner, istället berättar den bara vilket tillstånd programmet är på och vad. Vad som faktiskt händer bestäms av toppmodulen som förklaras nedan.

Starttillstånd (000)

Starttillståndet är där användaren kommer att börja tills startingången är hög, detta är också det tillstånd som kommer att uppnås när återställningsknappen trycks in.

Game State (001)

Speltillståndet är början på spelet, där slumpmässigt tal genereras och användaren växlar växlarna för att skapa en ingång. När gissningsknappen trycks in flyttas spelet till kontrollläget.

Kontrollera tillstånd (011)

Detta tillstånd är där jämförelsen används, vilket kommer att jämföra värdena för användarens inmatning och det slumpmässigt genererade talet. Om inlämningen är korrekt är lika värde högt och FSM går till poängläget; men om inlämningen är felaktig återgår FSM till visningsläget tills inlämningen är korrekt.

Detta kontrollläge sker relativt snabbt jämfört med de andra, eftersom det bara händer så länge kontrollknappen trycks in

Poängtillstånd (101)

Eftersom lika värde är högt var inlämningen korrekt. I detta tillstånd kommer poängvärdet att öka med en och ett nytt nummer genereras för användaren att mata in. Detta nya nummer för oss tillbaka till startläget där användaren återigen kommer att växla omkopplare.

Sluttillstånd (100)

När timern på 60 sekunder har gått är timeout -ingången hög och användaren når slutläget där slutresultatet visas. Återställningsingången kommer sedan att tryckas och FSM startar om vid startläget igen.

Ingångar: Clk, första, start, gissning, lika, timeout

Utgång: tillstånd (3 bitar)

Steg 3: Kartläggning av sjusegmentsdisplayen

Kartlägga displayen med sju segment
Kartlägga displayen med sju segment
Kartlägga displayen med sju segment
Kartlägga displayen med sju segment
Kartläggning av sju segmentskärmen
Kartläggning av sju segmentskärmen

Sju segmentdisplayen är en viktig del av hela projektet eftersom de två första siffrorna på skärmen används som utmatning av slumptalsgeneratorn, medan de två sista siffrorna är timern. Även om vi har implementerat ett exempel på detta i det sista labbet när det gäller att ha siffror på skärmen, visades det i hexadecimal. För att åtgärda problemet använde vi en omvandlare och klockavdelare som förklaras närmare nedan.

Displayen visar alla 0: orna tills FSM går in i spelläget; men i slutläget ska displayen bara visa användarens poäng.

Eftersom vi använder alla fyra siffrorna i displayen med sju segment måste vi cykla genom varje anod tillräckligt snabbt vid 300 Hz för att uppfattas som alltid tänd.

Ingångar: Clk, sju segment

Utgångar: katoder (7 bitar), anoder (4 bitar)

Steg 4: Skapa komparatorn

Skapa komparatorn
Skapa komparatorn

Denna delmodul används i kontrollläget när det gäller hur den jämför den 7 -bitars inmatade gissningen mot det faktiska decimalvärdet.

Vi hade en if -sats som utvärderade både ingångar och två utgångar beroende på om lika värde var högt eller lågt. Så viktig som den här modulen är, är det överlägset ett av de enklare programmen att utforma i detta projekt.

Ingångar: switchar (8 bitar), nummer (8 bitar)

Utgång: EQ

Steg 5: Konfigurera en timer

Ställa in en timer
Ställa in en timer
Ställa in en timer
Ställa in en timer

Vår timer är i huvudsak två olika räknare som ökar i olika takt. En räknare i "ens" -värdet (den första sju segmentvisning) och en räknare för "tio" -värdet (andra siffran på sju segmentvisning). Varje siffra är baserad på klockans stigande kant, och när räknaren når 60 sekunder kommer time_out att vara hög och spelet kommer att avslutas och återgå till startläget.

Ingångar: Clk, tillstånd (3 bit), start

Utgångar: Ström (8 bit), timeout

Steg 6: Designa Pseudo Random Number Generator

Designa Pseudo Random Number Generator
Designa Pseudo Random Number Generator

En annan alternativ metod för en talgenerator specifikt för detta fall är att ha en upprepningsräknare från 0-99 (i binär) som matar ut det räknade talet när ingången är hög, eftersom detta skulle ta bort behovet av att använda en LFSR.

Siffran ändrar varje stigande kant på den interna klockan (10 nanosekunder) och går igenom alla 100 siffror på en mikrosekund. När användaren vill ha ett nytt nummer från nummergeneratorn, matar det ut det nummer det var på, Även om denna process inte är helt slumpmässig är sannolikheten för att hitta relaterade utdata från denna process tillräckligt låg för att vara pseudo-slumpmässig.

Ingångar: Clk, changenum, lika

Utgångar: antal (8 bitar)

Steg 7: Skapa en omvandlare

Skapa en omvandlare
Skapa en omvandlare

En nödvändig komponent är omvandlaren, som vi använde för att visa decimaltal på sju segmentdisplayen istället för den ursprungliga hexadecimalen. Även om båda siffrorna är baserade på ett 7 -bitars binärt tal, skapade vi en hel modul för att konvertera hexadecimal till decimal.

Till exempel, om vår slutresultat för poängen var 0010001 (sjutton), skulle den sju segmentiga displayen visa det hexadecimala värdet 11, istället för decimaltalet 17.

Ingång: Numin (8 bitar)

Utgång: Numout (8 bitar)

Steg 8: Sätta ihop allt i spelmodulen

Att sätta ihop allt i spelmodulen
Att sätta ihop allt i spelmodulen
Att sätta ihop allt i spelmodulen
Att sätta ihop allt i spelmodulen
Att sätta ihop allt i spelmodulen
Att sätta ihop allt i spelmodulen
Att sätta ihop allt i spelmodulen
Att sätta ihop allt i spelmodulen

För våra komponenter använde vi de nödvändiga omkopplarna 0-6 för användaren att växla, med de tre knapparna för att fungera som användarinmatningar för start, återställning och gissning. De sju segmenten display och klockkomponenter är också komponenter vi har gjort från tidigare labb men var tvungna att ändra för att passa detta projekt.

Vi delade upp det här projektet i de sex modulerna som visas ovan för att bryta ner hela gizmo i många arbetsdelar, men sättet de är anslutna är ganska invecklat och visas från den svarta rutan bilden bifogad.

Medan spelet pågår tänds 7 lysdioder för att meddela användaren vilken som byter till användning, och när spelet slutar programmerade vi också lysdioder för att blinka

Ingångar: switchar (8 bitar), Clk, reset, start, gissning

Utgångar: katoder (7 bitar), anoder (4 bitar), lysdioder (7 bitar)

Steg 9: Extra problem

Även om endast sju switchar används i det här spelet, har koden ställts in som ett 8 bitars nummer. Vi gjorde detta för att få en mer bekväm komparator som skulle jämföra dessa 8 bitar med det 8 -bitars tal som vi genererade från slumptalsgeneratorn.

Poängen gav oss också lite besvär i början eftersom vi bestämde oss för att öka en poäng när FSM var i poängläge; men vad som hände istället var att poängen fortsatte att öka så länge staten var på, vilket gav oss en orimligt hög poäng vi inte kunde hantera. Vi fixade detta genom att lägga till en pulssignal som var synkroniserad med klockans stigande kant, som ses i koden i steg 8.

Slutligen tog timern mycket tid att felsöka eftersom det skulle snedvrida vår sju segmentvisning när den räknade ner, så vi var tvungna att ändra den från att räkna ner från 60 till att räkna upp från 0.

Steg 10: Källfiler och begränsningar

Om du hellre vill dra från våra källfiler istället för att skapa dina egna, här är de. Begränsningsfilen ingår också.

Rekommenderad: