Cuprins:

Jocul Matcher binar până la zecimal: 10 pași
Jocul Matcher binar până la zecimal: 10 pași

Video: Jocul Matcher binar până la zecimal: 10 pași

Video: Jocul Matcher binar până la zecimal: 10 pași
Video: De ce calculatoarele folosesc sistemul binar: explicat pe înțelesul tuturor 0️⃣1️⃣ | Episodul 4 2024, Iulie
Anonim
Image
Image
Configurarea divizorului de ceas
Configurarea divizorului de ceas

Acest instructable va arăta procesul și modulele necesare pentru a crea jocul nostru de potrivire binară la zecimală. În termen de 60 de secunde, utilizatorii vor traduce și vor introduce cât mai multe numere zecimale generate aleatoriu pe afișajul de șapte segmente în binar prin comutarea comutatoarelor și trimiterea cu un buton de estimare. Odată finalizat, va fi afișat un scor final și apoi resetat pentru a juca din nou.

Înțelegerea reflexelor binare și rapide este benefică pentru a face bine, dar butonul de resetare este furnizat în cazul în care se dorește să încerce din nou instantaneu.

Pasul 1: Configurarea divizorului de ceas

Coloana vertebrală a întregului proiect vine din sincronizarea corectă a tuturor părților din acest dispozitiv. Mașina noastră de stat finit folosește ceasul intern, dar afișajul cu șapte segmente și temporizatorul trebuie să utilizeze o versiune modificată a ceasului.

Acest „nou ceas” provine din împărțirea ceasului intern la o perioadă dorită pentru a atinge o anumită frecvență necesară pentru fiecare componentă specifică. Acest lucru a fost făcut în laboratoarele anterioare și din experiență, știm că temporizatorul are cifra „cuiva” setată la 0,1 Hz, iar cifra „zecilor” fiind 1 Hz

Intrări: ClkIn, divizor (32 biți)

Ieșiri: ClkOut

Pasul 2: Crearea unei mașini cu stare finită (FSM)

Crearea unei mașini de stat finit (FSM)
Crearea unei mașini de stat finit (FSM)
Crearea unei mașini de stat finit (FSM)
Crearea unei mașini de stat finit (FSM)
Crearea unei mașini cu stări finite (FSM)
Crearea unei mașini cu stări finite (FSM)

În mașina noastră cu stări finite, am decis că cinci stări (Start, Afișare, Verificare, Scor și Sfârșit) vor fi necesare cu cinci intrări (pornire, resetare, estimare, egal, timeout). Singura ieșire din mașina noastră de stat este un număr de 3 biți care reprezintă în ce stare se află utilizatorul (000, 001, 011, 101, 100) în raport cu stările de mai jos.

Amintiți-vă că o mașină de stare finită nu preformează de fapt funcțiile de mai jos, ci doar spune în ce stare este programul și în ce. Ce se întâmplă de fapt este determinat de modulul de sus explicat mai jos.

Stat de pornire (000)

Starea de pornire este locul în care utilizatorul va începe până când intrarea de pornire este mare, aceasta este și starea la care se va ajunge de fiecare dată când este apăsat butonul de resetare.

Starea jocului (001)

Starea jocului este începutul jocului, unde este generat numărul aleator și utilizatorul comută comutatoarele pentru a crea o intrare. Odată apăsat butonul de ghicit, jocul este mutat în starea de verificare.

Stare verificare (011)

În această stare se folosește comparatorul, care va compara valorile de intrare ale utilizatorului și numărul generat aleatoriu. Dacă trimiterea este corectă, valoarea egală este mare, iar FSM merge la starea de scor; totuși, dacă trimiterea este incorectă, FSM revine la starea de afișare până când trimiterea este corectă.

Această stare de verificare se întâmplă relativ rapid în comparație cu celelalte, deoarece se întâmplă numai atâta timp cât butonul de verificare este apăsat

Starea punctajului (101)

Deoarece valoarea egală este mare, trimiterea a fost corectă. În această stare, valoarea scorului va crește cu unul și va fi generat un nou număr pentru introducerea utilizatorului. Acest nou număr ne aduce înapoi la starea de pornire, unde utilizatorul va comuta din nou comutatoarele.

Stare finală (100)

Odată ce cronometrul de 60 de secunde este sus, intrarea de expirare va fi ridicată și utilizatorul ajunge la starea finală unde este afișat scorul final. Intrarea de resetare va fi apoi apăsată și FSM începe din nou la starea de pornire.

Intrări: Clk, rst, start, guess, equal, timeout

Ieșire: stare (3 biți)

Pasul 3: Cartografierea afișajului cu șapte segmente

Cartarea afișajului cu șapte segmente
Cartarea afișajului cu șapte segmente
Cartarea afișajului cu șapte segmente
Cartarea afișajului cu șapte segmente
Cartarea afișajului cu șapte segmente
Cartarea afișajului cu șapte segmente

Afișajul cu șapte segmente este o parte cheie a întregului proiect, deoarece primele două cifre de pe ecran sunt utilizate ca ieșire a generatorului de numere aleatorii, în timp ce ultimele două cifre sunt temporizatorul. Deși am implementat un exemplu în ultimul laborator în ceea ce privește cifrele pe ecran, acesta a fost afișat în hexazecimal. Pentru a remedia această problemă, am folosit un convertor și un divizor de ceas, care este explicat mai jos.

Afișajul arată toate 0 până când FSM intră în starea de joc; cu toate acestea, în starea finală, afișajul ar trebui să arate doar scorul utilizatorului.

Deoarece folosim toate cele patru cifre ale afișajului cu șapte segmente, trebuie să parcurgem fiecare anod suficient de rapid la 300 Hz pentru a fi percepuți ca întotdeauna aprinși.

Intrări: Clk, șapte segmente

Ieșiri: catoduri (7 biți), anodi (4 biți)

Pasul 4: Crearea comparatorului

Crearea comparatorului
Crearea comparatorului

Acest submodul este utilizat în starea de verificare în ceea ce privește modul în care compară presupunerea binară de 7 biți introdusă cu valoarea zecimală reală.

Am avut o declarație if care a evaluat atât intrările, cât și două ieșiri, în funcție de dacă valoarea egală a fost sau nu mare sau mică. Oricât de important este acest modul, este de departe unul dintre programele mai simple de proiectat în acest proiect.

Intrări: comutatoare (8 biți), număr (8 biți)

Ieșire: EQ

Pasul 5: Configurarea unui temporizator

Configurarea unui cronometru
Configurarea unui cronometru
Configurarea unui temporizator
Configurarea unui temporizator

Cronometrul nostru este în esență două contoare diferite, care cresc în ritm diferit. Un contor în valoarea „cuiva” (primul afișaj de șapte segmente) și un contor pentru valoarea „zece” (a doua cifră pe afișajul de șapte segmente). Fiecare cifră se bazează pe marginea ascendentă a ceasului și, odată ce contorul atinge 60 de secunde, time_out va fi mare, iar jocul se va încheia și va reveni la starea de start.

Intrări: Clk, stare (3 biți), start

Ieșiri: curent (8 biți), timeout

Pasul 6: Proiectarea generatorului de numere aleatorii Pseudo

Proiectarea generatorului de numere aleatorii Pseudo
Proiectarea generatorului de numere aleatorii Pseudo

O altă metodă alternativă pentru un generator de numere specific pentru acest caz este de a avea un contor care se repetă de la 0 la 99 (în binar) care transmite numărul numărat atunci când intrarea este mare, deoarece acest lucru ar elimina necesitatea utilizării unui LFSR.

Numărul se schimbă la fiecare margine ascendentă a ceasului intern (10 nano-secunde) și parcurge toate cele 100 de numere într-o singură microsecundă. Ori de câte ori utilizatorul dorește un nou număr de la generatorul de numere, acesta scoate numărul pe care era, Deși acest proces nu este în întregime aleatoriu, probabilitatea de a găsi rezultate conexe din acest proces este suficient de mică pentru a fi pseudo-aleatorie.

Intrări: Clk, changenum, egal

Ieșiri: număr (8 biți)

Pasul 7: Crearea unui convertor

Crearea unui convertor
Crearea unui convertor

O componentă necesară este Convertorul, pe care l-am folosit pentru a afișa numerele zecimale pe afișajul de șapte segmente în locul hexazecimalului original. Deși ambele numere sunt bazate pe un număr binar de 7 biți, am creat un întreg modul desemnat să convertească hexazecimal în zecimal.

De exemplu, dacă rezultatul nostru final pentru scor a fost 0010001 (șaptesprezece), afișajul cu șapte segmente ar arăta valoarea hexazecimală de 11, în loc de numărul zecimal de 17.

Intrare: Numin (8 biți)

Ieșire: Numout (8 biți)

Pasul 8: Punerea totul împreună în modulul de joc

Punând totul împreună în modulul de joc
Punând totul împreună în modulul de joc
Punând totul împreună în modulul de joc
Punând totul împreună în modulul de joc
Punând totul împreună în modulul de joc
Punând totul împreună în modulul de joc
Punând totul împreună în modulul de joc
Punând totul împreună în modulul de joc

Pentru componentele noastre, am folosit comutatoarele 0-6 necesare pentru ca utilizatorul să comute, cu cele trei butoane pentru a acționa ca intrările utilizatorului pentru pornire, resetare și ghicire. Componentele de afișare și de ceas cu șapte segmente sunt, de asemenea, componente pe care le-am realizat din laboratoarele anterioare, dar a trebuit să le modificăm pentru a se potrivi acestui proiect.

Am împărțit acest proiect în cele șase module prezentate mai sus pentru a împărți întregul dispozitiv în mai multe părți de lucru, cu toate acestea, modul în care sunt conectate este destul de complicat și este prezentat din imaginea casetei negre atașată.

În timp ce jocul se întâmplă, 7 LED-uri sunt aprinse pentru a anunța utilizatorul ce comută să folosească, iar când jocul se termină, am programat și LED-uri pentru a clipi

Intrări: comutatoare (8 biți), Clk, resetare, pornire, ghicire

Ieșiri: catoduri (7 biți), anodi (4 biți), LED-uri (7 biți)

Pasul 9: Probleme suplimentare întâmpinate

Deși în acest joc sunt utilizate doar șapte comutatoare, codul îl are setat ca un număr de 8 biți. Am făcut acest lucru pentru a avea un comparator mai convenabil care să compare acești 8 biți cu numărul de 8 biți pe care l-am generat de la generatorul de numere aleatorii.

Scorul ne-a dat, de asemenea, un pic de probleme la început, deoarece l-am setat să crească un punct atunci când FSM se afla în starea de scor; cu toate acestea, ceea ce s-a întâmplat a fost că scorul a continuat să crească atâta timp cât statul a fost activ, oferindu-ne un scor nerezonabil de mare cu care nu ne-am putea descurca. Am remediat acest lucru adăugând un semnal de impuls care a fost sincronizat cu marginea ascendentă a ceasului, așa cum se vede în cod la pasul 8.

În cele din urmă, cronometrul a durat mult timp pentru a depana, deoarece ar distorsiona afișajul nostru de șapte segmente atunci când numărați în jos, așa că a trebuit să-l schimbăm de la numărătoarea inversă de la 60 la numărătoarea de la 0.

Pasul 10: Fișiere sursă și constrângeri

Dacă preferați să extrageți din fișierele noastre sursă în loc să creați propriile dvs., iată-le. De asemenea, este inclus fișierul de constrângere.

Recomandat: