Obsah:

Reakčná hra FPGA: 10 krokov
Reakčná hra FPGA: 10 krokov

Video: Reakčná hra FPGA: 10 krokov

Video: Reakčná hra FPGA: 10 krokov
Video: Tréningová jednotka - Reakčná schopnosť 2024, Júl
Anonim
Reakčná hra FPGA
Reakčná hra FPGA

Od Summer Rutherforda a Regity Soetandarovej

Krok 1: Úvod

Pre náš konečný projekt pre CPE 133 sme navrhli reakčnú hru vo VHDL pre dosku Basys3. Túto hru je možné najbližšie porovnať s arkádovou hrou „Stacker“, kde musí hráč odhodiť bloky v správnom čase. Doska Basys3 je spojená s doskou, ktorá má striedavé diódy LED. Tieto LED svetlá sa budú striedať na konkrétnej frekvencii, v závislosti od úrovne. Táto hra používa rozdeľovač hodín a 4 -miestny 7 -segmentový displej, ako aj automat s konečným stavom. Keď hráč aktivuje správny spínač, keď sa rozsvieti stredná dióda LED, hráč postúpi na ďalšiu úroveň hry a zvýši frekvenciu striedania diód LED. To robí každú nasledujúcu úroveň ťažšou ako predchádzajúca úroveň. Keď prehrávač úspešne porazí úroveň 7, najvyššiu úroveň, na segmentovom displeji sa zobrazí správa a súčasne začnú blikať všetky LED diódy.

Krok 2: Materiály

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

Materiály, ktoré budete potrebovať, sú:

  • Doska Digilent Basys3 s káblom micro USB
  • Breadboard
  • 5 LED diód
  • 5 odporov (použili sme 220 ohmov)
  • 11 prepojovacích káblov
  • Počítač s Vivado

Krok 3: Dizajn čiernej skrinky diagramu najvyššej úrovne

Dizajn čiernej skrinky diagramu najvyššej úrovne
Dizajn čiernej skrinky diagramu najvyššej úrovne
Dizajn čiernej skrinky diagramu najvyššej úrovne
Dizajn čiernej skrinky diagramu najvyššej úrovne

Ako vidíte, náš blokový diagram najvyššej úrovne začína získaním požadovaných hodín z nášho submodulu ClkDivide. Tieto hodiny sú vstupmi do rôznych procesných blokov. V zásade musí hra rozpoznať, že keď používateľ správne zapne vypínač, LED diódy sa musia začať striedať rýchlejšie a displej musí ísť o úroveň vyššie. Blokový diagram môže vyzerať trochu bláznivo, ale je to kvôli tomu, že v určitom procese je vytvorených veľa signálov, a potom tento signál definuje ďalší signál v inom bloku procesu.

Nakoniec jediné vstupy, ktoré hra vyžaduje, sú vstupné hodiny na doske Basys3 s frekvenciou 100 Mhz, sedem prepínačov na doske Basys3 a tlačidlo reset. Na výstupe je anóda pre sedemsegmentový displej, sedem segmentov pre displej a diódy LED.

Krok 4: CLKDivide

CLKDivide
CLKDivide
CLKDivide
CLKDivide
CLKDivide
CLKDivide

Tento submodul rozdeľovača hodín vytvoril pomalšie hodiny v závislosti od hodnoty, ktorú sme naň namapovali v našom hlavnom súbore. Tento submodul sme použili na určenie Clk400, PushClk a newlck. Tento submodul používa ako vstup hodiny a 32 -bitový delič. Na výstupe budú spomalené hodiny. Existuje oddeľovač a spomalené hodiny, procesný blok. V tomto procese je dočasná premenná, ktorú sme nazvali počítať, ktorá počíta jednu pri každom náraze na stúpajúcu hranu zadaných hodín. Akonáhle dosiahne číslo deliteľa, spomalené hodiny sa prepnú a počítanie sa vynuluje.

Krok 5: Posuňte blok procesu

Blok posunu procesu
Blok posunu procesu

Blok procesu Shift riadi striedavý pohyb a rýchlosť LED diód. V zozname citlivosti sú signály newclk a Stop. Zastavenie spôsobí krátke oneskorenie, keď používateľ prejde úrovňou. Ak stop nie je vysoký, diódy LED sa striedajú ako obvykle na základe rýchlosti newclk. Tento striedajúci sa vzor je riadený dvoma premennými: stopa a počet. Počet určuje, ktorá dióda LED by mala svietiť, zatiaľ čo funkcia Track určuje, či sa má počet odpočítavať nahor alebo nadol. Existuje ďalší signál, konečný, ktorý platí iba vtedy, ak je úroveň „111“, čo znamená, že hráč hru porazil. Vo finále sa strieda 0 až 1 na každom okraji hodín, aby sa diódy LED nepretržite zapínali a vypínali. Toto je len vizuálny prvok pre konečné zobrazenie.

Tento proces zmeny je ideálnym miestom pre štart pre tento projekt. Ak dokážete svoje LED diódy striedať správne a dôsledne, potom odtiaľ stačí pridať správanie pri zvyšovaní úrovne!

Krok 6: Konečný automat

Konečný stavový stroj
Konečný stavový stroj

Vytvorili sme počítač s konečným stavom, ktorý bude diktovať správanie pri stlačení spínača vstupu alebo tlačidla reset. Každý stav je „úrovňou“a ak je spínač zapnutý v nesprávnom čase alebo je stlačený reset, úroveň sa vráti späť na „000“. V opačnom prípade, ak je spínač správne zapnutý, úroveň sa pohybuje nahor, kým sa nedostane do konečného stavu „111“a zobrazí sa koncové zobrazenie. FSM je založený na dvoch procesných blokoch sync_proc a comb_proc. Sync_proc používa hodiny, ktoré sme nazvali PushClk. Tieto hodiny riadia, ako rýchlo sa nasledujúci stav zmení na súčasný stav. Tieto hodiny by mali byť dosť rýchle; vybrali sme rýchlosť, ktorá bola asi dvakrát vyššia ako naša najrýchlejšia rýchlosť LED.

Tento kód sme implementovali pomocou FSM pre úrovne; Po tomto projekte sme si však uvedomili, že efektívnejším využitím FSM môže byť stav odpočítavania, resetovanie alebo zastavenie. Ak sa nič netlačí, je to v zdržiavacom stave. Ak stlačíte reset alebo sa prehrávač pokazí, je v stave resetovania. Ak je správne stlačený, je v stave odpočítavania. Existuje mnoho ďalších spôsobov, ako použiť FSM aj v tejto hre!

Krok 7: Ovládanie bloku procesu zobrazovania pomocou úrovne

Ovládanie bloku procesu zobrazenia s úrovňou
Ovládanie bloku procesu zobrazenia s úrovňou

Úroveň ovláda blok procesu zobrazenia. Premenné v zozname citlivosti sú Level, Reset a Clk400. 7 -segmentový displej začína zobrazením „1“pre prvú úroveň. Počíta sa do 7 vždy, keď používateľ prejde úrovňou, aby mu ukázal, na akej úrovni sa nachádza. Akonáhle používateľ prejde úrovňou 7, zobrazí sa „COOL“, čo znamená, že hráč hru porazil. Tento displej „COOL“beží na frekvencii 400 Hz, ktorú sme nazvali Clk400. Ak stlačíte Reset, displej sa vráti na „1.“

Krok 8: Ovládanie rýchlosti LED pomocou úrovne

Ovládanie rýchlosti LED s úrovňou
Ovládanie rýchlosti LED s úrovňou

Nakoniec úroveň ovláda rýchlosť LED diód. Úroveň je jediným signálom v zozname citlivosti. D1 je signál, ktorý vstupuje do procesu oddeľovača hodín, aby získal newclk. Zakaždým, keď sa zmení úroveň alebo stav, procesný blok „Rýchlosť“. Tento proces určuje hodnotu D1. Existuje 8 definovaných hodnôt D1, ktoré sme vybrali na základe toho, ako rýchlo sme chceli, aby každá úroveň bežala. D1 sa zmenšuje vždy, keď sa zvyšuje úroveň, takže newclk beží rýchlejšie.

Krok 9: Zostava hardvéru

Zostava hardvéru
Zostava hardvéru

Nepájivú dosku sme prepojili s Basys3 jedným z konektorov pmod. Šesť z portov pmod bolo použitých na zapojenie konektora z mužského do mužského konektora, jeden pre uzemnenie a ďalších päť pre 5 LED diód. Pre každú LED sme tiež umiestnili odpor. Tieto odpory sú 220Ω a zabraňujú skratu a spáleniu LED diód. Aj keď každá LED dióda má určitý odpor, odpor nepostačuje na to, aby prekážal napätiu zo zdroja.

Krok 10: Bavte sa

Táto hra sa veľmi ľahko hrá. Hráč začína úplne vpravo na spínači 1 dosky, V17. Keď svieti stredná dióda LED, musia prepnúť prepínač vysoko. Potom posunú jeden prepínač doľava a urobia to isté! Ak sa hráč dostane do konca, skončí na siedmom prepínači, W14. Ak hru porazia, uvidia skutočne zábavnú koncovú obrazovku!

Treba poznamenať, že pri vytváraní tejto hry sú rýchlosti úplne na vás! Ak sú rýchlosti, ktoré sme zvolili, príliš nízke, pokojne ich zrýchlite a urobte ešte náročnejšími! Rovnako nie je stanovený počet úrovní. Ak chcete, aby to malo ešte viac úrovní, existujú zmeny, ktoré je potrebné vykonať v FSM a procesných blokoch určených úrovňou, ale sú to veľmi jednoduché zmeny.

Ako vstup užívateľa sme sa tiež rozhodli použiť prepínače na doske, ale je to možné aj pomocou tlačidla na doske Basys3; tlačidlo eliminuje potrebu resetovať prepínače vždy, keď používateľ začína odznova. Pôvodne sme používali tlačidlo, ale to spôsobovalo chyby pri definovaní úrovne, pretože by to preskočilo niekoľko úrovní, keby boli pri držaní tlačidla zasiahnuté dve stúpajúce hrany PushClk.

Nasleduje video, ktoré ukazuje, ako hrať, prechádza prvými 4 úrovňami a zobrazuje konečný koniec.

Hlavný súbor pre tento projekt je uvedený nižšie.

Zdroje

Referenčný manuál Basys3

Inšpirácia pre projekt - hra Arduino Stop It

Odporúča: