Tartalomjegyzék:
Videó: Mastermind játék VHDL -ben: 3 lépés
2024 Szerző: John Day | [email protected]. Utoljára módosítva: 2024-01-30 09:43
Projektünkhöz létrehoztuk a „Mastermind” játékot VHDL -ben, amelyet a Basys3 táblán kell játszani. A Mastermind egy kódtörő játék, amelyet hagyományosan csapokkal és játéktáblával játszanak. Az első játékos válogatott színekből álló csapokat helyez el egy 4 -es sorban, elrejtve a második játékos elől. A második játékos ekkor „x” számú találgatást tesz, amelyeken az első játékos számára látható sorban csapokat helyez a táblára. Minden találgatás után a második játékos 2 számról kap tájékoztatást: hány csap a megfelelő színű, és hány csap a megfelelő pozícióban van a sorban. Ezekkel a nyomokkal a második játékosnak kell kitalálnia a megfelelő gombostű -sorrendet, amelyet az egyik játékos elhelyezett a kitalált számban.
A mi megvalósításunkban a játék egyjátékos. A program véletlenszerűen rögzíti a csapokat, és a játékosnak a Basys3 táblával kell kitalálnia a helyes sorrendet. Négy „szín” létezik, amelyeket bináris értékek képviselnek. A 7 szegmenses kijelző három értéket mutat: a hátralévő fordulatokat, a megfelelő pozícióban lévő csapok számát és a megfelelő színű csapok számát a rossz pozícióban (ezek az értékek 9, 0 és 0-tól kezdődnek). A játékos a táblán található kapcsolók segítségével választja ki a bináris értékeit a találgatásához, és egy másik kapcsolóval elfordítja a találgatást. Ha helyesek, a játék véget ér, és a 7 szegmenses kijelzőn a „GG” felirat látható. Ha nem, akkor a fordulószámláló 1 -gyel csökken, és a játékos visszajelzést kap annak alapján, hogy hány tipp felel meg a tippjeiknek a kombinációban lévő csapok színéhez vagy helyzetéhez. Ha a játékos kifogy a kanyarokból anélkül, hogy helyesen tippelne, a kijelzőn a „GO” felirat látható (a játék vége). A lejátszó a visszaállító kapcsolót is elfordíthatja, hogy bármikor újrakezdhesse.
1. lépés: Anyagok
Mivel az egész játék maga a táblán játszható, az egyetlen szükséges anyag a Basys3 tábla, a tábla csatlakoztatásához szükséges mikro USB kábel, valamint egy számítógép/laptop, amellyel kódolni lehet!
2. lépés: A kód
Annak érdekében, hogy ez a játék működjön az FPGA -n, a legegyszerűbb módja annak írásához az állapotgép létrehozása lenne. Az állapotgép lehetővé teszi a játék tényleges működéséhez szükséges szekvenciális és interaktív élményt. Annak érdekében, hogy minden zökkenőmentesen működjön, az állapotgép az FPGA belső órajelén alapul, biztosítva, hogy minden szinkronban legyen. A fő modul egy négyállapotú állapotgép; Kezdeti állapot (kezdeti), SubmitAnswer állapot (SubAns), Megjelenítési állapot (Dis) és a CheckEndGame állapot (CheckEnd). Az állapotgéppel együtt a fő modulnak két almodulja van, egy 4 számjegyű Hét szegmenses kijelző (amely rendelkezik saját ClkDivider almoduljával) és a Véletlenszám-generátor (valójában egy psuedo-random számgenerátor). Létezik egy alapvető folyamatblokk is, hogy a kapcsoló feletti LED -ek bekapcsoláskor bekapcsoljanak, hogy az emberek könnyebben lássák, mit írnak be. A kód alapvető áttekintése a képen látható gondolattérképen látható.
Az első komponens, amelyet meg kell vizsgálni, a véletlenszám -generátor (randomgen). Mivel technikailag nem lehetséges hardverből előállított valódi véletlen számokat lekérni, a legegyszerűbb megoldás az volt, hogy a randomgen valójában egy lineáris visszacsatolásos eltolásregiszter (LFSR). Az LFSR bemenete clk és kimenete „a” (12 bites szám). Minden órajel ciklusban egy új 12 bites szám jön létre a „000000000001” kezdetétől, amely végül végigmegy az 1-es és a 0-as 12 bites összes kombinációján, mielőtt megismétli önmagát. Az „a” kimenet minden órajelciklusban meg van adva, tehát folyamatosan fut. A clk a főmodulból a Clk -hez van hozzárendelve, az „a” pedig a RandNum jelhez a főmodulban.
A második almodul a 4 számjegyű, hét szegmenses kijelző. Ez egy meglehetősen egyszerű módja a 4 számjegyű, hét szegmenses kijelző bemutatásának. A kijelző a fő modul Clk -jára van állítva, ennek az almodulnak azonban van egy saját ClkDivider almodulja. A ClkDivider (1298 Hz -re állítva) arra szolgál, hogy felgyorsítsa a Hét szegmens óráját úgy, hogy minden számjegy egyszerre jelenjen meg (mivel egyszerre csak egy számjegy lehet bekapcsolva). A „számjegy” változó a képernyő foltjainak körbejárására szolgál, és minden számjegyhez hozzátartozik az alap 4 bites bemeneti kijelző feltételei, a 0 és 9 közötti számjegyek megjelenítésével, és semmi sem. A kijelző legtávolabbi bal számjegye semmihez nincs beállítva, mivel ebben a játékban nem használják.
A fő modul az állapotgépből áll. A folyamat négy állapota: Initial, SubAns, Dis és CheckEnd. Kezdeti állapotban, ha a SubmitBtn (a válasz ellenőrzésre való elküldésére szolgáló kapcsoló) értéke 1, akkor a gép a SubAns állapotba kerül. Bármikor az Rbtn (a gép alaphelyzetbe állítására szolgáló kapcsoló) beállítása „1”, majd a gép visszatér a kezdeti állapotba. Amikor a SubAns állapotban van, amikor a SubmitBtn = '0' ismét a Dis állapotba lép. Ha Dis állapotban van, ha a visszaszámlálás = 0 (A balra kanyarodások 0 -ra esnek), vagy ha az RSpotCount = 4 (azaz a játékos, mint a megfelelő színek a megfelelő helyeken), a gép a CheckEnd állapotba kerül. Ha ezek egyike sem fordul elő, akkor amikor a SubmitBtn = '1' ismét visszatér a SubAns állapotba, és lehetővé teszi egy újabb találgatást. Amikor a CheckEnd állapotban van, ez a játék vége, és az egyetlen kiút az, ha megnyomja a visszaállítást, és visszaküldi a kezdeti állapotba. Ez könnyen megtekinthető az állapotgép diagramon. Viselkedésileg a kezdeti állapot mindent visszaállít a kiindulási helyzetbe. A visszaszámlálás (jel, amely megmenti, hogy hány forduló van hátra a játékosból) 9 -re van állítva, az RSpotCount (jel, amely menti, hogy hány szín van a megfelelő helyen) értéke 0, RColorCount (jel, amely mennyi a színek, amiket sejtettél, hogy igazak, de rossz helyen vannak) 0 -ra van állítva, és a kis visszaszámlálás (a jel, amely végül visszaszámláláshoz van leképezve, amely a későbbi állapotokban minden fordulatot ténylegesen megváltoztat) 9 -re van állítva. A kezdeti állapotban a RandNum (pszuedo-random generált szám) négy különböző ellenőrzésre van felosztva (egy minden 3 bites színre), és a check1, check2, check3, check4 jelzésekbe kerül mentésre. Ezeket az ellenőrzéseket hasonlítja össze a feltételezésével, így bár az LFSR mindig a RandNum változását okozza minden ciklusban, a kezdeti állapotból való kilépés után az ellenőrzések változatlanok maradnak, lehetővé téve, hogy egy mentett érték összehasonlítsa a választ. Ez azt is jelenti, hogy amikor a gép alaphelyzetbe áll, a lejátszónak új értéket kell kitalálnia.
A SubmitAnswer State (SubAns) a visszaszámlálást engedélyezőt (jelzés „change”) „1” -re változtatja. Erre később szükség van, hogy a fordulókövetés működjön. Ezt követően az állapot összehasonlítja a lejátszók bemeneteit a kapcsolókról a fenti állapotban végzett ellenőrzésekkel. Az rs1, rs2, rs3, rs4 és az rc1, rc2, rc3, rc4 jelek egész számok, amelyek az If utasításoktól függően 1 vagy 0 értékre vannak állítva. Például, ha az 1. színű játékos tippje megegyezik a RandNum jelölőnégyzetével, akkor rs1 = 1, mivel ez azt jelenti, hogy a megfelelő szín a megfelelő helyen van. Ha az 1.
A Megjelenítési állapot (Dis) először a visszaszámlálást engedélyezőt keresi. Ha ez az „1”, akkor a kis visszaszámlálás 1 -gyel csökken (tehát az első körben 9 -ről 8 -ra stb.). Ellenkező esetben a fordulat nem változik. Függetlenül attól, hogy engedélyezve van -e, az összes rs érték felülről összeadódik, és hozzá van rendelve az RSpotCounter jelhez. Ezenkívül az összes rc értéket hozzáadja és hozzárendeli az RColorCounterhez. Végül a visszaszámláláshoz a kis visszaszámlálás értéke van hozzárendelve. Az RSpotCounter, az RColorCounter és a Countdown jeleket a folyamaton kívül 4 bites std_logic_vector-okká alakítja át, és a porttérképen keresztül a Hét szegmenses megjelenítési almodulba küldi. Így a kijelzőn a megfelelő dolgok jelennek meg, amíg új választ nem küld.
A CheckEnd állapot arra vonatkozik, hogy nyertél vagy vesztettél. Ha nyertél (mind a 4 szín a megfelelő helyen van, más néven RSpotCounter = 4), akkor a „GG” (technikailag 66) jelenik meg a Hét szegmensben annak jelzésére, hogy nyertél. Ha elveszett (a visszaszámlálás elérte a 0 -t), akkor a „GO” (technikailag 60 -as jelzéssel) jelenik meg a kijelzőn a Game Over esetében. Bármelyik eredmény esetén a reset kapcsoló bekapcsolása visszaállítja a gépet a kezdeti állapotba, hogy újra játszhasson.
A forráskód itt található.
3. lépés: Következtetés
A projekt befejezése sokat tanított nekünk a bonyolultabb áramkörök kiépítéséről. Kezdeti tervezésünk nem véges állapotú gép volt. Nehezen találtuk a hibakeresést, és többször átírtuk a kódot különböző módszerekkel (beleértve az FSM -et is). Az oktató javaslatára ragaszkodtunk az FSM megközelítéshez, és befejeztük a játékot. Megtanultuk, hogy sokkal hatékonyabb a kód hardveres megtervezése, mint hagyományos programozási megközelítéssel. A hét szegmenses kijelzővel kapcsolatban is számos kihívással szembesültünk. Nehéz volt elérni, hogy több számot jelenítsen meg „szellemkép” nélkül, és ehhez óraosztót kellett használnunk. Ha tovább fejlesztenénk ezt a projektet, színes LED -eket csatlakoztatnánk a Basys3 -hoz, hogy a felhasználó a színeket láthassa (mint a hagyományos játékban), nem pedig a színek számszerű ábrázolását. Végső soron jobban megértettük a komplex áramkör -tervezést, a valós életben alkalmazott alkalmazásokat és a hardver használatának kihívásait, nem pedig a tökéletes körülmények között végzett szimulációkat.
Ajánlott:
Puha játék Bluetooth kocka és Android játék fejlesztése az MIT App Inventor segítségével: 22 lépés (képekkel)
Puha játék Bluetooth kocka és Android játék fejlesztése az MIT App Inventor segítségével: A kockajátéknak különböző módszerei vannak 1) Hagyományos játék fa vagy sárgaréz kockákkal. 2) Játssz mobilon vagy PC -n a mobil vagy a PC által véletlenszerűen létrehozott kockával. fizikailag játszani a kockával, és mozgatni az érmét a mobilon vagy a számítógépen
Simon játék - szórakoztató játék!: 5 lépés
Simon Game - Szórakoztató játék !: Referencia: IttHosszú hétvége után valóban keményen kell próbálnia elvégezni az összes feladatot és munkát, amelyekért Ön felelős. Itt az ideje, hogy edzjük az agyunkat, nem? Az unalmas és értelmetlen játékok mellett van egy Simon Game nevű játék
Minion Cubecraft játék (zseblámpa játék): 4 lépés
Minion Cubecraft játék (A zseblámpa játéka): Régóta fáklyát akartam készíteni, hogy sötétben is használhassam, de az ötlet, hogy csak egy hengeres alakú tárgy legyen, csak be-ki kapcsolóval, ellenállt, hogy ne csináljam. Túl mainstream volt. Aztán egy napon a bátyám hozott egy kis NYÁK -ot
VHDL Basys3: Connect 4 Játék: 5 lépés
VHDL Basys3: Connect 4 játék: Bevezetés: Ez egy Connect 4 digitális logikai játék, amelyet VHDL -ben terveztek a Vivado szoftver segítségével és a Basys3 táblára programoztak. Ennek a projektnek a felépítése és kialakítása közbenső, de az újonnan belépők lemásolhatják a lépéseket és felépíthetik a digitális
A játék megvásárlása előtt ellenőrizheti, hogy fut -e egy játék a számítógépén .: 4 lépés
Hogyan lehet ellenőrizni, hogy a játék fut -e a számítógépen, mielőtt megvásárolná a játékot.: Nemrégiben beszereztem egy barátomtól a Call of Duty 4 -et (lehet, hogy ingyen), mert nem fut a számítógépén. Nos, a számítógépe meglehetősen új, és megdöbbentett, miért nem fut. Így pár órányi internetes keresés után találtam rá