Tartalomjegyzék:

VHDL Basys3: Connect 4 Játék: 5 lépés
VHDL Basys3: Connect 4 Játék: 5 lépés

Videó: VHDL Basys3: Connect 4 Játék: 5 lépés

Videó: VHDL Basys3: Connect 4 Játék: 5 lépés
Videó: 4.FPGA FOR BEGINNERS- Combining logic gates in VHDL (DIGILENT Basys3) 2024, November
Anonim
VHDL Basys3: Connect 4 játék
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 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

A hardver csatlakoztatása
A hardver csatlakoztatása
A hardver csatlakoztatása
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

Technikai magyarázat: A megjelenített információk megváltoztatása
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

Kód
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: