Orodha ya maudhui:
- Hatua ya 1: Maelezo ya haraka na Vifaa
- Hatua ya 2: Kuunganisha vifaa
- Hatua ya 3: Maelezo ya Kiufundi: Skrini
- Hatua ya 4: Ufafanuzi wa Kiufundi: Kubadilisha Habari iliyoonyeshwa
- Hatua ya 5: Kanuni
Video: VHDL Basys3: Unganisha Mchezo 4: Hatua 5
2024 Mwandishi: John Day | [email protected]. Mwisho uliobadilishwa: 2024-01-30 12:52
Utangulizi:
Huu ni Mchezo wa Logic Digital Logic iliyoundwa katika VHDL ukitumia Programu ya Vivado na iliyowekwa kwa Bodi ya Basys3. Ujenzi na muundo wa mradi huu ni wa kati, lakini wageni wanaweza kunakili hatua na kujenga mchezo wa dijiti.
Mchezo hufanya kazi kama mchezo wa Unganisha 4. Wachezaji wanaweza kusogeza kielekezi chao kwenye skrini kwa kutumia vifungo vya kushoto na kulia vilivyopatikana kwenye ubao. Kubonyeza kitufe cha katikati kwenye ubao kutasababisha kicheza kuweka alama yao kwenye safu hiyo na kisha itakuwa zamu ya mchezaji inayofuata. Mara tu mchezaji akishinda, mchezo unaweza kuwekwa upya kwa kubonyeza kitufe cha juu kwenye ubao.
Hatua ya 1: Maelezo ya haraka na Vifaa
Maelezo ya Ufundi Haraka:
-
Inatumia seti tatu za unganisho la PMOD kwenye bodi (JA, JB, JC)
- Pini 8 (Ukiondoa Vcc na Pini za GND) zinazotumiwa kwa kila kiunganishi cha PMOD
- JA - Udhibiti wa Safu
- JB - Udhibiti wa nguzo za Kijani
- JC - Udhibiti wa nguzo Nyekundu
-
Saa ya skrini inafanya kazi kwa 960Hz
LED 8 tu zinawashwa kwa wakati fulani. Screen inaburudisha kwa kasi ya kutosha ya saa ambayo udanganyifu umepewa kwamba zaidi ya LED 8 ziko kwa wakati fulani
- Saa ya kifungo inafanya kazi saa 5Hz; Kwa hiari inaweza kulipishwa faini kwa kuhariri nambari ya VHDL.
- Upinzani wa ndani wa Darlington Arrays unatosha kuzuia kuchomwa kwa LED
Mchezo umejengwa kwa kutumia vifaa na zana zifuatazo:
- (1) Bodi ya Basys3
- (2) Matrix ya LED Bi-color 8x5:
- (2) ULN2803 - Safu za Transistor za Darlington - Jedwali
- Vinywaji vya waya
- Waya za Jumper
- Waya Stripper
- Bodi za mikate (Mraba Kubwa inapaswa kutosha)
- Multimeter na Ugavi wa Umeme (Utatuzi).
Hatua ya 2: Kuunganisha vifaa
Miongozo:
Wiring ya mradi inaweza kuchanganyikiwa sana, tafadhali chukua muda wako na uhakikishe kuwa unganisho zote ni sahihi seti moja kwa wakati.
Mradi unajumuisha kutumia skrini mbili za LED lakini zimejumuishwa kuunda skrini moja kubwa. Hii inaweza kutimizwa kwa kuunganisha safu zote kwa hatua ile ile. Kwa sababu kila skrini ina rangi mbili, safu nyekundu na kijani za skrini moja lazima pia zifungwe kwenye safu nyekundu na kijani za skrini nyingine. Kwa kufanya hivyo, tunaweza kudhibiti safu zote na pini 8 tu. Pini zingine 16 hutumiwa kudhibiti safu za maonyesho. Pini 8 za zinaweza kushikamana moja kwa moja kupitia nyaya za kuruka kwa viunganisho vya pmod. Uunganisho wa Pmod kwanza nenda kwenye pembejeo ya ULN2083A na pato la ULN2083A imeunganishwa moja kwa moja kwenye safu kwenye skrini. Kwa sababu muundo ni 8x8, safu zingine hazitaunganishwa.
- JA: Uunganisho wa safu: Row 1 hadi JA: 1 hadi Row 8 kwa JA: 10.
- JA: Uunganisho wa Safu Nyekundu:
- JC: Uunganisho wa Column ya Kijani
Tafadhali rejelea picha zilizochapishwa kujua ni pini zipi zinalingana na safu / nguzo zipi.
Kumbuka: Transistors wamejenga katika upinzani, kwa hivyo LED hazihitaji upinzani wa ziada kuunganishwa nao katika safu.
Hatua ya 3: Maelezo ya Kiufundi: Skrini
Skrini inafanya kazi kwa kuendelea kwa maono. Skrini inaburudisha haraka sana, kwamba jicho la mwanadamu haliwezi kugundua dhahiri kuwa taa zingine zinawashwa haraka na kuwashwa. Kwa kweli, kwa kupunguza saa ya kuonyesha, mtu anaweza kugundua inang'aa.
Onyesho linawasha safu zote nane kulingana na data iliyohifadhiwa kwa safu hizo, na onyesho linageuka kwenye safu moja. Halafu hubadilisha haraka kuingia kwa data inayofuata kwa safu nne na inageuka kwenye safu inayofuata - wakati kuzima safu zingine zote. Utaratibu huu unaendelea kwa kasi ya kutosha ya saa na kwamba kuangaza kwa LED kunakuwa kutambulika.
Uhifadhi wa data kwa onyesho umeanzishwa mara tu baada ya usanifu katika faili ya VHDL kwa njia ifuatayo:
ishara RedA, RedB, RedC, RedD, RedE, RedF, RedG, RedH: std_logic_vector (7 downto 0): = "00000000";
ishara GreenA, GreenB, GreenC, GreenD, GreenE, GreenF, GreenG, GreenH: std_logic_vector (7 downto 0): = "00000000"; - Row Data kulingana na safu: KIJANI
Zifuatazo kijisehemu kidogo cha mchakato ambao unadhibiti matrix ya kuonyesha LED.
- Mchakato ambao Udhibiti wa kuonyesha matrixdisplay: mchakato (ColCLK) - 0 - 16 ili kuonyesha upya 8X8 RED na 8x8 GREEn matrix RowCount: nambari kamili 0 hadi 16: = 0; anza ikiwa (rising_edge (ColCLK)) basi ikiwa (RowCount = 0) basi DORow <= RedA; - Takwimu za safu ya DOLol inayolingana ya safu wima <= "1000000000000000"; - Column Trigger - Rudia nambari hii kwa njia yote hadi "0000000000000001" - Badilisha hadi RedB, RedC… GreenA, GreenB… GreenH
Mwisho wa GreenH, kabla tu ya mchakato kusitisha kijisehemu hiki ni pamoja na kuweka tena RowCount kurudi sifuri.
ikiwa (RowCount = 15) basi - Anza upya upya kutoka safu A RowCount: = 0; mwingine RowCount: = RowCount + 1; - Shift kupitia nguzo zinaisha ikiwa;
Sasa, kuelezea saa ambayo iko katika orodha ya unyeti wa mchakato wa kuonyesha. Bodi ya Basys3 ina saa ya ndani inayofanya kazi kwa 100MHz. Kwa madhumuni yetu, hii ni haraka sana kwa saa kwa hivyo tutahitaji kugawanya saa hii kuwa saa 960Hz kwa kutumia mchakato ufuatao.
- Mchakato wa saa unaofanya kazi kwa 960HzCLK Mgawanyiko: mchakato (CLK) clkcount inayobadilika: nambari kamili ya 0 hadi 52083: = 0; anza ikiwa (rising_edge (CLK)) kisha clkcount: = clkcount + 1; ikiwa (clkcount = 52083) basi ColCLK <= sio (ColCLK); hesabu: = 0; mwisho ikiwa; mwisho ikiwa; mchakato wa mwisho;
Hatua ya 4: Ufafanuzi wa Kiufundi: Kubadilisha Habari iliyoonyeshwa
Katika nambari ya VHDL, habari au data ambayo itaonyeshwa kwenye skrini inadhibitiwa na mchakato wa mshale, ambao una saa tofauti katika orodha yake ya unyeti. Nambari hii iliitwa BtnCLK, saa iliyoundwa iliyoundwa kupunguza utaftaji wa vitufe vinapobanwa. Hii imejumuishwa ili ikiwa kitufe kinabanwa, mshale kwenye safu ya juu hausogei haraka sana kwenye safu.
- Mchakato wa Saa unaofanya kazi saa 5 Hz. KifungoCLK: mchakato (CLK) tofauti btnclkcount: nambari kamili 0 hadi 10000001: = 0; anza ikiwa (rising_edge (CLK)) basi ikiwa (btnclkcount = 10000000) basi btnclkcount: = 0; BtnCLK <= sio (BtnCLK); kingine btnclkcount: = btnclkcount + 1; mwisho ikiwa; mwisho ikiwa; mchakato wa mwisho;
Na pato la ishara ya BtnCLK ya mchakato huu, sasa tunaweza kuelezea mchakato wa kielekezi. Mchakato wa mshale una BtnCLK tu katika orodha yake ya unyeti lakini kwenye kificho cha nambari, hali ya vifungo hukaguliwa na hii itasababisha data ya RedA, RedB… GreenH ibadilike. Hapa kuna kijisehemu cha nambari ya mshale, ambayo inajumuisha kizuizi cha kuweka upya na kizuizi cha safu ya kwanza.
mshale: mchakato (BtnCLK) ubadilishaji OCursorCol: STD_LOGIC_VECTOR (2 chini ya 0): = "000"; - OCursorCol inafuatilia safu ya zamani ya kutofautisha NCursorCol: STD_LOGIC_VECTOR (2 downto 0): = "000"; - NCursorCol inaweka safu mpya ya mshale kuanza -BADILISHA hali (Kitufe cha UP) --Bodi imeondolewa kwa mchezo kuanza upya ikiwa (rising_edge (BtnCLK)) kisha ikiwa (RST = '1') kisha RedA <= "00000000"; RedB <= "00000000"; RedC <= "00000000"; RedD <= "00000000"; RedE <= "00000000"; RedF <= "00000000"; RedG <= "00000000"; RedH <= "00000000"; KijaniA <= "00000000"; KijaniB <= "00000000"; KijaniC <= "00000000"; KijaniD <= "00000000"; Kijani <= "00000000"; KijaniF <= "00000000"; KijaniG <= "00000000"; GreenH ikiwa (Lbtn = '1') kisha NCursorCol: = "111"; - Safu wima H elsif (Rbtn = '1') kisha NCursorCol: = "001"; - Safu wima B elsif (Cbtn = '1') kisha NCursorCol: = OCursorCol; - Safu hukaa NTurnState sawa <= sio (TurnState); - Inachochea zamu ya mchezaji inayofuata - Huchunguza safu ya sasa kutoka chini hadi juu na kuwasha LED ya kwanza ambayo haijawashwa. Rangi inategemea rangi ya mshale ya mchezaji wa sasa. kwa ck katika 7 chini ya kitanzi 1 ikiwa (RedA (0) = '1') na (RedA (ck) = '0') na (GreenA (ck) = '0') kisha RedA (Ck) <= '1'; RedA (0) <= '0'; UTGÅNG; mwisho ikiwa;
ikiwa (GreenA (0) = '1') na (RedA (ck) = '0') na (GreenA (ck) = '0') basi
KijaniA (Ck) <= '1'; GreenA (0) - Mchezaji Mwekundu GreenA (0) <= '0'; ikiwa (NCursorCol = OCursorCol) basi - Ikiwa hakuna kitu kilichobanwa RedA (0) <= '1'; elsif (NCursorCol = "111") basi - Ikiwa Lbtn ilibanwa RedH (0) <= '1'; RedA (0) <= '0'; elsif (NCursorCol = "001") basi - Iff Rbtn alibanwa RedB (0) <= '1'; RedA (0) - Mchezaji Kijani RedA (0) <= '0'; ikiwa (NCursorCol = OCursorCol) basi GreenA (0) <= '1'; elsif (NCursorCol = "111") kisha GreenH (0) <= '1'; KijaniA (0) <= '0'; elsif (NCursorCol = "001") kisha GreenB (0) <= '1'; KijaniA (0) <= '0'; mwisho ikiwa; kesi ya mwisho;
Kumbuka, taarifa ya kesi ya kwanza iitwayo: OCursorCol (ambayo inasimama kwa safu ya Mshale wa Kale) ni mwanzo wa mashine ya serikali inayokoma. Kila safu ya maonyesho inachukuliwa kama hali yake katika FSM. Kuna safu wima 8 kwa hivyo seti ya nambari ya binary 3-bit ilitumika kutambua kila safu kama hali. Jinsi FSM inavyotembea kati ya serikali inategemea kitufe ambacho kinabanwa. Kwenye kijisehemu hapo juu, ikiwa kitufe cha kushoto kinabanwa, FSM itahamia "111" ambayo ingekuwa safu ya mwisho ya onyesho. Ikiwa kitufe cha kulia kimeshinikizwa, FSM itahamia "001" ambayo itakuwa safu ya pili ya onyesho.
Ikiwa kitufe cha katikati kimeshinikizwa, FSM HAIWEZA kuhamia hali mpya lakini badala yake itasababisha mabadiliko katika ishara ya TurnState, ambayo ni ishara moja ya kugundua zamu ya mchezaji ni nani. Kwa kuongezea, kitufe cha katikati kitaendesha kizuizi cha nambari ambacho huangalia ikiwa kuna safu tupu chini kabisa hadi juu. Itajaribu kuweka alama kwenye safu ya chini kabisa, isiyojazwa. Kumbuka, huu ni mchezo unaounganisha wanne.
Katika taarifa ya kesi ya kiota inayoitwa: TurnState, tunabadilisha rangi ya kielekezi ni nini na ni safu gani kwenye safu ya kwanza tunataka kubadilisha data ili mchakato wa kuonyesha uweze kuonyesha mabadiliko.
Tunarudia nambari hii ya msingi kwa kesi saba zilizobaki. Mchoro wa FSM unaweza kusaidia kuelewa jinsi majimbo yanabadilika.
Hatua ya 5: Kanuni
Hii ndio nambari inayotumika ya Unganisha 4 ambayo inaweza kukusanywa katika VHDL ukitumia Programu ya Vivado.
Kikwazo pia hutolewa kukuwezesha kupata mchezo na kuanza.
Tulitoa mchoro wa block ambao unaelezea jinsi pembejeo na matokeo ya kila mchakato yanavyounganishwa.
Ilipendekeza:
Kujifunga kwa Moja kwa Moja kwa Mchezo Mtendaji wa Mchezo wa Gofu wa 3: Hatua 12 (na Picha)
Kujifunga kwa Moja kwa Moja kwa Mchezo Mtendaji wa Mchezo wa Gofu wa 3: Hivi majuzi nilichapisha Inayoweza kufundishwa juu ya kujenga mchezo wa kufurahisha unaoweza kubeba na unaoweza kuchezwa ndani na nje. Inaitwa "Executive Par 3 Golf Game". Nilitengeneza kadi ya alama ya kuiga kurekodi kila alama ya wachezaji kwa "mashimo" 9. Kama ilivyo
Mchezo wa Kumbukumbu ya Mchezo wa Kutumia BBC MicroBit: Hatua 7
Mchezo wa Kumbukumbu ya Puzzle Kutumia MicroBit ya BBC: Ikiwa haujui ni MicroBit ya BBC ni nini, kimsingi ni kifaa kidogo ambacho unaweza kupanga kuwa na pembejeo na matokeo. Aina kama Arduino, lakini zaidi ya mwili. Kile nilichopenda sana juu ya MicroBit ni kwamba ina mbili zilizojengwa katika pembejeo b
Mchezo wa Mkasi wa Mkamba wa Arduino wa Mkononi Kutumia Mchezo wa 20x4 LCD Onyesha na I2C: Hatua 7
Mchezo wa Mkasi wa Mwamba wa Arduino wa Mkononi Kutumia Uonyesho wa LCD 20x4 na I2C: Halo kila mtu au labda niseme " Hello World! Huu ni mchezo wa Mikasi ya Mwamba wa Arduino wa Mkononi kwa kutumia onyesho la LCD la I2C 20x4. Mimi
Jinsi ya Kusanikisha Udhibiti wa AGS-001 Unaodhibitiwa Katika Mchezo wa Mapema wa Wavulana wa Mchezo (Hakuna LOCA!): Hatua 5 (na Picha)
Jinsi ya kusanikisha Mwangaza wa AGS-001 unaodhibitiwa Kwenye Mchezo wa Mapema wa Wavulana wa Mchezo (Hakuna LOCA!): Unatafuta kuangaza skrini ya zamani ya Game Boy Advance. Huwezi kupata vifaa hivi vipya vya backlit vya IPS popote, na vifaa vya zamani vya AGS-101 vimepungukiwa na bei ya juu. Mbali na hilo, unataka kuwa na uwezo wa kuona skrini ukiwa nje,
Unganisha Mchezo 4 Kutumia Arduino na Neopixel: Hatua 7 (na Picha)
Unganisha Mchezo 4 Kutumia Arduino na Neopixel: Badala ya kutoa zawadi ya kuchezea ya rafu, nilitaka kuwapa wajukuu wangu zawadi ya kipekee ambayo wangeweza kuweka pamoja na (kwa matumaini) kufurahiya. Wakati nambari ya Arduino ya mradi huu inaweza kuwa ngumu sana kwao kuelewa, dhana za kimsingi