Мазмуну:

FPGA реакция оюну: 10 кадам
FPGA реакция оюну: 10 кадам

Video: FPGA реакция оюну: 10 кадам

Video: FPGA реакция оюну: 10 кадам
Video: Набор для изучения FPGA | Altera Cyclone 2024, Июль
Anonim
FPGA реакция оюну
FPGA реакция оюну

By Summer Rutherford жана Regita Soetandar

1 -кадам: Киришүү

CPE 133 үчүн акыркы долбоорубуз үчүн, биз Basys3 тактасы үчүн VHDLде реакция оюнун иштеп чыктык. Бул оюнду "Stacker" аркада оюнуна салыштырууга болот, анда оюнчу блокторду өз убагында таштап кетиши керек. Basys3 тактасы нан алмаштыруучу LEDге ээ болгон панелге туташкан. Бул LED чырактар деңгээлине жараша белгилүү бир жыштыкта алмашат. Бул оюнда саат бөлгүч жана 4 орундуу 7 сегменттүү дисплей, ошондой эле чектүү мамлекеттик машина колдонулат. Орто LED күйүп турганда оюнчу туура которууну иштеткенде, оюнчу кезектеги LED диапазонун жогорулатып, оюндун кийинки баскычына өтөт. Бул ар бир кийинки деңгээлди мурунку деңгээлге караганда кыйын кылат. Оюнчу 7 -деңгээлди, эң жогорку деңгээлди ийгиликтүү жеңгенде, сегменттин дисплейинде билдирүү пайда болот жана бардык Светодиоддор бир убакта күйүп -өчөт.

2 -кадам: материалдар

Материалдар
Материалдар
Материалдар
Материалдар
Материалдар
Материалдар

Сизге керектүү материалдар:

  • Digilent Basys3 такта микро USB кабели менен
  • Breadboard
  • 5 LED
  • 5 резистор (биз 220 Ом колдондук)
  • 11 секирүүчү зым
  • Vivado менен компьютер

3 -кадам: Жогорку деңгээлдеги диаграмма Кара кутунун дизайны

Жогорку деңгээлдеги диаграмма кара кутунун дизайны
Жогорку деңгээлдеги диаграмма кара кутунун дизайны
Жогорку деңгээлдеги диаграмма кара кутунун дизайны
Жогорку деңгээлдеги диаграмма кара кутунун дизайны

Көрүнүп тургандай, биздин эң жогорку деңгээлдеги блок -схемабыз ClkDivide субмодулунан керектүү сааттарды алуу менен башталат. Бул сааттар ар кандай технологиялык блокторго киргизилет. Негизинен, оюнда колдонуучу которгучту туура күйгүзгөндө, диоддор тезирээк алмашып башташы керектигин жана дисплей бир деңгээлге көтөрүлүшү керек экенин моюнга алышы керек. Блок -диаграмма бир аз жиндидей көрүнүшү мүмкүн, бирок бул белгилүү бир процессте орнотулган көптөгөн сигналдар бар болгондуктан, ал сигнал башка процесстик блокто башка сигналды аныктайт.

Акыр -аягы, оюндун кириши - бул 100 МГцте иштеген Basys3 тактасындагы кириш сааты, Basys3 тактасындагы жети өчүргүч жана баштапкы абалга келтирүү баскычы. Чыккан нерсе - жети сегменттүү дисплей үчүн анод, дисплей үчүн жети сегмент жана LED.

4 -кадам: CLKDivide

CLKDivide
CLKDivide
CLKDivide
CLKDivide
CLKDivide
CLKDivide

Бул саатты бөлүүчү субмодуль негизги файлыбызда ага салыштырылган мааниге жараша жайыраак саат жараткан. Биз бул субмодулду Clk400, PushClk жана newlckти аныктоо үчүн колдондук. Жай басылган саат чыгарылат. Бөлүүчү үчүн процесс блогу жана жайлатылган саат бар. Бул процессте биз деп атаган убактылуу өзгөрмө бар, ал киргизилген сааттын өсүп бараткан четине тийген сайын бирден санап турат. Бөлүүчү номерге жеткенде, жай сааты которулуп, сан нөлгө түшөт.

5 -кадам: Shift Process Block

Shift Process Block
Shift Process Block

Shift процесси блогу светодиоддордун алмашуучу кыймылын жана ылдамдыгын көзөмөлдөйт. Сезгичтик тизмесинде newclk жана Stop сигналдары бар. Колдонуучу деңгээлден өткөндө, токтоо кыска мөөнөткө кечигүүнү пайда кылат. Эгерде Stop жогору болбосо, анда LEDлар newclk ылдамдыгына жараша кадимкидей алмашат. Бул өзгөрмө үлгү эки өзгөрмөлүү тарабынан башкарылат: Track and count. Кайсы LED күйүшү керек экенин Count аныктайт, ал эми Track эсептөөнүн жогору же ылдый болушу керектигин аныктайт. Дагы бир "Финал" сигналы бар, ал "111" деңгээли болгондо гана колдонулат, бул оюнчу оюнду жеңгенин билдирет. Жарык диоддорун үзгүлтүксүз күйгүзүү жана өчүрүү үчүн акыркы саат 0 менен 1дин ортосунда өзгөрөт. Бул акыркы дисплей үчүн визуалдык элемент.

Бул которуштуруу процесси бул долбоорду баштоо үчүн эң сонун жер. Эгерде сиз диоддоруңузду туура жана ырааттуу алмаштыра алсаңыз, анда бул жерден жөнгө салууда жүрүм -турумду кошушуңуз керек!

6 -кадам: Чектүү мамлекеттик машина

Чектүү мамлекеттик машина
Чектүү мамлекеттик машина

Биз киргизүү которгуч же баштапкы абалга келтирүү баскычы басылганда, жүрүм -турумду белгилөө үчүн, чектүү абал машинасын түздүк. Ар бир абал "деңгээл" болуп саналат жана эгерде которгуч туура эмес убакта күйгүзүлсө же баштапкы абалга келтирилсе, деңгээл кайра "000" ге кайтат. Болбосо, эгерде которгуч туура күйгүзүлгөн болсо, деңгээл акыркы абалга жеткенге чейин жогору көтөрүлөт, "111" жана аяктоочу дисплей пайда болот. FSM sync_proc жана comb_proc эки процесс блокторуна негизделген. Sync_proc биз PushClk деп атаган саатты колдонот. Бул саат кийинки абалдын азыркы абалга канчалык тез жетерин көзөмөлдөйт. Бул саат абдан тез болушу керек; биз эң ылдам LED ылдамдыгынан эки эсе ылдамыраак ылдамдыкты тандап алдык.

Биз бул кодду деңгээлдер үчүн FSMди колдонуп ишке ашырдык; бирок, бул долбоордон кийин биз FSMдин эффективдүү колдонулушун эсептөө, баштапкы абалга келтирүү же калуу абалына ээ болуу мүмкүн экенин түшүндүк. Эгерде эч нерсе басылбаса, ал калуу абалында. Эгерде баштапкы абалга келтирүү басылып жатса же оюнчу баш аламан болсо, ал баштапкы абалга келет. Эгерде туура басылган болсо, ал эсептөө абалында. Бул оюнда FSMди колдонуунун башка көптөгөн жолдору бар!

7 -кадам: Дисплей процессинин деңгээлин көзөмөлдөө

Дисплей процессинин блокун деңгээл менен көзөмөлдөө
Дисплей процессинин блокун деңгээл менен көзөмөлдөө

Дисплей процесс процессин көзөмөлдөйт. Сезгичтик тизмесиндеги өзгөрмөлөр Level, Reset жана Clk400. 7 сегменттин дисплейи "1" денгээлин көрсөтүү менен башталат. Колдонуучу денгээлден өткөн сайын колдонуучуга кайсы деңгээлде экенин көрсөтүү үчүн 7ге чейин эсептелет. Колдонуучу 7 -деңгээлден өткөндөн кийин, оюнчу оюнду жеңгенин билдирүү үчүн "COOL" көрсөтөт. Бул "COOL" дисплейи биз Clk400 деп атаган 400 Гц саатта иштейт. Эгерде Reset басылса, дисплей "1" ге кайтат.

8 -кадам: LED ылдамдыгын деңгээл менен көзөмөлдөө

Даража менен LED ылдамдыгын көзөмөлдөө
Даража менен LED ылдамдыгын көзөмөлдөө

Акыр -аягы, Level LED ылдамдыгын көзөмөлдөйт. Даража - сезгичтик тизмесиндеги жалгыз сигнал. D1 newclk алуу үчүн Clock Divider процессине кирген сигнал. Деңгээл өзгөргөндө же абал өзгөргөндө, процесстин блоку "Ылдамдык". Бул процесс D1дин маанисин аныктайт. Биз D1дин 8 аныкталган мааниси бар, биз ар бир деңгээлдин канчалык тез иштешин каалаганыбыздын негизинде тандап алдык. Д1 деңгээли жогорулаган сайын кичирейет, андыктан newclk тезирээк иштейт.

9 -кадам: Аппараттык жыйын

Аппараттык жыйын
Аппараттык жыйын

Банонду Basys3кө pmod коннекторлорунун бири менен туташтырдык. PMod портторунун алтоосу эркекке эркек туташтыргычты туташтыруу үчүн колдонулган, бири жер үчүн, экинчиси 5 LED. Биз ошондой эле ар бир светодиод үчүн резисторду койдук. Бул резисторлор 220Ω жана LEDлердин кыска туташуусуна жана күйүп кетишине жол бербейт. Ар бир LED бир аз каршылыкка ээ болсо да, каршылык булактан чыңалууга тоскоолдук кылуу үчүн жетишсиз.

10 -кадам: Көңүл ачыңыз

Бул оюнду ойноо абдан оңой. Оюнчу тактанын эң оң жагындагы 1 которгучтан баштайт, V17. Орто LED күйүп турганда, алар которгучту жогору бурушу керек. Андан кийин алар бир которгучту солго жылдырып, ошол эле нерсени жасашат! Эгерде оюнчу аягына чейин жетсе, анда алар W14 жетинчи которгучуна жетет. Эгер алар оюнду утуп алса, анда алар чындап эле кызыктуу бүтүүчү дисплейди көрүшөт!

Белгилей кетчү нерсе, бул оюнду түзүүдө ылдамдык толугу менен сизге көз каранды! Эгерде биз тандаган ылдамдык өтө жай болсо, аны тездетип, ого бетер татаалдаштырыңыз! Деңгээлдердин белгиленген саны да жок. Эгерде сиз аны дагы деңгээлдерге ээ кылгыңыз келсе, анда FSMге жана Деңгээл тарабынан аныкталган процесстин блокторуна өзгөртүүлөр киргизилиши керек, бирок бул өтө жөнөкөй өзгөртүүлөр.

Биз ошондой эле колдонуучу катары тактадагы өчүргүчтөрдү колдонууну чечтик, бирок бул Basys3 тактасындагы баскыч менен да мүмкүн; баскыч колдонуучу кайра башталган сайын өчүргүчтөрдү баштапкы абалга келтирүү зарылчылыгын жок кылат. Биз башында бир баскычты колдондук, бирок бул деңгээлди аныктоодо ката кетирди, анткени ал баскычты кармап турганда PushClkтин эки көтөрүлүп турган четине тийсе, бир нече деңгээлге секирип кетет.

Төмөндө кантип ойноо керектигин көрсөткөн видео, биринчи 4 деңгээлден өтүп, акыркы дисплей.

Бул долбоордун негизги файлы төмөндө камтылган.

Булактар

Basys3 маалымдама куралы

Долбоордун илхамы - Arduino Stop It оюну

Сунушталууда: