Tartalomjegyzék:
- 1. lépés: Gyors részletek és anyagok
- 2. lépés: A hardver csatlakoztatása
- 3. lépés: Műszaki magyarázat: képernyő
- 4. lépés: Technikai magyarázat: A megjelenített információk megváltoztatása
- 5. lépés: Kód
Videó: VHDL Basys3: Connect 4 Játék: 5 lépés
2024 Szerző: John Day | [email protected]. Utoljára módosítva: 2024-01-30 09:41
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 programozva. 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 játékot.
A játék úgy működik, mint a Connect 4 játék. A játékosok a táblán található bal és jobb gombok segítségével mozgathatják a kurzort a képernyőn. Ha megnyomja a középső gombot a táblán, a játékos ráhelyezi a jelölőt az oszlopra, és ez lesz a következő játékos köre. Amint egy játékos nyer, a játékot vissza lehet állítani a táblán lévő fel gomb megnyomásával.
1. lépés: Gyors részletek és anyagok
Gyors műszaki adatok:
-
Háromféle PMOD -kapcsolatot használ a táblán (JA, JB, JC)
- 8 db (kivéve a Vcc és GND csapokat) minden PMOD csatlakozóhoz
- JA - Sorok ellenőrzése
- JB - Zöld oszlopok ellenőrzése
- JC - Vörös oszlopok ellenőrzése
-
A kijelző 960 Hz -en működik
Egyszerre csak 8 LED világít. A képernyő elég gyors órajel -frissítéssel frissül ahhoz, hogy azt az illúziót keltsük, hogy több mint 8 LED világít egy adott időpontban
- A gomb óra 5 Hz -en működik; Opcionálisan finomhangolható a VHDL kód szerkesztésével.
- A Darlington-tömbök belső ellenállása elegendő a LED-ek kiégésének megelőzésére
A játék a következő összetevők és eszközök felhasználásával készült:
- (1) Basys3 Board
- (2) Kétszínű LED mátrix 8x5:
- (2) ULN2803 - Darlington tranzisztor tömbök - Adatlap
- Dróttekercsek
- Jumper vezetékek
- Drótcsíkoló
- Kenyértáblák (a nagy négyzetnek elegendőnek kell lennie)
- Multiméter és tápegység (hibaelhárítás)
2. lépés: A hardver csatlakoztatása
Irányelvek:
A projekt vezetékezése rendkívül bonyolult lehet, kérjük, szánjon rá időt, és ellenőrizze, hogy az összes csatlakozás helyesen van -e beállítva.
A projekt két LED -képernyő használatát foglalja magában, de egy nagy képernyőt alkotnak. Ezt úgy érheti el, ha az összes sort ugyanahhoz a ponthoz kapcsolja. Mivel minden képernyő kétszínű, az egyik képernyő piros és zöld sorait is a másik képernyő piros és zöld sorához kell kötni. Ezzel az összes sort csak 8 csap segítségével tudjuk irányítani. A többi 16 érintkező a kijelző oszlopainak vezérlésére szolgál. A doboz 8 csapja közvetlenül áthidaló kábelekkel csatlakoztatható a pmod csatlakozókhoz. A Pmod kapcsolatok először az ULN2083A bemenetére mennek, és az ULN2083A kimenete közvetlenül a képernyő oszlopához csatlakozik. Mivel a kialakítás 8x8, egyes oszlopok fizikailag nem csatlakoznak.
- JA: Sorkapcsolatok: 1. sor - JA: 1 - 8. sor JA: 10 esetén.
- JA: Piros oszlopos kapcsolatok:
- JC: Zöld oszlop kapcsolatok
Kérjük, tekintse meg a közzétett képeket, hogy megtudja, mely sorok/oszlopok melyik csapok megfelelnek.
Megjegyzés: A tranzisztorok beépített ellenállással rendelkeznek, így a LED -ek nem igényelnek további ellenállást, hogy sorba kapcsolják őket.
3. lépés: Műszaki magyarázat: képernyő
A képernyő a látás állandóságán működik. A képernyő olyan gyorsan frissül, hogy az emberi szem nem érzékeli láthatóan, hogy néhány LED gyorsan ki- és bekapcsol. Valójában a kijelző óra lelassításával észreveheti a villogást.
A kijelző mind a nyolc sort bekapcsolja a tárolt adatoknak megfelelően, a kijelző pedig egy oszlopot. Ezután gyorsan átvált a nyolc sor következő adatbevitelére, és bekapcsolja a következő oszlopot - miközben az összes többi oszlop ki van kapcsolva. Ez a folyamat elég gyors órajelen folytatódik, hogy a LED villogása észrevehetetlenné váljon.
A kijelző adattárolása közvetlenül az architektúra után inicializálódik a VHDL fájlban a következő módon:
jel RedA, RedB, RedC, RedD, RedE, RedF, RedG, RedH: std_logic_vector (7 -től 0 -ig): = "00000000";
jel GreenA, GreenB, GreenC, GreenD, GreenE, GreenF, GreenG, GreenH: std_logic_vector (7 -től 0 -ig): = "00000000"; - Sor adatok oszloptól függően: ZÖLD
Az alábbiakban egy kis részlet a LED kijelző mátrixot vezérlő folyamatból.
- Folyamat, amely vezérli a LED kijelző mátrix kijelzőjét: folyamat (ColCLK) - 0 - 16 a 8X8 RED és a 8x8 GREEn mátrix változó frissítéséhez RowCount: egész tartomány 0 és 16 között: = 0; start if (emelkedő szél (ColCLK)), majd ha (RowCount = 0), akkor DORow <= RedA; - Soradatok a megfelelő DOCol oszlophoz <= "1000000000000000"; - Oszlopindító- Ismételje meg ezt a kódot egészen a „0000000000000001” értékig- Váltson RedB, RedC… GreenA, GreenB… GreenH értékre
A GreenH végén, közvetlenül a folyamat befejezése előtt, ez a részlet tartalmazza a RowCount nullára való visszaállítását.
ha (RowCount = 15), akkor - Indítsa újra a frissítést az A oszlopból RowCount: = 0; else RowCount: = Sorszám + 1; - Váltás az oszlopok végén, ha;
Most magyarázza el a kijelzési folyamat érzékenységi listájában szereplő órát. A Basys3 kártya belső órája 100 MHz -en működik. Számunkra ez túl gyors óra, ezért ezt az órát 960 Hz -es órára kell osztanunk a következő eljárással.
- Órafolyamat 960 Hz-enCLKDivider: folyamat (CLK) változó clkcount: egész tartomány 0-52083: = 0; start if (emelkedő szél (CLK)), majd clkcount: = clkcount + 1; ha (clkcount = 52083), akkor ColCLK <= nem (ColCLK); clkcount: = 0; fejezze be, ha; fejezze be, ha; folyamat befejezése;
4. lépés: Technikai magyarázat: A megjelenített információk megváltoztatása
A VHDL kódban a képernyőn megjelenő információkat vagy adatokat a kurzorfolyamat vezérli, amelynek érzékenységi listájában eltérő óra van. Ezt a kódot BtnCLK -nak hívták, ez az óra úgy lett kialakítva, hogy minimálisra csökkentse a gombok megnyomását. Ez benne van, hogy ha megnyom egy gombot, a felső sorban lévő kurzor nem mozog túl gyorsan az oszlopokon.
- Órafolyamat 5 Hz-en. Gomb CLC: folyamat (CLK) változó btnclkcount: egész tartomány 0 és 10000001 között: = 0; start if (emelkedő szél (CLK)), majd ha (btnclkcount = 10000000), akkor btnclkcount: = 0; BtnCLK <= nem (BtnCLK); else btnclkcount: = btnclkcount + 1; fejezze be, ha; fejezze be, ha; folyamat befejezése;
Ennek a folyamatnak a BtnCLK jelkimenetével most megmagyarázhatjuk a kurzor folyamatát. A kurzorfolyamatnak csak a BtnCLK szerepel az érzékenységi listájában, de a kódblokkban a gombok állapota ellenőrzésre kerül, és ez megváltoztatja a RedA, RedB… GreenH adatait. Itt található a kurzor kódrészlete, amely tartalmazza a visszaállítási blokkot és az első oszlop blokkját.
kurzor: folyamat (BtnCLK) változó OCursorCol: STD_LOGIC_VECTOR (2 -től 0 -ig): = "000"; - Az OCursorCol nyomon követi az előző NCursorCol oszlopváltozót: STD_LOGIC_VECTOR (2-től 0-ig): = "000"; -Az NCursorCol beállítja az új kurzor oszlop kezdetét-RESET feltétel (UP gomb)-A tábla törölve van, hogy a játék újrainduljon, ha (emelkedő_szél (BtnCLK)), majd ha (RST = '1'), akkor RedA <= "00000000"; PirosB <= "00000000"; PirosC <= "00000000"; PirosD <= "00000000"; Vörös <= "00000000"; PirosF <= "00000000"; PirosG <= "00000000"; PirosH <= "00000000"; ZöldA <= "00000000"; ZöldB <= "00000000"; ZöldC <= "00000000"; ZöldD <= "00000000"; ZöldE <= "00000000"; ZöldF <= "00000000"; ZöldG <= "00000000"; ZöldH, ha (Lbtn = '1'), akkor NCursorCol: = "111"; - H oszlop elsif (Rbtn = '1'), majd NCursorCol: = "001"; - B oszlop elsif (Cbtn = '1'), majd NCursorCol: = OCursorCol; - Az oszlop változatlan marad NTurnState <= nem (TurnState); - Kiváltja a következő játékos körét- Ellenőrzi az aktuális oszlopot alulról felfelé, és bekapcsolja az első LED-et, amely nem világít. A szín az aktuális játékos kurzor színétől függ. ck esetén 7 -től 1 hurokig, ha (RedA (0) = '1') és (RedA (ck) = '0') és (GreenA (ck) = '0'), akkor RedA (Ck) <= '1'; PirosA (0) <= '0'; KIJÁRAT; fejezze be, ha;
ha (GreenA (0) = '1') és (RedA (ck) = '0') és (GreenA (ck) = '0') akkor
GreenA (Ck) <= '1'; GreenA (0) - piros játékos GreenA (0) <= '0'; if (NCursorCol = OCursorCol), akkor - Ha semmit nem nyomtak meg RedA (0) <= '1'; elsif (NCursorCol = "111"), majd - Ha az Lbtn gombot megnyomta RedH (0) <= '1'; PirosA (0) <= '0'; elsif (NCursorCol = "001"), majd - Iff Rbtn megnyomta RedB (0) <= '1'; RedA (0) - zöld játékos RedA (0) <= '0'; ha (NCursorCol = OCursorCol), akkor GreenA (0) <= '1'; elsif (NCursorCol = "111"), majd GreenH (0) <= '1'; ZöldA (0) <= '0'; elsif (NCursorCol = "001"), majd GreenB (0) <= '1'; ZöldA (0) <= '0'; fejezze be, ha; vég tok;
Ne feledje, hogy az első eset -utasítás: OCursorCol (ami a régi kurzor oszlopot jelenti) a véges állapotú gép kezdete. A kijelző minden oszlopa saját állapotának tekintendő az FSM -ben. 8 oszlop van, így 3 bites bináris számkészletet használtak az egyes oszlopok állapotának azonosítására. Az, hogy az FSM hogyan mozog az állapotok között, attól függ, hogy melyik gombot nyomja meg. A fenti részletben, ha megnyomja a bal gombot, az FSM a "111" -re lép, ami a kijelző utolsó oszlopa lenne. Ha megnyomja a jobb gombot, az FSM "001" -re áll, ami a kijelző második oszlopa lesz.
Ha megnyomja a középső gombot, az FSM NEM lép új állapotba, hanem megváltoztatja a TurnState jelét, amely egy bites jelzés, amely jelzi, hogy melyik játékos köre van. Ezenkívül a középső gomb futtat egy kódblokkot, amely ellenőrzi, hogy van -e üres sor az alján egészen a tetejéig. Megpróbál jelölőt elhelyezni a legalsó, kitöltetlen sorban. Ne feledje, ez egy connect four játék.
A TurnState nevű beágyazott eset -állításban megváltoztatjuk a kurzor színét és azt, hogy az első sor melyik oszlopában szeretnénk módosítani az adatokat, hogy a megjelenítési folyamat tükrözze a változást.
Ezt az alapkódot megismételjük a fennmaradó hét esetben. Az FSM diagram segíthet megérteni, hogyan változnak az állapotok.
5. lépés: Kód
Ez a Connect 4 funkcionális kódja, amely összeállítható VHDL -ben a Vivado szoftver segítségével.
Van egy korlátozás is, amely lehetővé teszi a játék elindítását.
Blokkdiagramot mutatunk be, amely elmagyarázza, hogyan kapcsolódnak össze az egyes folyamatok bemenetei és kimenetei.
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
Mastermind játék VHDL -ben: 3 lépés
Mastermind Game VHDL -ben: Projektünkhöz elkészítettük a “ Mastermind ” játék 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 4 színű sorban különböző színű csapokat helyez el
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á