Mundarija:

Pong o'yini: 6 qadam
Pong o'yini: 6 qadam

Video: Pong o'yini: 6 qadam

Video: Pong o'yini: 6 qadam
Video: Ӯзбек Тӯйларида Бутун Умрлик Шарманда. Хали Бунақаси Бӯлмаган. 2024, Iyul
Anonim
Pong o'yini
Pong o'yini

Materiallar:

Basys3 FPGA kengashi

VGA kabeli

Vivado

Bu ko'rsatmaning maqsadi - monitorda ko'rsatiladigan pong o'yinini ishlab chiqish. Loyiha dasturlash uchun VHDL -dan foydalanadi va kodni bajarish uchun Basys3 FPGA -dan foydalanadi va VGA interfeysi yordamida tasvirni uzatadi. Ushbu qo'llanma VHDL haqida biroz ma'lumotga ega bo'lgan odamlar uchun mo'ljallangan. Qo'llanma 6 xil bo'limga bo'linadi: Umumiy nuqtai nazar, jarayon, ballarni qayta ishlash, tasvir yaratish, pong o'yini va VGA.

1 -qadam: umumiy nuqtai

Sharh
Sharh

Yuqoridagi rasm - bu loyihaning umumiy sxemasi

O'yin maqsadi:

O'yin foydalanuvchi boshqarishi mumkin bo'lgan toymasin belkurakli displeydan va yuqori chegara vazifasini bajaradigan qattiq devordan iborat. Foydalanuvchi yuqoriga ko'tarish tugmachasini bosganda, to'p yuqoriga ko'tarila boshlaydi va devordan sakrashga uriladi. Agar to'p belkurakka tegsa, u yana sakraydi va u belkurakni o'tkazib yubormaguncha sakrashda davom etadi. To'p belkurakka tegmasa, o'yin tugaydi. Foydalanuvchi eshkakning harakatini aniqlash uchun chap va o'ng tugmalaridan foydalanishi mumkin bo'ladi. O'yinni qayta o'rnatish uchun foydalanuvchi markaziy tugmani bosishi kerak. Yugurish vaqti 7 segmentli displeyda qayd qilinadi. Besh daraja bor va har o'n soniyada daraja oshadi, siz 5 -darajaga chiqmaguningizcha, foydalanuvchi yo'qolguncha qoladi. Darajalar to'p tezligi bilan belgilanadi; bu shuni anglatadiki, har o'n soniyada to'p tezligi oshadi va shu tariqa o'yin qiyinligi oshadi.

Tizim arxitekturasi:

Quyidagi diagramma tizim uchun asosiy umumiy blok-diagramma hisoblanadi. Tizim to'rtta kirishga ega: R tugmasi, L tugmasi, Ishga tushirish va Reset va soat. U gorizontal va vertikal sinxronlash, RBG (ma'lum bir joyda piksel rangini bildiradi) va Score (7-segmentli displeyga avtobus vazifasini bajaradi) ga ega. tugmachalari, chap va o'ng tugmachalari eshkakni o'z yo'nalishi bo'yicha harakatlantirish uchun ishlatiladi. 7-segmentli displey hisobni yozish uchun ishlatiladi, bu foydalanuvchi o'yinni yo'qotmasdan o'ynagan soniyalar sonidir. Raqam o'nlik raqam sifatida ko'rsatiladi.

O'chirish arxitekturasi: Biz o'z gizmomizni kichikroq FSM o'z ichiga olgan bitta FSM yordamida quramiz, pastki FSM o'yinning murakkabligini boshqaradi, asosiy FSM esa o'yinning umumiy oqimini boshqaradi. Bizning gizmo kamida uchta soat ajratgichdan foydalanadi, bittasi skor (vaqt) uchun, ikkinchisi displeyning yangilanish tezligi uchun, ikkinchisi esa DeMux chiqishiga ulangan, shuning uchun biz o'yinning tezligini nazorat qila olamiz. ortib borayotgan qiyinchiliklar bilan davom etadi. Siz qanchalik uzoq o'ynasangiz, o'yin shunchalik tez harakat qiladi. Bizda DeMux-ning FSM sub-holati mavjud bo'ladi, shuning uchun biz o'yin qanchalik tez o'tishini nazorat qila olamiz. Biz bir nechta hisoblagichlardan foydalanamiz, bittasi displeyni yangilash uchun, ikkinchisi esa siz hisobni davom ettirishda. Ushbu loyihada ikkita asosiy modul va kirish ma'lumotlarini boshqaradigan submodullar majmuasi mavjud. Ikkita asosiy submodul - VGA drayveri, shuningdek tugma mantiq moduli. VGA drayveri dasturlashtiriladigan xotira, soatni ajratuvchi va rangni chiqarishni boshqaradigan mantiqdan iborat bo'ladi. Tugma mantiq moduli, shuningdek, soatni ajratuvchi va dasturlashtiriladigan xotiradan, shuningdek, 7-segmentli displey uchun ikkilik-o'nli konvertorni o'z ichiga oluvchi soat taqsimlagichidan iborat bo'ladi.

2 -qadam: tasvirni qayta ishlash jarayoni

Loyihaning "Tasvir jarayoni" bo'limi uchun biz to'p va eshkakning harakatini aniqlaymiz. Dasturda chap, o'ng, yuqori va markaz tugmachalari, hozirgi holat, soat, to'pning X va Y pozitsiyalari, eshkakning chap va o'ng qirralari va nosozliklar mavjud portlar mavjud. Hozirgi holat yoqish signalini aniqlash uchun ishlatiladi. Kod to'p harakatlanishi mumkin bo'lgan bir nechta holatlarni o'z ichiga oladi va to'pning yo'lini aniqlash uchun shartlar qo'ygan. Keyingi jarayon bloki foydalanuvchi qaysi tugmani bosganiga qarab, qayiq harakatlanish yo'nalishini aniqlaydi. Loyihaning ushbu qismi uchun kod har bir bo'lim nima qilishini tavsiflovchi batafsil izohlar bilan biriktirilgan.

3 -qadam: Hisoblagichlar

Ballarni boshqaruvchi
Ballarni boshqaruvchi

Bu bo'lim Basys3 doskasidagi 7 segmentli displeyda ballarni soniyalarda ko'rsatish bilan bog'liq fayllardan iborat. U soniyalarni hisoblash uchun ishlatiladigan soatni ajratgichni o'z ichiga oladi, hisoblagich hisoblagichi foydalanuvchi o'ynayotgan soniyalarni hisoblab chiqadi, segment drayveri hisobni oladi va uni ekranda ko'rsatiladigan anod va katodlarga o'zgartiradi. son ko'rsatiladi va nihoyat, segment ishlovchisi ikkilik raqamlarni ekranda ko'rsatiladigan o'nli raqamlarga o'zgartiradi. Hisoblagich barcha qismlarni birlashtiradi va signallarni xaritaga joylashtiradi. Barcha beshta faylning kodi quyida biriktirilgan.

Soat ajratuvchi:

Soat ajratgichda Clk (soat), CEN (yoqish) va Div (bo'luvchi) kirishlar mavjud va Clk_out chiqishi mavjud. Agar yoqish signali yoqilgan bo'lsa, u holda soat ko'tarilgan tomonga qarab turadi.

Ballar hisoblagichi

Hisoblagichda Clk (Clock) va RST (Reset) kirishlari va Clk_Out va Q chiqishlari mavjud bo'lib, ular asosan balli chiqish vazifasini bajaradi.

Segment haydovchi

Segment drayverida D1, D10, D100, D1000 va Clock kirishlari mavjud. "D" dan keyingi raqamlar 7 segmentli displeyda o'nlik kasrni bildiradi. Chiqish - bu anodlar va raqamlar. Soat hisoblaydi va raqamlarni va uning o'rnini belgilaydi. Masalan, bir joyda "9" ko'rsatiladi, "0" sini minglab, yuzlab va o'nlab joylarda. "10" ga o'tganda, raqam o'nliklarda "1", minglarda, yuzlarda va birliklarda "0" bo'ladi.

Segment ishlovchisi

Segment ishlovchisi kirish sifatida raqamga va chiqishga katodga ega. Asosan, katoddagi ikkilik raqamlar ekranda o'nlik sonlarni chiqarish uchun ko'rsatiladi.

Ballarni boshqaruvchi

Score Handler oldingi to'rtta ob'ektdan iborat bo'lib, hammasini bir joyga to'playdi va signallarni xaritaga oladi. Shuningdek, u hisoblagichni hozirgi holatiga qarab yoqadi va o'chiradi.

4 -qadam: Rasm yaratish

Tasvirni yaratish to'rt komponentdan iborat: Animatsiya, Muvaffaqiyatsiz hisoblagich, Tasvirni yangilash va Hisoblagichni boshlash. Bu fayllar displey monitorida tasvirlarni qanday yaratishni ko'rsatadi.

Animatsiya

Animatsiya faylida Clk (Soat Signal), CEN (hisobni yoqish), RST (Signalni tiklash), B_X (to'pning X pozitsiyasi), B_Y (To'pning Y holati), P_L (chap eshigining holati) va P_R kirishlar mavjud. (eshkakning o'ng pozitsiyasi). Chiqish WA (biz yozayotgan manzil) va WD (belgilangan manzilda yozilgan rang). Fayl Play_Counter -ga ega, u MUX -ni boshqarish usuli sifatida ishlatiladigan hisoblagich, to'g'ri ranglarni to'g'ri joylarga chiqaradigan kodlovchi va, nihoyat, belkurakning holatiga qarab to'g'ri rangni ko'rsatadigan multipleksor. to'p.

Tasvirni yangilash

Tasvirni yangilash fayli to'p va eshkakning joylashuvi o'zgarganda tasvirni yangilash uchun ishlatiladi. Fayl Animatsiya, Start Counter va Fail Counter fayllarining komponentlarini o'z ichiga oladi. U har bir komponentdan kelgan signallarni xaritada ko'rsatadi va signallar va chiqish manzillarini aniqlash uchun davlat mantig'idan foydalanadi.

Hisoblagichni ishga tushiring

Ishga tushirish taymeri Clk, RS va CEN kirishini ishlatadi va WA va WD -ni chiqaradi. U MUX uchun boshqaruv kirishini aniqlash uchun hisoblagich va konvertatsiyadan foydalanadi. Keyin Multiplexer to'g'ri rang manzillarini aniqlash uchun kirishni ishlatadi va bu ma'lumotlarni VGA drayveriga yuboradi. Bu foydalanuvchi o'yinni boshlaganda "Pong" ni ko'rsatish uchun ishlatiladi.

Muvaffaqiyatsiz hisoblagich

Muvaffaqiyatsiz hisoblagich foydalanuvchi o'yinni yo'qotganda "O'yin tugadi" ni ko'rsatish uchun ishlatiladi. U Clk, RST va CEN signallariga ega. U hisoblagich va konvertatsiya formulasidan foydalanib, MUX uchun boshqaruv kirishini aniqlaydi. Keyin Multiplexer to'g'ri rang manzillarini aniqlash uchun kirishni ishlatadi va bu ma'lumotlarni VGA drayveriga yuboradi.

5 -qadam: Pong o'yini

Pong o'yini
Pong o'yini

Loyihaning ushbu bo'limiga Pong Master, Finite State Machine (FSM), Taymer va Start Debounce fayllari kiradi.

Taymer

Taymerda Clk (Clock) va PS (hozirgi holat) va Timer va Clk_out chiqishlari mavjud. Taymer har besh soniyada o'yin tezligini o'zgartirish uchun ishlatiladi.

FSM oqimi

Flow FSM Clk, Fail, Timer, Bttn_S (Start Button) va Buttn_RST (Reset Button) va Pres_S (Present State Output) chiqishlariga ega. FSM taymerdan hozirgi holatni keyingi holatga yangilash uchun foydalanadi va o'yin 5 -darajaga yetguncha keyingi holatni yangilab turadi, u o'yin tugaguncha qoladi.

Debuningni boshlang

Start Debounce - bu to'pning boshlang'ich sakrashi. Unda S_in va Clk kirishlari va S_out chiqishi mavjud.

Pong MasterBu fayl avvalgi barcha komponentlardan foydalanadi va barcha komponentlar bir zumda yaratiladi. Bu biz yaratgan oldingi barcha komponentlarni birlashtirgan asosiy fayl.

6 -qadam: VGA haydovchi

VGA (Visual Graphics Array) drayveri - bu displey ekraniga yuboriladigan buyruqlar yoki ma'lumotlarni qabul qilish uchun ishlatiladigan dasturiy ta'minot. Haydovchini bizga professorimiz berdi. Basys3 kartasini monitorga ulash uchun haydovchi va VGA kabelidan foydalaning.

Endi siz VHDL yordamida o'zingizning Pong o'yinini yaratishga tayyor bo'lishingiz kerak!

Tavsiya: