Orodha ya maudhui:

VHDL Basys3: Unganisha Mchezo 4: Hatua 5
VHDL Basys3: Unganisha Mchezo 4: Hatua 5

Video: VHDL Basys3: Unganisha Mchezo 4: Hatua 5

Video: VHDL Basys3: Unganisha Mchezo 4: Hatua 5
Video: VHDL & FPGA Project: Music Player 2024, Novemba
Anonim
VHDL Basys3: Unganisha Mchezo wa 4
VHDL Basys3: Unganisha Mchezo wa 4

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

Kuunganisha vifaa
Kuunganisha vifaa
Kuunganisha vifaa
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

Maelezo ya Kiufundi: Kubadilisha Habari iliyoonyeshwa
Maelezo ya 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

Kanuni
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: