Tartalomjegyzék:

FPGA reakciójáték: 10 lépés
FPGA reakciójáték: 10 lépés

Videó: FPGA reakciójáték: 10 lépés

Videó: FPGA reakciójáték: 10 lépés
Videó: Лекция №1 "Что умеют FPGA и зачем они нужны?" 2024, November
Anonim
FPGA reakciójáték
FPGA reakciójáték

Írta: Summer Rutherford és Regita Soetandar

1. lépés: Bevezetés

A CPE 133 -as végső projektünkhöz egy Basys3 táblához készítettünk egy reakciójátékot VHDL -ben. Ezt a játékot leginkább a „Stacker” ügyességi játékhoz lehet hasonlítani, ahol a játékosnak a megfelelő időben kell eldobnia a blokkokat. A Basys3 tábla egy kenyérsütő táblához van csatlakoztatva, amely LED -ek váltakoznak. Ezek a LED -es lámpák a frekvenciától függően meghatározott frekvencián váltakoznak. Ez a játék az óraosztót és a 4 számjegyű 7 szegmenses kijelzőt, valamint egy véges állapotú gépet használ. Amikor a játékos aktiválja a megfelelő kapcsolót, amikor a középső LED világít, a játékos a játék következő szintjére lép, növelve a váltakozó LED -ek gyakoriságát. Ez minden egyes szintet megnehezít, mint az előző szint. Ha a lejátszó sikeresen legyőzi a 7. szintet, a legmagasabb szintet, egy üzenet jelenik meg a szegmens kijelzőjén, és az összes LED egyszerre villog.

2. lépés: Anyagok

Anyagok
Anyagok
Anyagok
Anyagok
Anyagok
Anyagok

A szükséges anyagok a következők:

  • Digilent Basys3 kártya mikro USB kábellel
  • Kenyeretábla
  • 5 LED
  • 5 ellenállás (220 ohmot használtunk)
  • 11 jumper vezeték
  • Számítógép Vivadóval

3. lépés: Felső szintű diagram fekete doboz tervezése

Felső szintű diagram fekete doboz
Felső szintű diagram fekete doboz
Felső szintű diagram fekete doboz
Felső szintű diagram fekete doboz

Amint láthatja, a legfelső szintű blokkdiagramunk azzal kezdődik, hogy a szükséges órákat lekérjük a ClkDivide almodulunkból. Ezek az órák a különböző folyamatblokkok bemenetei. Lényegében a játéknak fel kell ismernie, hogy amikor a felhasználó helyesen kapcsolja be a kapcsolót, a LED -eknek gyorsabban kell váltakozniuk, és a kijelzőnek egy szinttel feljebb kell lépnie. A blokkdiagram kissé őrültnek tűnhet, de ez azért van, mert sok jel jön létre egy bizonyos folyamatban, majd ez a jel definiál egy másik jelet egy másik folyamatblokkban.

Végül a játék egyetlen bemenete a Basys3 táblán lévő 100 Mhz -en futó bemeneti óra, a Basys3 táblán lévő hét kapcsoló és a reset gomb. A kimenet a hét szegmenses kijelző anódja, a kijelző hét szegmense és a LED -ek.

4. lépés: CLKDivide

CLKDivide
CLKDivide
CLKDivide
CLKDivide
CLKDivide
CLKDivide

Ez az óraosztó almodul lassabb órát hozott létre attól függően, hogy a fő fájlunkban milyen értéket rendeltünk hozzá. Ezt az almodult használtuk a Clk400, a PushClk és az newlck meghatározásához. Ez az almodul egy órát és egy 32 bites osztót használ bemenetként. Lassított óra jelenik meg. Van egy folyamatblokk az osztó és a lassított óra számára. A folyamatban van egy ideiglenes változó, amelyet számlálásnak nevezünk, amely minden alkalommal eggyel számol, amikor a beírt óra emelkedő szélét eltalálják. Amint eléri az osztó számát, a lassított óra átvált, és a szám nullára áll.

5. lépés: Váltási folyamatblokk

Váltási folyamat blokk
Váltási folyamat blokk

A Shift folyamatblokk szabályozza a LED -ek váltakozó mozgását és sebességét. Az érzékenységi listában az új clk és a Stop jelek találhatók. A Stop rövid késleltetést okoz, amikor a felhasználó átlépi a szintet. Ha a Stop nem magas, akkor a LED -ek a szokásos módon váltakoznak az newclk sebessége alapján. Ezt a váltakozó mintát két változó vezérli: Követés és szám. A Count határozza meg, melyik LED -nek kell világítania, míg a Track határozza meg, hogy a számlálás felfelé vagy lefelé számoljon -e. Van egy másik jelzés, a Final, amely csak akkor érvényes, ha a szint „111”, ami azt jelzi, hogy a játékos legyőzte a játékot. A végső 0 és 1 között váltakozik minden óra szélén, hogy a LED -ek folyamatosan be- és kikapcsoljanak. Ez csak vizuális elem a végső megjelenítéshez.

Ez a váltási folyamat tökéletes hely a projekt elindításához. Ha sikerül a LED -eket helyesen és következetesen váltakozni, akkor innen már csak hozzá kell adnia a viselkedést a szinteléshez!

6. lépés: Véges állapotú gép

Véges állapotú gép
Véges állapotú gép

