Mundarija:
- 1 -qadam: kirish
- 2 -qadam: materiallar
- 3 -qadam: qora qutining yuqori darajali diagrammasi
- 4 -qadam: CLKDivide
- 5 -qadam: jarayon blokini almashtirish
- 6 -qadam: Cheklangan holat mashinasi
- 7 -qadam: Displey jarayonining blokini darajali boshqarish
- 8 -qadam: LED tezligini darajali boshqarish
- 9 -qadam: Uskuna yig'ilishi
- 10 -qadam: Xursand bo'ling
Video: FPGA reaktsiyasi o'yini: 10 qadam
2024 Muallif: John Day | [email protected]. Oxirgi o'zgartirilgan: 2024-01-30 13:26
Yoz Rezerford va Regita Soetandar tomonidan
1 -qadam: kirish
CPE 133 uchun yakuniy loyihamiz uchun biz Basys3 taxtasi uchun VHDLda reaktsiya o'yinini ishlab chiqdik. Bu o'yinni "Stacker" arkada o'yini bilan taqqoslash mumkin, u erda o'yinchi o'z vaqtida bloklarni tashlab yuborishi kerak. Basys3 taxtasi o'zgaruvchan LEDlarga ega bo'lgan non paneliga ulangan. Bu LED chiroqlar darajaga qarab ma'lum chastotada almashadi. Bu o'yinda soatni ajratuvchi va 4 ta raqamli 7 segmentli displey, shuningdek, cheklangan holatli mashinadan foydalaniladi. O'yinchi to'g'ri kalitni faollashtirganda, o'rta LED yonadi, o'yinchi navbatdagi LEDlarning chastotasini oshirib, o'yinning keyingi bosqichiga o'tadi. Bu har bir keyingi bosqichni oldingi darajaga qaraganda qiyinlashtiradi. O'yinchi 7 -darajani muvaffaqiyatli engganida, eng yuqori daraja, segment displeyida xabar ko'rsatiladi va barcha LEDlar bir vaqtning o'zida yonadi va o'chadi.
2 -qadam: materiallar
Sizga kerak bo'lgan materiallar:
- Micro USB kabeli bilan Digilent Basys3 kartasi
- Non paneli
- 5 ta LED
- 5 rezistor (biz 220 ohmdan foydalanganmiz)
- 11 ta o'tish simlari
- Vivado bilan kompyuter
3 -qadam: qora qutining yuqori darajali diagrammasi
Ko'rib turganingizdek, bizning yuqori darajali blok -sxemamiz ClkDivide submodulidan kerakli soatlarni olishdan boshlanadi. Bu soatlar turli xil texnologik bloklarga kirishlardir. Asosan, o'yin shuni tushunishi kerakki, agar foydalanuvchi kalitni to'g'ri yoqsa, LEDlar tezroq o'zgara boshlaydi va displey bir darajaga ko'tarilishi kerak. Blok -diagramma biroz aqldan ozgan ko'rinishi mumkin, lekin buning sababi shundaki, ma'lum bir jarayonda ko'p signallar o'rnatiladi, so'ngra bu signal boshqa jarayon blokida boshqa signalni aniqlaydi.
Oxir -oqibat, o'yinni qabul qiladigan yagona kirish - bu 100 MGts chastotada ishlaydigan Basys3 kartasidagi kirish soati, Basys3 kartasidagi etti kalit va reset tugmasi. Etti segmentli displey uchun anod, displey uchun etti segment va LEDlar chiqadi.
4 -qadam: CLKDivide
Bu soatni ajratuvchi submodule asosiy faylimizda ko'rsatilgan qiymatga qarab sekinroq soatni yaratdi. Biz ushbu submoduldan Clk400, PushClk va newlck -ni aniqlash uchun foydalanganmiz, bu submodule kirish sifatida soat va 32 bitli bo'luvchini oladi. Sekinlashtirilgan soat chiqariladi. Ajratuvchi va sekinlashtirilgan soat uchun texnologik blok mavjud. Bu jarayonda biz vaqt deb nomlangan vaqtinchalik o'zgaruvchiga ega, u har safar kiritilgan soatning ko'tarilgan chekkasi urilganda bir marta hisobga olinadi. Bo'linuvchi raqamga etib kelgach, sekinlashgan soat almashdi va hisob nolga qaytdi.
5 -qadam: jarayon blokini almashtirish
Shift jarayon bloki LEDlarning o'zgaruvchan harakatini va tezligini boshqaradi. Hassoslik ro'yxatida newclk va Stop signallari mavjud. Foydalanuvchi darajadan o'tganda to'xtatish qisqa kechikishga olib keladi. Agar to'xtash baland bo'lmasa, LEDlar yangi signal tezligiga qarab o'zgaradi. Bu o'zgaruvchan naqsh ikkita o'zgaruvchi tomonidan boshqariladi: Track and count. Hisoblash qaysi LEDni yoqish kerakligini aniqlaydi, Track esa hisobni yuqoriga yoki pastga hisoblash kerakligini aniqlaydi. Yana bir signal bor, Final - bu "111" darajasi bo'lganida amal qiladi, bu o'yinchi o'yinni mag'lub etganligini ko'rsatadi. LEDlarni doimiy ravishda yoqish va o'chirish uchun har bir soat chetida 0 dan 1 gacha o'zgaradi. Bu faqat oxirgi ko'rish uchun vizual element.
Bu o'zgarish jarayoni - bu loyihani boshlash uchun eng zo'r joy. Agar siz svetodiodli lampalaringizni to'g'ri va izchil almashtira olsangiz, bu erdan tekislashda xatti -harakatni qo'shishingiz kerak bo'ladi!
6 -qadam: Cheklangan holat mashinasi
Biz kirish tugmachasini yoki asl holatini tiklash tugmachasini bosish paytida xatti -harakatni belgilash uchun cheklangan holat mashinasini yaratdik. Har bir holat "daraja" dir va agar kalit noto'g'ri vaqtda yoqilgan bo'lsa yoki reset tugmasi bosilsa, daraja "000" ga qaytadi. Aks holda, agar kalit to'g'ri yoqilgan bo'lsa, daraja "111" ning oxirgi holatiga yetguncha yuqoriga ko'tariladi va tugash ekrani paydo bo'ladi. FSM ikkita jarayon blokiga asoslangan sync_proc va comb_proc. Sync_proc biz PushClk deb nomlagan soatdan foydalanadi. Bu soat keyingi holatning hozirgi holatga qanchalik tez aylanishini boshqaradi. Bu soat juda tez bo'lishi kerak; biz eng tez LED tezligidan ikki barobar tezroq tezlikni tanladik.
Biz bu kodni darajalar uchun FSM yordamida amalga oshirdik; Ammo, bu loyihadan so'ng, biz FSM-dan yanada samarali foydalanish, hisob-kitob qilish, qayta o'rnatish yoki qolish holatida bo'lishini angladik. Agar hech narsa bosilmasa, u turish holatidadir. Agar reset tugmasi bosilsa yoki o'yinchi chalkash bo'lsa, u asl holatiga qaytariladi. Agar to'g'ri bosilsa, u sanash holatida bo'ladi. Bu o'yinda FSMdan foydalanishning boshqa ko'plab usullari mavjud!
7 -qadam: Displey jarayonining blokini darajali boshqarish
Darajasi ko'rsatish jarayonining blokini boshqaradi. Hassoslik ro'yxatidagi o'zgaruvchilar Level, Reset va Clk400. 7 segmentli displey birinchi darajadagi "1" belgisidan boshlanadi. Foydalanuvchi har bir darajadan o'tib, foydalanuvchiga qanday darajadagi ekanligini ko'rsatish uchun 7 gacha hisoblab chiqiladi. Foydalanuvchi 7 -darajadan o'tganidan so'ng, o'yinchi o'yinni yengganligini bildiruvchi "COOL" belgisini ko'rsatadi. Bu "COOL" displeyi biz Clk400 deb nomlangan 400 Gts chastotali soatlarda ishlaydi. Agar Reset tugmasi bosilsa, displey "1" ga qaytadi.
8 -qadam: LED tezligini darajali boshqarish
Nihoyat, Level LEDlarning tezligini nazorat qiladi. Daraja - sezuvchanlik ro'yxatidagi yagona signal. D1 - bu soatni ajratish jarayoniga kiruvchi signal. Har safar daraja o'zgarganda yoki holat o'zgarganda, jarayon tezligi "Tezlik". Bu jarayon D1 qiymatini aniqlaydi. Biz har bir darajaning qanchalik tez ishlashini xohlaganimizga qarab tanlagan D1 ning 8 ta aniqlangan qiymati mavjud. Har safar daraja ko'tarilganda D1 kichrayadi, shunda yangi tugma tezroq ishlaydi.
9 -qadam: Uskuna yig'ilishi
Biz non panelini Basys3 ga pmod ulagichlaridan biri bilan uladik. Pmod portlarining oltitasi erkak va erkak ulagichini ulash uchun ishlatilgan, bittasi yerga, qolgan beshtasi 5 LEDga. Shuningdek, biz har bir LED uchun rezistor joylashtirdik. Bu rezistorlar 220Ω ga teng va LEDlarning qisqa tutashuvi va yonib ketishining oldini oladi. Har bir LED bir oz qarshilikka ega bo'lsa -da, qarshilik manbadan kuchlanishga to'sqinlik qilish uchun etarli emas.
10 -qadam: Xursand bo'ling
Bu o'yinni o'ynash juda oson. O'yinchi V17 taxtasining 1 -o'ng burchagidan boshlanadi. O'rta LED yoniq bo'lganda, ular kalitni yuqori tomonga burishi kerak. Keyin ular bitta kalitni chapga siljitadilar va xuddi shu narsani qiladilar! Agar o'yinchi oxirigacha etib borsa, ular ettinchi W14 tugmachasida bo'ladi. Agar ular o'yinni mag'lub qilsalar, ular nihoyatda qiziqarli tugashni ko'rishadi!
Shuni ta'kidlash kerakki, ushbu o'yinni yaratishda tezlik sizga bog'liq! Agar biz tanlagan tezliklar juda sekin bo'lsa, uni tezlashtiring va uni yanada qiyinlashtiring! Bundan tashqari, belgilangan darajalar soni yo'q. Agar siz undan ham yuqori darajaga ega bo'lishni xohlasangiz, FSM va Level tomonidan belgilanadigan jarayon bloklariga o'zgartirishlar kiritilishi kerak, lekin bu juda oddiy o'zgarishlar.
Biz, shuningdek, foydalanuvchi kiritish sifatida doskadagi kalitlardan foydalanishni tanladik, lekin bu ham Basys3 doskasidagi tugma yordamida mumkin; tugma har safar foydalanuvchi qayta ishga tushganda kalitlarni qayta o'rnatish zarurligini bartaraf qiladi. Biz dastlab tugmani ishlatardik, lekin bu darajani aniqlashda xatoliklarga olib keldi, chunki tugmani bosib ushlab turish vaqtida PushClkning ko'tarilgan ikki qirrasi urilsa, u bir necha darajaga sakraydi.
Quyida qanday o'ynash kerakligini ko'rsatadigan video, birinchi 4 darajadan o'tish va yakuniy displey.
Loyihaning asosiy fayli quyida keltirilgan.
Manbalar
Basys3 uchun qo'llanma
Loyihaga ilhom - Arduino Stop It o'yini
Tavsiya:
DIY 37 Led Arduino ruletka o'yini: 3 qadam (rasmlar bilan)
DIY 37 Led Arduino Ruletka O'yini: Ruletka - bu g'ildirak ma'nosini anglatuvchi frantsuzcha so'z bilan atalgan kazino o'yini
555 taymer reaktsiyasi o'yini: 5 qadam
555 taymer reaktsiyasi o'yini: maqsadli auditoriya Bu ko'rsatma faqat bir nechta arzon komponentlar bilan qurishingiz mumkin bo'lgan oddiy o'yinni qidirayotgan davralarga qiziqqan (ozgina fonli) odamlarga mo'ljallangan. Qiyinchilik darajasi, agar qiyin bo'lsa
Qiziqarli Arduino reaktsiyasi o'yini: 3 qadam
Qiziqarli Arduino reaktsiyasi o'yini: Butun oila uchun kulgili Arduino reaktsiya o'yini;) o'zaro bog'liq platformali Bluetooth aloqasiga asoslangan. Sizga faqat Arduino buyumlari, Android smartfoni va poyabzal qutisi kerak bo'ladi. Agar sizda ulardan hech biri bo'lmasa, bunga qat'iy ishoning: hech narsa yo'q
Arduino reaktsiyasi o'yini: 9 qadam
Arduino reaktsiyasi o'yini: Men bu o'yinni maktabga topshiriq sifatida qildim. Biz arduino bilan interaktiv biror narsa qilishimiz kerak edi. Bu men qilgan birinchi Arduino loyihasi, shuning uchun bu juda qiyin edi, lekin imkonsiz emas edi
FPGA asteroid o'yini: 7 qadam (rasmlar bilan)
FPGA asteroid o'yini: CPE 133 yakuniy loyihasi uchun biz FPGA-da ikkita tugmachali kalit va 7 segmentli displey yordamida asteroidlar o'yinini yaratishga qaror qildik. O'yin shunday ishlaydiki, asteroid tasodifiy tanlangan uchta qatordan birida paydo bo'ladi va uchib ketadi