Obsah:

Hra s binárním až desetinným zápasem: 10 kroků
Hra s binárním až desetinným zápasem: 10 kroků

Video: Hra s binárním až desetinným zápasem: 10 kroků

Video: Hra s binárním až desetinným zápasem: 10 kroků
Video: Jak funguje šestnáctková soustava? 2024, Červenec
Anonim
Image
Image
Nastavení děliče hodin
Nastavení děliče hodin

Tento návod ukáže postup a moduly potřebné k vytvoření naší hry Binary to Decimal Matching. Do 60 sekund uživatelé přeloží a zadají tolik náhodně generovaných desetinných čísel na sedmisegmentovém displeji do binárních souborů přepnutím přepínačů a odesláním tlačítka hádat. Po dokončení se zobrazí konečné skóre a poté se resetuje, aby se mohlo hrát znovu.

Pochopení binárních a rychlých reflexů je prospěšné pro dobrý výsledek, ale tlačítko reset je k dispozici pro případ, že byste to chtěli okamžitě zkusit znovu.

Krok 1: Nastavení děliče hodin

Páteř celého tohoto projektu pochází ze správné synchronizace všech částí tohoto gizmo. Náš konečný stavový stroj používá vnitřní hodiny, ale sedmisegmentový displej a časovač musí používat změněnou verzi hodin.

Tyto „nové hodiny“pocházejí z dělení vnitřních hodin požadovanou periodou k dosažení určité frekvence potřebné pro každou konkrétní součást. To bylo provedeno v předchozích laboratořích a ze zkušenosti víme, že časovač má číslici „něčí“nastavenou na 0,1 Hz a číslice „desítek“je 1 Hz

Vstupy: ClkIn, dělič (32 bitů)

Výstupy: ClkOut

Krok 2: Vytvoření stroje s konečným stavem (FSM)

Vytvoření stroje s konečným stavem (FSM)
Vytvoření stroje s konečným stavem (FSM)
Vytvoření stroje s konečným stavem (FSM)
Vytvoření stroje s konečným stavem (FSM)
Vytvoření stroje s konečným stavem (FSM)
Vytvoření stroje s konečným stavem (FSM)

V našem stroji konečných stavů jsme se rozhodli, že bude zapotřebí pět stavů (začátek, zobrazení, kontrola, skóre a konec) s pěti vstupy (start, reset, odhad, rovnost, časový limit). Jediným výstupem v našem stavovém počítači je 3bitové číslo, které představuje stav, ve kterém se uživatel nachází (000, 001, 011, 101, 100) s ohledem na níže uvedené stavy.

Pamatujte, že konečný stavový stroj ve skutečnosti nevytváří níže uvedené funkce, ale pouze říká, v jakém stavu je program a v čem. Co se skutečně stane, určuje horní modul vysvětlený níže.

Počáteční stav (000)

Počáteční stav je místo, kde uživatel začne, dokud není počáteční vstup vysoký. To je také stav, kterého bude dosaženo při každém stisknutí tlačítka reset.

Stav hry (001)

Stav hry je začátek hry, kde se vygeneruje náhodné číslo a uživatel přepne přepínače a vytvoří vstup. Jakmile je tlačítko hádání stisknuto, hra se přesune do stavu Check.

Zkontrolovat stav (011)

V tomto stavu se používá komparátor, který porovnává hodnoty vstupu uživatele a náhodně generované číslo. Pokud je podání správné, je stejná hodnota vysoká a FSM přejde do stavu skóre; pokud je však podání nesprávné, FSM se vrátí zpět do stavu zobrazení, dokud není odeslání správné.

Tento stav kontroly se ve srovnání s ostatními děje relativně rychle, protože k němu dochází pouze po dobu stisknutí tlačítka pro kontrolu

Stav skóre (101)

Protože je stejná hodnota vysoká, podání bylo správné. V tomto stavu se hodnota skóre zvýší o jednu a uživateli se vygeneruje nové číslo. Toto nové číslo nás přivádí zpět do počátečního stavu, kde uživatel znovu přepne přepínače.

Koncový stav (100)

Jakmile časový spínač 60 sekund vyprší, časový limit bude vysoký a uživatel dosáhne koncového stavu, kde se zobrazí konečné skóre. Poté bude stisknut resetovací vstup a FSM začne znovu ve výchozím stavu.

Vstupy: Clk, první, začátek, odhad, rovnost, časový limit

Výstup: stav (3 bit)

Krok 3: Mapování zobrazení sedmi segmentů

Mapování zobrazení sedmi segmentů
Mapování zobrazení sedmi segmentů
Mapování zobrazení sedmi segmentů
Mapování zobrazení sedmi segmentů
Mapování zobrazení sedmi segmentů
Mapování zobrazení sedmi segmentů

Zobrazení sedmi segmentů je klíčovou součástí celého projektu, protože první dvě číslice na obrazovce se používají jako výstup generátoru náhodných čísel, zatímco poslední dvě číslice jsou časovač. Ačkoli jsme v poslední laboratoři implementovali příklad tohoto, pokud jde o číslice na obrazovce, byl zobrazen hexadecimálně. K vyřešení tohoto problému jsme použili převodník a rozdělovač hodin, který je dále vysvětlen níže.

Displej zobrazuje všechny 0, dokud FSM nepřejde do stavu hry; v konečném stavu by však displej měl zobrazovat pouze skóre uživatele.

Protože používáme všechny čtyři číslice sedmisegmentového displeje, musíme každou anodu cyklovat dostatečně rychle při 300 Hz, abychom byli vnímáni jako vždy rozsvícení.

Vstupy: Clk, sedmisegmentový

Výstupy: katody (7 bitů), anody (4 bit)

Krok 4: Vytvoření komparátoru

Vytvoření komparátoru
Vytvoření komparátoru

Tento submodul se používá ve stavu kontroly z hlediska toho, jak porovnává 7bitový binární zadaný odhad se skutečnou desetinnou hodnotou.

Měli jsme příkaz if, který vyhodnotil jak vstupy, tak dva výstupy v závislosti na tom, zda byla stejná hodnota vysoká nebo nízká. Jakkoli je tento modul důležitý, je to zdaleka jeden z jednodušších programů navržených v tomto projektu.

Vstupy: přepínače (8 bitů), číslo (8 bitů)

Výstup: EQ

Krok 5: Nastavení časovače

Nastavení časovače
Nastavení časovače
Nastavení časovače
Nastavení časovače

Náš časovač jsou v podstatě dva různé čítače, které rostou různou rychlostí. Jeden čítač v hodnotě „něčí“(první sedmisegmentový displej) a jeden čítač pro hodnotu „deseti“(druhá číslice na sedmisegmentovém displeji). Každá číslice vychází ze stoupající hrany hodin a jakmile počítadlo dosáhne 60 sekund, časový limit bude vysoký a hra skončí a vrátí se do počátečního stavu.

Vstupy: Clk, stav (3 bit), start

Výstupy: Aktuální (8 bitů), časový limit

Krok 6: Návrh generátoru pseudonáhodných čísel

Navrhování generátoru pseudonáhodných čísel
Navrhování generátoru pseudonáhodných čísel

Další alternativní metodou pro generátor čísel specificky pro tento případ je mít opakující se čítač od 0-99 (v binárním), který vydává počítané číslo, když je vstup vysoký, protože by to odstranilo potřebu použití LFSR.

Číslo se mění každou stoupající hranou vnitřních hodin (10 nano sekund) a cykluje všemi 100 čísly za jednu mikrosekundu. Kdykoli chce uživatel z generátoru čísel nové číslo, vydá číslo, na kterém byl, Ačkoli tento proces není zcela náhodný, pravděpodobnost nalezení souvisejících výstupů z tohoto procesu je dostatečně nízká na to, aby byla pseudonáhodná.

Vstupy: Clk, changenum, stejné

Výstupy: číslo (8 bitů)

Krok 7: Vytvoření převaděče

Vytvoření převaděče
Vytvoření převaděče

Nezbytnou součástí je Převaděč, který jsme použili k zobrazení desetinných čísel na sedmisegmentovém displeji místo původního hexadecimálního. Přestože obě čísla vycházejí ze 7bitového binárního čísla, vytvořili jsme celý modul určený k převodu hexadecimálního na desítkové.

Pokud by například náš konečný výstup pro skóre byl 0010001 (sedmnáct), sedmisegmentový displej by zobrazoval hexadecimální hodnotu 11 namísto desetinného čísla 17.

Vstup: Numin (8 bitů)

Výstup: Numout (8 bitů)

Krok 8: Dát vše dohromady v herním modulu

Dát vše dohromady v herním modulu
Dát vše dohromady v herním modulu
Dát vše dohromady v herním modulu
Dát vše dohromady v herním modulu
Dát vše dohromady v herním modulu
Dát vše dohromady v herním modulu
Dát vše dohromady v herním modulu
Dát vše dohromady v herním modulu

U našich komponent jsme použili potřebné přepínače 0-6, které uživatel přepínal, přičemž tři tlačítka sloužila jako uživatelské vstupy pro spuštění, reset a hádání. Sedm segmentový displej a komponenty hodin jsou také komponenty, které jsme provedli z předchozích laboratoří, ale museli jsme je upravit, aby se vešly do tohoto projektu.

Tento projekt jsme rozdělili do šesti výše uvedených modulů, abychom celý gizmo rozdělili na mnoho pracovních částí, ale způsob jejich připojení je poměrně složitý a ukazuje jej připojený obrázek černé skříňky.

Během hry se rozsvítí 7 diod LED, které upozorní uživatele, který přepne na použití, a když hra skončí, naprogramovali jsme také blikání LED diod

Vstupy: přepínače (8 bitů), Clk, reset, start, hádání

Výstupy: katody (7 bitů), anody (4 bit), LED diody (7 bitů)

Krok 9: Vyskytly se další problémy

Přestože je v této hře použito pouze sedm přepínačů, kód jej má nastavený jako 8bitové číslo. Udělali jsme to, abychom měli pohodlnější komparátor, který by porovnal těchto 8 bitů s 8 bitovým číslem, které jsme vygenerovali z generátoru náhodných čísel.

Skóre nám také zpočátku trochu dělalo potíže, protože jsme ho nastavili na zvýšení o jeden bod, když byl FSM ve stavu skóre; místo toho se však stalo, že skóre stále rostlo, dokud byl stav zapnutý, což nám dávalo nepřiměřeně vysoké skóre, se kterým jsme se nemohli vypořádat. Opravili jsme to přidáním pulzního signálu, který byl synchronizován se stoupající hranou hodin, jak je vidět v kódu v kroku 8.

Nakonec ladění časovače zabralo hodně času, protože by při odpočítávání narušilo náš sedmisegmentový displej, takže jsme ho museli změnit z odpočítávání ze 60 na počítání z 0.

Krok 10: Zdrojové soubory a omezení

Pokud byste místo vytváření vlastních raději stahovali z našich zdrojových souborů, tady jsou. Součástí je také soubor omezení.

Doporučuje: