Përmbajtje:

Lojë Reagimi FPGA: 10 hapa
Lojë Reagimi FPGA: 10 hapa

Video: Lojë Reagimi FPGA: 10 hapa

Video: Lojë Reagimi FPGA: 10 hapa
Video: Synopsys Stock Analysis | SNPS Stock Analysis 2024, Nëntor
Anonim
Lojë Reagimi FPGA
Lojë Reagimi FPGA

Nga Summer Rutherford dhe Regita Soetandar

Hapi 1: Hyrje

Për projektin tonë përfundimtar për CPE 133, ne krijuam një lojë reagimi në VHDL për një tabelë Basys3. Kjo lojë mund të krahasohet më ngushtë me lojën arcade "Stacker", ku lojtari duhet të hedhë blloqet në kohën e duhur. Bordi Basys3 është i lidhur me një dërrasë buke, e cila ka LED të alternuar. Këto drita LED do të alternohen në një frekuencë të caktuar, në varësi të nivelit. Kjo lojë përdor ndarësin e orës dhe ekranin me 4 shifra të segmentit 7, si dhe një makinë me gjendje të fundme. Kur luajtësi aktivizon çelësin e duhur ndërsa drita LED e mesme ndizet, lojtari do të përparojë në nivelin tjetër të lojës, duke rritur frekuencën e LED -ve alternuese. Kjo e bën secilin nivel të njëpasnjëshëm më të vështirë se niveli i mëparshëm. Kur luajtësi rrah me sukses nivelin 7, nivelin më të lartë, një mesazh do të shfaqet në ekranin e segmentit dhe të gjitha LED -të do të ndizen njëkohësisht dhe fiken.

Hapi 2: Materialet

Materiale
Materiale
Materiale
Materiale
Materiale
Materiale

Materialet që do t'ju nevojiten janë:

  • Pllakë Digilent Basys3 me kabllo mikro USB
  • Breadboard
  • 5 LED
  • 5 rezistencë (ne përdorëm 220 ohms)
  • 11 tela kërcyes
  • Kompjuter me Vivado

Hapi 3: Diagrami i Nivelit të Lartë Dizajni i Kutisë së Zezë

Diagrami i Nivelit të Lartë Dizajni i Kutisë së Zezë
Diagrami i Nivelit të Lartë Dizajni i Kutisë së Zezë
Diagrami i Nivelit të Lartë Dizajni i Kutisë së Zezë
Diagrami i Nivelit të Lartë Dizajni i Kutisë së Zezë

Siç mund ta shihni, bllok -diagrami i nivelit tonë të lartë fillon duke marrë orët e kërkuara nga nënmoduli ynë, ClkDivide. Këto orë janë hyrje në blloqet e ndryshme të procesit. Në thelb, loja duhet të pranojë që kur një përdorues ndez saktë çelësin, LED -të duhet të fillojnë të alternohen më shpejt dhe ekrani duhet të ngjitet një nivel. Bllok -diagrami mund të duket paksa i çmendur, por kjo ndodh sepse ka shumë sinjale që vendosen në një proces të caktuar dhe më pas ai sinjal përcakton një sinjal tjetër në një bllok tjetër procesi.

Në fund, të vetmet hyrje që merr loja janë ora hyrëse në tabelën Basys3 që funksionon në 100 Mhz, shtatë ndërprerës në tabelën Basys3 dhe butoni i rivendosjes. Ajo që nxirret është anoda për ekranin me shtatë segmente, shtatë segmentet për ekranin dhe LED -të.

Hapi 4: CLKDivide

CLK Ndaj
CLK Ndaj
CLK Ndaj
CLK Ndaj
CLK Ndaj
CLK Ndaj

Ky nënmodul i ndarjes së orës krijoi një orë më të ngadaltë në varësi të vlerës që i kishim shënuar në skedarin tonë kryesor. Ne përdorëm këtë nënmodul për të përcaktuar Clk400, PushClk dhe newlck. Ky nënmodul merr një orë dhe një ndarës 32 bit si hyrje. Nxirret një orë e ngadalësuar. Ekziston një bllok procesi për ndarësin dhe orën e ngadalësuar. Në proces është një ndryshore e përkohshme, të cilën e quajtëm numërim, që numëron një herë sa herë që goditet një avantazh në rritje i orës së futur. Pasi arrin numrin e pjesëtuesit, ora e ngadalësuar kaloi dhe numërimi rivendos në zero.

Hapi 5: Zhvendosni bllokimin e procesit

Bllokimi i procesit Shift
Bllokimi i procesit Shift

Blloku i procesit Shift kontrollon lëvizjen dhe shpejtësinë alternative të LED -ve. Në listën e ndjeshmërisë janë sinjalet newclk dhe Stop. Stop shkakton një vonesë të shkurtër kur përdoruesi kalon nivelin. Nëse Stop nuk është i lartë, atëherë LED -të alternohen si zakonisht bazuar në shpejtësinë e newclk. Ky model alternativ kontrollohet nga dy variabla: Track and count. Numërimi përcakton se cila LED duhet të jetë e ndezur, ndërsa Track përcakton nëse numërimi duhet të numërohet lart ose poshtë. Ekziston një sinjal tjetër, Final, që vlen vetëm kur Niveli është "111", që tregon se lojtari e ka mposhtur lojën. Finalja alternon midis 0 dhe 1 çdo skaj të orës për të ndezur dhe fikur vazhdimisht LED -të. Ky është vetëm një element vizual për shfaqjen përfundimtare.

Ky proces ndryshimi është vendi i përsosur për të filluar për këtë projekt. Nëse mund t'i bëni LED -et tuaja të alternohen në mënyrë korrekte dhe të vazhdueshme, atëherë nga këtu ju vetëm duhet të shtoni sjelljen kur niveloheni!

Hapi 6: Makina me gjendje të fundme

Makina me gjendje të fundme
Makina me gjendje të fundme

Ne krijuam një Makinë të Gjendjes së Fundit për të diktuar sjelljen kur shtypet çelësi i hyrjes ose butoni i rivendosjes. Çdo gjendje është një "nivel" dhe nëse çelësi ndizet në kohën e gabuar ose shtypet rivendosja, niveli kthehet përsëri në "000". Përndryshe, nëse çelësi është ndezur saktë, atëherë niveli ngrihet lart derisa të arrijë gjendjen përfundimtare, "111" dhe shfaqet shfaqja përfundimtare. FSM bazohet në dy blloqet e procesit sync_proc dhe comb_proc. Sync_proc përdor orën që ne e quajtëm PushClk. Kjo orë kontrollon sa shpejt gjendja tjetër bëhet gjendja aktuale. Kjo orë duhet të jetë mjaft e shpejtë; ne zgjodhëm një shpejtësi që ishte rreth dy herë më e shpejtë se shpejtësia jonë më e shpejtë LED.

Ne e zbatuam këtë kod duke përdorur një FSM për nivelet; megjithatë, pas këtij projekti ne kuptuam se një përdorim më efikas i një FSM mund të ketë qenë të ketë një gjendje numërimi, një gjendje rivendosjeje ose një gjendje qëndrimi. Nëse asgjë nuk shtypet, është në gjendje qëndrimi. Nëse rivendosja është duke u shtypur ose luajtësi është i prishur, ai është në gjendje rivendosjeje. Nëse shtypet saktë, është në gjendjen e numërimit. Ka shumë mënyra të tjera për të përdorur një FSM edhe në këtë lojë!

Hapi 7: Kontrolli i bllokimit të procesit të ekranit me nivel

Kontrollimi i bllokimit të procesit të shfaqjes me nivel
Kontrollimi i bllokimit të procesit të shfaqjes me nivel

Niveli kontrollon bllokun e procesit Display. Variablat në listën e ndjeshmërisë janë Level, Reset dhe Clk400. Shfaqja me 7 segmente fillon duke shfaqur '1' për nivelin e parë. Ai numëron deri në 7 sa herë që përdoruesi kalon një nivel për t'i treguar përdoruesit në çfarë niveli janë. Pasi përdoruesi të ketë kaluar nivelin 7, ai shfaq "COOL" për të nënkuptuar që lojtari ka mundur lojën. Ky ekran "COOL" funksionon nga një orë 400 Hz që ne e quajtëm Clk400. Nëse shtypet Reset, ekrani kthehet në "1."

Hapi 8: Kontrollimi i shpejtësisë LED me nivel

Kontrollimi i shpejtësisë LED me nivel
Kontrollimi i shpejtësisë LED me nivel

Së fundi, Niveli kontrollon shpejtësinë e LED -ve. Niveli është sinjali i vetëm në listën e ndjeshmërisë. D1 është sinjali që hyn në procesin Clock Divider për të marrë newclk. Sa herë që Niveli ndryshon, ose ndryshon gjendja, blloku i procesit "Shpejtësia". Ky proces përcakton vlerën e D1. Ekzistojnë 8 vlera të përcaktuara të D1 që ne zgjodhëm bazuar në atë se sa shpejt donim të funksiononte çdo nivel. D1 bëhet më i vogël sa herë që rritet niveli në mënyrë që newclk të funksionojë më shpejt.

Hapi 9: Asambleja e harduerit

Asambleja e harduerit
Asambleja e harduerit

Ne e lidhëm tabelën e bukës me Basys3 me një nga lidhësit pmod. Gjashtë nga portet pmod u përdorën për të lidhur një lidhës mashkull me mashkull, një për tokën dhe pesë të tjerat për 5 LED. Ne gjithashtu vendosëm një rezistencë për secilën LED. Këta rezistorë janë 220Ω dhe parandalojnë lidhjen e shkurtër të LED -ve dhe djegien e tyre. Edhe pse çdo LED ka njëfarë rezistence, rezistenca nuk është e mjaftueshme për të penguar tensionin nga burimi.

Hapi 10: Argëtohuni

Kjo lojë është shumë e lehtë për tu luajtur. Lojtari fillon në çelësin e djathtë ekstrem 1 të tabelës, V17. Ata duhet ta rrotullojnë çelësin lart kur LED i mesëm është ndezur. Ata pastaj lëvizin një ndërprerës në të majtë dhe bëjnë të njëjtën gjë! Nëse lojtari arrin deri në fund, ata do të përfundojnë në çelësin e shtatë, W14. Nëse ata e mposhtin lojën, ata shohin një shfaqje vërtet përfundimtare argëtuese!

Diçka që duhet vënë re është se kur krijoni këtë lojë, shpejtësia varet plotësisht nga ju! Nëse shpejtësitë që kemi zgjedhur janë shumë të ngadalta, mos ngurroni ta shpejtoni dhe ta bëni edhe më sfiduese! Gjithashtu nuk ka një numër të caktuar nivelesh. Nëse doni ta bëni atë të ketë edhe më shumë nivele, ka modifikime që duhet të bëhen në FSM dhe blloqet e procesit të përcaktuara nga Niveli, por këto janë ndryshime shumë të thjeshta.

Ne gjithashtu zgjodhëm të përdorim çelsat në tabelë si hyrje të përdoruesit, por kjo është gjithashtu e mundur me një buton në tabelën Basys3; butoni do të eliminojë nevojën për të rivendosur çelsat sa herë që përdoruesi fillon nga e para. Ne fillimisht përdorëm një buton, megjithatë kjo shkaktoi gabime në përcaktimin e nivelit sepse do të hidhej në nivele të shumta nëse dy skajet në rritje të PushClk goditeshin kur butoni mbahej i shtypur.

Më poshtë është një video që demonstron se si të luani, duke kaluar nëpër 4 nivelet e para dhe shfaqjen përfundimtare përfundimtare.

Dosja kryesore për këtë projekt është përfshirë më poshtë.

Burimet

Manuali referues i Basys3

Frymëzim për projektin - lojë Arduino Stop It

Recommended: