Indholdsfortegnelse:
- Trin 1: Opsætning af Clock Divider
- Trin 2: Oprettelse af en Finite-State Machine (FSM)
- Trin 3: Kortlægning af displayet med syv segmenter
- Trin 4: Oprettelse af komparatoren
- Trin 5: Opsætning af en timer
- Trin 6: Design af Pseudo Random Number Generator
- Trin 7: Oprettelse af en konverter
- Trin 8: Sæt alt sammen i spilmodulet
- Trin 9: Stødte på ekstra problemer
- Trin 10: Kildefiler og begrænsninger
Video: Binary til Decimal Matcher -spillet: 10 trin
2024 Forfatter: John Day | [email protected]. Sidst ændret: 2024-01-30 08:26
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)
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
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
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
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
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
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
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:
CPE 133 Final Project Decimal til Binary: 5 trin
CPE 133 Final Project Decimal to Binary: Binary Numbers er en af de første ting, man tænker på, når man tænker på digital logik. Imidlertid kan binære numre være et svært koncept for dem, der er nye i det. Dette projekt vil hjælpe dem, der er både nye og erfarne med binære tal
LoRa Messenger til to enheder til distancer Op til 8 km: 7 trin
LoRa Messenger til to enheder til afstande Op til 8 km: Tilslut projektet til din bærbare computer eller telefon, og chat derefter mellem enhederne uden internet eller SMS ved hjælp af bare LoRa.Hey, hvad sker der gutter? Akarsh her fra CETech. I dag skal vi lave et projekt, der kan forbindes til din smartphone eller en hvilken som helst
Binær til decimal lommeregner: 8 trin
Binær til decimal lommeregner: For klasse elleve computer engineering, var jeg nødt til at beslutte mig om et afsluttende projekt. Først vidste jeg ikke, hvad jeg skulle lave, fordi det skulle indeholde visse hardwarekomponenter. Efter et par dage fortalte min klassekammerat mig at lave et projekt baseret på den fire bit adde
1A til 40A nuværende BOOST -konverter til op til 1000W DC -motor: 3 trin
1A til 40A Current BOOST-konverter til op til 1000W DC-motor: Hej! I denne video lærer du, hvordan du laver et strømforstærkerkredsløb til dine høj ampere DC-motorer op til 1000W og 40 ampere med transistorer og en center-tap-transformer. Selvom, strømmen ved udgangen er meget høj, men spændingen bliver r
Sådan matcher du sokker ?: 6 trin (med billeder)
Hvordan matcher jeg sokker ?: Hvordan forhindres sokker blandet under vasketøjet? Jeg ved ikke. Det, jeg ved, er, hvordan jeg matcher strømperne efter vasketøjet. Derfor lavede jeg denne SOCK MATCHER. Hvordan fungerer det? 1) Start med at sy et RFID-mærke i hver strømpe af et par strømper. 2)