Tartalomjegyzék:
- 1. lépés: Bevezetés
- 2. lépés: Anyagok
- 3. lépés: Felső szintű diagram fekete doboz tervezése
- 4. lépés: CLKDivide
- 5. lépés: Váltási folyamatblokk
- 6. lépés: Véges állapotú gép
- 7. lépés: A kijelző folyamat blokkjának szabályozása szinttel
- 8. lépés: A LED sebességének szabályozása a szinttel
- 9. lépés: A hardver összeszerelése
- 10. lépés: Jó szórakozást
Videó: FPGA reakciójáték: 10 lépés
2024 Szerző: John Day | [email protected]. Utoljára módosítva: 2024-01-30 09:42
Í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
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
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
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
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
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 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
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
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:
FPGA Cyclone IV DueProLogic Controls Raspberry Pi kamera: 5 lépés
FPGA Cyclone IV DueProLogic Controls Raspberry Pi kamera: Annak ellenére, hogy az FPGA DueProLogic -t hivatalosan az Arduino számára tervezték, az FPGA -t és a Raspberry Pi 4B -t kommunikálhatóvá tesszük. Ebben az oktatóanyagban három feladat valósul meg: (A) Nyomja meg egyszerre a két nyomógombot FPGA a szög forgatásához
FPGA Cyclone IV DueProLogic - Nyomógomb és LED: 5 lépés
FPGA Cyclone IV DueProLogic - Nyomógomb és LED: Ebben az oktatóanyagban az FPGA -t fogjuk használni a külső LED áramkör vezérlésére. A következő feladatokat fogjuk végrehajtani (A) A LED vezérléséhez használja az FPGA Cyclone IV DuePrologic nyomógombjait. (B) Vaku LED világít & időnként ki
Vicces Arduino reakciójáték: 3 lépés
Vicces Arduino reakciójáték: Vicces Arduino reakciójáték az egész család számára;) Platformok közötti Bluetooth kommunikáción alapul. Csak néhány Arduino cuccra, Android okostelefonra és cipősdobozra van szüksége. Ha ezek egyike sincs meg, higgy benne határozottan: nincs semmi, ami
Reakciójáték- Számítógép-tervezési projekt: 3 lépés
Reakciójáték- Számítógépes mérnöki projekt: A reakciójáték pontosan az, amit a név is mond, teszteli a reakciósebességet. Lehet, hogy azt kérdezi, milyen előnyökkel járhat ez a szerver a szórakoztatáson kívül, nos, ezt használhatja a műtét vagy balesetek rehabilitációjában szenvedők számára. A reakciójuk
Arduino reakciójáték: 9 lépés
Arduino reakciójáték: Ezt a játékot iskolai feladatként készítettem. Valami interaktív dolgot kellett készítenünk egy arduino -val. Ez az első Arduino projektem, amit valaha készítettem, így elég nehéz volt, de nem lehetetlen