Talaan ng mga Nilalaman:

Laro ng Reaksyon ng FPGA: 10 Hakbang
Laro ng Reaksyon ng FPGA: 10 Hakbang

Video: Laro ng Reaksyon ng FPGA: 10 Hakbang

Video: Laro ng Reaksyon ng FPGA: 10 Hakbang
Video: Tanggol is beaten by Kidlat's group | FPJ's Batang Quiapo (w/ English Subs) 2024, Hulyo
Anonim
Laro ng Reaksyon ng FPGA
Laro ng Reaksyon ng FPGA

Ni Summer Rutherford at Regita Soetandar

Hakbang 1: Panimula

Para sa aming pangwakas na proyekto para sa CPE 133, nagdisenyo kami ng isang reaksyon na laro sa VHDL para sa isang board ng Basys3. Ang larong ito ay maaaring mas malapit na ihambing sa arcade game na "Stacker" kung saan kailangang i-drop ng player ang mga bloke sa tamang oras. Ang board ng Basys3 ay konektado sa isang breadboard, na mayroong mga alternating LED. Ang mga ilaw na LED na ito ay kahalili sa isang tukoy na dalas, depende sa antas. Ang larong ito ay gumagamit ng relo ng orasan at ang 4 na digit na 7 segment na pagpapakita, pati na rin ang isang may takdang makina ng estado. Kapag pinapagana ng manlalaro ang tamang switch habang ang gitnang LED ay nag-iilaw, ang player ay sususulong sa susunod na antas ng laro, pinapataas ang dalas ng mga alternating LED. Ginagawa nitong mas mahirap ang bawat sunod na antas kaysa sa dating antas. Kapag matagumpay na natalo ng manlalaro ang antas 7, ang pinakamataas na antas, isang mensahe ang ipapakita sa pagpapakita ng segment at lahat ng mga LED ay sabay na mag-flash on at mag-off.

Hakbang 2: Mga Kagamitan

Mga Kagamitan
Mga Kagamitan
Mga Kagamitan
Mga Kagamitan
Mga Kagamitan
Mga Kagamitan

Ang mga materyales na kakailanganin mo ay:

  • Digilent Basys3 board na may micro USB cable
  • Breadboard
  • 5 LEDs
  • 5 resistors (gumamit kami ng 220 ohm)
  • 11 mga jumper wires
  • Computer na may Vivado

Hakbang 3: Disenyo ng Itaas na Antas ng Black Box

Nangungunang Level ng Disenyo ng Black Box
Nangungunang Level ng Disenyo ng Black Box
Nangungunang Level ng Disenyo ng Black Box
Nangungunang Level ng Disenyo ng Black Box

Tulad ng nakikita mo, nagsisimula ang aming nangungunang antas ng diagram ng block sa pamamagitan ng pagkuha ng mga kinakailangang orasan mula sa aming submodule, ClkDivide. Ang mga orasan na ito ay mga pag-input sa iba't ibang mga bloke ng proseso. Mahalaga, kailangang kilalanin ng laro na kapag ang isang gumagamit ay tama na nakabukas ang switch, ang mga LED ay dapat magsimulang alternating mas mabilis at ang display ay kailangang umakyat sa isang antas. Ang diagram ng block ay maaaring magmukhang medyo mabaliw, ngunit iyon ay dahil maraming mga signal na itinatag sa isang tiyak na proseso at pagkatapos ang signal na iyon ay tumutukoy sa isa pang signal sa isa pang block ng proseso.

Sa huli, ang mga input lamang na kinukuha ng laro ay ang input na orasan sa Basys3 board na tumatakbo sa 100 Mhz, pitong switch sa board ng Basys3, at ang pindutang i-reset. Ang na-output ay ang anode para sa pitong segment na pagpapakita, ang pitong mga segment para sa display, at ang mga LED.

Hakbang 4: CLKDivide

CLKDivide
CLKDivide
CLKDivide
CLKDivide
CLKDivide
CLKDivide

