Satura rādītājs:
- 1. darbība: ātra informācija un materiāli
- 2. darbība. Aparatūras pievienošana
- 3. darbība. Tehniskais skaidrojums: ekrāns
- 4. darbība. Tehniskais skaidrojums: parādītās informācijas maiņa
- 5. darbība: kods
Video: VHDL Basys3: Connect 4 Spēle: 5 soļi
2024 Autors: John Day | [email protected]. Pēdējoreiz modificēts: 2024-01-30 10:56
Ievads:
Šī ir Connect 4 digitālā loģikas spēle, kas izstrādāta VHDL, izmantojot programmatūru Vivado un ieprogrammēta Basys3 panelī. Šī projekta uzbūve un dizains ir starpposma, bet jaunpienācēji var kopēt soļus un veidot digitālo spēli.
Spēle darbojas tāpat kā Connect 4 spēle. Spēlētāji var pārvietot kursoru pa ekrānu, izmantojot kreiso un labo pogu, kas atrodas uz tāfeles. Nospiežot vidējo pogu uz tāfeles, spēlētājs novieto marķieri uz šīs kolonnas, un tad tā būs nākamā spēlētāja kārta. Kad spēlētājs uzvar, spēli var atiestatīt, nospiežot uz tāfeles augšup esošo pogu.
1. darbība: ātra informācija un materiāli
Ātra tehniskā informācija:
-
Plātnē tiek izmantoti trīs PMOD savienojumu komplekti (JA, JB, JC)
- 8 tapas (izņemot Vcc un GND tapas), ko izmanto katram PMOD savienotājam
- JA - Rindu kontrole
- JB - zaļo kolonnu kontrole
- JC - sarkano kolonnu kontrole
-
Ekrāna pulkstenis darbojas 960 Hz frekvencē
Vienā reizē iedegas tikai 8 gaismas diodes. Ekrāns tiek atsvaidzināts ar pietiekami ātru pulksteņa ātrumu, lai radītu ilūziju, ka noteiktā laikā iedegas vairāk nekā 8 gaismas diodes
- Pogas pulkstenis darbojas pie 5 Hz; Pēc izvēles to var noregulēt, rediģējot VHDL kodu.
- Dārlingtonas masīvu iekšējā pretestība ir pietiekama, lai novērstu LED izdegšanu
Spēle ir veidota, izmantojot šādus komponentus un rīkus:
- (1) Basys3 padome
- (2) LED matrica divkrāsu 8x5:
- (2) ULN2803 - Dārlingtonas tranzistoru masīvi - datu lapa
- Stiepļu spoles
- Jumper vadi
- Stiepļu noņēmējs
- Maizes dēļi (pietiek ar lielu laukumu)
- Multimetrs un barošanas avots (problēmu novēršana)
2. darbība. Aparatūras pievienošana
Vadlīnijas:
Projekta elektroinstalācija var būt ļoti sarežģīta, lūdzu, veltiet laiku un pārbaudiet, vai visi savienojumi ir pareizi pa vienam.
Projekts ietver divu LED ekrānu izmantošanu, bet tos apvieno, veidojot vienu lielu ekrānu. To var izdarīt, savienojot visas rindas ar vienu punktu. Tā kā katrs ekrāns ir divkrāsains, viena ekrāna sarkanās un zaļās rindas ir arī jāpiesaista otra ekrāna sarkanajām un zaļajām rindām. To darot, mēs varam kontrolēt visas rindas tikai ar 8 tapām. Pārējās 16 tapas tiek izmantotas, lai kontrolētu displeja kolonnas. 8 tapas kārbai var savienot tieši, izmantojot savienojuma kabeļus, ar pmod savienotājiem. Pmod savienojumi vispirms tiek ievadīti ULN2083A ievadē, un ULN2083A izeja ir savienota tieši ar ekrāna kolonnu. Tā kā dizains ir 8x8, dažas kolonnas fiziski netiks savienotas.
- JA: rindu savienojumi: 1. rinda līdz JA: 1 līdz 8. rinda JA: 10.
- JA: Sarkanās kolonnas savienojumi:
- JC: Zaļās kolonnas savienojumi
Lūdzu, skatiet publicētos attēlus, lai uzzinātu, kuras tapas atbilst kādām rindām/kolonnām.
Piezīme. Tranzistoriem ir iebūvētas pretestības, tāpēc gaismas diodēm nav nepieciešama papildu pretestība, lai tās sērijveidā savienotu.
3. darbība. Tehniskais skaidrojums: ekrāns
Ekrāns darbojas ar redzes noturību. Ekrāns tiek atsvaidzināts tik ātri, ka cilvēka acs nevar pamanīt, ka dažas gaismas diodes tiek ātri izslēgtas un ieslēgtas. Patiesībā, palēninot displeja pulksteni, var pamanīt mirgošanu.
Displejs ieslēdz visas astoņas rindas atbilstoši šīm rindām saglabātajiem datiem, un displejs ieslēdz vienu kolonnu. Pēc tam tas ātri pāriet uz nākamo astoņu rindu datu ievadi un ieslēdz nākamo kolonnu, vienlaikus izslēdzot visas pārējās kolonnas. Šis process turpinās ar pietiekami ātru pulksteņa ātrumu, lai gaismas diodes mirgošana kļūtu nepamanāma.
Displeja datu glabāšana tiek inicializēta tūlīt pēc arhitektūras VHDL failā šādā veidā:
signāls RedA, RedB, RedC, RedD, RedE, RedF, RedG, RedH: std_logic_vector (7 līdz 0): = "00000000";
signāls GreenA, GreenB, GreenC, GreenD, GreenE, GreenF, GreenG, GreenH: std_logic_vector (7 līdz 0): = "00000000"; - Rindas dati atkarībā no kolonnas: ZAĻA
Tālāk neliels fragments no procesa, kas kontrolē LED displeja matricu.
- Process, kas kontrolē LED displeja matricas displeju: process (ColCLK) - 0 - 16, lai atsvaidzinātu gan 8X8 RED, gan 8x8 GREEn matricas mainīgo RowCount: veselu skaitļu diapazons no 0 līdz 16: = 0; sākt, ja (pieaugošā mala (ColCLK)), tad, ja (RowCount = 0), tad DORow <= RedA; - Rindas dati attiecīgajai slejai DOCol <= "1000000000000000"; - Kolonnas aktivizētājs- Atkārtojiet šo kodu līdz “0000000000000001”- Mainiet uz RedB, RedC… GreenA, GreenB… GreenH
GreenH beigās, tieši pirms procesa beigām, šis fragments ir iekļauts, lai atiestatītu RowCount uz nulli.
ja (RowCount = 15), tad - Restartējiet atsvaidzināšanu no kolonnas A RowCount: = 0; cits RowCount: = RowCount + 1; - pārslēgties pa kolonnām beidzas, ja;
Tagad, lai izskaidrotu pulksteni, kas ir displeja procesa jutīguma sarakstā. Plātnei Basys3 ir iekšējais pulkstenis, kas darbojas 100 MHz. Mūsu nolūkos tas ir pārāk ātrs pulkstenis, tāpēc mums būs jāsadala šis pulkstenis līdz 960 Hz pulkstenim, izmantojot šādu procesu.
- Pulksteņa process, kas darbojas pie 960 HzCLKDivider: process (CLK) mainīgais clkcount: veselu skaitļu diapazons no 0 līdz 52083: = 0; sākt, ja (pieaugošā mala (CLK)), tad clkcount: = clkcount + 1; ja (clkcount = 52083), tad ColCLK <= nav (ColCLK); clkcount: = 0; beigt, ja; beigt, ja; beigu process;
4. darbība. Tehniskais skaidrojums: parādītās informācijas maiņa
VHDL kodā informāciju vai datus, kas tiks parādīti ekrānā, kontrolē kursora process, kura jutīguma sarakstā ir atšķirīgs pulkstenis. Šo kodu sauca par BtnCLK - pulksteni, kas paredzēts, lai samazinātu pogu atkausēšanu, kad tās tiek nospiestas. Tas ir iekļauts, lai, nospiežot pogu, kursors augšējā rindā nepārvietotos ļoti ātri pa kolonnām.
- Pulksteņa process darbojas pie 5 Hz. ButtonCLK: process (CLK) mainīgais btnclkcount: veselu skaitļu diapazons no 0 līdz 10000001: = 0; sākt, ja (pieaugošā mala (CLK)), tad ja (btnclkcount = 10000000), tad btnclkcount: = 0; BtnCLK <= nav (BtnCLK); cits btnclkcount: = btnclkcount + 1; beigt, ja; beigt, ja; beigu process;
Izmantojot šī procesa BtnCLK signāla izvadi, mēs tagad varam izskaidrot kursora procesu. Kursora procesa jutīguma sarakstā ir tikai BtnCLK, bet koda blokā tiek pārbaudīts pogu stāvoklis, un tāpēc RedA, RedB… GreenH dati mainīsies. Šeit ir kursora koda fragments, kas ietver atiestatīšanas bloku un pirmās kolonnas bloku.
kursors: process (BtnCLK) mainīgais OCursorCol: STD_LOGIC_VECTOR (2 līdz 0): = "000"; - OCursorCol izseko iepriekšējās kolonnas mainīgo NCursorCol: STD_LOGIC_VECTOR (2 līdz 0): = "000"; -NCursorCol nosaka jaunu kursora kolonnas sākumu-ATiestatīt nosacījumu (poga UP)-Padome ir notīrīta, lai spēle varētu atsākties, ja (pieaugošā mala (BtnCLK)), tad, ja (RST = '1'), tad RedA <= "00000000"; SarkansB <= "00000000"; SarkansC <= "00000000"; SarkansD <= "00000000"; Sarkans <= "00000000"; SarkansF <= "00000000"; SarkansG <= "00000000"; SarkansH <= "00000000"; GreenA <= "00000000"; ZaļšB <= "00000000"; GreenC <= "00000000"; ZaļšD <= "00000000"; Zaļš <= "00000000"; ZaļšF <= "00000000"; GreenG <= "00000000"; GreenH ja (Lbtn = '1'), tad NCursorCol: = "111"; - H sleja elsif (Rbtn = '1'), tad NCursorCol: = "001"; - B sleja elsif (Cbtn = '1'), tad NCursorCol: = OCursorCol; - Kolonna paliek nemainīga NTurnState <= nav (TurnState); - Aktivizē nākamā spēlētāja gājienu- Pārbauda pašreizējo kolonnu no apakšas uz augšu un ieslēdz pirmo gaismas diodi, kas nedeg. Krāsa ir atkarīga no pašreizējā spēlētāja kursora krāsas. ck 7 līdz 1 cilpai, ja (RedA (0) = '1') un (RedA (ck) = '0') un (GreenA (ck) = '0'), tad RedA (Ck) <= '1'; SarkansA (0) <= '0'; IZEJA; beigt, ja;
ja (GreenA (0) = '1') un (RedA (ck) = '0') un (GreenA (ck) = '0'), tad
GreenA (Ck) <= '1'; GreenA (0) - sarkanais spēlētājs GreenA (0) <= '0'; ja (NCursorCol = OCursorCol) tad - Ja nekas netika nospiests RedA (0) <= '1'; elsif (NCursorCol = "111") tad - Ja Lbtn tika nospiests RedH (0) <= '1'; SarkansA (0) <= '0'; elsif (NCursorCol = "001") tad - Iff Rbtn tika nospiests RedB (0) <= '1'; RedA (0) - Green Player RedA (0) <= '0'; ja (NCursorCol = OCursorCol), tad GreenA (0) <= '1'; elsif (NCursorCol = "111"), tad GreenH (0) <= '1'; GreenA (0) <= '0'; elsif (NCursorCol = "001"), tad GreenB (0) <= '1'; GreenA (0) <= '0'; beigt, ja; beigu korpuss;
Ņemiet vērā, ka pirmais gadījuma paziņojums ar nosaukumu: OCursorCol (kas apzīmē veco kursoru kolonnu) ir galīgā stāvokļa mašīnas sākums. Katra displeja kolonna MFV tiek uzskatīta par savu stāvokli. Ir 8 kolonnas, tāpēc, lai identificētu katru kolonnu kā stāvokli, tika izmantota 3 bitu bināro skaitļu kopa. Tas, kā MFV pārvietojas starp stāvokļiem, ir atkarīgs no nospiestās pogas. Iepriekš redzamajā fragmentā, nospiežot kreiso pogu, MFV pāriet uz "111", kas būtu displeja pēdējā kolonna. Ja tiek nospiesta labā poga, MFV pāriet uz "001", kas būtu displeja otrā kolonna.
Ja tiek nospiesta vidējā poga, MFV NAV pāriet jaunā stāvoklī, bet tā vietā izraisīs TurnState signāla izmaiņas, kas ir viena bita signāls, lai atzīmētu, kura spēlētāja kārta ir. Turklāt vidējā poga darbinās koda bloku, kas pārbauda, vai pašā apakšā līdz augšai ir tukša rinda. Tas mēģinās ievietot marķieri zemākajā, neaizpildītajā rindā. Atcerieties, ka šī ir spēle četri.
Ligzdotajā gadījuma paziņojumā ar nosaukumu: TurnState, mēs mainām kursora krāsu un pirmās slejas kolonnu, kurā vēlamies mainīt datus, lai displeja process varētu atspoguļot izmaiņas.
Mēs atkārtojam šo pamatkodu atlikušajiem septiņiem gadījumiem. MFV diagramma var būt noderīga, lai saprastu, kā mainās stāvokļi.
5. darbība: kods
Šis ir Connect 4 funkcionālais kods, ko var apkopot VHDL, izmantojot programmatūru Vivado.
Tiek nodrošināts arī ierobežojums, lai ļautu jums sākt spēli.
Mēs sniedzām blokshēmu, kurā paskaidrots, kā katra procesa ieejas un izejas ir savstarpēji saistītas.
Ieteicams:
Arduino Connect vairākas I2C ierīces: 6 soļi
Arduino Connect vairākas I2C ierīces: šajā apmācībā mēs uzzināsim, kā arduino savienot vairākus moduļus ar I2C savienojumu. Noskatieties video! Mūsu gadījumā kā piemēru mēs izmantosim 4 OLED displejus, bet jūs varat izmantot citus I2C moduļus/ sensori, ja vēlaties. Piezīme: 4 OLED displeji
Simona spēle - jautra spēle!: 5 soļi
Simona spēle - jautra spēle !: Atsauce: šeitPēc garas nedēļas nogales jums patiešām ir jācenšas izpildīt visus uzdevumus un darbu, par kuru esat atbildīgs. Mums ir pienācis laiks trenēt smadzenes, vai ne? Bez šīm garlaicīgajām un bezjēdzīgajām spēlēm ir arī spēle ar nosaukumu Simona spēle
SelfCAD Connect Surface ar malu un virsotni: 4 soļi
SelfCAD Connect Surface ar Edge un Vertex: Šajā Selfcad apmācībā jūs varat uzzināt, kā virsotni savienot virsmas modelī. Tālāk mēs to varam apvienot vienā objektā. Pārbaudiet to
Pamata hronometrs, izmantojot VHDL un Basys3 Board: 9 soļi
Pamata hronometrs, izmantojot VHDL un Basys3 Board: Laipni lūdzam pamācībā, kā izveidot hronometru, izmantojot pamata VHDL un Basys 3 plates. Mēs esam priecīgi dalīties ar jums mūsu projektā! Šis bija pēdējais projekts kursam CPE 133 (digitālais dizains) Cal Poly, SLO 2016. gada rudenī. Projekts, kuru mēs veidojam
Mastermind spēle VHDL: 3 soļi
Mastermind spēle VHDL: savam projektam mēs izveidojām “ Mastermind “ spēle VHDL, kas jāspēlē uz Basys3 tāfeles. Mastermind ir koda laušanas spēle, ko tradicionāli spēlē ar mietiņiem un spēļu galdu. Pirmais spēlētājs ievieto dažādu krāsu mietiņus 4 rindās