Talaan ng mga Nilalaman:
2025 May -akda: John Day | [email protected]. Huling binago: 2025-01-23 15:13
Kakailanganin mong:
1. Mapagbantay na Basys 3, FPGA Board (o anumang iba pang FPGA,)
2. Isang medyo napapanahong bersyon ng Vivado, o ilang iba pang kapaligiran ng VHDL
3. Isang computer na maaaring magpatakbo ng nabanggit na programa.
Hakbang 1: Ang Laro Mismo
Paano nakikipag-ugnay ang FSM sa mga modyul.
Paano laruin
Upang magsimula, pindutin mo ang gitnang pindutan. Magiging sanhi ito ng "99", na kumakatawan sa kalusugan ng player ng dalawa, na ipakita sa pitong segment na pagpapakita. Pagkatapos, ang mga LED ay sindihan nang sunud-sunod mula sa kanan hanggang kaliwa. Bumubuo ito ng isang power bar. Kapag puno na ang power bar, nag-i-reset ito. Ang object ng player ng isa ay upang i-flip ang kanilang switch kapag ang bar ay kasing taas hangga't maaari. Ang mas maraming LEDs naiilawan, mas maraming pinsala player ang ginagawa sa player ng dalawa. Matapos i-flip ng isang player ang kanilang switch, ibabawas ang pinsala na nakitungo sa kalusugan ng manlalaro. Pagkatapos, lilipat ito sa turn ng player na dalawa. Ngayon, ang ipinakitang numero ay kumakatawan sa kalusugan ng manlalaro, at ang power bar ay pumupuno mula kaliwa hanggang kanan. Kapag lumipat na ang player ng dalawa, nabawasan ang pinsala, at bumalik ulit ito sa player. Umuulit ito hanggang sa ang isang manlalaro ay umabot sa 0 kalusugan. Nakalakip ang video ng paggana na ito.
Hakbang 2: FSM
Ang larong ito ay mahalagang isang malaking hangganan ng makina ng estado, na kung saan ang ilang mga kumplikadong lohika ay nangyayari batay sa estado na ang FSM ay nasa.
Estado 1: Menu Ang unang estado ay ang screen ng menu, na kung saan ay isa sa mga mas simpleng estado. Kabilang dito ang pitong segment na pagpapakita ng pagpapakita ng salitang "PLAY", at ang pindutan na sanhi ng pagsisimula ng laro. Ang pindutan, BTN, ay hahantong sa amin sa susunod na estado, na turn ng player.
Estado 2: Ang turn ng Player One
Ang turn ng player one ay nagpapagana ng isang senyas na sanhi ng display ng pitong segment upang ipakita ang kalusugan ng Player two. Ang isa pang senyas ay nakabukas upang maisaaktibo ang isang rehistro ng shift na na-import mula sa ibang module na nilikha namin (Pone.vhd). Ang rehistro ng paglilipat na ito ay nagpapasindi ng ilaw ng LED tulad ng isang pagtaas ng sukat ng kuryente sa iba pang mga laro, at pagkatapos ay i-reset ito sa 0 kapag naabot nito ang maximum na halaga ng mga LED na maaaring naiilawan. Ina-update ito sa tumataas na gilid ng orasan na nakuha mula sa barclock.vhd, na binago mula sa isang hiniram na file ng lab. Kami ay nagsimula sa bar ng player mula sa kanan, at punan hanggang sa kaliwa, dahil ang switch ng player ay nasa kaliwa din (para sa madaling maunawaan na karanasan ng gumagamit). Kapag na-flip ang switch, ang estado ay lumilipat sa player ng isang ibawas, at ang dami ng aktibo ng LED ay nai-save sa isang senyas.
State 3: Player One bawas Ang signal na may dami ng aktibo ng LED ay tumutukoy sa dami ng kalusugan na nakakakuha ng ibawas. Ginagawa ito sa pamamagitan ng pagkakaroon ng isa pang rehistro ng paglilipat (deductor1.vhd) na sa halip na nadagdagan ang mga LED, binabawasan ang mga ito. Ang mga pagbawas na ito sa tumataas na gilid ng isa sa mga module ng orasan na hiniram at binago (downcounterclock.vhd). Kanan bilang isang LED ay naka-patay, isang punto ng kalusugan ay nabawasan mula sa kabuuang kalusugan ng manlalaro. Kung sa proseso ng prosesong ito ang dalawa ay umabot sa 0 kalusugan, humihinto kami at agad na lumipat sa estado na "Game over". Kung hindi man, sa sandaling maabot ng LED vector ang "0000000000000000", lumipat tayo sa turn ng player na dalawa.
State 4: Ang turn ng Player Two ay ang turn ng Player two ay eksaktong katulad ng turn ng player one, maliban sa shift register para dito (Ptwo.bhd) mula kaliwa hanggang kanan, at ang switch ay nasa kanang bahagi ng board. Ang isang senyas ay nagpapagana upang ipakita ang kalusugan ng Player 1. Sa sandaling aktibo ang switch 2, lumilipat ito sa pagbawas sa pagbawas ng Player Two.
Yugto 5: Dalawang Manlalaro ng Duha Tulad ng pagliko ng manlalaro, ang manlalaro ng dalawang pagbawas ay kumikilos tulad ng isang bawas sa manlalaro. Ang pangunahing pagkakaiba ay ang rehistro ng paglilipat na kumokontrol sa pag-patay ng LED ay papunta sa kabaligtaran na direksyon, na isang madaling pagbabago na magagawa kapag mayroon kang nabawas na maayos na paggana ng manlalaro.
Stage 6: Game Over Kung sa anumang punto ang alinman sa manlalaro ay umabot sa zero kalusugan, ang laro ay lilipat sa estadong ito. Walang magarbong ipinapakita. Kung ang BTN isa ay pinindot, pagkatapos ang kalusugan ay na-reset sa 99, at ang estado ay bumalik sa menu, na epektibo ang pagsisimula ng laro.
Hakbang 3: Mga Modyul
Black Box Diagram para sa Laro
Downcounterclock (batay sa clk_div.vhd module ni Bryan Mealy):
Ito ang orasan na humahawak sa oras ng mga deductor. Ang pare-parehong pinangalanang max_count ay 3x higit pa sa pare-pareho ng max_count ng orasan. Gagawin nitong mas mabagal ang mga nagbabawas sa 3x kaysa sa bilis ng bar.
Barclock - (batay sa module ng clk_div.vhd ni Bryan Mealy):
Hawak ng orasan na ito ang tiyempo ng mga pagsukat ng kuryente, na ginawa naming mabilis na pagtaas upang magdagdag ng kahirapan sa laro. Ang oras na ito ay maaaring ayusin ayon sa gusto mo, pagdaragdag ng bilis sa pamamagitan ng paggawa ng pare-parehong max_count ng isang mas malaking bilang, o pagbaba nito sa pamamagitan ng paggawa ng max_count ng isang mas maliit na bilang. Sseg_dec - (Isinulat ni Bryan Mealy): Ang module na ito ay tumatagal ng isang 8 bit na bilang bilang input, na kung saan ito decode, convert ang numero sa kanyang katumbas na decimal, at pagkatapos ay output sa pitong segment na display. Upang gumana ang file na ito, kailangan mong tiyakin na ang iyong mga hadlang ay tumutugma sa amin.
Pone:
Ito ay isang paglilipat ng rehistro na nagbabago ng mga piraso sa kaliwa, pagdaragdag ng isang mainit na piraso upang magmukhang tumataas ang sukat ng kuryente. Kapag ang lahat ng mga piraso ay mainit, ang lahat ng mga piraso ay nai-reset sa '0', at ang ikot ay nagsisimula muli.
Ptwo:
Ito ay isang flip na bersyon ng module na P1.
Bawas1:
Ito ay isang kumbinasyon ng isang rehistro ng paglilipat at isang nagbabawas. Ang shift register ay papunta sa kabaligtaran ng direksyon ng shift register ng P1, na nagpapahiwatig ng isang pagbawas. Ibinawas din nito ang 1 mula sa kalusugan ng Player 2 para sa bawat ikot ng orasan, kaya sa pagsasama ng dalawang pagpapaandar na ito, mukhang ang kalusugan ng kalaban ay bumababa ng 1 para sa bawat humantong sa health bar na bumababa.
Deductor2: Ito ay isang flip na bersyon ng module na Deductor1.
PlayDecoder (hiniram at slgihtly binago mula sa ekchen35649 kanyang 133 na itinuturo): Ginagamit ito sa menu ng menu upang ipakita ang salitang "MAGLARO" sa pitong segment na decoder.
Hakbang 4: Pagsubok
Ang larong ito ay orihinal na inspirasyon ng isa sa mga minigame mula sa Kirby. Ito ay isang simpleng laro ng dalawang manlalaro na maaaring i-play sa isang Basys 3 Board, o anumang FPGA.
Hakbang 1: Mga Kinakailangan na Materyales
Kakailanganin mo: Digilent Basys 3, FPGA Board (o anumang iba pa) Isang medyo napapanahong bersyon ng Vivado, o ilang iba pang kapaligiran na vhdl Isang computer na maaaring magpatakbo ng nabanggit na programa Isang utak
Hakbang 2: Ang Laro Mismo
Paano laruin
Upang magsimula, pindutin mo ang gitnang pindutan. Magiging sanhi ito ng "99", na kumakatawan sa kalusugan ng player ng dalawa, na ipakita sa pitong segment na pagpapakita. Pagkatapos, ang mga LED ay sindihan nang sunud-sunod mula sa kanan hanggang kaliwa. Bumubuo ito ng isang power bar. Kapag puno na ang power bar, nag-i-reset ito. Ang object ng player ng isa ay upang i-flip ang kanilang switch kapag ang bar ay kasing taas hangga't maaari. Ang mas maraming LEDs naiilawan, mas maraming pinsala player ang ginagawa sa player ng dalawa. Matapos i-flip ng isang player ang kanilang switch, ibabawas ang pinsala na nakitungo sa kalusugan ng manlalaro. Pagkatapos, lilipat ito sa turn ng player na dalawa. Ngayon, ang ipinakitang numero ay kumakatawan sa kalusugan ng manlalaro, at ang power bar ay pumupuno mula kaliwa hanggang kanan. Kapag lumipat na ang player ng dalawa, nabawasan ang pinsala, at bumalik ulit ito sa player. Umuulit ito hanggang sa ang isang manlalaro ay umabot sa 0 kalusugan. Nakalakip ang video ng paggana na ito.
Upang i-play ang laro, i-load ito sa isang basys board, at pindutin ang gitnang pindutan. Subukang i-flip ang switch gamit ang maraming aktibo ng LED hangga't maaari, at pagkatapos ay maghintay at manuod habang binabawas ng board ang mga puntong iyon mula sa kalusugan ng iyong kalaban. Pagkatapos, ipasa ito sa iyong kaibigan, at
Hakbang 3: FSM
Ang larong ito ay mahalagang isang malaking hangganan ng makina ng estado, na kung saan ang ilang mga kumplikadong lohika ay nangyayari batay sa estado na ang FSM ay nasa.
(Diagram ng Estado)
Estado 1: Menu
Ang unang estado ay ang screen ng menu, na kung saan ay isa sa mga mas simpleng estado. Kabilang dito ang pitong segment na pagpapakita ng pagpapakita ng salitang "MAGLARO", at ang pindutan na sanhi ng pagsisimula ng laro. Ang pindutan, BTN, ay hahantong sa amin sa susunod na estado, na turn ng player.
Estado 2: Ang turn ng Player One
Ang turn ng player one ay nagpapagana ng isang senyas na sanhi ng display ng pitong segment upang ipakita ang kalusugan ng Player two. Ang isa pang senyas ay nakabukas upang maisaaktibo ang isang rehistro ng shift na na-import mula sa ibang module na nilikha namin (Pone.vhd). Ang rehistro ng paglilipat na ito ay nagpapasindi ng ilaw ng LED tulad ng isang pagtaas ng sukat ng kuryente sa iba pang mga laro, at pagkatapos ay i-reset ito sa 0 kapag naabot nito ang maximum na halaga ng mga LED na maaaring naiilawan. Ina-update ito sa tumataas na gilid ng orasan na nakuha mula sa barclock.vhd, na binago mula sa isang hiniram na file ng lab. Kami ay nagsimula sa bar ng player mula sa kanan, at punan hanggang sa kaliwa, dahil ang switch ng player ay nasa kaliwa din (para sa madaling maunawaan na karanasan ng gumagamit). Kapag na-flip ang switch, ang estado ay lumilipat sa player ng isang ibawas, at ang dami ng aktibo ng LED ay nai-save sa isang senyas.
Estado 3: Binawasan ang Isang Player
Ang signal na may dami ng aktibo ng LED ay tumutukoy sa dami ng kalusugan na nababawas. Ginagawa ito sa pamamagitan ng pagkakaroon ng isa pang rehistro ng paglilipat (deductor1.vhd) na sa halip na nadagdagan ang mga LED, binabawasan ang mga ito. Ang mga pagbawas na ito sa tumataas na gilid ng isa sa mga module ng orasan na hiniram at binago (downcounterclock.vhd). Kanan mismo bilang isang LED ay naka-patay, isang punto ng kalusugan ay nabawasan mula sa kabuuang kalusugan ng manlalaro. Kung sa proseso ng prosesong ito, ang dalawa ay umabot sa 0 kalusugan, humihinto kami at agad na lumipat sa estado na "Game over". Kung hindi man, sa sandaling maabot ng LED vector ang "0000000000000000", lumipat tayo sa turn ng player na dalawa.
Estado 4: Ang turn ng Player Two
Ang turn ng player two ay eksaktong katulad ng turn ng player one, maliban sa shift register para dito (Ptwo.bhd) ay pupunta sa kaliwa hanggang kanan, at ang switch ay nasa kanang bahagi ng board. Ang isang senyas ay nagpapagana upang ipakita ang kalusugan ng Player 1. Sa sandaling aktibo ang switch 2, lumilipat ito sa pagbawas sa pagbawas ng Player Two.
Yugto 5: Dalawang Player Ibawas
Tulad ng pagliko ng manlalaro, ang player na dalawang binabawas ay kumikilos tulad ng binawas ng manlalaro. Ang pangunahing pagkakaiba ay ang rehistro ng paglilipat na kumokontrol sa pag-patay ng LED ay papunta sa kabaligtaran na direksyon, na isang madaling pagbabago na magagawa kapag mayroon kang nabawas na maayos na paggana ng manlalaro.
Stage 6: Game Over Kung sa anumang punto ang alinman sa manlalaro ay umabot sa zero kalusugan, ang laro ay lilipat sa estadong ito. Walang magarbong ipinapakita. Kung ang BTN isa ay pinindot, pagkatapos ang kalusugan ay na-reset sa 99, at ang estado ay bumalik sa menu, na epektibo ang pagsisimula ng laro.
Itim na kahon
Hakbang 4: Mga Modyul
Downcounterclock (batay sa clk_div.vhd module ni Bryan Mealy):
Ito ang orasan na humahawak sa oras ng mga deductor. Ang pare-parehong pinangalanang max_count ay 3x higit pa sa pare-pareho ng max_count ng orasan. Gagawin nitong mas mabagal ang mga nagbabawas sa 3x kaysa sa bilis ng bar.
Barclock - (batay sa module ng clk_div.vhd ni Bryan Mealy): Hawak ng orasan na ito ang tiyempo ng mga pagsukat ng kuryente, na ginawa naming mabilis na pagdaragdag upang magdagdag ng kahirapan sa laro. Ang oras na ito ay maaaring ayusin ayon sa gusto mo, pagdaragdag ng bilis sa pamamagitan ng paggawa ng pare-pareho na max_count ng isang mas malaking numero, o pagbaba nito sa pamamagitan ng paggawa ng max_count ng isang mas maliit na bilang. Sseg_dec - (Isinulat ni Bryan Mealy): Ang module na ito ay tumatagal ng isang 8 bit na bilang input, na kung saan ito decode, convert ang numero sa kanyang katumbas na decimal, at pagkatapos ay output sa pitong segment na display. Upang gumana ang file na ito, kailangan mong tiyakin na ang iyong mga hadlang ay tumutugma sa amin.
Pone: Ito ay isang rehistro ng paglilipat na nagbabago ng mga piraso sa kaliwa, pagdaragdag ng isang mainit na piraso upang magmukhang tumataas ang sukat ng kuryente. Kapag ang lahat ng mga piraso ay mainit, ang lahat ng mga piraso ay nai-reset sa '0', at ang ikot ay nagsisimula muli.
Ptwo: Ito ay isang flip na bersyon ng P1 module.
Deductor1: Ito ay isang kumbinasyon ng isang shift register at isang nagbabawas. Ang shift register ay papunta sa kabaligtaran ng direksyon ng shift register ng P1, na nagpapahiwatig ng isang pagbawas. Ibinawas din nito ang 1 mula sa kalusugan ng Player 2 para sa bawat ikot ng orasan, kaya sa pagsasama ng dalawang pagpapaandar na ito, mukhang ang kalusugan ng kalaban ay bumababa ng 1 para sa bawat humantong sa health bar na bumababa.
Deductor2: Ito ay isang flip na bersyon ng module na Deductor1.
PlayDecoder (hiniram at bahagyang nabago mula sa ekchen35649 kanyang 133 na itinuturo):
Ginagamit ito sa menu ng estado upang ipakita ang salitang "MAGLARO" sa pitong segment na decoder.
Dapat Gawin: mga larawan, video
Inirerekumendang:
Pagguhit ng Robot Sa Adafruit Shield (Gawin Ito Paligsahan): 10 Hakbang (na may Mga Larawan)
Pagguhit ng Robot Sa Adafruit Shield (Gawin Ito Paligsahan): Kamusta ang mga pangalan kong Jacob at nakatira ako sa UK. Sa proyektong ito magtatayo ako ng isang robot na kumukuha para sa iyo. * Sigurado akong marami sa iyo ang nais na makita ito kaya kung nais mong malaman mangyaring laktawan ang kanan hanggang sa pangalawa hanggang huling hakbang ngunit tiyaking bumalik dito upang makita
Dispenser ng Timing Soap: 6 na Hakbang
Dispenser ng Timing Soap: Sa kasalukuyang sitwasyon sa kalusugan, napagtanto ko na hindi ko talaga naisip kung gaano katagal ako naghuhugas ng kamay. Inirekumenda itong maghugas ng hindi bababa sa 20 segundo, ngunit ang pagbibilang ay labis na nakakasawa at sa palagay ko lahat tayo ay may sapat na ng Happy Birthday Song.
Sistema ng Timing na nakabatay sa Arduino Laser: 6 Mga Hakbang (na may Mga Larawan)
Arduino Laser-based Timing System: Bilang bahagi ng aking pagtuturo, kailangan ko ng isang sistema upang tumpak na masukat kung gaano kabilis ang paglalakbay ng isang modelo ng sasakyan na 10 metro. Sa una, naisip kong bibilhin ko ang isang murang handa nang sistema mula sa eBay o Aliexpress, ang mga sistemang ito ay karaniwang kilala bilang mga light gate, pho
Timing Gear at Chain Clock - Halos Libre !: 5 Hakbang (na may Mga Larawan)
Timing Gear at Chain Clock - Halos Libre !: Inaasahan kong kapag binago mo ang itinakda sa tiyempo ng iyong sasakyan, hindi mo itinapon ang mga lumang gears at ang kadena. Halos ginawa ko ito, ngunit ipinakita sa akin ng aking asawa ito: http://www.uncommongoods.com/product/auto-timing-chain-and-gears-wall-clock $ 125 US kasama ang pagpapadala.
AC Powered Engine Timing Light: 8 Hakbang
AC Powered Engine Timing Light: Bumalik noong 1970s gusto ko ng isang xenon timing light upang mapalitan ang halos walang silbi na neon timing na mayroon ako. Nanghiram ako ng ilaw na pinagagana ng AC ng isang kaibigan upang magamit. Habang nasa akin ito, binuksan ko ito at gumawa ng isang diagram ng circuit. Pagkatapos ay nagpunta ako sa isang electronics