Létrehoztunk egy véges állapotú gépet, amely diktálja a viselkedést a bemeneti kapcsoló vagy a reset gomb megnyomásakor. Mindegyik állapot „szint”, és ha a kapcsolót rosszkor kapcsolják be, vagy a reset gombot megnyomják, a szint visszaáll „000” -re. Ellenkező esetben, ha a kapcsoló megfelelően be van kapcsolva, akkor a szint felfelé mozog, amíg el nem éri a végső állapotot, „111”, és megjelenik a befejező kijelző. Az FSM a két sync_proc és comb_proc folyamatblokkon alapul. A Sync_proc a PushClk nevű órát használja. Ez az óra vezérli, hogy a következő állapot milyen gyorsan válik a jelenlegi állapotgá. Ennek az órának elég gyorsnak kell lennie; olyan sebességet választottunk, amely körülbelül kétszer gyorsabb volt, mint a leggyorsabb LED -sebességünk.

Ezt a kódot FSM használatával valósítottuk meg a szintekhez; a projekt után azonban rájöttünk, hogy az FSM hatékonyabb felhasználása lehet a visszaszámlálási, visszaállítási vagy tartózkodási állapot. Ha semmi nincs megnyomva, akkor az tartózkodási állapotban van. Ha a reset gombot megnyomja, vagy a lejátszót elrontotta, az visszaállítási állapotban van. Ha helyesen nyomja meg, akkor visszaszámlálási állapotban van. Sok más módja is van az FSM használatának ebben a játékban!

7. lépés: A kijelző folyamat blokkjának szabályozása szinttel

A kijelző folyamat blokkjának szabályozása szinttel
A kijelző folyamat blokkjának szabályozása szinttel

A szint vezérli a kijelző folyamatblokkját. Az érzékenységi lista változói a Level, Reset és Clk400. A 7 szegmenses kijelző az első szint „1” kijelzésével kezdődik. Minden alkalommal 7 -ig számít, amikor a felhasználó átlép egy szintet, hogy megmutassa a felhasználónak, hogy milyen szinten van. Miután a felhasználó átlépte a 7. szintet, a „COOL” felirat jelenik meg, jelezve, hogy a játékos legyőzte a játékot. Ez a „COOL” kijelző lefut egy 400 Hz -es óráról, amelyet Clk400 -nak hívtunk. Ha megnyomja a Reset gombot, a kijelző visszatér az „1” állapotba.

8. lépés: A LED sebességének szabályozása a szinttel

A LED sebesség szabályozása szinttel
A LED sebesség szabályozása szinttel

Végül a Level szabályozza a LED -ek sebességét. A szint az egyetlen jel az érzékenységi listában. A D1 az a jel, amely az óraosztó folyamatba megy, hogy új clk -t kapjon. Minden alkalommal, amikor a szintet megváltoztatják, vagy az állapot megváltozik, a „Sebesség” folyamatblokk. Ez a folyamat határozza meg a D1 értékét. A D1 -nek 8 meghatározott értéke van, amelyeket az alapján választottunk, hogy milyen gyorsan szeretnénk futni az egyes szinteken. A D1 minden szint növekedésével kisebb lesz, így az új clk gyorsabban fut.

9. lépés: A hardver összeszerelése

Hardver összeszerelés
Hardver összeszerelés

A kenyértáblát a Basys3 -hoz kötöttük az egyik pmod csatlakozóval. A pmod portok közül hatot egy férfi -férfi csatlakozó csatlakoztatására használtak, az egyiket a földeléshez, a másikat pedig az 5 LED -hez. Minden LED -hez ellenállást is elhelyeztünk. Ezek az ellenállások 220Ω -osak, és megakadályozzák a LED -ek rövidzárlatát és kiégését. Bár minden LED -nek van némi ellenállása, az ellenállás nem elegendő a forrás feszültségének gátlásához.

10. lépés: Jó szórakozást

Ezt a játékot nagyon könnyű játszani. A játékos a tábla jobb szélső kapcsolóján, 1, V17 indul. Magasra kell fordítaniuk a kapcsolót, amikor a középső LED világít. Ezután egy kapcsolót balra mozgatnak, és ugyanezt teszik! Ha a játékos a végére ér, a hetedik kapcsolón, a W14 -en fog végezni. Ha legyőzik a játékot, egy igazán szórakoztató befejező kijelzőt láthatnak!

Érdemes megjegyezni, hogy a játék létrehozásakor a sebesség teljesen rajtad múlik! Ha a választott sebességek túl lassúak, nyugodtan gyorsítsuk fel, és tegyük még nagyobb kihívássá! Nincs is meghatározott számú szintek. Ha azt szeretné, hogy még több szintje legyen, akkor módosításokat kell végrehajtani az FSM -en és a Level által meghatározott folyamatblokkokon, de ezek nagyon egyszerű változtatások.

Azt is választottuk, hogy a táblán lévő kapcsolókat használjuk felhasználói bemenetként, de ez a Basys3 táblán lévő gombbal is lehetséges; a gomb nem teszi szükségessé a kapcsolók alaphelyzetbe állítását minden alkalommal, amikor a felhasználó újrakezdi. Kezdetben egy gombot használtunk, de ez hibákat okozott a szint meghatározásakor, mert több szintet ugorna, ha a PushClk két emelkedő szélét eltalálná, amikor a gombot lenyomva tartja.

Az alábbiakban egy videó bemutatja, hogyan kell játszani, végigmegy az első 4 szinten és az utolsó befejező kijelzőn.

A projekt fő fájlja az alábbiakban található.

Források

Basys3 referencia kézikönyv

Inspiráció a projekthez - Arduino Stop It játék

Ajánlott: