Мазмуну:
- 1 -кадам: Обзор
- 2 -кадам: Сүрөт процесси
- 3 -кадам: Упай иштетүүчү
- 4 -кадам: Image Generation
- 5 -кадам: Понг оюну
- 6 -кадам: VGA драйвери
Video: Понг оюну: 6 кадам
2024 Автор: John Day | [email protected]. Акыркы өзгөртүү: 2024-01-30 10:41
Материалдар:
Basys3 FPGA тактасы
VGA кабели
Vivado
Бул көрсөтмөнүн максаты - монитордо көрсөтүлө турган понг оюнун иштеп чыгуу. Долбоор VHDLди программалоо үчүн колдонот жана кодду ишке ашыруу үчүн Basys3 FPGA колдонот жана VGA интерфейси аркылуу сүрөттү өткөрүп берет. Бул окуу куралы VHDL жөнүндө бир аз мурда билген адамдарга арналган. Үйрөткүч 6 башка бөлүмгө бөлүнөт: Сереп салуу, Процесс, Упайларды иштетүүчү, Сүрөт чыгаруу, Понг Оюну жана VGA.
1 -кадам: Обзор
Жогорудагы сүрөт - бул долбоордун жалпы схемасы
Оюндун максаты:
Оюн колдонуучу тарабынан башкарыла турган жылма калагы бар дисплейден жана жогорку чек катары кызмат кылган туруктуу дубалдан турат. Колдонуучу старт баскычын басканда, ал өйдө басканда, топ секире баштайт жана дубалдан секирип, калакты сүзүүгө аракет кылат. Эгерде топ калакка тийсе, ал кайра секирет жана калакты сагынмайынча секирүүнү улантат. Топ калакка тийбей калганда оюн бүтөт. Колдонуучу калактын кыймылын аныктоо үчүн сол жана оң баскычтарды колдоно алат. Оюнду баштапкы абалга келтирүү үчүн колдонуучу борбордук баскычты басышы керек. Чуркоо убактысы 7 сегменттүү дисплейге жазылат. Беш деңгээл бар, жана ар бир он секундда деңгээл жогорулайт, сиз 5 -деңгээлге жеткенче, колдонуучу утулуп калганга чейин калат. Деңгээлдер топтун ылдамдыгына жараша аныкталат; бул ар бир он секундда топтун ылдамдыгы жогорулап, оюндун татаалдыгын жогорулатат дегенди билдирет.
Системалык архитектура:
Төмөндөгү диаграмма системанын негизги жогорку деңгээлдеги блок-схемасы. Системада төрт киргизүү бар: R, Button L, Start жана Reset жана Саат. Бул горизонталдык жана вертикалдуу синхрондоштуруу, RBG (белгилүү бир жерде пикселдин түсүн билдирет) жана Упай (7-сегменттеги дисплейге автобус катары иштеген) бар. Өйдө баскычы баштоо катары колдонулат баскычын жана калакты өз багыттарына жылдыруу үчүн сол жана оң баскычтар колдонулат. 7-сегменттин дисплейи колдонуучунун оюнду жоготпостон ойноп жаткан секунддарынын санын эсепке алуу үчүн колдонулат. Сан ондук сан катары көрсөтүлөт.
Райондук архитектура: Биз кичинекей FSMди камтыган бир FSMдин жардамы менен гизмо курабыз, суб-FSM оюндун татаалдыгын көзөмөлдөйт, ал эми негизги FSM оюндун жалпы агымын көзөмөлдөйт. Биздин гизмо дагы жок дегенде үч сааттык бөлүштүргүчтү колдонот, бири упай үчүн (убакыт), экинчиси дисплейдин жаңыртуу ылдамдыгы үчүн жана экинчиси DeMuxтун чыгуусуна байланган, ошондуктан оюндун ылдамдыгын көзөмөлдөй алабыз. кыйынчылыктын көбөйүшү менен уланат. Оюн канчалык көп ойносо, бир топ ылдамыраак жылат. Биз оюндун канчалык тез ойнолоорун көзөмөлдөй алышыбыз үчүн, биз DeMuxтун суб-FSMдин азыркы абалына ээ болобуз. Биз бир нече эсептегичтерди колдонобуз, бири дисплейди жаңыртуу үчүн, экинчиси сиз ойноону улантууда упайларды эсептөө үчүн. Бул долбоордо эки негизги модуль жана субмодулдар массиви бар, алар киргизилген маалыматты башкарат. Эки негизги субмодуль VGA драйвери, ошондой эле баскыч логикалык модулу. VGA драйвери программалана турган эстутумдан, саат бөлгүчтөн жана түстү чыгарууну башкара турган логикадан турат. Баскыч логикалык модулу, ошондой эле, саат бөлүштүргүчтөн жана программалоочу эстутумдан, ошондой эле 7-сегменттин дисплейи үчүн экиликтен ондукка өзгөрткүчтөн турат.
2 -кадам: Сүрөт процесси
Долбоордун Image Process бөлүмү үчүн биз топтун жана калактын кыймылын аныктайбыз. Программада сол, оң, үстүңкү жана борбордук баскычтар, учурдагы абал, саат, топтун X жана Y позициялары, калактын сол жана оң чети жана ийгиликсиздик бар порттор бар. Учурдагы абал иштетүү сигналын аныктоо үчүн колдонулат. Код топ кыймылдай турган бир нече учурларды камтыйт жана топтун жолун аныктоо үчүн шарттарды койгон. Кийинки процесстик блок колдонуучу кайсы баскычты баскандын негизинде калактын кыймылынын багытын аныктайт. Долбоордун бул бөлүгүнүн коду ар бир бөлүмдүн эмне кылаарын түшүндүргөн деталдуу комментарийлер менен тиркелет.
3 -кадам: Упай иштетүүчү
Бул бөлүм Basys3 тактасында 7 сегменттин дисплейинде баллды секундада көрсөтүү менен байланышкан файлдардан турат. Бул секунддарды эсептөө үчүн колдонулган саат бөлүштүргүчтү камтыйт, эсептегич колдонуучу ойноп жаткан секунддарды эсептейт, сегменттин айдоочусу упай алып, экранда көрсөтүлүүчү аноддорго жана катоддорго айлантат, ошондой эле позицияны аныктайт сан көрсөтүлөт жана акырында, сегменттин башкаруучусу экилик сандарды экранда көрсөтүлүүчү ондук цифраларга айландырат. Эсептөөчү бардык бөлүктөрдү чогултат жана сигналдарды картага түшүрөт. Бардык беш файлдын коду төмөндө тиркелет.
Саат бөлүүчү:
Саатты бөлүүчүдө Clk (саат), CEN (иштетүү) жана Div (бөлүүчү) кириштери бар жана Clk_out чыгарылат. Эгерде иштетүү сигналы күйгүзүлгөн болсо, анда саат өсүп бараткан четке таянат.
Упай эсептегичи
Thescore counter Clk (Clock) жана RST (Reset) кириштерине ээ жана Clk_Out жана Q чыгуулары бар, алар негизинен баллдын чыгышы катары иштейт.
Сегмент айдоочусу
Сегменттин драйвери D1, D10, D100, D1000 жана Саатты киргизет. "D" дан кийинки сандар 7 сегменттин дисплейиндеги ондук орунду билдирет. Чыгыштар - аноддор жана цифралар. Саат сандарды эсептейт жана дайындайт жана анын орду. Мисалы, бир жерде "9" миңде, жүздө жана ондо "0" менен көрсөтүлөт. Качан "10го" которулганда, сан азыр ондукта "1", миңде, жүздө жана бирдикте "0" болот.
Segment Handler
Сегменттин иштетүүчүсүнүн кириши катары цифрасы жана чыгышы катары катоддору бар. Негизинен экилик сандар экрандан ондук сандарды чыгаруу үчүн катоддук дисплейге көрсөтүлөт.
Упай иштетүүчү
Score Handler мурунку төрт субъекттен турат жана анын бардыгын бириктирет жана сигналдарды картага түшүрөт. Ошондой эле учурдагы абалдын негизинде эсептегичти иштетет жана өчүрөт.
4 -кадам: Image Generation
Сүрөт мууну төрт компоненттен турат: Анимация, Сакталбаган эсептегич, Сүрөттү жаңылоо жана Эсептегичти баштоо. Бул файлдар дисплей мониторунда сүрөттөрдү кантип жаратууну билдирет.
Анимация
Анимация файлында Clk (Саат Сигналы), CEN (Эсептөөнү иштетүү), RST (Сигналды Баштоо), B_X (Топтун X позициясы), B_Y (Топтун Y позициясы), P_L (сол калак позициясы) жана P_R киргизүүлөрү бар (оң калак позициясы). Жыйынтыктар WA (биз түстү жазып жаткан дарек) жана WD (аныкталган дарек боюнча жазылган түс). Файлда Play_Counter бар, ал MUX үчүн контролдук киргизүү катары колдонула турган эсептегич, туура түстөрдү керектүү жерлерде чыгара турган коддоочу жана акырында калактын абалына жараша туура түстү көрсөтүүчү мультиплексор. топ.
Сүрөттү жаңыртуу
Сүрөттү жаңыртуу файлы топтун жана калактын абалынын өзгөрүшү менен сүрөттү жаңыртуу үчүн колдонулат. Файл Animation, Start Counter жана Fail Counter файлдарынын компоненттерин камтыйт. Бул сигналдарды жана чыгуу даректерин аныктоо үчүн мамлекеттик логиканы колдонуп, ар бир компоненттен келген сигналдарды картага түшүрөт.
Эсептегичти баштоо
Start Counter Clk, RS жана CEN кириштерин колдонот жана WA менен WDди чыгарат. Бул MUX үчүн контролдук киргизүүнү аныктоо үчүн эсептегичти жана конверсияны колдонот. Андан кийин мультиплексор туура түстүү даректерди аныктоо үчүн киргизүүнү колдонот жана бул маалыматты VGA драйверине жөнөтөт. Бул колдонуучу оюнду баштаганда "Понг" көрсөтүү үчүн колдонулат.
Fail Counter
Колдонуучу оюнду жоготкондо, эсептегич "Оюн бүттү" деп көрсөтүү үчүн колдонулат. Бул Clk, RST жана CEN сигналына ээ. Бул MUX үчүн контролдук киргизүүнү аныктоо үчүн эсептегичти жана конверсия формуласын колдонот. Андан кийин мультиплексор туура түстүү даректерди аныктоо үчүн киргизүүнү колдонот жана бул маалыматты VGA драйверине жөнөтөт.
5 -кадам: Понг оюну
Долбоордун бул бөлүмүнө Pong Master, Finite State Machine (FSM), Таймер жана Start Debounce файлдары кирет.
Таймер
Таймерде Clk (Clock) жана PS (Учурдагы абал) жана Timer жана Clk_out чыгуулары бар. Таймер оюндун ылдамдыгын ар бир беш секундда өзгөртүү үчүн колдонулат.
FSM агымы
Flow FSMде Clk, Fail, Timer, Bttn_S (Start Button) жана Buttn_RST (Reset Button) жана Pres_S (Present State Output) чыгымдары бар. FSM таймерди учурдагы абалды кийинки абалга жаңыртуу үчүн колдонот жана оюн 5 -деңгээлге жеткенге чейин кийинки абалды жаңыртып турат, ал оюн бүткүчө калат.
Дебунду баштоо
Start Debounce - бул топтун башталышы. Бул S_in жана Clk кириштерине жана S_out чыгууларына ээ.
Понг МастерБул файл мурунку компоненттерди колдонот жана бардык компоненттер заматта болот. Бул чогуу курган мурунку бардык компоненттерди бириктирген башкы файл.
6 -кадам: VGA драйвери
VGA (Visual Graphics Array) драйвери - дисплей экранына жөнөтүлгөн буйруктарды же маалыматтарды кабыл алуу үчүн колдонулган программа. Айдоочуну бизге профессорубуз берген. Basys3 тактасын мониторго туташтыруу үчүн драйверди жана VGA шнурун колдонуңуз.
Сиз азыр VHDLди колдонуп, өзүңүздүн понг оюнду жасоого даяр болушуңуз керек!
Сунушталууда:
2 оюнчу понг PCB: 3 кадам
2 оюнчу понг PCB: Бул колдонмодо сиз портативдүү 2 оюнчу понг оюнун кура аласыз. Бул дизайн GitHubда Онур Авун тарабынан жайгаштырылган коддун тегерегинде түзүлгөн. Мен бул долбоорду түзүүдөн ырахат алдым, сиз аны куруудан ырахат аласыз деп үмүттөнөм
Пинго: Кыймылды аныктоочу жана жогорку тактыктагы пинг-понг шарын учуруучу: 8 кадам
Пинго: Кыймылды аныктоочу жана жогорку тактыктагы теннис боюнча топту учуруучу: Кевин Нитиема, Эстебан Поведа, Энтони Маттакчион, Рафаэл Кэй
Андреанын понг оюну: 4 кадам
Андрейдин понг оюну: Бул оюн бул жерден келген. Мен оюнду жасадым, ошонун негизинде бир аз өзгөртүүлөрдү киргиздим. Мен сизге бул оюндун жасоо кадамдарын көрсөтөм, анан мен өзгөрткөн кодду берем. Мен баштапкы кодго кээ бир өзгөртүүлөрдү киргиздим, мисалы
8x8 Colorduino понг оюну: 3 кадам
8x8 Colorduino понг оюну: Бул көрсөтмөдө мен 8 x 8 RGB LED матрицалуу такта модулун колдонуп, понг оюнун кантип курганымды көрсөтөм. Бул модуль Colorduino деп аталат. Анын бортунда микроконтроллер жана башка Colorduino такталарына туташуу үчүн интерфейс бар. Анын мүмкүнчүлүгү бар
Пинг -понг автоматтык оюну: 6 кадам
Автоматтык стол тенниси оюну: Бул мингдерди колдонуп, теннис боюнча топторду учуруу үчүн пинг -понг оюну жана аны тешиктерге уруу керек. Бир адам топторду учурушу керек, экинчиси топторго тийиши керек. **** Эскертүү, бул эки алтынчы класстын окуучулары тарабынан даярдалган