Obsah:
- Krok 1: Rýchle detaily a materiály
- Krok 2: Pripojenie hardvéru
- Krok 3: Technické vysvetlenie: Obrazovka
- Krok 4: Technické vysvetlenie: Zmena zobrazovaných informácií
- Krok 5: Kód
Video: VHDL Basys3: Connect 4 hra: 5 krokov
2024 Autor: John Day | [email protected]. Naposledy zmenené: 2024-01-30 11:59
Úvod:
Jedná sa o digitálnu logickú hru Connect 4 navrhnutú vo VHDL pomocou softvéru Vivado a naprogramovanú na doske Basys3. Konštrukcia a dizajn tohto projektu je prechodná, ale nováčikovia môžu kroky skopírovať a postaviť digitálnu hru.
Hra funguje ako hra Connect 4. Hráči môžu pohybovať svojim kurzorom po obrazovke pomocou ľavého a pravého tlačidla, ktoré sa nachádza na doske. Stlačenie stredného tlačidla na doske spôsobí, že hráč umiestni na tento stĺpček svoju značku a potom bude na rade ďalší hráč. Akonáhle hráč vyhrá, hru je možné resetovať stlačením tlačidla hore na doske.
Krok 1: Rýchle detaily a materiály
Rýchle technické detaily:
-
Využíva tri sady pripojení PMOD na doske (JA, JB, JC)
- 8 pinov (okrem pinov Vcc a GND) použitých pre každý konektor PMOD
- JA - Kontrola riadkov
- JB - Ovládanie zelených stĺpcov
- JC - Ovládanie červených stĺpcov
-
Hodiny obrazovky pracujú pri 960 Hz
V danom čase svieti iba 8 diód LED. Obrazovka sa obnovuje dostatočne rýchlymi hodinami, čím vzniká ilúzia, že v danom čase svieti viac ako 8 diód LED
- Hodiny s tlačidlami fungujú pri 5 Hz; Voliteľne je možné pokutu vyladiť úpravou kódu VHDL.
- Vnútorný odpor Darlingtonových polí je dostatočný na to, aby sa zabránilo vyhoreniu LED
Hra je vytvorená pomocou nasledujúcich komponentov a nástrojov:
- (1) Doska Basys3
- (2) LED Matrix Bi-color 8x5:
- (2) ULN2803 - Darlingtonove tranzistorové polia - technický list
- Cievky z drôtu
- Prepojovacie vodiče
- Odizolovač drôtu
- Breadboards (Veľký štvorec by mal stačiť)
- Multimetr a napájanie (riešenie problémov)
Krok 2: Pripojenie hardvéru
Pokyny:
Zapojenie projektu môže byť veľmi komplikované. Nájdite si čas a overte, či sú všetky pripojenia správne nastavené súčasne.
Projekt zahŕňa použitie dvoch LED obrazoviek, ale sú kombinované do jednej veľkej obrazovky. To sa dá dosiahnuť prepojením všetkých riadkov k rovnakému bodu. Pretože je každá obrazovka dvojfarebná, červený a zelený riadok jednej obrazovky musí byť tiež spojený s červeným a zeleným radom druhej obrazovky. Vďaka tomu môžeme ovládať všetky riadky iba pomocou 8 kolíkov. Ďalších 16 pinov slúži na ovládanie stĺpcov zobrazenia. 8 pinov pre je možné pripojiť priamo pomocou prepojovacích káblov k konektorom pmod. Pripojenia Pmod najskôr prejdú na vstup ULN2083A a výstup ULN2083A sa pripojí priamo k stĺpcu na obrazovke. Pretože je konštrukcia 8x8, niektoré stĺpce nebudú fyzicky prepojené.
- JA: Riadkové spojenia: Riadok 1 až JA: 1 až riadok 8 pre JA: 10.
- JA: Pripojenia k červenému stĺpcu:
- JC: Pripojenia k zelenému stĺpcu
Informácie o tom, ktoré piny zodpovedajú ktorým riadkom/stĺpcom, nájdete na zverejnených obrázkoch.
Poznámka: Tranzistory majú vstavané odpory, takže diódy LED nevyžadujú ďalší odpor, ktorý je potrebné k nim pripojiť sériovo.
Krok 3: Technické vysvetlenie: Obrazovka
Obrazovka funguje na základe pretrvávania videnia. Obrazovka sa osviežuje tak rýchlo, že ľudské oko nemôže viditeľne rozpoznať, že niektoré LED diódy sa rýchlo vypínajú a zapínajú. V skutočnosti si spomalením hodín na displeji môžete všimnúť blikanie.
Displej zapne všetkých osem riadkov podľa údajov uložených pre tieto riadky a displej zapne jeden stĺpec. Potom sa rýchlo prepne na ďalší údaj pre osem riadkov a zapne ďalší stĺpec - pričom všetky ostatné stĺpce budú vypnuté. Tento proces pokračuje dostatočne vysokou rýchlosťou, že blikanie LED diódy sa stane nepozorovateľným.
Úložisko údajov pre displej sa inicializuje bezprostredne po architektúre v súbore VHDL nasledujúcim spôsobom:
signál RedA, RedB, RedC, RedD, RedE, RedF, RedG, RedH: std_logic_vector (7 až 0): = "00000000";
signál GreenA, GreenB, GreenC, GreenD, GreenE, GreenF, GreenG, GreenH: std_logic_vector (7 až 0): = "00000000"; - Údaje riadka v závislosti od stĺpca: ZELENÉ
Nasleduje malý úryvok z procesu, ktorý riadi maticu LED displeja.
- Proces, ktorý riadi maticový displej LED displeja: proces (ColCLK) - 0 - 16 na obnovenie maticovej premennej 8X8 RED a 8x8 GREEn RowCount: celočíselný rozsah 0 až 16: = 0; begin if (rise_edge (ColCLK)) then if (RowCount = 0) then DORow <= RedA; - Údaje riadka pre zodpovedajúci stĺpec DOCol <= "100000000000000000"; - Spúšťač stĺpcov- Opakujte tento kód až do „000000000000000001“- Zmeňte na RedB, RedC… GreenA, GreenB… GreenH
Na konci GreenH, tesne pred ukončením procesu, je zahrnutý tento útržok na resetovanie RowCount späť na nulu.
if (RowCount = 15) then - Reštartujte aktualizáciu zo stĺpca A RowCount: = 0; else RowCount: = RowCount + 1; - Preradenie na konci stĺpcov, ak;
Teraz vysvetlite hodiny, ktoré sú v zozname citlivosti procesu zobrazovania. Doska Basys3 má vnútorné hodiny pracujúce na 100 MHz. Na naše účely je to s hodinami príliš rýchle, takže ich budeme musieť rozdeliť na hodiny 960 Hz pomocou nasledujúceho postupu.
- Hodinový proces pracujúci na frekvencii 960 HzCLKDivider: variabilný klaster procesu (CLK): celočíselný rozsah 0 až 52083: = 0; begin if (rise_edge (CLK)) then clkcount: = clkcount + 1; if (clkcount = 52083) then ColCLK <= not (ColCLK); počet: = 0; koniec Ak; koniec Ak; konečný proces;
Krok 4: Technické vysvetlenie: Zmena zobrazovaných informácií
V kóde VHDL sú informácie alebo údaje, ktoré sa zobrazia na obrazovke, riadené procesom kurzora, ktorý má v zozname citlivosti odlišné hodiny. Tento kód sa nazýval BtnCLK, hodiny navrhnuté tak, aby minimalizovali debouching tlačidiel pri ich stlačení. Toto je zahrnuté, aby sa po stlačení tlačidla kurzor v hornom riadku nepohyboval po stĺpcoch veľmi rýchlo.
- Hodinový proces pracuje pri 5 Hz. Tlačidlo CLK: procesná (CLK) premenná btnclkcount: celočíselný rozsah 0 až 10000001: = 0; begin if (rise_edge (CLK)) then if (btnclkcount = 10000000) then btnclkcount: = 0; BtnCLK <= nie (BtnCLK); else btnclkcount: = btnclkcount + 1; koniec Ak; koniec Ak; konečný proces;
S výstupom signálu BtnCLK tohto procesu teraz môžeme vysvetliť proces kurzora. Proces kurzora má v zozname citlivosti iba BtnCLK, ale v bloku kódu sa kontroluje stav tlačidiel a to spôsobí zmenu údajov pre RedA, RedB… GreenH. Tu je úryvok kódu kurzora, ktorý obsahuje blok resetovania a blok prvého stĺpca.
kurzor: premenná procesu (BtnCLK) OCursorCol: STD_LOGIC_VECTOR (2 až 0): = "000"; - OCursorCol sleduje predchádzajúcu stĺpcovú premennú NCursorCol: STD_LOGIC_VECTOR (2 až 0): = "000"; -NCursorCol nastaví začiatok nového stĺpca kurzora-podmienka RESET (tlačidlo UP)-doska sa vymaže, aby sa hra mohla reštartovať, ak (rise_edge (BtnCLK)) then if (RST = '1') then RedA <= "00000000"; RedB <= "00000000"; RedC <= "00000000"; RedD <= "00000000"; RedE <= "00000000"; RedF <= "00000000"; RedG <= "00000000"; RedH <= "00000000"; GreenA <= "00000000"; GreenB <= "00000000"; GreenC <= "00000000"; GreenD <= "00000000"; ZelenáE <= "00000000"; GreenF <= "00000000"; GreenG <= "00000000"; GreenH if (Lbtn = '1') then NCursorCol: = "111"; - Stĺpec H elsif (Rbtn = '1') potom NCursorCol: = "001"; - Stĺpec B elsif (Cbtn = '1') potom NCursorCol: = OCursorCol; - Stĺpec zostáva rovnaký NTurnState <= not (TurnState); - Spustí ťah ďalšieho hráča- Skontroluje aktuálny stĺpec zdola nahor a zapne prvú LED, ktorá nie je zapnutá. Farba závisí od farby kurzora aktuálneho hráča. pre ck in 7 až 1 slučku, ak (RedA (0) = '1') a (RedA (ck) = '0') a (GreenA (ck) = '0') potom RedA (Ck) <= '1'; RedA (0) <= '0'; VÝCHOD; koniec Ak;
ak (GreenA (0) = '1') a (RedA (ck) = '0') a (GreenA (ck) = '0') then
GreenA (Ck) <= '1'; GreenA (0) - Červený hráč GreenA (0) <= '0'; if (NCursorCol = OCursorCol) then - Ak nebolo stlačené nič RedA (0) <= '1'; elsif (NCursorCol = "111") potom - Ak bol stlačený Lbtn RedH (0) <= '1'; RedA (0) <= '0'; elsif (NCursorCol = "001") potom - Iff Rbtn bolo stlačené RedB (0) <= '1'; RedA (0) - Zelený hráč RedA (0) <= '0'; ak (NCursorCol = OCursorCol), potom GreenA (0) <= '1'; elsif (NCursorCol = "111") potom GreenH (0) <= '1'; GreenA (0) <= '0'; elsif (NCursorCol = "001") potom GreenB (0) <= '1'; GreenA (0) <= '0'; koniec Ak; koncový prípad;
Všimnite si toho, prvé vyhlásenie o páde s názvom: OCursorCol (čo znamená Old Cursor Column) je začiatok automatu konečných stavov. Každý stĺpec displeja je v FSM považovaný za svoj vlastný stav. Existuje 8 stĺpcov, takže na identifikáciu každého stĺpca ako stavu bola použitá sada 3-bitových binárnych čísel. Ako sa FSM pohybuje medzi stavmi, závisí od stlačeného tlačidla. Ak vo vyššie uvedenom úryvku stlačíte ľavé tlačidlo, FSM sa presunie na „111“, čo by bol posledný stĺpec displeja. Ak stlačíte pravé tlačidlo, FSM sa presunie na „001“, čo by bol druhý stĺpec displeja.
Ak stlačíte stredné tlačidlo, FSM sa NEPREHNE do nového stavu, ale namiesto toho spustí zmenu signálu TurnState, čo je jednobitový signál na zaznamenanie, na ktorom hráčovi je rad. Prostredné tlačidlo navyše spustí blok kódu, ktorý skontroluje, či je v spodnej časti úplne prázdny riadok až úplne hore. Pokúsi sa umiestniť značku do najnižšieho, nevyplneného radu. Nezabudnite, že ide o hru connect four.
Vo vnorenom prípade s názvom: TurnState zmeníme, aká je farba kurzora a pre ktorý stĺpec v prvom riadku chceme zmeniť údaje, aby proces zobrazovania mohol odrážať zmenu.
Tento základný kód opakujeme pre zvyšných sedem prípadov. Diagram FSM môže byť užitočný na pochopenie toho, ako sa stavy menia.
Krok 5: Kód
Toto je funkčný kód pre Connect 4, ktorý je možné zostaviť vo VHDL pomocou softvéru Vivado.
K dispozícii je tiež obmedzenie, ktoré vám umožní uviesť hru do prevádzky.
Poskytli sme blokový diagram, ktorý vysvetľuje, ako sú prepojené vstupy a výstupy každého procesu.
Odporúča:
Hra Crack the Code, logická hra založená na Arduine: 4 kroky (s obrázkami)
Hra Crack the Code, logická škatuľka založená na Arduine: V tomto návode vám ukážem, ako si vytvoriť vlastnú crackovú hru, v ktorej pomocou otočného voliča uhádnete náhodne vygenerovaný kód do sejfu. Na prednej strane trezoru je 8 LED diód, ktoré vám informujú, koľko z
Aruduino LED hra Rýchle kliknutie Hra pre dvoch hráčov: 8 krokov
Aruduino LED hra Rýchle kliknutie Hra pre dvoch hráčov: Tento projekt je inšpirovaný @HassonAlkeim. Ak ste ochotní sa podrobne pozrieť, tu je odkaz, ktorý si môžete pozrieť https://www.instructables.com/id/Arduino-Two-Player-Fast-Button-Clicking-Game/. Táto hra je vylepšenou verziou hry Alkeim's. Jedná sa o
Základné stopky používajúce dosku VHDL a Basys3: 9 krokov
Základné stopky pomocou dosky VHDL a Basys3: Vitajte v návode, ako zostaviť stopky pomocou základnej dosky VHDL a Basys 3. Sme radi, že sa s vami môžeme podeliť o náš projekt! Toto bol konečný projekt pre kurz CPE 133 (digitálny dizajn) na Cal Poly, SLO na jeseň 2016. Projekt, ktorý sme vytvorili
Hra Mastermind vo VHDL: 3 kroky
Hra Mastermind vo VHDL: Pre náš projekt sme vytvorili “ Mastermind ” hra vo VHDL, ktorá sa má hrať na doske Basys3. Mastermind je hra na lámanie kódu, ktorá sa tradične hrá s kolíkmi a hracou doskou. Hráč jeden umiestni kolíky rôznych farieb do radu 4
Digitálny zvukový syntetizátor Basys3 FPGA: 5 krokov
Basys3 FPGA digitálny zvukový syntetizátor: Tento digitálny sínusový klávesový syntetizátor bude preberať užívateľské vstupy prostredníctvom série okamžitých prepínačov rozložených ako klávesnica a reprodukovať zvukovú vlnu cez reproduktor. Na základe vstupov používateľov zariadenie vygeneruje sínusové vlny rôznych frekvencií