Përmbajtje:

Lojë Pong: 6 hapa
Lojë Pong: 6 hapa

Video: Lojë Pong: 6 hapa

Video: Lojë Pong: 6 hapa
Video: HAPA DOLLAPA - Kukulla per femije, by Studio "Çamarroket" 2024, Korrik
Anonim
Lojë me pong
Lojë me pong

Materiale:

Bordi Basys3 FPGA

Kabllo VGA

Vivado

Qëllimi i këtij udhëzuesi është të zhvillojë një lojë Pong që do të shfaqet në një monitor. Projekti do të përdorë VHDL për të programuar dhe përdor një Basys3 FPGA për të kryer kodin dhe transferon imazhin duke përdorur një ndërfaqe VGA. Ky tutorial ka për qëllim njerëzit që kanë pak njohuri paraprake për VHDL. Mësimi do të ndahet në 6 seksione të ndryshme: Vështrim i Përgjithshëm, Proces, Kontrollues i Rezultateve, Gjenerim Imazhi, Lojë Pong dhe VGA.

Hapi 1: Vështrim i përgjithshëm

Vështrim i përgjithshëm
Vështrim i përgjithshëm

Imazhi i mësipërm është dizajni i përgjithshëm skematik i projektit

Objektivi i lojës:

Loja përbëhet nga një ekran me një vozitje rrëshqitëse që mund të kontrollohet nga përdoruesi dhe një mur fiks që vepron si kufiri i sipërm. Kur përdoruesi shtyp butonin e fillimit, i cili është butoni lart, topi do të fillojë të kërcejë lart, dhe do të kërcejë nga muri dhe do të përpiqet të godasë vozitjen. Nëse topi godet vozitjen, ai kërcen përsëri dhe vazhdon të kërcejë derisa të humbasë vozitjen. Loja përfundon kur topi nuk arrin të godasë vozitjen. Përdoruesi do të jetë në gjendje të përdorë butonat e majtë dhe të djathtë për të përcaktuar lëvizjen e vozitjes. Për të rivendosur lojën, përdoruesi duhet të shtypë butonin qendror. Koha e vrapimit do të regjistrohet në një ekran me 7 segmente. Ekzistojnë pesë nivele, dhe çdo dhjetë sekonda niveli rritet, derisa të arrini nivelin 5 ku qëndron derisa përdoruesi të humbasë. Nivelet përcaktohen nga shpejtësia e topit; kjo do të thotë që çdo dhjetë sekonda, shpejtësia e topit rritet, duke rritur kështu vështirësinë e lojës.

Arkitektura e Sistemit:

Diagrami më poshtë është bllok diagrami i përgjithshëm bazë i përgjithshëm i sistemit të përgjithshëm. Sistemi ka katër hyrje: Butoni R, Butoni L, Start dhe Reset dhe një orë. Ajo ka një dalje horizontale dhe vertikale të sinkronizimit, RBG (e cila i referohet ngjyrës së pikselit në një vend të caktuar) dhe Score (e cila vepron si një autobus në ekranin me 7 segmente). Butoni lart do të përdoret si fillim butonin, dhe butonat e majtë dhe të djathtë do të përdoren për të lëvizur vozitjen në drejtimet e tyre përkatëse. Ekrani me 7 segmente do të përdoret për të regjistruar rezultatin, që është numri i sekondave që përdoruesi ka luajtur pa humbur lojën. Numri do të shfaqet si një numër dhjetor.

Arkitektura Qarkore: Ne do të ndërtojmë gizmon tonë duke përdorur një FSM që përmban një FSM më të vogël, nën-FSM do të kontrollojë vështirësinë e lojës ndërsa FSM kryesore do të kontrollojë rrjedhën e përgjithshme të lojës. Gizmo ynë gjithashtu do të përdorë të paktën tre ndarës të orës, një për rezultatin (kohën), një për shkallën e rifreskimit të ekranit dhe një që lidhet me daljen e një DeMux në mënyrë që të mund të kontrollojmë sa shpejt loja do të vazhdojë me rritjen e sasisë së vështirësisë. Loja do të lëvizë shumë më shpejt sa më gjatë të luani. Ne do të kemi hyrjen e kontrollit të gjendjes prezente të DeMux të nën-FSM në mënyrë që të mund të kontrollojmë sa shpejt do të shkojë loja deri sa kohë ta luani. Ne do të përdorim disa sportele, një për të rifreskuar ekranin dhe një për të numëruar rezultatin ndërsa vazhdoni të luani. Ky projekt ka dy module kryesore dhe një grup nënmodule që do të manipulojnë të dhënat hyrëse. Dy nënmodulet kryesore janë VGA Driver, si dhe moduli logjik i butonave. Shoferi VGA do të përbëhet nga memorja e programueshme, një ndarës i orës dhe logjika që do të manipulojë daljen për ngjyrën. Moduli logjik i butonit gjithashtu do të përbëhet nga një ndarës i orës dhe një memorie e programueshme, si dhe një konvertues binar në dhjetor për ekranin 7-segmentësh me ndarësin e tij përkatës të orës.

Hapi 2: Procesi i Imazhit

Për pjesën e Procesit të Imazhit të projektit, ne do të përcaktojmë lëvizjen e topit dhe vozitjes. Programi ka porte që përfshijnë butonat e majtë, të djathtë, të lartë dhe të mesëm, gjendjen aktuale, një orë, pozicionet X dhe Y të topit, skajin e majtë dhe të djathtë të vozitjes dhe një dështim. Gjendja aktuale përdoret për të përcaktuar sinjalin e aktivizimit. Kodi kalon mbi rastet e shumta që topi mund të lëvizë, dhe ka vendosur kushte për të përcaktuar rrugën e topit. Blloku tjetër i procesit përcakton drejtimin që lëviz vozisja në bazë të cilit buton shtypet nga përdoruesi. Kodi për këtë pjesë të projektit është i bashkangjitur me komente të hollësishme që përshkruajnë atë që bën secili seksion.

Hapi 3: Trajtuesi i pikëve

Trajtuesi i pikëve
Trajtuesi i pikëve

Ky seksion përbëhet nga skedarë që lidhen me shfaqjen e rezultatit në sekonda në 7 Segment Display në Basys3 Board. Ai përfshin një ndarës të orës që përdoret për të numëruar sekondat, një numërues i pikëve numëron sekondat që përdoruesi po luan, drejtuesi i segmentit merr rezultatin dhe e konverton atë në anodat dhe katodat që do të shfaqen në ekran dhe gjithashtu përcakton pozicionin që numri do të shfaqet dhe së fundi, mbajtësi i segmentit shndërron shifrat binare në shifra dhjetore për t'u shfaqur në ekran. Kontrolluesi i pikëve bashkon të gjitha pjesët dhe harton sinjalet. Kodi për të pesë skedarët është bashkangjitur më poshtë.

Ndarës i orës:

Ndarësi i orës ka hyrje Clk (orë), CEN (aktivizo), dhe Div (ndarës) dhe dalje Clk_out. Nëse sinjali i aktivizimit është i ndezur, atëherë ora do të llogaritet në skajin në rritje.

Numëruesi i pikëve

Numëruesi i Thescore ka hyrje Clk (Ora) dhe RST (Rivendosja) dhe del Clk_Out dhe Q i cili në thelb vepron si rezultat i rezultatit.

Drejtuesi i segmentit

Drejtuesi i segmentit ka hyrje D1, D10, D100, D1000 dhe Clock. Numrat pas "D" i referohen vendit dhjetor në ekranin e segmentit 7. Daljet janë anodat dhe shifra. Ora numëron dhe cakton numrat dhe pozicionin e saj. Për shembull, një "9" do të shfaqet në vendet me "0" në mijëra, qindra dhe dhjetëra vende. Kur kalon në "10", numri tani do të ketë një "1" në vendin e dhjetëra dhe "0" në vendin e mijërave, qindrave dhe njësive.

Trajtuesi i segmentit

Trajtuesi i segmentit ka shifrën si hyrje dhe katodat si dalje. Në thelb janë numrat binarë në ekranin e katodës për të nxjerrë numrat dhjetorë në ekran.

Trajtuesi i pikëve

Trajtuesi i Pikëve përbëhet nga katër entitetet e mëparshëm dhe i bashkon të gjitha dhe harton sinjalet. Gjithashtu mundëson dhe çaktivizon numëruesin bazuar në gjendjen aktuale.

Hapi 4: Gjenerimi i imazhit

Gjenerimi i imazhit përbëhet nga katër përbërës: Animacion, Fail Counter, Refresh Image dhe Start Counter. Këto skedarë i referohen mënyrës së krijimit të imazheve në monitorin e ekranit.

Animacion

Skedari i animacionit ka hyrje Clk (Sinjali i orës), CEN (aktivizimi i numërimit), RST (Sinjali i rivendosjes), B_X (pozicioni X i topit), B_Y (pozicioni Y i topit), P_L (pozicioni i vozitjes së majtë) dhe P_R (pozicioni i djathtë i vozitjes). Rezultatet janë WA (adresa ku po i shkruajmë ngjyrën), dhe WD (ngjyra që shkruhet në adresën e përcaktuar). Skedari ka Play_Counter që është një numërues i cili do të përdoret si hyrje kontrolli për MUX, një kodues që mund të nxjerrë ngjyrat e duhura në vendet e duhura, dhe së fundi një multiplexer që shfaq ngjyrën e saktë bazuar në pozicionin e vozitjes dhe topi.

Rifresko imazhin

Skedari i Rifreskimit të Imazhit përdoret për të rifreskuar imazhin kur pozicioni i topit ndryshon. Skedari përfshin komponentët nga skedarët Animation, Start Counter dhe Fail Counter. Ai harton sinjalet nga secili komponent dhe përdor logjikën e gjendjes për të përcaktuar sinjalet dhe adresat e daljes.

Filloni Counter

Counter Start përdor hyrjet Clk, RS dhe CEN dhe nxjerr WA dhe WD. Ai përdor një numërues dhe konvertim për të përcaktuar hyrjen e kontrollit për MUX. Multiplekseri pastaj përdor hyrjen për të përcaktuar adresat e sakta të ngjyrave dhe i dërgon këto të dhëna drejtuesit të VGA. Kjo përdoret për të shfaqur "Pong" kur përdoruesi fillon lojën.

Counter Fail

Numëruesi i dështimit përdoret për të shfaqur "Game Over" kur përdoruesi humbet lojën. Ka një sinjal Clk, RST dhe CEN. Ai përdor një numërues dhe një formulë konvertimi për të përcaktuar hyrjen e kontrollit për MUX. Multiplekseri pastaj përdor hyrjen për të përcaktuar adresat e sakta të ngjyrave dhe i dërgon këto të dhëna drejtuesit të VGA.

Hapi 5: Lojë me Pong

Lojë me pong
Lojë me pong

Ky seksion i projektit përfshin skedarët Pong Master, Machine State Finite (FSM), Timer dhe Start Debounce.

Kohëmatësi

Kohëmatësi ka hyrje Clk (Clock) dhe PS (Present State) dhe Timer dhe Clk_out si dalje. Kohëmatësi përdoret për të ndryshuar shpejtësinë e lojës rreth çdo pesë sekonda.

Rrjedha FSM

Flow FSM ka hyrje Clk, Fail, Timer, Bttn_S (Start Button) dhe Buttn_RST (Reset Button) dhe prodhon Pres_S (Present State Output). FSM përdor kohëmatësin për të azhurnuar gjendjen aktuale në gjendjen tjetër dhe vazhdon të azhurnojë gjendjen tjetër derisa loja të arrijë nivelin 5 ku ajo qëndron derisa loja të përfundojë.

Filloni Debounce

Debounce Start është kërcimi fillestar i topit. Ka hyrje S_in dhe Clk, dhe dalje S_out.

Pong Master Ky skedar përdor të gjithë përbërësit e mëparshëm dhe e bën atë në mënyrë që të gjithë përbërësit të jenë të menjëhershëm. Fileshtë skedari kryesor që bashkon të gjithë përbërësit e mëparshëm që kemi ndërtuar së bashku.

Hapi 6: Shoferi VGA

Shoferi VGA (Visual Graphics Array) është një pjesë e softuerit që përdoret për të pranuar komanda ose të dhëna që dërgohen në ekranin e ekranit. Shoferi na u dha nga profesori ynë. Përdorni drejtuesin dhe një kordon VGA për të lidhur tabelën Basys3 me monitorin.

Tani duhet të jeni gati për të bërë lojën tuaj Pong duke përdorur VHDL!

Recommended: