Mündəricat:
- Addım 1: Baxış
- Addım 2: Materiallar
- Addım 3: Oyunun hazırlanması
- Addım 4: Nəticənin göstərilməsi
- Addım 5: Hamısını bir yerə yığın
- Addım 6: Gələcək dəyişikliklər
- Addım 7: Nəticə
Video: FPGA Asteroid Oyunu: 7 Adım (Şəkillərlə birlikdə)
2024 Müəllif: John Day | [email protected]. Son dəyişdirildi: 2024-01-30 07:48
CPE 133 Final Layihəmiz üçün FPGA-da iki düymə açarı və 7 seqmentli ekran istifadə edərək bir asteroid oyunu yaratmağa qərar verdik. Oyun, bir asteroidin təsadüfi seçilmiş üç cərgədən birində meydana gəlməsi və 7 seqmentli ekranın digər tərəfindəki gəmiyə doğru irəliləməsi üçün işləyir. Gəminizi asteroid yolundan çıxarmaq üçün yuxarı və aşağı düymələrdən istifadə etmək olar. Bunu etmədikdə, ekran bir an üçün 'BAnG' yazır və sonra istifadəçi yenidən cəhd edə bilməsi üçün oyunu tez bir zamanda yenidən başlatır. Aşağıdakılar, hər hansı bir istifadəçinin dizaynımızı təkrarlaya və ya təkmilləşdirə bilməsi üçün layihənin necə edildiyinin qısa təsviridir.
Addım 1: Baxış
Layihə, əsasən gəmi və qaya mövqelərinin fərqli dəyərlərini saxlayan və göstərən dövlətlər arasında FPGA ötürmək üçün məntiqdən istifadə edən Sonlu Dövlət Maşınlarından (FSM) ibarətdir. İki əsas modul, rock və gəmi üçün oyun FSM'ləri və VHDL-də çox sadə bir quruluş modeli istifadə edərək bir araya gətirilən ikili 7 seqmentli ekran dekoder FSM-dir.
FSM-lər gəminin mövqeyi, qaya mövqeyi və 7 seqmentli dekoder üçün yaradılmışdır. Gəminin FSM -nin məqsədi, oyunçu yuxarı və ya aşağı düyməni basdıqda gəminin düzgün mövqeyə keçə bilməsidir. FSM lazımdır, çünki düzgün mövqeyə keçmək üçün hansı mövqedə sonuncu yerdə olduğunu xatırlamalıdır.
Rokun FSM -nin məqsədi, qaya hansı cərgədə olduğuna və bu cərgədəki son mövqeyinə görə düzgün mövqeyə keçməkdir. Əlavə olaraq, onu nümayiş etdirəcək modulun mövqeyini izləyir və yalançı təsadüfi olaraq sonrakıda görünəcək yeni bir sıra seçir.
7 seqmentli ekran deşifratoru üçün FSM yalnız gəmi və qayanı göstərmək üçün deyil, həm də gəmi mövqeyi və qaya mövqeyi eyni olduqda "BAnG" göstərmək üçün istifadə edilmişdir.
Addım 2: Materiallar
Layihədə istifadə olunan materiallar:
- Digilent, Inc -dən Basys3 İnkişaf Şurası
- Vivado Design Suite
- sseg_dec.vhd (Bu fayl bizə Polylearn -da verilmiş və Bryan Mealy tərəfindən yazılmışdır)
- Clk_div.vhd (Bu fayl bizə Polylearn -da verilmiş və Bryan Mealy tərəfindən yazılmışdır)
- Üç Sonlu Maşın (FSM)
Addım 3: Oyunun hazırlanması
Oyun modulu, öz FSM -ləri üçün gəminin və rokun vəziyyətini təsvir etmək üçün davranış modelləşdirməsindən istifadə etməklə yaradılmışdır. Bunun üstünlüyü ondan ibarətdir ki, aparatın dizaynı üçün lazım olan bütün komponentləri anlamaqdansa, nə etdiyini təsvir edərək davranışı davranış qaydasında modelləşdirmək daha asandır.
Qaya vəziyyətləri, qaya ilk mövqeyi üçün yalançı təsadüfi ədədlər generatoru istifadə edərək edildi. Bunu həyata keçirmək üçün generatora oyunun sürətinə nisbətən son dərəcə sürətli olan öz saatını verdik. Hər yüksələn kənarda üç bitlik bir rəqəm artırılır və bütün dəyərləri gəmi üçün üç başlanğıc vəziyyətindən birinə uyğundur. Buna görə üç dəyər 3 mövqeyə (sağ üst), üçü 7 mövqeyə (ortada) və ikisi 11 mövqeyə (aşağı sağda) uyğundur.
Təsadüfi nəsil meydana gəldikdən və asteroidə ilkin vəziyyət verildikdən sonra heç bir fasilə vermədən gəmiyə doğru üfüqi olaraq axır.
0 ← 1 ← 2 ← 3
4 ← 5 ← 6 ← 7
11 ← 10 ← 9 ← 8
Rokun növbəti vəziyyət məntiqi üçün istifadə olunan saat oyunun sürətini idarə edir; sınaq və səhv nəticəsində 9999999 -un maksimum sayı üçün yaxşı bir dəyər olduğunu gördük.
Gəminin məntiqi, sol tərəfdəki mərkəz mövqeyinə (mövqe 4) başlayaraq işləyir. Yuxarı və ya aşağı düyməyə basıldığı təqdirdə, gəmi basılan düyməyə uyğun olaraq 0 və 11 mövqeyinə yuxarı və aşağı hərəkət edəcək.
Gəmi hərəkətinin istifadəçi üçün yaxşı olmasını təmin etmək üçün onun hərəkətini asenkron etmədik. Vəziyyət dəyişiklikləri üçün bir saat istifadə etdik və maksimum 5555555 sayından istifadə etdik.
Addım 4: Nəticənin göstərilməsi
İkili 7-seqmentli dekoder gəmi və asteroid üçün 4 bitlik mövqe dəyişənlərini qəbul edir və uyğun görüntünü (gəmi və qaya və ya "BAnG" mesajı) göstərir.
Bunu əvvəlcə hər ikisinin bərabər olub olmadığını yoxlamaqla və sonra çek doğru olarsa "BAnG" mesajını göstərməklə həyata keçirir.
Düzgün qayıtmazsa, dekoder gəmi və qaya arasında çox yüksək bir saat tezliyində keçərək və eyni anda nümayiş etdirildiyi kimi gözlə aldadaraq onları göstərəcək.
Addım 5: Hamısını bir yerə yığın
Gəminin və rokun FSM -ni FSM ekranına bağladığımız böyük bir FSM -də əhatə etdik. Oyuna girişlər BASYS3 lövhəsindəki yuxarı və aşağı düymələr və sistem saatlarıdır. Çıxışlar yeddi seqmentli displey və anod vektorlarıdır.
Bu girişlər və çıxışlar liman xəritələndiyi məhdudiyyətlər sənədində görünəcək.
Addım 6: Gələcək dəyişikliklər
Gələcəkdə, layihəyə daha çox gəmi hərəkəti funksiyası əlavə etmək bir inkişaf olardı. Bu, daha 2 düymə girişi verərək və gəminin 0, 4 və 8 -dən başqa mövqelər (vəziyyətlər) almasına icazə verməklə həyata keçirilə bilər. Başqa bir mümkün dəyişiklik, asteroidin yavaş -yavaş başlaması və sürəti artırması üçün növbəti vəziyyət zamanlamasına nəzarət etmək ola bilər. Gəmini vurduqdan sonra hər dəfə 1,5 dəfə qaçır və yenidən yavaşlayacaq. Bu, oyunun çətinliyini artırar və tətbiq olunarsa istifadəçi üçün daha əyləncəli olardı və hər dəfə asteroid düşməyəndə bu dəyişəni 1,5 ilə vuraraq rokun növbəti vəziyyət saatının maksimum sayına görə bir dəyişən yaradaraq edilə bilərdi. vurmayın və qaya hər dəfə vuranda onu ilkin dəyərinə qaytarın.
Addım 7: Nəticə
Bu layihə, sonlu maşınları, saatları və interaktiv olaraq yeddi seqmentli displeylərdə göstərilməsini daha yaxşı başa düşməyimizə kömək etdi.
Sonlu vəziyyət maşınları haqqında ən böyük şey, istədiyiniz vəziyyətə keçmək üçün hazırda hansı vəziyyətdə olduğunuzu bilməyinizin (xatırlamağın) vacib olmasıdır. Qəribədir, yaxşı həyat məsləhətləri; hara getdiyini bilmək üçün hara getdiyini bilməlisən.
Fərqli saat nümunələrini manipulyasiya edərək, təsadüfi olaraq rəqəmlər yarada, qayanı növbəti mövqeyə keçirə və gəminin, qaya və oyun sonu mesajının göstərilməsini idarə edə bildik.
Öyrəndik ki, birdən çox anod eyni vaxtda göstərilə bilməz. Bizə verilən modul, insan gözünün fərqi yalnız müəyyən bir tezliyə qədər görə biləcəyindən istifadə etdi. Buna görə daha yüksək keçid anodları seçildi. Eyni zamanda görünən gəmi və qaya əslində bir işarədir, çünki hər biri ayrı -ayrılıqda, lakin çox tez nümayiş olunur. Bu konsepsiya gəminin, qayanın hərəkətini və "BAnG" mesajını göstərmək üçün tətbiq edilmişdir.
Tövsiyə:
Arduino Tel Oyunu: 7 Adım (Şəkillərlə birlikdə)
Arduino Tel Oyunu: Bu layihə üçün bu veb saytdan istinad etdim və yeni bir layihə etmək üçün dəyişdirdim. Bu layihə, metal bir tutacaq götürüb telə toxunmadan telin içindən keçməsini təmin edəcək Tel Oyunu adlanır. Sap sapa toxunarsa
LED Rocker Oyunu: 7 Adım (Şəkillərlə birlikdə)
LED Rocker Oyunu: LED Rocker Oyunu sadə bir Arduino oyunudur. Əsasən 9 LED (8 Mavi LED və ortada 1 Qırmızı LED), 1 düymə, 1 dinamik və 1 LCD paneldən ibarətdir. Bu oyunun məqsədi qırmızı LED yanıb -sönəndə düyməni basmaqdır. 9 LED -in yanıb sönməsi ilə başlayır
Android + Arduino Labyrith Oyunu: 5 Adım (Şəkillərlə birlikdə)
Android + Arduino Labyrith Oyunu: Salam dostlar..Heç vaxt Android Smartfonunuzdan idarə oluna bilən bir labirent taxtası düzəltmək üçün gəzmisinizmi …. Yaxşı yerdəsiniz. Arduino və androiddən istifadə edərək özüm üçün bir şey qurdum, narahat olmayın, bu layihədə
Microbit Tic Tac Toe Oyunu: 4 Adım (Şəkillərlə birlikdə)
Microbit Tic Tac Toe Oyunu: Bu layihə üçün iş yoldaşım - @descartez və mikrobitlərin radio funksiyasından istifadə edərək zəhmli bir tic tac toe oyunu yaratdıq. Daha əvvəl mikroblar haqqında eşitməmisinizsə, uşaqlara proqramlaşdırma öyrətmək üçün hazırlanmış möhtəşəm bir mikro nəzarətçidirlər. Onlar
İstifleyiciler Arcade Oyunu: 6 Adım (Şəkillərlə birlikdə)
İstifleyiciler Arcade Oyunu: Salam uşaqlar, bu gün bir dəstə Ws2812b LED və mikrokontrolör/FPGA ilə edə biləcəyiniz bu heyrətamiz oyununu sizinlə bölüşmək istəyirəm. Bax Stack Overflow - klassik bir arcade oyununun hardware tətbiqimiz. Bir məktəb layihəsi olaraq başlayan şey