Ang submodule ng divider ng orasan na ito ay lumikha ng isang mas mabagal na orasan depende sa halaga na na-map namin dito sa aming pangunahing file. Ginamit namin ang submodule na ito upang matukoy ang Clk400, PushClk, at newlck. Ang submodule na ito ay tumatagal ng isang orasan at isang 32 bit divider bilang mga input. Ang isang pinabagal na orasan ay na-output. Mayroong isang bloke ng proseso para sa divider at ang pinabagal na orasan. Sa proseso ay isang pansamantalang variable, na tinawag naming bilang, na bibilangin isa bawat oras na tumama ang isang tumataas na gilid ng naka-input na orasan. Kapag naabot na nito ang numero ng namamahagi, nagpalipat-lipat ang pinabagal na orasan at bilangin ang pag-reset sa zero.

Hakbang 5: Pag-shift ng Proseso ng Shift

Pag-block ng Proseso ng Shift
Pag-block ng Proseso ng Shift

Kinokontrol ng bloke ng proseso ng Shift ang kahaliling paggalaw at bilis ng mga LED. Sa listahan ng pagiging sensitibo ay ang mga signal ng newclk at Stop. Ang paghinto ay nagdudulot ng isang maikling pagkaantala kapag ang gumagamit ay pumasa sa antas. Kung ang paghinto ay hindi mataas, pagkatapos ay ang mga LED na kahalili bilang normal batay sa bilis ng newclk. Ang alternating pattern na ito ay kinokontrol ng dalawang variable: Subaybayan at bilangin. Tinutukoy ng bilang kung aling LED ang dapat na nasa, habang ang Track ay tumutukoy kung ang bilang ay dapat na bilangin pataas o pababa. May isa pang senyas, Pangwakas, na nalalapat lamang kapag ang Antas ay "111," na nagpapahiwatig na tinalo ng manlalaro ang laro. Ang panghuling kahalili sa pagitan ng 0 at 1 bawat gilid ng orasan upang i-on at i-off ang mga LED nang tuloy-tuloy. Ito ay isang visual na elemento lamang para sa huling pagpapakita.

Ang proseso ng paglilipat na ito ay ang perpektong lugar upang magsimula para sa proyektong ito. Kung makukuha mo ang iyong mga LED na alternating tama at pare-pareho, pagkatapos mula dito kailangan mo lamang idagdag sa pag-uugali kapag nag-level up!

Hakbang 6: Finite State Machine

Makina ng Estado ng Estado
Makina ng Estado ng Estado

Lumikha kami ng isang Finite State Machine upang idikta ang pag-uugali kapag ang input switch o reset button ay pinindot. Ang bawat estado ay isang "antas" at kung ang switch ay nakabukas sa maling oras o na-press ang press, ang antas ay babalik sa "000." Kung hindi man, kung ang switch ay wastong nakabukas pagkatapos ay ang antas ay gumagalaw hanggang sa maabot nito ang pangwakas na estado, ang "111" at ang pagtatapos ng display ay nangyayari. Ang FSM ay batay sa dalawang proseso ng mga bloke ng sync_proc at comb_proc. Ginagamit ng Sync_proc ang orasan na tinawag naming PushClk. Kinokontrol ng orasan na ito kung gaano kabilis ang susunod na estado ay nagiging kasalukuyang estado. Ang orasan na ito ay dapat na napakabilis; pumili kami ng isang bilis na halos dalawang beses na mas mabilis kaysa sa aming pinakamabilis na bilis ng LED.

Ipinatupad namin ang code na ito gamit ang isang FSM para sa mga antas; gayunpaman, pagkatapos ng proyektong ito napagtanto namin ang isang mas mahusay na paggamit ng isang FSM ay maaaring magkaroon ng isang bilang ng estado, isang estado ng pag-reset, o isang estado ng pananatili. Kung walang pinipilit, nasa estado ng pananatili. Kung ang pagpi-reset ay pinindot o ginulo ang player, ito ay nasa reset na estado. Kung tama ang pagpindot, ito ay nasa estado ng count up. Maraming iba pang mga paraan upang magamit din ang isang FSM sa larong ito!

Hakbang 7: Pagkontrol sa Block ng Proseso ng Display Sa Antas

Pagkontrol sa Block ng Proseso ng Display Sa Antas
Pagkontrol sa Block ng Proseso ng Display Sa Antas

Kinokontrol ng antas ang block ng proseso ng Display. Ang mga variable sa listahan ng pagiging sensitibo ay Antas, I-reset, at Clk400. Nagsisimula ang pagpapakita ng 7 segment sa pamamagitan ng pagpapakita ng '1' para sa unang antas. Nagbibilang ito hanggang 7 bawat oras na ang gumagamit ay pumasa sa isang antas upang ipakita sa gumagamit kung anong antas sila nasa. Kapag naipasa na ng gumagamit ang antas 7, ipinapakita nito ang "COOL" upang ipahiwatig na natalo ng manlalaro ang laro. Ang display na "COOL" ay tumatakbo sa isang 400 Hz na orasan na tinawag naming Clk400. Kung ang Reset ay pinindot, ang display ay babalik sa "1."

Hakbang 8: Pagkontrol sa Bilis ng LED Sa Antas

Pagkontrol sa Bilis ng LED Sa Antas
Pagkontrol sa Bilis ng LED Sa Antas

Sa wakas, kinokontrol ng Antas ang bilis ng mga LED. Ang antas ay ang tanging signal sa listahan ng pagiging sensitibo. Ang D1 ay ang senyas na pumupunta sa proseso ng Clock Divider upang makakuha ng newclk. Sa tuwing binabago ang Antas, o nagbabago ang estado, ang block ng proseso ay "Bilis." Tinutukoy ng prosesong ito ang halaga ng D1. Mayroong 8 tinukoy na mga halaga ng D1 na pinili namin batay sa kung gaano kabilis na nais naming tumakbo ang bawat antas. Nagiging maliit ang D1 sa bawat pagtaas ng antas ng oras upang mas mabilis na tumakbo ang newclk.

Hakbang 9: Hardware Assembly

Hardware Assembly
Hardware Assembly

Ikinonekta namin ang breadboard sa Basys3 sa isa sa mga konektor ng pmod. Anim sa mga port ng pmod ay ginamit upang mag-plug sa isang male to male connector, isa para sa ground at ang isa pa para sa 5 LEDs. Naglagay din kami ng isang risistor para sa bawat LED. Ang mga resistors na ito ay 220Ω at pinipigilan ang mga LED na maging maiikli at masunog. Bagaman ang bawat LED ay may ilang paglaban, ang paglaban ay hindi sapat upang hadlangan ang boltahe mula sa mapagkukunan.

Hakbang 10: Magsaya

Ang larong ito ay napakadaling upang i-play. Nagsisimula ang manlalaro sa dulong kanan na switch 1 ng board, V17. Dapat nilang i-flip ang switch nang mataas kapag nakabukas ang gitnang LED. Pagkatapos ay ilipat nila ang isang switch sa kaliwa at gawin ang parehong bagay! Kung ang manlalaro ay makarating sa dulo, magtatapos sila sa ikapitong switch, W14. Kung talunin nila ang laro makakakita sila ng isang talagang nakakatuwang pagpapakita ng pagtatapos!

Isang bagay na dapat tandaan ay kapag lumilikha ng larong ito ang bilis ay ganap na nasa iyo! Kung ang napili nating mga bilis ay masyadong mabagal, huwag mag-atubiling pabilisin ito at gawin itong mas mahirap! Wala ring itinakdang bilang ng mga antas. Kung nais mong gawin itong magkaroon ng mas maraming mga antas, may mga pagbabago na dapat gawin sa FSM at ang mga bloke ng proseso na tinutukoy ng Antas, ngunit ang mga ito ay napaka-simpleng pagbabago.

Pinili rin naming gumamit ng mga switch sa board bilang input ng gumagamit, ngunit posible rin ito na may isang pindutan sa board ng Basys3; aalisin ng pindutan ang pangangailangan na i-reset ang mga switch sa tuwing magsisimula ang gumagamit. Sa una ay gumamit kami ng isang pindutan, subalit naging sanhi ito ng mga pagkakamali sa pagtukoy sa antas dahil tatalon ito ng maraming antas kung ang dalawang tumataas na gilid ng PushClk ay na-hit kapag pinindot ang pindutan.

Nasa ibaba ang isang video na nagpapakita kung paano maglaro, dumaan sa unang 4 na antas, at sa huling pagtatapos ng display.

Ang pangunahing file para sa proyektong ito ay kasama sa ibaba.

Pinagmulan

Manwal ng sangguniang Basys3

Inspirasyon para sa proyekto - Arduino Stop It game

Inirerekumendang: