Përmbajtje:

2 Lojtarët Konkurrues VS Koha e Lojërave: 4 Hapa
2 Lojtarët Konkurrues VS Koha e Lojërave: 4 Hapa

Video: 2 Lojtarët Konkurrues VS Koha e Lojërave: 4 Hapa

Video: 2 Lojtarët Konkurrues VS Koha e Lojërave: 4 Hapa
Video: E HAPA DYQANIN TEM NE QYTET | Trader Life Simulator 2 2024, Korrik
Anonim
2 Lojra Konkurruese VS Koha e Lojërave
2 Lojra Konkurruese VS Koha e Lojërave

Do t'ju duhet:

1. Digilent Basys 3, FPGA Board (ose ndonjë FPGA tjetër,)

2. Një version relativisht i azhurnuar i Vivado, ose ndonjë mjedisi tjetër VHDL

3. Një kompjuter që mund të ekzekutojë programin e përmendur.

Hapi 1: Vetë Loja

Loja Vetë
Loja Vetë

Si bashkëvepron FSM me modulet.

Si të luani

Për të filluar, shtypni butonin e mesëm. Kjo do të bëjë që "99", që përfaqëson shëndetin e lojtarit dy, të shfaqet në ekranin me shtatë segmente. Pastaj, LED -të do të ndizen në mënyrë radhazi nga e djathta në të majtë. Kjo formon një shirit energjie. Pasi shiriti i energjisë të jetë mbushur, ai rivendoset. Objekti i lojtarit një është që ta ndërrojë çelësin kur shiriti është aq i lartë sa të jetë e mundur. Sa më shumë LED të ndizen, aq më shumë dëmtim i bën lojtari lojtarit dy. Pasi lojtari një të ndryshojë ndërrimin e tij, dëmi i shkaktuar zbritet nga shëndeti i lojtarit dy. Pastaj, kalon në radhën e lojtarit dy. Tani, numri i shfaqur përfaqëson shëndetin e lojtarit dhe shiriti i energjisë mbushet nga e majta në të djathtë. Pasi lojtari dy të bëjë lëvizjen e tyre, dëmi zbritet dhe i kthehet sërish radhes lojtarit. Kjo përsëritet derisa një lojtar arrin shëndetin 0. Videoja e këtij funksionimi është bashkangjitur.

Hapi 2: FSM

FSM
FSM
FSM
FSM
FSM
FSM
FSM
FSM

Kjo lojë është në thelb një makinë e madhe me gjendje të fundme, në të cilën ndodh një logjikë komplekse bazuar në gjendjen në të cilën ndodhet FSM.

Gjendja 1: Menu Gjendja e parë është ekrani i menysë, i cili është një nga gjendjet më të thjeshta. Ai përfshin ekranin me shtatë segmente që shfaq fjalën "PLAY" dhe butonin që shkakton fillimin e lojës. Butoni, BTN, na çon në gjendjen tjetër, e cila është radha e lojtarit.

Gjendja 2: Rradha e Lojtarit Një

Kthesa e lojtarit një aktivizon një sinjal që bën që ekrani me shtatë segment të shfaqë shëndetin e Lojtarit dy. Një sinjal tjetër ndizet për të aktivizuar një regjistër ndërrimi të importuar nga një modul tjetër që kemi krijuar (Pone.vhd). Ky regjistër zhvendosjeje ndriçon LED -in si një matës i fuqisë në rritje në lojërat e tjera, dhe pastaj do të rivendoset në 0 kur të arrijë sasinë maksimale të LED -ve që mund të ndizen. Përditësohet në skajin në rritje të orës të marrë nga barclock.vhd, i cili modifikohet nga një skedar laboratori i huazuar. Ne kishim që shiriti i lojtarit të fillonte nga e djathta dhe të mbushej deri në të majtë, sepse çelësi i lojtarit është gjithashtu në të majtë (për përvojën intuitive të përdoruesit). Pasi kaloni të kthehet, gjendja kalon te lojtari një zbritje dhe sasia e LED -ve aktive ruhet në një sinjal.

Gjendja 3: Zbritja e Lojtarit Një Sinjali me sasinë e LED -ve aktive përcakton sasinë e shëndetit që zbritet. Kjo bëhet duke pasur një regjistër tjetër ndërrimi (deductor1.vhd) që në vend që të rrisë LED -të, i zvogëlon ato. Kjo zvogëlohet në skajin në rritje të njërit prej moduleve të orës div që huazuam dhe modifikuam (downcounterclock.vhd). Pikërisht kur një LED është fikur, një pikë shëndetësore i hiqet shëndetit total të lojtarit dy. Nëse gjatë këtij procesi lojtari dy arrin shëndetin 0, ne ndalojmë dhe menjëherë kalojmë në gjendjen "Game over". Përndryshe, sapo vektori LED të arrijë "000000000000000000", kalojmë te radha e lojtarit dy.

Gjendja 4: Kthesa e Lojtarit Dy Kthesa e Lojtarit dy është saktësisht si radha e lojtarit një, përveç regjistrit të ndërrimit për të (Ptwo.bhd) shkon nga e majta në të djathtë, dhe çelësi është në anën e djathtë të tabelës. Një sinjal aktivizohet për të pasur ekranin e shëndetit të Player 1. Pasi kaloni 2 është aktiv, kjo kalon në kthesën e zbritjes së Lojtarit Dy.

Faza 5: Zbritja e Lojtarit Dy Ashtu si radha e lojtarit dy, zbritja e lojtarit dy vepron shumë si lojtari një zbritje. Dallimi kryesor është se regjistri i ndërrimit që kontrollon fikjen e LED -it shkon në drejtim të kundërt, i cili është një modifikim i lehtë për tu bërë pasi të keni zbritjen e lojtarit që punon siç duhet.

Faza 6: Loja mbaron Nëse në çdo moment secili lojtar arrin shëndetin zero, loja kalon në këtë gjendje. Asgjë shfaqje zbukuruese. Nëse shtypet një BTN, atëherë gjendja rivendoset në 99 dhe gjendja kthehet në meny, duke filluar në mënyrë efektive lojën nga e para.

Hapi 3: Modulet

Modulet
Modulet

Diagrami i Kutisë së Zezë për lojë

Downcounterclock (bazuar në modulin clk_div.vhd nga Bryan Mealy):

Kjo është ora që trajton kohën e zbritësve. Konstanta e emërtuar max_count është 3x më shumë se konstanta max_count e barclock. Kjo do t'i bëjë zbritësit 3x më të ngadaltë se shpejtësia e shiritit.

Barclock - (bazuar në modulin clk_div.vhd nga Bryan Mealy):

Kjo orë merret me kohën e matësve të fuqisë, të cilën e rritëm shpejt për t'i shtuar vështirësi lojës. Ky moment mund të rregullohet sipas dëshirës tuaj, duke rritur shpejtësinë duke e bërë numrin maksimal konstant një numër më të madh, ose duke e zvogëluar atë duke e bërë numrin maksimal një numër më të vogël. Sseg_dec - (Shkruar nga Bryan Mealy): Ky modul merr një numër 8 bitësh si hyrje, të cilin e deshifron, duke e shndërruar numrin në ekuivalentin e tij dhjetor dhe më pas del në ekranin e shtatë segmenteve. Që ky skedar të funksionojë, duhet të siguroheni që kufizimet tuaja përputhen me tonat.

Pone:

Ky është një regjistër ndërrimi që zhvendos copat në të majtë, duke shtuar një bit të nxehtë për ta bërë atë të duket se matësi i fuqisë po rritet. Kur të gjitha bitët janë të nxehtë, të gjitha bitet rivendosen në '0' dhe cikli fillon nga e para.

Ptwo:

Ky është një version i përmbysur i modulit P1.

Deductor1:

Ky është një kombinim i regjistrit të ndërrimit dhe një zbritës. Regjistri i ndërrimit shkon në drejtim të kundërt të regjistrit të ndërrimit të P1, duke treguar një zbritje. Kjo gjithashtu heq 1 nga shëndeti i Lojtarit 2 për çdo cikël të orës, kështu që me kombinimin e këtyre dy funksioneve, do të duket se shëndeti i kundërshtarit po zvogëlohet me 1 për çdo led të shiritit të shëndetit që bie.

Deductor2: Ky është një version i përmbysur i modulit Deductor1.

PlayDecoder (i huazuar dhe modifikuar në mënyrë të ngadaltë nga ekchen35649 i tij 133 i udhëzueshëm): Kjo përdoret në gjendjen e menysë për të shfaqur fjalën "PLAY" në dekoduesin e shtatë segmenteve.

Hapi 4: Testoni

Kjo lojë u frymëzua fillimisht nga një nga minigames nga Kirby. Shtë një lojë e thjeshtë me dy lojtarë që mund të luhet në një Bord Basys 3, ose ndonjë FPGA.

Hapi 1: Materialet e kërkuara

Do t'ju duhet: Digilent Basys 3, FPGA Board (ose ndonjë tjetër) Një version relativisht i azhurnuar i Vivado, ose ndonjë mjedis tjetër vhdl Një kompjuter që mund të ekzekutojë programin e përmendur A tru

Hapi 2: Vetë Loja

Si të luani

Për të filluar, shtypni butonin e mesëm. Kjo do të bëjë që "99", që përfaqëson shëndetin e lojtarit dy, të shfaqet në ekranin me shtatë segmente. Pastaj, LED -të do të ndizen në mënyrë radhazi nga e djathta në të majtë. Kjo formon një shirit energjie. Pasi të jetë mbushur shiriti i energjisë, ai rivendoset. Objekti i lojtarit një është që ta ndërrojë çelësin kur shiriti është aq i lartë sa të jetë e mundur. Sa më shumë LED të ndizen, aq më shumë dëmtim i bën lojtari lojtarit dy. Pasi lojtari një të ndryshojë ndërrimin e tij, dëmi i shkaktuar zbritet nga shëndeti i lojtarit dy. Pastaj, kalon në radhën e lojtarit dy. Tani, numri i shfaqur përfaqëson shëndetin e lojtarit dhe shiriti i energjisë mbushet nga e majta në të djathtë. Pasi lojtari dy të bëjë lëvizjen e tyre, dëmi zbritet dhe i kthehet sërish radhes lojtarit. Kjo përsëritet derisa një lojtar të arrijë shëndetin 0. Videoja e këtij funksionimi është bashkangjitur.

Për të luajtur lojën, ngarkojeni atë në një tabelë bazë dhe shtypni butonin e mesëm. Përpiquni ta rrokullisni çelësin me sa më shumë LED të jetë e mundur, dhe pastaj prisni dhe shikoni sesi bordi i zbret ato pikë nga shëndeti i kundërshtarit tuaj. Pastaj, ia kaloni mikut tuaj, dhe

Hapi 3: FSM

Kjo lojë është në thelb një makinë e madhe me gjendje të fundme, në të cilën ndodh një logjikë komplekse bazuar në gjendjen në të cilën ndodhet FSM.

(Diagrami i Shtetit)

Gjendja 1: Menyja

Gjendja e parë është ekrani i menysë, i cili është një nga gjendjet më të thjeshta. Ai përfshin ekranin me shtatë segmente që shfaq fjalën "PLAY" dhe butonin që shkakton fillimin e lojës. Butoni, BTN, na çon në gjendjen tjetër, e cila është radha e lojtarit.

Gjendja 2: Rradha e Lojtarit Një

Kthesa e lojtarit një aktivizon një sinjal që bën që ekrani me shtatë segment të shfaqë shëndetin e Lojtarit dy. Një sinjal tjetër ndizet për të aktivizuar një regjistër ndërrimi të importuar nga një modul tjetër që kemi krijuar (Pone.vhd). Ky regjistër zhvendosjeje ndriçon LED -in si një matës i fuqisë në rritje në lojërat e tjera, dhe pastaj do të rivendoset në 0 kur të arrijë sasinë maksimale të LED -ve që mund të ndizen. Përditësohet në skajin në rritje të orës të marrë nga barclock.vhd, i cili modifikohet nga një skedar laboratori i huazuar. Ne kishim që shiriti i lojtarit të fillonte nga e djathta dhe të mbushej deri në të majtë, sepse çelësi i lojtarit është gjithashtu në të majtë (për përvojën intuitive të përdoruesit). Pasi kaloni të kthehet, gjendja kalon te lojtari një zbritje dhe sasia e LED -ve aktive ruhet në një sinjal.

Gjendja 3: Zbritja e Lojtarit Një

Sinjali me sasinë e LED -së aktive përcakton sasinë e shëndetit që zbritet. Kjo bëhet duke pasur një regjistër tjetër ndërrimi (deductor1.vhd) që në vend që të rrisë LED -të, i zvogëlon ato. Kjo zvogëlohet në skajin në rritje të njërit prej moduleve të orës div që huazuam dhe modifikuam (downcounterclock.vhd). Pikërisht kur një LED është fikur, një pikë shëndetësore i hiqet shëndetit total të lojtarit dy. Nëse gjatë këtij procesi lojtari dy arrin shëndetin 0, ne ndalojmë dhe menjëherë kalojmë në gjendjen "Game over". Përndryshe, sapo vektori LED të arrijë "000000000000000000", kalojmë te radha e lojtarit dy.

Gjendja 4: Rradha e lojtarit Dy

Kthesa e lojtarit dy është saktësisht si radha e lojtarit një, përveç regjistrit të ndërrimit për të (Ptwo.bhd) shkon nga e majta në të djathtë, dhe çelësi është në anën e djathtë të tabelës. Një sinjal aktivizohet për të pasur ekranin e shëndetit të Player 1. Pasi kaloni 2 është aktiv, kjo kalon në kthesën e zbritjes së Lojtarit Dy.

Faza 5: Zbritja e Lojtarit Dy

Ashtu si radha e lojtarit dy, lojtari dy zbrit vepron shumë si lojtari një zbritje. Dallimi kryesor është se regjistri i ndërrimit që kontrollon fikjen e LED -it shkon në drejtim të kundërt, i cili është një modifikim i lehtë për t'u bërë pasi të keni zbritjen e lojtarit që punon siç duhet.

Faza 6: Loja përfundon Nëse në çdo moment secili lojtar arrin shëndetin zero, loja kalon në këtë gjendje. Asgjë shfaqje zbukuruese. Nëse shtypet një BTN, atëherë gjendja rivendoset në 99 dhe gjendja kthehet në meny, duke filluar në mënyrë efektive lojën nga e para.

Kuti e zeze

Hapi 4: Modulet

Downcounterclock (bazuar në modulin clk_div.vhd nga Bryan Mealy):

Kjo është ora që trajton kohën e zbritësve. Konstanta e emërtuar max_count është 3x më shumë se konstanta max_count e barclock. Kjo do t'i bëjë zbritësit 3x më të ngadaltë se shpejtësia e shiritit.

Barclock - (bazuar në modulin clk_div.vhd nga Bryan Mealy): Kjo orë trajton kohën e matësve të fuqisë, të cilat ne i rritëm shpejt për t'i shtuar vështirësi lojës. Ky moment mund të rregullohet sipas dëshirës tuaj, duke rritur shpejtësinë duke e bërë numrin maksimal konstant një numër më të madh, ose duke e zvogëluar atë duke e bërë numrin maksimal një numër më të vogël. Sseg_dec - (Shkruar nga Bryan Mealy): Ky modul merr një numër 8 bitësh si hyrje, të cilin e deshifron, duke e shndërruar numrin në ekuivalentin e tij dhjetor dhe më pas del në ekranin e shtatë segmenteve. Që kjo skedar të funksionojë, duhet të siguroheni që kufizimet tuaja përputhen me tonat.

Pone: Ky është një regjistër ndërrimi që zhvendos copat në të majtë, duke shtuar një grimcë të nxehtë për ta bërë atë të duket se matësi i fuqisë po rritet. Kur të gjitha bitët janë të nxehtë, të gjitha bitet rivendosen në '0' dhe cikli fillon nga e para.

Ptwo: Ky është një version i përmbysur i modulit P1.

Deductor1: Ky është një kombinim i një regjistri të ndërrimit dhe një zbritës. Regjistri i ndërrimit shkon në drejtim të kundërt të regjistrit të ndërrimit të P1, duke treguar një zbritje. Kjo gjithashtu heq 1 nga shëndeti i Lojtarit 2 për çdo cikël të orës, kështu që me kombinimin e këtyre dy funksioneve, do të duket se shëndeti i kundërshtarit po zvogëlohet me 1 për çdo led të shiritit të shëndetit që bie.

Deductor2: Ky është një version i përmbysur i modulit Deductor1.

PlayDecoder (huazuar dhe modifikuar pak nga ekchen35649 e tij 133 i udhëzueshëm):

Kjo përdoret në gjendjen e menysë për të shfaqur fjalën "PLAY" në dekoduesin me shtatë segmente.

Për të bërë: fotografi, video

Recommended: