Turinys:

Dvejetainis dešimtainis atitikimo žaidimas: 10 žingsnių
Dvejetainis dešimtainis atitikimo žaidimas: 10 žingsnių

Video: Dvejetainis dešimtainis atitikimo žaidimas: 10 žingsnių

Video: Dvejetainis dešimtainis atitikimo žaidimas: 10 žingsnių
Video: Section 10 2024, Liepa
Anonim
Image
Image
Laikrodžio daliklio nustatymas
Laikrodžio daliklio nustatymas

Ši instrukcija parodys procesą ir modulius, kurių reikia norint sukurti mūsų žaidimą dvejetainis dešimtainis. Per 60 sekundžių vartotojai išvers ir įves į dvejetainį skaičių atsitiktinai sugeneruotų dešimtainių skaičių septynių segmentų ekrane, perjungdami jungiklius ir pateikdami spėliojimo mygtuką. Kai baigsite, bus parodytas galutinis rezultatas, o tada bus galima iš naujo paleisti.

Dvejetainių ir greitų refleksų supratimas yra naudingas, jei norite gerai dirbti, tačiau atstatymo mygtukas pateikiamas tuo atveju, jei norite akimirksniu bandyti dar kartą.

1 veiksmas: nustatykite laikrodžio daliklį

Šio projekto pagrindas yra teisingas visų šio „Gizmo“dalių sinchronizavimas. Mūsų baigtinės būsenos mašina naudoja vidinį laikrodį, tačiau septynių segmentų ekranas ir laikmatis turi naudoti pakeistą laikrodžio versiją.

Šis „naujas laikrodis“gaunamas padalijus vidinį laikrodį iš norimo laikotarpio, kad būtų pasiektas tam tikras dažnis, reikalingas kiekvienam konkrečiam komponentui. Tai buvo padaryta ankstesnėse laboratorijose ir iš patirties žinome, kad laikmačio „vieno“skaitmuo nustatytas į 0,1 Hz, o „dešimčių“skaitmuo yra 1 Hz

Įvestys: „ClkIn“, daliklis (32 bitai)

Išėjimai: „ClkOut“

2 veiksmas: baigtos būsenos mašinos (FSM) sukūrimas

Ribotos būsenos mašinos (FSM) kūrimas
Ribotos būsenos mašinos (FSM) kūrimas
Ribotos būsenos mašinos (FSM) kūrimas
Ribotos būsenos mašinos (FSM) kūrimas
Ribotos būsenos mašinos (FSM) kūrimas
Ribotos būsenos mašinos (FSM) kūrimas

Mūsų baigtinės būsenos mašinoje nusprendėme, kad reikės penkių būsenų (pradžia, ekranas, patikrinimas, balas ir pabaiga) su penkiais įėjimais (pradžia, atstatymas, spėjimas, lygus, skirtasis laikas). Vienintelė mūsų būsenos mašinos išvestis yra 3 bitų skaičius, nurodantis, kokioje būsenoje yra vartotojas (000, 001, 011, 101, 100), atsižvelgiant į toliau nurodytas būsenas.

Atminkite, kad baigtinės būsenos mašina iš tikrųjų nesudaro toliau nurodytų funkcijų, o tik nurodo, kokioje būsenoje programa veikia ir kokia. Tai, kas iš tikrųjų vyksta, nustato viršutinis modulis, paaiškinamas žemiau.

Pradinė būsena (000)

Pradžios būsena yra ta vieta, kurioje vartotojas pradės, kol pradžios įvestis bus aukšta, taip pat būsena, kuri bus pasiekta, kai bus paspaustas atstatymo mygtukas.

Žaidimo būsena (001)

Žaidimo būsena yra žaidimo pradžia, kai generuojamas atsitiktinis skaičius ir vartotojas perjungia jungiklius, kad sukurtų įvestį. Paspaudus atspėjimo mygtuką, žaidimas perkeliamas į tikrinimo būseną.

Patikrinkite būseną (011)

Šioje būsenoje naudojamas lygintuvas, kuris palygins vartotojo įvesties ir atsitiktinai sugeneruoto skaičiaus vertes. Jei pateikimas teisingas, lygi vertė yra didelė ir MFV pereina į balų būseną; tačiau jei pateikimas neteisingas, MFV grįžta į rodymo būseną, kol pateikimas bus teisingas.

Ši tikrinimo būsena įvyksta palyginti greitai, palyginti su kitomis, nes tai vyksta tik tol, kol paspaudžiamas tikrinimo mygtukas

