Mündəricat:

Pong Oyunu: 6 addım
Pong Oyunu: 6 addım

Video: Pong Oyunu: 6 addım

Video: Pong Oyunu: 6 addım
Video: Pythonda pinpong oyunu yapma #13 2024, Noyabr
Anonim
Pong Oyunu
Pong Oyunu

Materiallar:

Basys3 FPGA lövhəsi

VGA kabeli

Vivado

Bu təlimatın məqsədi bir monitorda nümayiş olunacaq bir Pong oyunu inkişaf etdirməkdir. Layihə proqramlaşdırmaq üçün VHDL -dən istifadə edəcək və kodu yerinə yetirmək üçün Basys3 FPGA -dan istifadə edir və görüntünü VGA interfeysindən istifadə edərək ötürür. Bu təlimat VHDL haqqında bir az əvvəl məlumatı olan insanlar üçün nəzərdə tutulmuşdur. Dərslik 6 fərqli hissəyə bölünəcək: Baxış, Proses, Skor İşləyicisi, Görüntü Yaratma, Pong Oyunu və VGA.

Addım 1: Baxış

Baxış
Baxış

Yuxarıdakı şəkil layihənin ümumi sxematik dizaynıdır

Oyunun məqsədi:

Oyun, istifadəçi tərəfindən idarə oluna bilən sürüşmə kürəkli bir ekrandan və yuxarı sərhəd rolunu oynayan sabit bir divardan ibarətdir. İstifadəçi yuxarı düymə olan başlanğıc düyməsini basdıqda, top sıçrayışla başlayacaq və divardan sıçrayacaq və avara vurmağa çalışacaq. Top avara dəysə, yenidən sıçrayır və avarçəkəni əldən verməyincə sıçrayışa davam edir. Top kürəyə dəymədikdə oyun başa çatır. İstifadəçi avarçəkənin hərəkətini təyin etmək üçün sol və sağ düymələrdən istifadə edə biləcək. Oyunu sıfırlamaq üçün istifadəçi orta düyməni basmalıdır. Qaçış vaxtı 7 seqmentli ekranda qeyd olunacaq. Beş səviyyə var və hər on saniyədə bir səviyyə istifadəçi itirənə qədər qaldığı 5 -ci səviyyəyə çatana qədər artır. Səviyyələr topun sürəti ilə müəyyən edilir; bu, hər on saniyədə topun sürətinin artması və bununla da oyunun çətinliyinin artması deməkdir.

Sistem Memarlığı:

Aşağıdakı diaqram, sistem üçün əsas ümumi üst səviyyəli blok diaqramdır. Sistemin dörd girişi var: Button R, Button L, Start və Reset və Saat. Üfüqi və şaquli sinxronizasiya çıxışları, RBG (müəyyən bir yerdəki pikselin rənginə aiddir) və Skor (7 Segmentli displeyə avtobus rolunu oynayan) var. Yuxarı düymə başlanğıc olaraq istifadə olunacaq. düyməsini basın və sol və sağ düymələri avarçəkəni öz istiqamətlərində hərəkət etdirmək üçün istifadə olunacaq. 7 Segment Ekran, istifadəçinin oyunu itirmədən oynadığı saniyə sayını hesaba yazmaq üçün istifadə ediləcək. Nömrə ondalık rəqəm olaraq göstəriləcək.

Dövrə Memarlığı: Gizmomuzu daha kiçik bir FSM olan bir FSM istifadə edərək quracağıq, alt FSM oyunun çətinliyini idarə edəcək, əsas FSM isə oyunun ümumi axını idarə edəcək. Gizmomuz eyni zamanda oyunun nə qədər sürətli olduğunu idarə edə bilməyimiz üçün biri hesab (vaxt), biri ekranın təzələnmə sürəti və bir DeMux çıxışına bağlanan ən azı üç saat ayırıcıdan istifadə edəcək. artan çətinliklərlə davam edəcək. Oynadıqca oyun daha sürətli hərəkət edəcək. Oyunun nə qədər oynadığınıza görə nə qədər sürətli gedəcəyini idarə edə bilmək üçün DeMux-un FSM alt vəziyyətinin nəzarət girişinə sahib olacağıq. Bir neçə sayğacdan istifadə edəcəyik, biri ekranı təzələmək üçün, biri də oyuna davam edərkən hesabınızı saymaq üçün. Bu layihədə iki əsas modul və giriş məlumatlarını manipulyasiya edəcək bir sıra submodullar var. İki əsas alt modul VGA Sürücüsü və düymə məntiq moduludur. VGA Sürücüsü, proqramlaşdırıla bilən yaddaşdan, saat bölücüdən və rəng üçün çıxışı idarə edəcək məntiqdən ibarət olacaq. Düymə məntiqi modulu, eyni zamanda saat bölücü və proqramlaşdırıla bilən bir yaddaşdan, eyni zamanda saat bölücü ilə 7 Segment Ekran üçün ikili-onlu çeviricidən ibarət olacaq.

Addım 2: Şəkil prosesi

Layihənin Image Process bölməsi üçün topun və avarçəkənin hərəkətini təyin edəcəyik. Proqramda sol, sağ, yuxarı və mərkəzi düymələri, indiki vəziyyəti, bir saat, topun X və Y mövqeləri, avarçəkmənin sol və sağ kənarı və bir uğursuzluq olan limanlar var. Mövcud vəziyyət, aktivləşdirmə siqnalını təyin etmək üçün istifadə olunur. Kod, topun hərəkət edə biləcəyi bir çox halları əhatə edir və topun yolunu təyin etmək üçün şərtlər qoyur. Növbəti proses bloku, istifadəçinin hansı düyməni basdığına əsaslanaraq avarçəkənin hərəkət istiqamətini təyin edir. Layihənin bu hissəsinin kodu hər hissənin nə etdiyini izah edən ətraflı şərhlərlə əlavə olunur.

Addım 3: Hesab İşləyicisi

Xal idarəçisi
Xal idarəçisi

Bu bölmə, Basys3 lövhəsindəki 7 Segment Ekranda hesabın saniyələrdə göstərilməsi ilə əlaqəli sənədlərdən ibarətdir. Saniyələri saymaq üçün istifadə olunan bir saat bölücü, bir hesab sayğacı istifadəçinin oynadığı saniyələri sayır, seqment sürücüsü hesabı götürür və ekranda görünəcək anodlara və katotlara çevirir və eyni zamanda mövqeyi təyin edir. nömrə göstəriləcək və son olaraq, seqment işçisi ikili rəqəmləri ekranda göstəriləcək ondalık rəqəmlərə çevirir. Hesab işçisi bütün parçaları bir araya gətirir və siqnalları xəritələyir. Bütün beş faylın kodu aşağıda əlavə edilmişdir.

Saat Bölücü:

Saat bölücünün Clk (saat), CEN (aktivləşdir) və Div (bölücü) girişləri və Clk_out çıxışı var. Aktivləşdirmə siqnalı yanarsa, saat yüksələn kənarda sayılacaq.

Puan Sayacı

Qiymət sayğacında Clk (Saat) və RST (Sıfırlama) girişləri və Clk_Out və Q çıxışları var ki, bu da mahiyyətcə hesab çıxışı rolunu oynayır.

Segment Sürücü

Segment sürücüsündə D1, D10, D100, D1000 və Saat girişləri var. "D" hərfindən sonrakı rəqəmlər 7 seqmentli ekrandakı onluğa aiddir. Çıxışlar anod və rəqəmdir. Saat sayar və nömrələri və mövqeyini təyin edir. Məsələn, minlərlə, yüzlərlə və onluq yerlərdə "0" işarələri olan bir yerdə "9" göstəriləcək. "10" a keçdikdə, ədədin onluğunda "1", minlərdə, yüzlərdə və bir yerlərdə "0" lar olacaq.

Segment idarəçisi

Segment işləyicisinin girişi rəqəm, çıxışı olaraq katodları var. Ekranda ondalık ədəd çıxarmaq üçün mahiyyət etibarilə katodun ikili ədədləridir.

Xal idarəçisi

Score Handler əvvəlki dörd varlıqdan ibarətdir və hamısını bir araya gətirir və siqnalları xəritələyir. Həm də mövcud vəziyyətə əsaslanaraq sayğacı işə salır və söndürür.

Addım 4: Şəkil Yaratma

Şəkil istehsalı dörd komponentdən ibarətdir: Animasiya, Fail Counter, Refresh Image və Start Counter. Bu fayllar görüntülərin monitorda necə yaradılacağını göstərir.

Animasiya

Animasiya faylında Clk (Saat Siqnalı), CEN (saymağa imkan verir), RST (Siqnal Sıfırla), B_X (Topun X mövqeyi), B_Y (Topun Y mövqeyi), P_L (sol avar mövqeyi) və P_R girişləri var. (sağ avarçəkmə mövqeyi). Çıxışlar WA (rəngi yazdığımız ünvan) və WD (müəyyən edilmiş ünvanda yazılan rəng) dir. Fayl MUX üçün nəzarət girişi olaraq istifadə ediləcək bir sayğac olan Play_Counter, doğru yerlərdə doğru rəngləri çıxara bilən bir kodlayıcı və son olaraq avarçağın mövqeyinə və top.

Şəkli Yenilə

Şəkil Yeniləmə faylı, topun və avarların mövqeyi dəyişdikcə görüntünü yeniləmək üçün istifadə olunur. Fayl, Animasiya, Başlatıcı Sayma və Başarısız Sayıcı fayllarından olan komponentləri ehtiva edir. Hər bir komponentdən gələn siqnalları xəritələyir və siqnalları və çıxış ünvanlarını təyin etmək üçün dövlət məntiqindən istifadə edir.

Sayğacı Başlat

Başlanğıc Sayğacı Clk, RS və CEN girişlərindən və WA və WD çıxışlarından istifadə edir. MUX üçün nəzarət girişini təyin etmək üçün bir sayğac və çevrilmədən istifadə edir. Daha sonra Multiplexer, düzgün rəng ünvanlarını təyin etmək üçün girişdən istifadə edir və bu məlumatları VGA sürücüsünə göndərir. İstifadəçi oyuna başlayanda "Pong" u göstərmək üçün istifadə olunur.

Fail Counter

İstifadəçi oyunu itirdiyində uğursuz sayğacı "Oyun bitdi" ni göstərmək üçün istifadə olunur. Clk, RST və CEN siqnalları var. MUX üçün nəzarət girişini təyin etmək üçün bir sayğac və bir dönüşüm formulundan istifadə edir. Daha sonra Multiplexer, düzgün rəng ünvanlarını təyin etmək üçün girişdən istifadə edir və bu məlumatları VGA sürücüsünə göndərir.

Addım 5: Pong Oyunu

Pong Oyunu
Pong Oyunu

Layihənin bu bölməsinə Pong Master, Finite State Machine (FSM), Timer və Start Debounce faylları daxildir.

Taymer

Taymeri Clk (Clock) və PS (Present State) və Timer və Clk_out kimi çıxışlar daxil edir. Taymer hər beş saniyədə bir oyunun sürətini dəyişdirmək üçün istifadə olunur.

FSM axını

Flow FSM Clk, Fail, Timer, Bttn_S (Start Button) və Buttn_RST (Reset Button) və Pres_S (Present State Output) çıxışlarına malikdir. FSM, Hazırkı Vəziyyəti Sonrakı Vəziyyətə yeniləmək üçün taymeri istifadə edir və oyun, oyun bitənə qədər qaldığı 5 -ci səviyyəyə çatana qədər Növbəti Vəziyyəti yeniləməyə davam edir.

Debounce başlayın

Start Debounce topun başlanğıc sıçrayışıdır. S_in və Clk girişləri və S_out çıxışı var.

Pong Master Bu fayl bütün əvvəlki komponentləri istifadə edir və bütün komponentlərin ani olmasını təmin edir. Birlikdə qurduğumuz bütün əvvəlki komponentləri bir araya gətirən ana sənəddir.

Addım 6: VGA Sürücü

VGA (Visual Graphics Array) Sürücü, ekrana göndərilən əmrləri və ya məlumatları qəbul etmək üçün istifadə olunan bir proqramdır. Sürücünü bizə professorumuz verdi. Basys3 lövhəsini monitöre bağlamaq üçün sürücü və VGA kabelindən istifadə edin.

İndi VHDL istifadə edərək öz Pong Oyununuzu hazırlamalısınız!

Tövsiyə: