Mundarija:

FPGA reaktsiyasi o'yini: 10 qadam
FPGA reaktsiyasi o'yini: 10 qadam

Video: FPGA reaktsiyasi o'yini: 10 qadam

Video: FPGA reaktsiyasi o'yini: 10 qadam
Video: Лекция №1 "Что умеют FPGA и зачем они нужны?" 2024, Iyul
Anonim
FPGA reaktsiya o'yini
FPGA reaktsiya o'yini

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

Materiallar
Materiallar
Materiallar
Materiallar
Materiallar
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

Yuqori darajali diagramma qora quti dizayni
Yuqori darajali diagramma qora quti dizayni
Yuqori darajali diagramma qora quti dizayni
Yuqori darajali diagramma qora quti dizayni

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

CLKDivide
CLKDivide
CLKDivide
CLKDivide
CLKDivide
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

Jarayon blokini almashtirish
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

Cheklangan holat mashinasi
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

Darajali displey jarayonining blokirovkasi
Darajali displey jarayonining blokirovkasi

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

LED tezligini darajali boshqarish
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

Uskuna yig'ish
Uskuna yig'ish

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: