Kazalo:

Dvojno -decimalna igra za ujemanje: 10 korakov
Dvojno -decimalna igra za ujemanje: 10 korakov

Video: Dvojno -decimalna igra za ujemanje: 10 korakov

Video: Dvojno -decimalna igra za ujemanje: 10 korakov
Video: НОВИЧОК ВСТРЕТИЛ ЗИМНЕГО ГРОМИЛУ! ГДЕ НАЙТИ МЕДЬ НОВИЧКАМ? Last Day on Earth: Survival 2024, Julij
Anonim
Image
Image
Nastavitev delilnika ure
Nastavitev delilnika ure

Ta navodila bodo prikazala postopek in module, potrebne za ustvarjanje naše igre za ujemanje binarnih in decimalnih števil. V 60 sekundah bodo uporabniki prevedli in vnesli toliko naključno generiranih decimalnih števil na prikazovalniku sedmih segmentov v binarno s preklopom stikal in oddajo s tipko za ugibanje. Ko je končan, se prikaže končni rezultat in nato ponastavi za ponovno igro.

Razumevanje binarnih in hitrih refleksov je koristno, vendar je gumb za ponastavitev na voljo, če želite takoj poskusiti znova.

1. korak: Nastavitev delilnika ure

Hrbtenica celotnega projekta prihaja iz pravilne sinhronizacije vseh delov tega pripomočka. Naš stroj za končno stanje uporablja notranjo uro, vendar morata sedemsegmentni zaslon in časovnik uporabljati spremenjeno različico ure.

Ta "nova ura" izhaja iz deljenja notranje ure z želenim obdobjem, da se doseže določena frekvenca, potrebna za vsako posebno komponento. To so naredili v prejšnjih laboratorijih in iz izkušenj vemo, da ima časovnik števec "ena" nastavljen na 0,1 Hz, številka "desetice" pa 1 Hz

Vhodi: ClkIn, delitelj (32 bit)

Izhodi: ClkOut

2. korak: Ustvarjanje stroja za končno stanje (FSM)

Ustvarjanje stroja za končno stanje (FSM)
Ustvarjanje stroja za končno stanje (FSM)
Ustvarjanje stroja za končno stanje (FSM)
Ustvarjanje stroja za končno stanje (FSM)
Ustvarjanje stroja za končno stanje (FSM)
Ustvarjanje stroja za končno stanje (FSM)

V našem stroju za končna stanja smo se odločili, da bo potrebno pet stanj (začetek, prikaz, preverjanje, ocena in konec) s petimi vhodi (zagon, ponastavitev, ugibanje, enako, časovna omejitev). Edini izhod v našem državnem stroju je 3 -bitno število, ki predstavlja stanje uporabnika (000, 001, 011, 101, 100) glede na spodnja stanja.

Ne pozabite, da stroj za končno stanje dejansko ne oblikuje spodnjih funkcij, ampak le pove, v katerem stanju je program in kaj. Kaj se v resnici zgodi, določa zgornji modul, razložen spodaj.

Začetno stanje (000)

Začetno stanje je tam, kjer bo uporabnik začel, dokler začetni vhod ni visok, to je tudi stanje, ki bo doseženo, ko pritisnete gumb za ponastavitev.

Stanje igre (001)

Stanje igre je začetek igre, kjer se ustvari naključno število in uporabnik preklopi stikala, da ustvari vnos. Ko pritisnete gumb za ugibanje, se igra premakne v stanje preverjanja.

Stanje preverjanja (011)

V tem stanju se uporablja primerjalnik, ki bo primerjal vrednosti uporabnikovega vnosa in naključno generiranega števila. Če je predložitev pravilna, je enaka vrednost visoka in FSM preide v stanje točk; če pa je predložitev napačna, se FSM vrne v stanje prikaza, dokler predložitev ni pravilna.

To stanje preverjanja se zgodi razmeroma hitro v primerjavi z drugimi, saj se dogaja le, dokler pritisnete gumb za preverjanje

Točkovanje (101)

Ker je enaka vrednost visoka, je bila vloga pravilna. V tem stanju se bo vrednost točk povečala za eno in ustvarila bo nova številka, ki jo bo uporabnik vnesel. Ta nova številka nas vrne v začetno stanje, kjer bo uporabnik znova preklopil stikala.

Končno stanje (100)

Ko časovnik 60 sekund poteče, bo vnos časovne omejitve visok in uporabnik doseže končno stanje, kjer je prikazana končna ocena. Nato bo pritisnjen vhod za ponastavitev in FSM se bo znova zagnal v stanju zagona.

Vhodi: Clk, rst, start, ugani, enako, timeout

Izhod: stanje (3 bit)

3. korak: Kartiranje prikaza sedmih segmentov

Kartiranje prikaza sedmih segmentov
Kartiranje prikaza sedmih segmentov
Kartiranje prikaza sedmih segmentov
Kartiranje prikaza sedmih segmentov
Kartiranje prikaza sedmih segmentov
Kartiranje prikaza sedmih segmentov

Prikaz sedmih segmentov je ključni del celotnega projekta, saj se prvi dve števki na zaslonu uporabljata kot izhod generatorja naključnih števil, zadnji dve števki pa sta časomer. Čeprav smo v zadnjem laboratoriju izvedli primer tega v smislu števk na zaslonu, je bil prikazan v šestnajstiški številki. Za odpravo te težave smo uporabili pretvornik in delilnik ure, ki je podrobneje pojasnjen spodaj.

Na zaslonu se prikažejo vse 0, dokler FSM ne vstopi v stanje igre; v končnem stanju pa mora zaslon prikazati le uporabnikov rezultat.

Ker uporabljamo vse štiri števke sedemsegmentnega zaslona, moramo dovolj hitro krožiti po vsaki anodi pri 300 Hz, da lahko zaznamo, da je vedno prižgana.

Vhodi: Clk, sedemsegment

Izhodi: katode (7 bit), anode (4 bit)

4. korak: Ustvarjanje primerjalnika

Ustvarjanje primerjalnika
Ustvarjanje primerjalnika

Ta podmodul se uporablja v stanju preverjanja glede na to, kako primerja 7 -bitno ugibanje v binarnem vnosu z dejansko decimalno vrednostjo.

Imeli smo stavek if, ki je ocenjeval tako vložke kot dva izhoda, odvisno od tega, ali je bila enaka vrednost visoka ali nizka. Ne glede na to, kako pomemben je ta modul, je daleč eden od enostavnejših programov za oblikovanje v tem projektu.

Vhodi: stikala (8 bit), številka (8 bit)

Izhod: EQ

5. korak: Nastavitev časovnika

Nastavitev časovnika
Nastavitev časovnika
Nastavitev časovnika
Nastavitev časovnika

Naš časomer je v bistvu dva različna števca, ki se povečujeta z različnimi hitrostmi. En števec v vrednosti "eno" (prvi sedem segmentni prikaz) in en števec za vrednost "deset" (druga številka na prikazovalniku sedmih segmentov). Vsaka številka temelji na naraščajočem robu ure in ko števec doseže 60 sekund, bo time_out visok in igra se bo končala in se vrnila v začetno stanje.

Vhodi: Clk, stanje (3 bit), start

Izhodi: tok (8 bitov), časovna omejitev

6. korak: Oblikovanje generatorja psevdo naključnih števil

Oblikovanje generatorja psevdo naključnih števil
Oblikovanje generatorja psevdo naključnih števil

Druga alternativna metoda za generator števila, posebej za ta primer, je imeti ponavljajoči se števec od 0-99 (v binarnem načinu), ki oddaja šteto število, ko je vhod visok, saj bi to odpravilo potrebo po uporabi LFSR.

Število se spreminja z vsakim naraščajočim robom notranje ure (10 nano-sekund) in kroži skozi vseh 100 številk v eni mikrosekundi. Kadar koli uporabnik želi novo številko iz generatorja številk, izpiše številko, na kateri je bil, Čeprav ta proces ni povsem naključen, je verjetnost, da bi našli sorodne rezultate tega procesa, dovolj majhna, da je psevdonaključen.

Vhodi: Clk, changenum, enak

Izhodi: število (8 bit)

7. korak: Ustvarjanje pretvornika

Ustvarjanje pretvornika
Ustvarjanje pretvornika

Nujna komponenta je Pretvornik, ki smo ga uporabili za prikaz decimalnih številk na zaslonu sedmih segmentov namesto prvotne šestnajstiške. Čeprav obe številki temeljita na 7 -bitnem binarnem številu, smo ustvarili celoten modul, namenjen pretvorbi šestnajstiškega v decimalno.

Na primer, če bi bil naš končni rezultat za točko 0010001 (sedemnajst), bi prikaz na sedmih segmentih prikazal šestnajstiško vrednost 11 namesto decimalnega števila 17.

Vhod: Numin (8 bit)

Izhod: Numout (8 bit)

8. korak: Združite vse v igralni modul

Združevanje vsega v modulu igre
Združevanje vsega v modulu igre
Združevanje vsega v modulu igre
Združevanje vsega v modulu igre
Združevanje vsega v modulu igre
Združevanje vsega v modulu igre
Združevanje vsega v modulu igre
Združevanje vsega v modulu igre

Za naše komponente smo uporabili potrebna stikala 0-6, ki jih je uporabnik lahko preklapljal, pri čemer so trije gumbi delovali kot uporabniški vnosi za zagon, ponastavitev in ugibanje. Sestavni deli sedmih segmentov zaslona in ure so tudi komponente, ki smo jih naredili v prejšnjih laboratorijih, vendar smo jih morali spremeniti, da bi ustrezali temu projektu.

Ta projekt smo razdelili na šest zgoraj prikazanih modulov, da razdelimo celoten gizmo na številne delovne dele, vendar je način njihovega povezovanja precej zapleten in je razviden iz priložene slike črne škatle.

Med igranjem sveti 7 LED, ki obvestijo uporabnika, ki preklopi na uporabo, in ko se igra konča, smo tudi programirali LED, ki utripajo

Vhodi: stikala (8 bit), Clk, ponastavitev, zagon, ugibanje

Izhodi: katode (7 bit), anode (4 bit), LED (7 bit)

9. korak: naletite na dodatne težave

Čeprav se v tej igri uporablja le sedem stikal, je koda nastavljena kot 8 -bitno število. To smo storili, da bi imeli primernejši primerjalnik, ki bi teh 8 bitov primerjal z 8 -bitnim številom, ki smo ga ustvarili iz generatorja naključnih števil.

Rezultat nam je sprva delal tudi nekaj težav, ker smo ga nastavili za povečanje ene točke, ko je bil FSM v rezultatskem stanju; namesto tega pa se je zgodilo, da se je rezultat ves čas delovanja povečeval, kar nam je dalo neprimerno visok rezultat, s katerim se nismo mogli spopasti. To smo odpravili z dodajanjem impulznega signala, ki je bil sinhroniziran z naraščajočim robom ure, kot je razvidno iz kode v 8. koraku.

Nazadnje je časovnik odpravljal veliko časa, saj je pri odštevanju izkrivil naš sedemsegmentni zaslon, zato smo ga morali spremeniti s štetja od 60 na odštevanje od 0.

10. korak: izvorne datoteke in omejitve

Če bi raje potegnili iz naših izvornih datotek, namesto da bi ustvarili svoje, so tukaj. Vključena je tudi datoteka omejitev.

Priporočena: