Obsah:

Reakční hra FPGA: 10 kroků
Reakční hra FPGA: 10 kroků

Video: Reakční hra FPGA: 10 kroků

Video: Reakční hra FPGA: 10 kroků
Video: Rozvoj rychlosti ve dvojici 2024, Červenec
Anonim
Reakční hra FPGA
Reakční hra FPGA

Letní Rutherford a Regita Soetandar

Krok 1: Úvod

Pro náš konečný projekt pro CPE 133 jsme navrhli reakční hru ve VHDL pro desku Basys3. Tuto hru lze nejblíže přirovnat k arkádové hře „Stacker“, kde musí hráč ve správný čas shodit bloky. Deska Basys3 je připojena k breadboardu, který má střídavé LED diody. Tato LED světla se budou střídat na konkrétní frekvenci, v závislosti na úrovni. Tato hra využívá dělič hodin a 4místný 7segmentový displej a také automat s konečným stavem. Když hráč aktivuje správný spínač, když se rozsvítí prostřední LED, hráč postoupí na další úroveň hry a zvýší frekvenci střídání LED diod. Díky tomu je každá následující úroveň těžší než předchozí úroveň. Když hráč úspěšně porazí úroveň 7, nejvyšší úroveň, na segmentovém displeji se zobrazí zpráva a všechny LED diody současně blikají a zhasínají.

Krok 2: Materiály

Materiály
Materiály
Materiály
Materiály
Materiály
Materiály

Materiály, které budete potřebovat, jsou:

  • Deska Digilent Basys3 s kabelem micro USB
  • Prkénko
  • 5 LED diod
  • 5 odporů (použili jsme 220 ohmů)
  • 11 propojovacích vodičů
  • Počítač s Vivado

Krok 3: Návrh nejvyšší úrovně diagramu černé skříňky

Design černé skříňky diagramu nejvyšší úrovně
Design černé skříňky diagramu nejvyšší úrovně
Design černé skříňky diagramu nejvyšší úrovně
Design černé skříňky diagramu nejvyšší úrovně

Jak vidíte, náš blokový diagram nejvyšší úrovně začíná získáním požadovaných hodin z našeho submodulu ClkDivide. Tyto hodiny jsou vstupy do různých procesních bloků. V zásadě musí hra rozpoznat, že když uživatel správně zapne vypínač, LED diody se musí začít střídat rychleji a displej musí jít o úroveň výš. Blokový diagram může vypadat trochu šíleně, ale je to proto, že v určitém procesu je vytvořeno mnoho signálů a pak tento signál definuje další signál v jiném procesním bloku.

Nakonec jediné vstupy, které hra vyžaduje, jsou vstupní hodiny na desce Basys3, které běží na 100 Mhz, sedm přepínačů na desce Basys3 a tlačítko reset. Výstupem je anoda pro sedmisegmentový displej, sedm segmentů pro displej a diody LED.

Krok 4: CLKDivide

CLKDivide
CLKDivide
CLKDivide
CLKDivide
CLKDivide
CLKDivide

Tento submodul děliče hodin vytvořil pomalejší hodiny v závislosti na hodnotě, kterou jsme do něj namapovali v našem hlavním souboru. Tento submodul jsme použili k určení Clk400, PushClk a newlck. Tento submodul má jako vstupy hodiny a 32bitový dělič. Na výstupu jsou zpomalené hodiny. Pro dělič a zpomalené hodiny existuje procesní blok. V tomto procesu je dočasná proměnná, kterou jsme nazvali count, která počítá jednu vždy, když je zasažena stoupající hrana zadaných hodin. Jakmile dosáhne čísla dělitele, zpomalené hodiny se přepnou a počítání se vynuluje.

Krok 5: Posuňte procesní blok

Posuňte procesní blok
Posuňte procesní blok

Procesní blok Shift ovládá střídavý pohyb a rychlost LED diod. V seznamu citlivosti jsou signály newclk a Stop. Zastavení způsobí krátké zpoždění, když uživatel projde úrovní. Pokud stop není vysoký, LED diody se střídají jako obvykle na základě rychlosti newclk. Tento střídavý vzorec je řízen dvěma proměnnými: Track a count. Počet určuje, která kontrolka LED by měla svítit, zatímco Track určuje, zda má počet odpočítávat nahoru nebo dolů. Existuje další signál, Final, který platí pouze tehdy, když je úroveň „111“, což znamená, že hráč hru porazil. Finále se střídá mezi 0 a 1 na každé hraně hodin, aby se diody LED nepřetržitě zapínaly a vypínaly. Toto je jen vizuální prvek pro konečné zobrazení.

Tento proces směny je ideálním místem pro zahájení tohoto projektu. Pokud dokážete své LED diody střídat správně a důsledně, pak odtud stačí přidat chování při zvyšování úrovně!

Krok 6: Konečný stav stroje

Koncový stroj
Koncový stroj

Vytvořili jsme stroj s konečným stavem, který bude diktovat chování při stisknutí přepínače vstupu nebo tlačítka reset. Každý stav je „úroveň“a pokud je spínač zapnut ve špatný čas nebo je stisknut reset, úroveň se vrátí zpět na „000“. V opačném případě, pokud je spínač správně zapnutý, úroveň se pohybuje nahoru, dokud nedosáhne konečného stavu, „111“a zobrazí se koncové zobrazení. FSM je založen na dvou procesních blocích sync_proc a comb_proc. Sync_proc používá hodiny, které jsme nazvali PushClk. Tyto hodiny řídí, jak rychle se z dalšího stavu stane současný stav. Tyto hodiny by měly být docela rychlé; vybrali jsme rychlost, která byla asi dvakrát rychlejší než naše nejrychlejší rychlost LED.

Tento kód jsme implementovali pomocí FSM pro úrovně; po tomto projektu jsme si však uvědomili, že efektivnější využití FSM by mohlo mít stav počítání, stav resetování nebo stav setrvání. Pokud se nic netlačí, je to v pohotovostním stavu. Pokud je stisknuto resetování nebo je hráč zmatený, je ve stavu resetování. Pokud je správně stisknuto, je ve stavu odpočítávání. Existuje mnoho dalších způsobů, jak použít FSM i v této hře!

Krok 7: Ovládání bloku procesu zobrazení pomocí úrovně

Ovládání bloku procesu zobrazení pomocí úrovně
Ovládání bloku procesu zobrazení pomocí úrovně

Úroveň ovládá blok procesu zobrazení. Proměnné v seznamu citlivosti jsou Level, Reset a Clk400. 7segmentový displej začíná zobrazením „1“pro první úroveň. Počítá se do 7 pokaždé, když uživatel projde úrovní, aby uživateli ukázal, na jaké úrovni se nachází. Jakmile uživatel projde úrovní 7, zobrazí se „COOL“, což znamená, že hráč hru porazil. Tento displej „COOL“běží na frekvenci 400 Hz, kterou jsme nazvali Clk400. Pokud stisknete Reset, displej se vrátí na „1.“

Krok 8: Ovládání rychlosti LED pomocí úrovně

Ovládání rychlosti LED pomocí úrovně
Ovládání rychlosti LED pomocí úrovně

Nakonec úroveň řídí rychlost LED diod. Úroveň je jediným signálem v seznamu citlivosti. D1 je signál, který vstupuje do procesu děliče hodin, aby získal newclk. Pokaždé, když se změní úroveň nebo stav, procesní blok „Rychlost“. Tento proces určuje hodnotu D1. Existuje 8 definovaných hodnot D1, které jsme vybrali na základě toho, jak rychle jsme chtěli, aby každá úroveň běžela. D1 se zmenšuje při každém zvýšení úrovně, takže newclk běží rychleji.

Krok 9: Montáž hardwaru

Sestava hardwaru
Sestava hardwaru

Spojili jsme prkénko s Basys3 jedním z konektorů pmod. Šest portů pmod bylo použito k připojení konektoru muž k muži, jeden pro uzemnění a dalších pět pro 5 LED diod. Pro každou LED jsme také umístili odpor. Tyto odpory jsou 220Ω a zabraňují zkratu a spálení LED diod. Ačkoli každá LED má určitý odpor, odpor není dostatečný na to, aby bránil napětí ze zdroje.

Krok 10: Bavte se

Tato hra se velmi snadno hraje. Hráč začíná na krajním pravém přepínači 1 na desce, V17. Je -li střední LED dioda zapnutá, musí přepnout spínač vysoko. Poté přesunou jeden přepínač doleva a udělají totéž! Pokud se hráč dostane do konce, skončí na sedmém přepínači, W14. Pokud hru porazí, uvidí opravdu zábavný konec!

Je třeba poznamenat, že při vytváření této hry jsou rychlosti zcela na vás! Pokud jsou rychlosti, které jsme zvolili, příliš pomalé, klidně to zrychlete a udělejte to ještě náročnější! Rovněž není stanoven počet úrovní. Pokud chcete, aby to mělo ještě více úrovní, existují úpravy, které je třeba provést na FSM a procesních blocích určených úrovní, ale jedná se o velmi jednoduché změny.

Jako vstup uživatele jsme také zvolili použití přepínačů na desce, ale to je také možné pomocí tlačítka na desce Basys3; tlačítko odstraní nutnost resetovat přepínače pokaždé, když uživatel začne znovu. Zpočátku jsme používali tlačítko, ale to způsobilo chyby při definování úrovně, protože by přeskočilo více úrovní, pokud by byly při držení tlačítka zasaženy dvě stoupající hrany PushClk.

Níže je video, které ukazuje, jak hrát, procházející prvními 4 úrovněmi a závěrečným zobrazením.

Hlavní soubor pro tento projekt je uveden níže.

Prameny

Referenční příručka Basys3

Inspirace pro projekt - hra Arduino Stop It

Doporučuje: