Innholdsfortegnelse:

Spillet Binary to Decimal Matcher: 10 trinn
Spillet Binary to Decimal Matcher: 10 trinn

Video: Spillet Binary to Decimal Matcher: 10 trinn

Video: Spillet Binary to Decimal Matcher: 10 trinn
Video: Subnet Mask - Explained 2024, Juli
Anonim
Image
Image
Konfigurere Clock Divider
Konfigurere Clock Divider

Denne instruksen viser prosessen og modulene som kreves for å lage vårt matchende binære til desimale matchende spill. Innen 60 sekunder vil brukerne oversette og legge inn så mange tilfeldig genererte desimaltall på syv segmentdisplayet til binær ved å veksle bryterne og sende inn med en gjetningsknapp. Når den er fullført, vises den endelige poengsummen og deretter tilbakestilles for å spille igjen.

Å forstå binære og raske reflekser er fordelaktig for å gjøre det bra, men tilbakestillingsknappen er gitt i tilfelle man umiddelbart vil prøve igjen.

Trinn 1: Konfigurere Clock Divider

Ryggraden i hele dette prosjektet kommer fra korrekt synkronisering av alle delene i denne gizmoen. Vår endelige tilstandsmaskin bruker den interne klokken, men displayet og timeren med syv segmenter må bruke en endret versjon av klokken.

Denne "nye klokken" kommer fra å dele den interne klokken med en ønsket periode for å oppnå en bestemt frekvens som trengs for hver spesifikke komponent. Dette har blitt gjort i tidligere laboratorier og av erfaring vet vi at timeren har "ens" siffer satt til 0,1 Hz, og "tiere" siffer er 1 Hz

Innganger: ClkIn, divisor (32 bit)

Utganger: ClkOut

Trinn 2: Opprette en Finite-State Machine (FSM)

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

I vår Finite-State Machine bestemte vi at fem tilstander (Start, Display, Check, Score og End) ville være nødvendige med fem innganger (start, reset, gjett, lik, timeout). Den eneste utgangen i vår State Machine er et 3 -bits tall som representerer hvilken tilstand brukeren er i (000, 001, 011, 101, 100) med hensyn til tilstandene nedenfor.

Husk at en Finite State Machine faktisk ikke forhåndsformer funksjonene nedenfor, i stedet forteller den bare hvilken tilstand programmet er på og hva. Hva som faktisk skjer, bestemmes av toppmodulen forklart nedenfor.

Starttilstand (000)

Starttilstanden er der brukeren vil begynne til startinngangen er høy, dette er også tilstanden som vil nås når du trykker på tilbakestillingsknappen.

Game State (001)

Game State er begynnelsen på spillet, der det tilfeldige tallet genereres og brukeren bytter brytere for å lage en input. Når du har trykket på gjetningsknappen, flyttes spillet til sjekkestatus.

Sjekk tilstand (011)

Denne tilstanden er hvor komparatoren brukes, som vil sammenligne verdiene for brukerens inndata og det tilfeldig genererte tallet. Hvis innsendelsen er korrekt, er den samme verdien høy og FSM går til poengsummen. Men hvis innsendelsen er feil, går FSM tilbake til visningstilstanden til innsendelsen er korrekt.

Denne sjekketilstanden skjer relativt raskt i forhold til de andre, siden den bare skjer så lenge du trykker på sjekk -knappen

Poengstat (101)

Siden likeverdien er høy, var innsendelsen korrekt. I denne tilstanden vil poengsummen øke med en og et nytt tall vil bli generert for brukeren å skrive inn. Dette nye nummeret bringer oss tilbake til starttilstanden hvor brukeren igjen vil bytte bryterne.

Sluttilstand (100)

Når timeren på 60 sekunder er opp, vil timeout -inngangen være høy og brukeren når sluttilstanden der sluttresultatet vises. Tilbakestillingsinngangen blir deretter trykket og FSM starter på nytt ved starttilstanden.

Innganger: Clk, første, start, gjett, lik, timeout

Utgang: tilstand (3 bit)

Trinn 3: Kartlegging av displayet med syv segmenter

Kartlegging av displayet med syv segmenter
Kartlegging av displayet med syv segmenter
Kartlegging av displayet med syv segmenter
Kartlegging av displayet med syv segmenter
Kartlegging av displayet med syv segmenter
Kartlegging av displayet med syv segmenter

Sju segmentvisning er en sentral del av hele prosjektet ettersom de to første sifrene på skjermen brukes som utgang fra tilfeldige tallgeneratoren, mens de to siste sifrene er timeren. Selv om vi har implementert et eksempel på dette i den siste laben når det gjelder å ha sifre på skjermen, ble det vist i heksadesimal. For å fikse dette problemet brukte vi en omformer og klokkeskille som er forklart nærmere nedenfor.

Displayet viser alle 0 -tallene til FSM går inn i spilltilstanden; I slutttilstanden skal displayet imidlertid bare vise brukerens poengsum.

Siden vi bruker alle fire sifrene i displayet med syv segmenter, må vi bla gjennom hver anode raskt nok ved 300 Hz for å bli oppfattet som alltid tent.

Innganger: Clk, syvesegment

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

Trinn 4: Opprette komparatoren

Opprette komparatoren
Opprette komparatoren

Denne delmodulen brukes i sjekketilstanden når det gjelder hvordan den sammenligner det 7 -bits binære inputtede gjetningen kontra den faktiske desimalverdien.

Vi hadde en if -setning som evaluerte både innganger og to utganger avhengig av om likeverdien var høy eller lav. Så viktig som denne modulen er, er det et av de enklere programmene å designe i dette prosjektet.

Innganger: brytere (8 bit), nummer (8 bit)

Utgang: EQ

Trinn 5: Konfigurere en tidtaker

Sette opp en timer
Sette opp en timer
Sette opp en timer
Sette opp en timer

Timeren vår er i hovedsak to forskjellige tellere som øker med forskjellige hastigheter. En teller i "ens" -verdien (den første sju segmentvisning) og en teller for verdien "ti" (andre siffer på syv segment display). Hvert siffer er basert på klokkens stigende kant, og når telleren når 60 sekunder, vil time_out være høyt og spillet vil ende og gå tilbake til starttilstanden.

Innganger: Clk, tilstand (3 bit), start

Utganger: Strøm (8 bit), timeout

Trinn 6: Designe Pseudo Random Number Generator

Design av Pseudo Random Number Generator
Design av Pseudo Random Number Generator

En annen alternativ metode for en tallgenerator spesielt for dette tilfellet er å ha en repeterende teller fra 0-99 (i binær) som sender ut det tellede tallet når inngangen er høy, da dette ville fjerne behovet for å bruke en LFSR.

Tallet endrer hver stigende kant på den interne klokken (10 nanosekunder) og går gjennom alle 100 tallene på ett mikrosekund. Når brukeren ønsker et nytt nummer fra tallgeneratoren, sender den ut nummeret den var på, Selv om denne prosessen ikke er helt tilfeldig, er sannsynligheten for å finne relaterte utdata fra denne prosessen lav nok til å være pseudo-tilfeldig.

Innganger: Clk, changenum, lik

Utganger: nummer (8 bit)

Trinn 7: Opprette en omformer

Opprette en omformer
Opprette en omformer

En nødvendig komponent er omformeren, som vi brukte til å vise desimaltall på syv segmentvisning i stedet for den opprinnelige heksadesimale. Selv om begge tallene er basert på et 7 -bits binært tall, opprettet vi en hel modul beregnet på å konvertere heksadesimal til desimal.

For eksempel, hvis vår endelige utgang for poengsummen var 0010001 (sytten), ville syv segmentvisning vise den heksadesimale verdien 11, i stedet for desimaltallet 17.

Inngang: Numin (8 bit)

Utgang: Numout (8 bit)

Trinn 8: Sette alt sammen i spillmodulen

Å sette alt sammen i spillmodulen
Å sette alt sammen i spillmodulen
Å sette alt sammen i spillmodulen
Å sette alt sammen i spillmodulen
Å sette alt sammen i spillmodulen
Å sette alt sammen i spillmodulen
Å sette alt sammen i spillmodulen
Å sette alt sammen i spillmodulen

For komponentene våre brukte vi de nødvendige bryterne 0-6 for brukeren å veksle, med de tre knappene for å fungere som brukerinngangene for start, tilbakestilling og gjetning. De syv segmentene display og klokke komponenter er også komponenter vi har gjort fra tidligere laboratorier, men måtte endre for å passe dette prosjektet.

Vi delte dette prosjektet i de seks modulene som er vist ovenfor for å bryte ned hele gizmoen i mange arbeidsdeler, men måten de er tilkoblet på er ganske intrikat og er vist fra den svarte boksen som er vedlagt.

Mens spillet skjer, lyser 7 lysdioder for å varsle brukeren som bytter til bruk, og når spillet avsluttes, programmerte vi også lysdioder til å blinke

Innganger: brytere (8 bit), Clk, reset, start, gjett

Utganger: katoder (7 bit), anoder (4 bit), LED (7 bit)

Trinn 9: Oppdaget ekstra problemer

Selv om bare syv brytere brukes i dette spillet, har koden den satt som et 8 -bits tall. Vi gjorde dette for å få en mer praktisk komparator som ville sammenligne disse 8 bitene med 8 -biters nummeret vi genererte fra tilfeldighetsgeneratoren.

Poengsummen ga oss også litt trøbbel i begynnelsen fordi vi satte det til å øke ett poeng når FSM var i poengsum; men det som skjedde i stedet var at poengsummen fortsatte å øke så lenge staten var på, noe som ga oss en urimelig høy poengsum vi ikke kunne takle. Vi fikset dette ved å legge til et pulssignal som var synkronisert med klokkens stigende kant, som vist i koden i trinn 8.

Til slutt tok timeren mye tid å feilsøke, da det ville forvride skjermen på syv segmenter når den teller ned, så vi måtte endre den fra å telle ned fra 60 til å telle opp fra 0.

Trinn 10: Kildefiler og begrensninger

Hvis du heller vil trekke fra kildefilene våre i stedet for å lage dine egne, her er de. Begrensningsfilen er også inkludert.

Anbefalt: