Përmbajtje:
- Hapi 1: Hyrje
- Hapi 2: Materialet
- Hapi 3: Diagrami i Nivelit të Lartë Dizajni i Kutisë së Zezë
- Hapi 4: CLKDivide
- Hapi 5: Zhvendosni bllokimin e procesit
- Hapi 6: Makina me gjendje të fundme
- Hapi 7: Kontrolli i bllokimit të procesit të ekranit me nivel
- Hapi 8: Kontrollimi i shpejtësisë LED me nivel
- Hapi 9: Asambleja e harduerit
- Hapi 10: Argëtohuni
Video: Lojë Reagimi FPGA: 10 hapa
2024 Autor: John Day | [email protected]. E modifikuara e fundit: 2024-01-30 12:22
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
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ë
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
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
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
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
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
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
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:
555 Kohëmatësi Reagimi Lojë: 5 Hapa
555 Timer Reaction Lojë: Target AudienceKy udhëzues ka për qëllim njerëzit që janë të interesuar në qarqe (me pak sfond) që kërkojnë një lojë të thjeshtë që mund ta ndërtoni me vetëm disa përbërës të lirë. Niveli i VështirësisëKjo do të ishte e vështirë nëse
Mini lojë "Guess the Number" Lojë me mikro: bit: 10 hapa
Mini Makina e lojës "Guess the Number" me Micro: bit: A keni luajtur ndonjëherë " Guess the Number "? Kjo është një makinë lojërash shumë e thjeshtë për t’u ndërtuar që luan " Guess the Number " me ty Ne e projektuam këtë projekt DIY për të inkurajuar lojën fizike dhe për t'i ndihmuar fëmijët të mësojnë programim. Ai përdor një MU
Qesharak Arduino Reagimi Lojë: 3 Hapa
Reagimi Qesharak Arduino Lojë: Qesharake lojë reagimi Arduino për të gjithë familjen;) Bazuar në komunikimin Bluetooth të platformës së kryqëzuar. Ju duhen vetëm disa gjëra Arduino, një smartphone Android dhe një kuti këpucësh. Nëse nuk keni asnjë nga këto, besoni fort në të: nuk ka asgjë që
Lojë Reagimi- Projekti i Inxhinierisë Kompjuterike: 3 Hapa
Lojë Reagimi- Projekti i Inxhinierisë Kompjuterike: Loja e reagimit është pikërisht ajo që thotë emri, ajo teston shpejtësinë tuaj të reagimit. Ju mund të pyesni se çfarë përfitimesh mund të ketë ky server jashtë argëtimit, mirëpo ju mund ta përdorni këtë për individët në rehabilitim nga operacioni ose aksidentet. Reagimi i tyre tregon
Arduino Reagimi Lojë: 9 hapa
Arduino Reagimi Lojë: Unë e bëra këtë lojë si një detyrë shkollore. Duhej të bënim diçka interaktive me një arduino. Ky është projekti im i parë Arduino që kam bërë ndonjëherë, kështu që ishte goxha i vështirë, por jo i pamundur