Rezultatų būsena (101)

Kadangi vienoda vertė yra didelė, pateikimas buvo teisingas. Esant šiai būsenai, balo vertė padidės vienu ir vartotojui bus sugeneruotas naujas skaičius. Šis naujas numeris grąžina mus į pradinę būseną, kur vartotojas vėl perjungs jungiklius.

Pabaigos būsena (100)

Pasibaigus 60 sekundžių laikmačiui, skirtojo laiko įvestis bus didelė ir vartotojas pasiekia galutinę būseną, kurioje rodomas galutinis rezultatas. Tada bus paspaustas atstatymo įvestis, o FSM vėl prasidės pradinėje būsenoje.

Įvestys: Clk, pirma, pradžia, spėjimas, lygūs, skirtasis laikas

Išėjimas: būsena (3 bitai)

3 žingsnis: Septynių segmentų ekrano atvaizdavimas

Septynių segmentų ekrano atvaizdavimas
Septynių segmentų ekrano atvaizdavimas
Septynių segmentų ekrano atvaizdavimas
Septynių segmentų ekrano atvaizdavimas
Septynių segmentų ekrano atvaizdavimas
Septynių segmentų ekrano atvaizdavimas

Septynių segmentų ekranas yra pagrindinė viso projekto dalis, nes pirmieji du skaitmenys ekrane naudojami kaip atsitiktinių skaičių generatoriaus išvestis, o paskutiniai du skaitmenys - laikmatis. Nors paskutinėje laboratorijoje įgyvendinome to pavyzdį, kai ekrane buvo skaitmenų, jis buvo rodomas šešioliktainiu skaičiumi. Norėdami išspręsti šią problemą, naudojome keitiklį ir laikrodžio daliklį, kuris išsamiau paaiškinamas toliau.

Ekrane rodomi visi 0, kol FSM įjungia žaidimo būseną; tačiau galutinėje būsenoje ekrane turėtų būti rodomas tik vartotojo rezultatas.

Kadangi mes naudojame visus keturis septynių segmentų ekrano skaitmenis, turime pakankamai greitai pereiti prie kiekvieno anodo, esant 300 Hz dažniui, kad būtume suvokiami kaip visada šviečiantys.

Įėjimai: Clk, septynių segmentų

Išėjimai: katodai (7 bitai), anodai (4 bitai)

4 žingsnis: palyginimo priemonės sukūrimas

Lyginamojo kūrimas
Lyginamojo kūrimas

Šis papildomas modulis naudojamas tikrinimo būsenoje, lyginant 7 bitų įvestą spėjimą su faktine dešimtaine verte.

Turėjome teiginį „if“, kuris įvertino tiek įvestį, tiek du rezultatus, atsižvelgiant į tai, ar vienoda vertė buvo aukšta, ar maža. Kad ir koks svarbus šis modulis, tai yra viena iš paprasčiausių šio projekto programų.

Įėjimai: jungikliai (8 bitai), skaičius (8 bitai)

Išėjimas: EQ

5 veiksmas: laikmačio nustatymas

Laikmačio nustatymas
Laikmačio nustatymas
Laikmačio nustatymas
Laikmačio nustatymas

Mūsų laikmatis iš esmės yra du skirtingi skaitikliai, kurie didėja skirtingais tempais. Vienas skaitiklis „savo“vertėje (pirmieji septynių segmentų ekranas) ir vienas „dešimtojo“vertės skaitiklis (antrasis skaitmuo septynių segmentų ekrane). Kiekvienas skaitmuo yra pagrįstas didėjančiu laikrodžio kraštu, o kai skaitiklis pasieks 60 sekundžių, laikas baigsis ir žaidimas baigsis ir grįš į pradinę būseną.

Įvestys: Clk, būsena (3 bitai), pradžia

Išėjimai: srovė (8 bitai), skirtasis laikas

6 žingsnis: sukurkite pseudo atsitiktinių skaičių generatorių

Pseudo atsitiktinių skaičių generatoriaus projektavimas
Pseudo atsitiktinių skaičių generatoriaus projektavimas

Kitas alternatyvus metodas, skirtas skaičių generatoriui, specialiai šiam atvejui, yra turėti pasikartojantį skaitiklį nuo 0 iki 99 (dvejetainiu būdu), kuris išvestų suskaičiuotą skaičių, kai įvestis yra didelė, nes tai pašalintų poreikį naudoti LFSR.

Skaičius keičia kiekvieną kylantį vidinio laikrodžio kraštą (10 nano sekundžių) ir per 100 mikroskopų per vieną mikrosekundę. Kai vartotojas nori iš numerių generatoriaus naujo numerio, jis pateikia tą numerį, kuriuo buvo

Nors šis procesas nėra visiškai atsitiktinis, tikimybė rasti susijusių šio proceso rezultatų yra pakankamai maža, kad būtų pseudoatsitiktinis.

Įėjimai: Clk, changenum, lygūs

Išėjimai: skaičius (8 bitai)

7 veiksmas: keitiklio kūrimas

Konverterio kūrimas
Konverterio kūrimas

Būtinas komponentas yra keitiklis, kurį naudojome septynių segmentų ekrane rodydami dešimtainius skaičius, o ne pradinį šešioliktainį skaičių. Nors abu skaičiai yra pagrįsti 7 bitų dvejetainiu skaičiumi, mes sukūrėme visą modulį, skirtą šešioliktainį skaičių konvertuoti į dešimtainį.

Pvz., Jei mūsų galutinis rezultato rezultatas buvo 0010001 (septyniolika), septynių segmentų ekrane būtų rodoma šešioliktainė reikšmė 11, o ne dešimtainis skaičius 17.

Įvestis: „Numin“(8 bitai)

Išėjimas: skaičius (8 bitai)

8 žingsnis: Sudėkite viską į žaidimo modulį

Viską sudėti į žaidimo modulį
Viską sudėti į žaidimo modulį
Viską sudėti į žaidimo modulį
Viską sudėti į žaidimo modulį
Viską sudėti į žaidimo modulį
Viską sudėti į žaidimo modulį
Viską sudėti į žaidimo modulį
Viską sudėti į žaidimo modulį

Savo komponentams naudojome reikiamus jungiklius 0–6, kad vartotojas galėtų perjungti, o trys mygtukai veikė kaip vartotojo įvestys paleidimui, atstatymui ir atspėjimui. Septynių segmentų ekrano ir laikrodžio komponentai taip pat yra komponentai, kuriuos atlikome iš ankstesnių laboratorijų, tačiau turėjome juos pakeisti, kad atitiktų šį projektą.

Mes padalijome šį projektą į šešis aukščiau pateiktus modulius, kad suskaidytume visą „Gizmo“į daugelį veikiančių dalių, tačiau jų prijungimo būdas yra gana sudėtingas ir parodytas iš pridėtos juodos dėžės nuotraukos.

Kol vyksta žaidimas, užsidega 7 šviesos diodai, pranešantys vartotojui, kuriuos jungiklius naudoti, o kai žaidimas baigiasi, mes taip pat užprogramavome šviesos diodus mirksėti

Įėjimai: jungikliai (8 bitai), Clk, atstatymas, paleidimas, spėjimas

Išėjimai: katodai (7 bitai), anodai (4 bitai), šviesos diodai (7 bitai)

9 veiksmas: papildomos problemos

Nors šiame žaidime naudojami tik septyni jungikliai, kodas turi būti nustatytas kaip 8 bitų skaičius. Tai padarėme norėdami turėti patogesnį palyginamąjį, kuris palygintų šiuos 8 bitus su 8 bitų skaičiumi, kurį sukūrėme iš atsitiktinių skaičių generatoriaus.

Rezultatas iš pradžių taip pat suteikė mums šiek tiek rūpesčių, nes nustatėme, kad jis padidins vieną tašką, kai MFV buvo rezultato būsenoje; tačiau vietoj to atsitiko taip, kad rezultatas vis didėjo tol, kol valstybė veikė, ir suteikė mums nepagrįstai aukštą rezultatą, su kuriuo negalėjome susidoroti. Mes tai išsprendėme pridėdami impulsinį signalą, kuris buvo sinchronizuotas su kylančiu laikrodžio kraštu, kaip matyti 8 žingsnyje.

Galiausiai, laikmačio derinimas užtruko daug laiko, nes jis iškraipė mūsų septynių segmentų ekraną, kai jis buvo skaičiuojamas atgal, todėl turėjome jį pakeisti nuo skaičiavimo nuo 60 iki skaičiavimo iki 0.

10 veiksmas: šaltinio failai ir apribojimai

Jei norėtumėte ištraukti iš mūsų šaltinio failų, o ne kurti savo, čia jie yra. Taip pat įtrauktas apribojimų failas.

Rekomenduojamas: