Indholdsfortegnelse:

Binary til Decimal Matcher -spillet: 10 trin
Binary til Decimal Matcher -spillet: 10 trin

Video: Binary til Decimal Matcher -spillet: 10 trin

Video: Binary til Decimal Matcher -spillet: 10 trin
Video: Special Programs in C − Binary to Decimal Conversion 2024, November
Anonim
Image
Image
Opsætning af Clock Divider
Opsætning af Clock Divider

Denne instruktør viser processen og modulerne, der er nødvendige for at oprette vores matchende binært til decimal matchende spil. Inden for 60 sekunder vil brugerne oversætte og indtaste så mange tilfældigt genererede decimaltal på syv segmentdisplayet til binært ved at skifte switches og sende med en gæt -knap. Når den er afsluttet, vises en sidste score og derefter nulstilles til at spille igen.

Forståelse af binære og hurtige reflekser er fordelagtigt at gøre godt, men nulstillingsknappen er tilvejebragt, hvis man straks vil prøve igen.

Trin 1: Opsætning af Clock Divider

Rygraden i hele dette projekt kommer fra den korrekte synkronisering af alle delene i denne gizmo. Vores Finite State Machine bruger det interne ur, men syv segment display og timer skal bruge en ændret version af uret.

Dette "nye ur" kommer fra at dividere det interne ur med en ønsket periode for at opnå en bestemt frekvens, der er nødvendig for hver specifik komponent. Dette er blevet gjort i tidligere laboratorier og af erfaring ved vi, at timeren har "ens" ciffer indstillet til 0,1 Hz, og "tiere" -cifret er 1 Hz

Indgange: ClkIn, divisor (32 bit)

Udgange: ClkOut

Trin 2: Oprettelse af en Finite-State Machine (FSM)

Oprettelse af en Finite-State Machine (FSM)
Oprettelse af en Finite-State Machine (FSM)
Oprettelse af en Finite-State Machine (FSM)
Oprettelse af en Finite-State Machine (FSM)
Oprettelse af en Finite-State Machine (FSM)
Oprettelse af en Finite-State Machine (FSM)

I vores Finite-State Machine besluttede vi, at fem tilstande (Start, Display, Check, Score og End) ville være nødvendige med fem input (start, reset, gæt, lige, timeout). Det eneste output i vores State Machine er et 3 bit -tal, der repræsenterer, hvilken tilstand brugeren er i (000, 001, 011, 101, 100) i forhold til nedenstående tilstande.

Husk, at en Finite State Machine faktisk ikke præformerer nedenstående funktioner, i stedet fortæller den bare, hvilken tilstand programmet er på, og hvad. Hvad der rent faktisk sker, bestemmes af det øverste modul forklaret nedenfor.

Starttilstand (000)

Starttilstanden er, hvor brugeren vil begynde, indtil startindgangen er høj, dette er også den tilstand, der vil blive nået, når der trykkes på nulstillingsknappen.

Game State (001)

Game State er begyndelsen på spillet, hvor det tilfældige tal genereres, og brugeren skifter switches for at oprette et input. Når der er trykket på gætknappen, flyttes spillet til checktilstanden.

Check tilstand (011)

Denne tilstand er, hvor komparatoren bruges, som vil sammenligne værdierne for brugerens input og det tilfældigt genererede tal. Hvis indsendelsen er korrekt, er den samme værdi høj, og FSM går til Scorestatus; men hvis indsendelsen er forkert, vender FSM tilbage til visningstilstanden, indtil indsendelsen er korrekt.

Denne tjekstilstand sker relativt hurtigt i forhold til de andre, da den kun sker, så længe der trykkes på kontrolknappen

Resultatstilstand (101)

Da den samme værdi er høj, var indsendelsen korrekt. I denne tilstand vil scoreværdien stige med en, og der vil blive genereret et nyt nummer, som brugeren kan indtaste. Dette nye nummer bringer os tilbage til starttilstanden, hvor brugeren igen vil skifte switches.

Sluttilstand (100)

Når timeren på 60 sekunder er gået, vil timeout -input være højt, og brugeren når sluttilstanden, hvor den endelige score vises. Nulstillingsindgangen trykkes derefter, og FSM starter igen ved starttilstanden.

Inputs: Clk, rst, start, gæt, lig, timeout

Output: tilstand (3 bit)

Trin 3: Kortlægning af displayet med syv segmenter

Kortlægning af displayet med syv segmenter
Kortlægning af displayet med syv segmenter
Kortlægning af displayet med syv segmenter
Kortlægning af displayet med syv segmenter
Kortlægning af displayet med syv segmenter
Kortlægning af displayet med syv segmenter

Displayet med syv segmenter er en vigtig del af hele projektet, da de to første cifre på skærmen bruges som output fra tilfældig talgeneratoren, mens de to sidste cifre er timeren. Selvom vi har implementeret et eksempel på dette i det sidste laboratorium med hensyn til at have cifre på skærmen, blev det vist i hexadecimal. For at løse dette problem brugte vi en konverter og urdeler, der forklares nærmere nedenfor.

Displayet viser alle 0'erne, indtil FSM går ind i spiltilstanden; i sluttilstanden skal displayet imidlertid bare vise brugerens score.

Da vi bruger alle fire cifre i displayet med syv segmenter, skal vi gennemgå hver anode hurtigt nok ved 300 Hz for at blive opfattet som altid tændt.

Indgange: Clk, syvesegment

Udgange: katoder (7 bit), anoder (4 bit)

Trin 4: Oprettelse af komparatoren

Oprettelse af komparatoren
Oprettelse af komparatoren

Denne delmodul bruges i checktilstanden med hensyn til, hvordan den sammenligner det 7 -bit binære indtastede gæt mod den faktiske decimalværdi.

Vi havde en if -erklæring, der vurderede både input og to output afhængigt af, om den samme værdi var høj eller lav. Så vigtigt som dette modul er, er det langt et af de enklere programmer at designe i dette projekt.

Indgange: switches (8 bit), nummer (8 bit)

Output: EQ

Trin 5: Opsætning af en timer

Opsætning af en timer
Opsætning af en timer
Opsætning af en timer
Opsætning af en timer

Vores timer er i det væsentlige to forskellige tællere, der stiger med forskellige hastigheder. En tæller i "ens" -værdien (det første syv segmentvisning) og en tæller til "tiens" -værdien (andet ciffer på syv segmentvisning). Hvert ciffer er baseret på den stigende kant af uret, og når tælleren når 60 sekunder, vil time_out være høj, og spillet slutter og vender tilbage til starttilstanden.

Indgange: Clk, tilstand (3 bit), start

Udgange: Strøm (8 bit), timeout

Trin 6: Design af Pseudo Random Number Generator

Design af Pseudo Random Number Generator
Design af Pseudo Random Number Generator

En anden alternativ metode til en talgenerator specifikt til denne sag er at have en gentagende tæller fra 0-99 (i binær), der udsender det tællede tal, når input er højt, da dette ville fjerne behovet for at bruge en LFSR.

Tallet ændrer hver stigende kant af det interne ur (10 nanosekunder) og går gennem alle 100 tal på et mikrosekund. Når brugeren ønsker et nyt nummer fra talgeneratoren, sender det det nummer, det var på, Selvom denne proces ikke er helt tilfældig, er sandsynligheden for at finde relaterede output fra denne proces lav nok til at være pseudo-tilfældig.

Indgange: Clk, changenum, lig

Udgange: antal (8 bit)

Trin 7: Oprettelse af en konverter

Oprettelse af en konverter
Oprettelse af en konverter

En nødvendig komponent er konverteren, som vi brugte til at vise decimaltal på syv segmentdisplayet i stedet for det originale hexadecimale. Selvom begge tal er baseret på et 7 -bit binært tal, oprettede vi et helt modul, der er beregnet til at konvertere hexadecimal til decimal.

For eksempel, hvis vores endelige output for scoren var 0010001 (sytten), ville displayet med syv segmenter vise den hexadecimale værdi på 11, i stedet for decimaltallet 17.

Input: Numin (8 bit)

Output: Numout (8 bit)

Trin 8: Sæt alt sammen i spilmodulet

Sætter alt sammen i spilmodulet
Sætter alt sammen i spilmodulet
Sætter alt sammen i spilmodulet
Sætter alt sammen i spilmodulet
Sætter alt sammen i spilmodulet
Sætter alt sammen i spilmodulet
Sætter alt sammen i spilmodulet
Sætter alt sammen i spilmodulet

For vores komponenter brugte vi de nødvendige switches 0-6 for brugeren at skifte med de tre knapper til at fungere som brugerindgange til start, nulstilling og gæt. De syv segment display og urkomponenter er også komponenter, vi har udført fra tidligere laboratorier, men måtte ændre for at passe til dette projekt.

Vi opdelte dette projekt i de seks moduler, der er vist ovenfor, for at nedbryde hele gizmo'en i mange arbejdsdele, men den måde, de er forbundet på, er ret indviklet og er vist fra det vedhæftede sortboksbillede.

Mens spillet foregår, lyser 7 lysdioder for at underrette brugeren om, hvem der skifter til brug, og når spillet slutter, programmerede vi også lysdioder til at blinke

Indgange: switches (8 bit), Clk, reset, start, gæt

Udgange: katoder (7 bit), anoder (4 bit), lysdioder (7 bit)

Trin 9: Stødte på ekstra problemer

Selvom der kun bruges syv switches i dette spil, har koden det sat som et 8 bit nummer. Vi gjorde dette for at få en mere bekvem komparator, der ville sammenligne disse 8 bits med det 8 bit tal, vi genererede fra tilfældig talgeneratoren.

Scoren gav os også en smule problemer i starten, fordi vi satte den til at øge et point, når FSM var i score -tilstand; men hvad der skete i stedet var, at scoringen blev ved med at stige, så længe staten var på, hvilket gav os en urimelig høj score, vi ikke kunne klare. Vi fikset dette ved at tilføje et pulssignal, der var synkroniseret med den stigende kant af uret, som det ses i koden i trin 8.

Endelig tog timeren meget tid til at fejlsøge, da det ville forvrænge vores syv segmentvisning, når det tællede ned, så vi måtte ændre det fra at tælle ned fra 60 til at tælle op fra 0.

Trin 10: Kildefiler og begrænsninger

Hvis du hellere vil trække fra vores kildefiler i stedet for at oprette dine egne, her er de. Begrænsningsfilen er også inkluderet.

Anbefalede: