Sisukord:
- Samm: Kiired üksikasjad ja materjalid
- Samm: riistvara ühendamine
- 3. samm: tehniline selgitus: ekraan
- 4. samm: tehniline selgitus: kuvatava teabe muutmine
- Samm: kood
Video: VHDL Basys3: Connect 4 Mäng: 5 sammu
2024 Autor: John Day | [email protected]. Viimati modifitseeritud: 2024-01-30 08:48
Sissejuhatus:
See on Connect 4 digitaalne loogikamäng, mis on loodud VHDL -is, kasutades tarkvara Vivado ja programmeeritud Basys3 -tahvlile. Selle projekti ülesehitus ja disain on vahepealsed, kuid uustulnukad saavad samme kopeerida ja digitaalse mängu üles ehitada.
Mäng toimib nagu Connect 4 mäng. Mängijad saavad kursorit üle ekraani liigutada, kasutades tahvlilt leitud vasakut ja paremat nuppu. Laua keskmise nupu vajutamine paneb mängija oma märgi sellele veerule ja siis saab järgmise mängija kord. Kui mängija võidab, saab mängu lähtestada, vajutades tahvli ülesnuppu.
Samm: Kiired üksikasjad ja materjalid
Kiired tehnilised üksikasjad:
-
Kasutab tahvlil kolme komplekti PMOD -ühendusi (JA, JB, JC)
- 8 tihvti (välja arvatud Vcc ja GND tihvtid), mida kasutatakse iga PMOD -pistiku jaoks
- JA - ridade kontroll
- JB - roheliste veergude juhtimine
- JC - punaste veergude juhtimine
-
Ekraani kell töötab sagedusel 960 Hz
Korraga põleb ainult 8 LED -i. Ekraan värskendatakse piisavalt kiirel taktsagedusel, et tekiks illusioon, et antud ajal põleb rohkem kui 8 LED -i
- Nupukell töötab sagedusel 5 Hz; Soovi korral saab seda trahvida VHDL -koodi redigeerimisega.
- Darlingtoni masside sisemine takistus on LED-i läbipõlemise vältimiseks piisav
Mäng on üles ehitatud järgmiste komponentide ja tööriistade abil:
- (1) Basys3 juhatus
- (2) LED-maatriks kahevärviline 8x5:
- (2) ULN2803 - Darlingtoni transistorimassiivid - andmeleht
- Traadi poolid
- Jumper juhtmed
- Traadi eemaldaja
- Leivalauad (suurest ruudust peaks piisama)
- Multimeeter ja toiteallikas (tõrkeotsing)
Samm: riistvara ühendamine
Juhised:
Projekti juhtmestik võib olla äärmiselt keerukas, võtke aega ja kontrollige, kas kõik ühendused on ükshaaval õiged.
Projekt hõlmab kahe LED -ekraani kasutamist, kuid need moodustavad ühe suure ekraani. Seda saab teha, ühendades kõik read sama punktiga. Kuna iga ekraan on kahevärviline, tuleb ühe ekraani punane ja roheline rida siduda ka teise ekraani punase ja rohelise reaga. Seda tehes saame kontrollida kõiki ridu ainult 8 tihvtiga. Ülejäänud 16 tihvti kasutatakse ekraani veergude juhtimiseks. Kaheksa tihvti saab ühendada otse hüppajakaablite kaudu pmod -pistikutega. Pmod -ühendused lähevad kõigepealt ULN2083A sisendisse ja ULN2083A väljund on ühendatud otse ekraanil oleva veeruga. Kuna disain on 8x8, ei ole mõned veerud füüsiliselt ühendatud.
- JA: ridaühendused: rida 1 kuni JA: 1 kuni rida 8 JA: 10 jaoks.
- JA: punase veeru ühendused:
- JC: roheliste veergude ühendused
Palun vaadake postitatud pilte, et teada saada, millised tihvtid vastavad ridadele/veergudele.
Märkus: transistoridel on sisseehitatud takistused, seega ei vaja LED -id nendega järjestikku ühendamiseks täiendavat takistust.
3. samm: tehniline selgitus: ekraan
Ekraan töötab nägemise püsivuse järgi. Ekraan värskendab nii kiiresti, et inimsilm ei suuda nähtavalt tuvastada, et mõned valgusdioodid lülitatakse kiiresti välja ja sisse. Tegelikult võib ekraanikella aeglustades märgata vilkumist.
Ekraan lülitab sisse kõik kaheksa rida vastavalt nende ridade jaoks salvestatud andmetele ja ekraan lülitab sisse ühe veeru. Seejärel läheb see kiiresti üle järgmisele kaheksa rea andmesisestusele ja lülitab järgmise veeru sisse - samal ajal kui kõik muud veerud on välja lülitatud. See protsess jätkub piisavalt kiirel taktsagedusel, et LED -i vilkumine muutub märkamatuks.
Ekraani andmete salvestamine lähtestatakse kohe pärast arhitektuuri VHDL -failis järgmisel viisil.
signaal RedA, RedB, RedC, RedD, RedE, RedF, RedG, RedH: std_logic_vector (7 kuni 0): = "00000000";
signaal GreenA, GreenB, GreenC, GreenD, GreenE, GreenF, GreenG, GreenH: std_logic_vector (7 kuni 0): = "00000000"; - Rida andmed sõltuvalt veerust: ROHELINE
Järgnev väike katkend LED -ekraanimaatriksit juhtivast protsessist.
- Protsess, mis juhib LED -ekraani maatriksi kuva: protsess (ColCLK) - 0 - 16, et värskendada nii 8X8 RED kui ka 8x8 GREEn maatriksi muutujat RowCount: täisarvude vahemik 0 kuni 16: = 0; alusta kui (tõusev serv (ColCLK)), siis kui (RowCount = 0), siis DORow <= RedA; - rea andmed vastava veeru DOCol <= "1000000000000000" kohta; - Veeru käivitaja- korrake seda koodi lõpuni "0000000000000001"- Muutke RedB, RedC… GreenA, GreenB… GreenH
GreenH lõpus, vahetult enne protsessi lõppu, lisatakse see jupp RowCount'i nullimiseks.
kui (RowCount = 15), siis - taaskäivitage värskendus veerust A RowCount: = 0; else RowCount: = RowCount + 1; - Tõsta veerud läbi, kui;
Nüüd selgitame kella, mis on kuvamisprotsessi tundlikkuse loendis. Basys3 plaadil on sisemine kell, mis töötab sagedusel 100 MHz. Meie jaoks on see liiga kiire kell, nii et peame selle kella jagama 960 Hz kellaks, kasutades järgmist protsessi.
- Kellaprotsess töötab sagedusel 960 Hz. CLKDivider: protsessi (CLK) muutuja clkcount: täisarvude vahemik 0 kuni 52083: = 0; alusta kui (tõusev serv (CLK)), siis clkcount: = clkcount + 1; kui (clkcount = 52083), siis ColCLK <= ei (ColCLK); clkcount: = 0; lõpetada, kui; lõpetada, kui; protsessi lõpetamine;
4. samm: tehniline selgitus: kuvatava teabe muutmine
VHDL -koodis juhib ekraanile kuvatavat teavet või andmeid kursoriprotsess, mille tundlikkuse loendis on erinev kell. Seda koodi nimetati BtnCLK -ks, kellaks, mille eesmärk on minimeerida nuppude eemaldamist nende vajutamisel. See on lisatud nii, et kui nuppu vajutada, ei liigu ülemise rea kursor väga kiiresti veergude vahel.
- Kellaprotsess töötab sagedusel 5 Hz. NuppCLK: protsessi (CLK) muutuja btnclkcount: täisarvude vahemik 0 kuni 10000001: = 0; start if (tõusev serv (CLK)), siis kui (btnclkcount = 10000000), siis btnclkcount: = 0; BtnCLK <= ei (BtnCLK); else btnclkcount: = btnclkcount + 1; lõpetada, kui; lõpetada, kui; protsessi lõpetamine;
Selle protsessi BtnCLK signaali väljundiga saame nüüd kursoriprotsessi selgitada. Kursoriprotsessi tundlikkuse loendis on ainult BtnCLK, kuid koodiplokis kontrollitakse nuppude olekut ja see muudab RedA, RedB … GreenH andmed. Siin on kursori koodilõik, mis sisaldab lähtestamise plokki ja esimese veeru plokki.
kursor: protsess (BtnCLK) muutuja OCursorCol: STD_LOGIC_VECTOR (2 kuni 0): = "000"; - OCursorCol jälgib eelmise veeru muutujat NCursorCol: STD_LOGIC_VECTOR (2 kuni 0): = "000"; -NCursorCol määrab uue kursori veeru alguse-RESET tingimus (ülesnupp)-tahvel tühjendatakse mängu taaskäivitamiseks, kui (tõusev serv (BtnCLK)), siis kui (RST = '1'), siis RedA <= "00000000"; PunaneB <= "00000000"; PunaneC <= "00000000"; PunaneD <= "00000000"; Punane <= "00000000"; PunaneF <= "00000000"; PunaneG <= "00000000"; Punane H <= "00000000"; RohelineA <= "00000000"; RohelineB <= "00000000"; RohelineC <= "00000000"; RohelineD <= "00000000"; RohelineE <= "00000000"; RohelineF <= "00000000"; RohelineG <= "00000000"; GreenH kui (Lbtn = '1'), siis NCursorCol: = "111"; - veerg H elsif (Rbtn = '1'), seejärel NCursorCol: = "001"; - veerg B elsif (Cbtn = '1'), seejärel NCursorCol: = OCursorCol; - Veerg jääb samaks NTurnState <= ei (TurnState); - Käivitab järgmise mängija käigu- kontrollib praegust veergu alt üles ja lülitab sisse esimese LED-i, mis ei põle. Värv sõltub praeguse mängija kursori värvist. ck jaoks 7 kuni 1 silmus, kui (RedA (0) = '1') ja (RedA (ck) = '0') ja (GreenA (ck) = '0'), siis RedA (Ck) <= '1'; Punane A (0) <= '0'; EXIT; lõpetada, kui;
kui (GreenA (0) = '1') ja (RedA (ck) = '0') ja (GreenA (ck) = '0') siis
GreenA (Ck) <= '1'; GreenA (0) - punane mängija GreenA (0) <= '0'; if (NCursorCol = OCursorCol) siis - Kui midagi ei vajutatud RedA (0) <= '1'; elsif (NCursorCol = "111") siis - Kui Lbtn vajutati RedH (0) <= '1'; Punane A (0) <= '0'; elsif (NCursorCol = "001") siis - Iff Rbtn vajutati RedB (0) <= '1'; RedA (0) - roheline mängija RedA (0) <= '0'; kui (NCursorCol = OCursorCol), siis GreenA (0) <= '1'; elsif (NCursorCol = "111"), siis GreenH (0) <= '1'; RohelineA (0) <= '0'; elsif (NCursorCol = "001"), siis GreenB (0) <= '1'; RohelineA (0) <= '0'; lõpetada, kui; lõppjuhtum;
Pange tähele, esimene juhtumilause nimega: OCursorCol (mis tähistab vana kursori veergu) on lõpliku oleku masina algus. Iga kuvari veergu käsitletakse Mikroneesia Liiduriikides oma olekuna. Seal on 8 veergu, nii et iga veeru oleku tuvastamiseks kasutati 3-bitist binaararvude komplekti. See, kuidas FSM olekute vahel liigub, sõltub vajutatud nupust. Kui ülaltoodud katkendis vasakpoolset nuppu vajutatakse, liigub Mikroneesia Liit „111“, mis oleks ekraani viimane veerg. Kui vajutate paremat nuppu, liigub FSM "001", mis oleks ekraani teine veerg.
Kui vajutada keskmist nuppu, EI liigu FSM uude olekusse, vaid käivitab selle asemel TurnState signaali muutuse, mis on ühe bitine signaal, et märkida, millise mängija kord see on. Lisaks käivitab keskmine nupp koodiploki, mis kontrollib, kas allosas on tühi rida kuni ülaosani. See proovib paigutada tähise madalaimale täitmata reale. Pidage meeles, et see on Connect Four mäng.
Pesastatud juhtumilauses nimega TurnState muudame kursori värvi ja esimese veeru veeru, mille andmeid me muuta tahame, et kuvamisprotsess kajastaks muudatust.
Kordame seda põhikoodi ülejäänud seitsmel juhul. Mikroneesia skeem võib aidata mõista olekute muutumist.
Samm: kood
See on Connect 4 funktsionaalne kood, mille saab Vivado tarkvara abil VHDL -is kompileerida.
Samuti on ette nähtud piirang, mis võimaldab teil mängu käivitada.
Esitasime plokkskeemi, mis selgitab, kuidas iga protsessi sisendid ja väljundid on omavahel ühendatud.
Soovitan:
Arduino Connect mitu I2C -seadet: 6 sammu
Arduino ühendab mitu I2C -seadet: selles õpetuses õpime, kuidas ühendada mitu moodulit I2C -ühendusega arduinoga. Vaadake videot! Meie puhul kasutame näitena 4 OLED -ekraani, kuid võite kasutada ka muid I2C -mooduleid/ andurid, kui soovite. Märkus: 4 OLED -kuvarit koos
Simoni mäng - lõbus mäng!: 5 sammu
Simoni mäng - lõbus mäng !: Viide: siinPärast pikka nädalavahetust peate kindlasti kõvasti proovima, et täita kõik ülesanded ja töö, mille eest vastutate. Meil on aeg oma aju treenida, kas pole? Peale nende igavate ja mõttetute mängude on olemas ka mäng nimega Simon Game
SelfCAD Connect Surface koos serva ja tipuga: 4 sammu
SelfCAD Connect Surface with Edge and Vertex: Selles Selfcadi õpetuses saate teada, kuidas ühendada tippu pinnamudelis. Järgmisena saame selle ühendada üheks objektiks. Vaata järgi
Põhiline stopper VHDL -i ja Basys3 -plaadi kasutamisel: 9 sammu
Põhiline stopper VHDL -i ja Basys3 -plaadi kasutamisel: Tere tulemast juhendisse, kuidas luua stopper, kasutades põhilist VHDL -i ja Basys 3 -tahvlit. Meil on hea meel teiega oma projekti jagada! See oli lõplik projekt CPE 133 (digitaalne disain) kursusel Cal Poly, SLO -s 2016. aasta sügisel
Mastermind mäng VHDL -is: 3 sammu
Mastermind Game VHDL -is: oma projekti jaoks lõime “ Mastermind ” mängu VHDL -is, mida saab mängida Basys3 laual. Mastermind on koodimurdmismäng, mida traditsiooniliselt mängitakse tihvtide ja mängulauaga. Mängija üks paigutab erinevat värvi värvid 4 -ne reale