Përmbajtje:

Lojë FPGA Asteroid: 7 hapa (me fotografi)
Lojë FPGA Asteroid: 7 hapa (me fotografi)

Video: Lojë FPGA Asteroid: 7 hapa (me fotografi)

Video: Lojë FPGA Asteroid: 7 hapa (me fotografi)
Video: 7. The Songhai Empire - Africa's Age of Gold 2024, Tetor
Anonim
Lojë FPGA Asteroid
Lojë FPGA Asteroid

Për projektin tonë përfundimtar CPE 133, ne vendosëm të krijonim një lojë asteroidësh në FPGA-në tonë duke përdorur dy çelësa të butonave dhe ekranin me 7 segmente. Loja funksionon në mënyrë që një asteroid të pjellë në njërën nga tre rreshtat e përzgjedhur rastësisht dhe të vijë duke kërcyer drejt anijes në anën tjetër të ekranit me 7 segmente. Butoni i sipërm dhe butoni i poshtëm mund të përdoren për të lëvizur anijen tuaj nga rruga e asteroidit. Me dështimin për ta bërë këtë, ekrani lexon ‘BAnG’ për një moment dhe pastaj rinis shpejt lojën në mënyrë që përdoruesi të provojë përsëri. Ajo që vijon është një përshkrim i shkurtër se si është bërë projekti në mënyrë që çdo përdorues të mund të përsërisë ose përmirësojë modelin tonë.

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

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

Projekti kryesisht përbëhet nga Makinat e Gjendjes së Fundit (FSM), të cilat përdorin logjikën për të transferuar FPGA midis shteteve që ruajnë dhe shfaqin vlera të ndryshme të pozicioneve të anijeve dhe shkëmbinjve. Dy modulet kryesore janë loja FSM për shkëmbin dhe anijen, dhe dekoderi binar me 7 segmente i ekranit FSM, të cilat janë integruar së bashku duke përdorur një model strukturor shumë të thjeshtë në VHDL.

FSM-të u krijuan për pozicionin e anijes, pozicionin e shkëmbit dhe për deshifruesin e 7 segmenteve. Qëllimi i FSM të anijes është që anija të mund të lëvizë në pozicionin e duhur kur luajtësi shtyp një buton lart ose poshtë. FSM është e nevojshme sepse duhet të mbajë mend se në cilin pozicion ishte i fundit për të kaluar në pozicionin e duhur.

Qëllimi i FSM -së së shkëmbit është të lëvizë shkëmbin në pozicionin e duhur bazuar në atë rresht dhe pozicionin e fundit në atë rresht. Përveç kësaj, ai mban gjurmët e pozicionit për modulin që do ta shfaqë atë dhe në mënyrë të rastësishme zgjedh një rresht të ri që do të shfaqet në tjetrin.

FSM për dekoderin e ekranit me 7 segmente u përdor jo vetëm për të shfaqur anijen dhe shkëmbin, por edhe për të shfaqur "BAnG" kur pozicioni i anijes dhe pozicioni i shkëmbit janë të njëjtë.

Hapi 2: Materialet

Materialet e përdorura në projekt ishin:

  • Bordi i Zhvillimit Basys3 nga Digilent, Inc.
  • Suite Dizajn Vivado
  • sseg_dec.vhd (Ky skedar na u sigurua në Polylearn dhe u shkrua nga Bryan Mealy)
  • Clk_div.vhd (Ky skedar na u sigurua në Polylearn dhe u shkrua nga Bryan Mealy)
  • Tre makina të gjendjes së fundme (FSM)

Hapi 3: Krijimi i lojës

Duke bërë lojën
Duke bërë lojën
Duke bërë lojën
Duke bërë lojën
Duke bërë lojën
Duke bërë lojën
Duke bërë lojën
Duke bërë lojën

Moduli i lojës u krijua duke përdorur modelimin e sjelljes për të përshkruar gjendjet e anijes dhe shkëmbit për FSM -të e tyre përkatëse. Avantazhi i kësaj është se është shumë më e lehtë të modelosh qarkun me sjellje duke përshkruar atë që bën në vend që të zbulosh të gjithë përbërësit e nevojshëm për të hartuar pajisjen.

Gjendjet shkëmbore janë bërë duke përdorur një gjenerator pseudo të numrave të rastit për pozicionin e parë të shkëmbit. Për ta arritur këtë, ne i dhamë gjeneratorit orën e vet e cila ishte jashtëzakonisht e shpejtë në raport me shpejtësinë e lojës. Në secilën skaj në rritje, një numër tre bitësh rritet, dhe të gjitha vlerat e tij korrespondojnë me një nga tre gjendjet fillestare për anijen. Prandaj, tre vlera korrespondojnë me pozicionin 3 (lart djathtas), tre korrespondojnë me pozicionin 7 (qendra) dhe dy korrespondojnë me pozicionin 11 (poshtë djathtas).

Pasi të ketë ndodhur gjenerimi i rastësishëm dhe asteroidit i është dhënë një gjendje fillestare, ai rrjedh horizontalisht drejt anijes pa ndërprerje.

0 ← 1 ← 2 ← 3

4 ← 5 ← 6 ← 7

11 ← 10 ← 9 ← 8

Ora e përdorur për logjikën e gjendjes tjetër të shkëmbit kontrollon shpejtësinë e lojës; ne gjetëm përmes provës dhe gabimit se 9999999 është një vlerë e mirë për numrin maksimal të saj.

Logjika e anijes funksionon duke u inicializuar në pozicionin qendror (pozicioni 4) në anën shumë të majtë. Nëse shtypet butoni i sipërm ose butoni i poshtëm, anija do të lëvizë lart e poshtë në pozicionin 0 dhe 11 që korrespondon me butonin që është shtypur.

Në mënyrë që lëvizja e anijes të ndihet mirë për përdoruesin, ne nuk e bëmë lëvizjen e saj asinkrone. Ne përdorëm një orë për ndryshimet e gjendjes së saj dhe përdorëm një numër maksimal prej 5555555.

Hapi 4: Shfaqja e Rezultatit

Dekoduesi binar me 7 segmente merr variablat e pozicionit 4-bit për anijen dhe asteroidin dhe shfaq imazhin e duhur (ose anija dhe shkëmbi ose mesazhi "BAnG").

Ai e arrin këtë duke kontrolluar së pari nëse të dy janë të barabartë dhe pastaj duke shfaqur mesazhin "BAnG" nëse kontrolli kthehet i vërtetë.

Nëse nuk kthehet e vërtetë, deshifruesi do të shfaqë anijen dhe shkëmbin duke u zhvendosur mes tyre me një frekuencë shumë të lartë të orës dhe duke mashtruar syrin që t'i shohë ata sikur të shfaqen në të njëjtën kohë.

Hapi 5: Vendosja e të gjitha së bashku

Vendosja e të gjitha së bashku
Vendosja e të gjitha së bashku

Ne kemi përfshirë FSM të anijeve dhe shkëmbinjve në një FSM të madhe që e lidhëm me ekranin FSM. Hyrjet në lojë janë butoni lart dhe butoni poshtë në tabelën BASYS3 dhe ora e sistemit. Rezultatet janë vektorët e segmentit dhe anodës me shtatë segmente.

Këto hyrje dhe dalje do të shihen në skedarin e kufizimeve ku janë portifikuar.

Hapi 6: Modifikimet e së ardhmes

Në të ardhmen, shtimi i më shumë funksioneve të lëvizjes së anijeve në projekt do të ishte një përmirësim. Kjo mund të arrihet thjesht duke dhënë 2 hyrje të tjera të butonit dhe duke lejuar që anija të marrë pozicione (gjendje) të ndryshme nga 0, 4 dhe 8. Një modifikim tjetër i mundshëm mund të jetë kontrollimi i kohës së gjendjes tjetër të asteroidit në mënyrë që të fillojë ngadalë dhe të rrisë shpejtësinë me 1.5 herë sa herë që humbet anijen derisa të goditet, ku do të rifillonte dhe do të bëhej përsëri i ngadalshëm. Kjo do të rrisë vështirësinë e lojës dhe do ta bëjë atë më argëtuese për përdoruesit nëse do të zbatohej, dhe mund të bëhet duke krijuar një ndryshore për numrin maksimal të orës së gjendjes së ardhshme të shkëmbit, duke e shumëzuar atë ndryshore me 1.5 sa herë që asteroidi nuk 't hit, dhe rivendosjen e saj në vlerën e saj fillestare sa herë që godet shkëmbi.

Hapi 7: Përfundimi

Ky projekt na ka ndihmuar të kuptojmë më mirë makinat me gjendje të fundme, orët dhe shfaqjen në mënyrë interaktive në ekranet me shtatë segmente.

Gjëja më e madhe në lidhje me makinat me gjendje të fundme është se është e rëndësishme të dini (mbani mend) në çfarë gjendje jeni aktualisht në mënyrë që të kaloni në gjendjen tjetër të dëshiruar. Ironikisht, këshilla të mira për jetën; ju duhet të dini se ku jeni për të ditur se ku po shkoni.

Duke manipuluar raste të ndryshme të orëve, ne ishim në gjendje të gjeneronim numra rastësisht, ta lëviznim shkëmbin në pozicionin tjetër dhe të menaxhonim shfaqjen e anijes, shkëmbit dhe mesazhit të fundit të lojës.

Mësuam se më shumë se një anodë nuk mund të shfaqen në të njëjtën kohë. Moduli që na është dhënë përfitoi që syri i njeriut mund të shohë ndryshimin vetëm në një frekuencë të caktuar. Pra, u zgjodh një frekuencë më e lartë e ndërrimit të anodave. Anija dhe shkëmbi që shihen në të njëjtën kohë është në fakt një aludim pasi secila shfaqet veç e veç, por shumë shpejt. Ky koncept u zbatua për të shfaqur lëvizjen e anijes, shkëmbit dhe mesazhin "BAnG".

Recommended: