İçindekiler:

Pong Oyunu: 6 Adım
Pong Oyunu: 6 Adım

Video: Pong Oyunu: 6 Adım

Video: Pong Oyunu: 6 Adım
Video: Javascript ve p5.js ile PONG Oyunu Yapalım - Oyuncu Mekanikleri - #1 2024, Temmuz
Anonim
Pong Oyunu
Pong Oyunu

Malzemeler:

Basys3 FPGA Kartı

VGA kablosu

canlı

Bu talimatın amacı, bir monitörde görüntülenecek bir Pong oyunu geliştirmektir. Proje, kodu yürütmek için bir Basys3 FPGA programlamak ve kullanmak için VHDL'yi kullanacak ve bir VGA arayüzü kullanarak görüntüyü aktaracak. Bu eğitim, VHDL hakkında biraz ön bilgi sahibi olan kişiler için hazırlanmıştır. Eğitim 6 farklı bölüme ayrılacaktır: Genel Bakış, Süreç, Puan İşleyici, Görüntü Oluşturma, Pong Oyunu ve VGA.

1. Adım: Genel Bakış

genel bakış
genel bakış

Yukarıdaki Resim, projenin genel şematik tasarımıdır

Oyunun Amacı:

Oyun, kullanıcı tarafından kontrol edilebilen kayar kanatlı bir ekran ve üst sınır görevi gören sabit bir duvardan oluşur. Kullanıcı yukarı butonu olan başlat butonuna bastığında top yukarı zıplamaya başlayacak ve duvardan sekerek raketi vurmaya çalışacaktır. Top rakete çarparsa tekrar seker ve raketi ıskalayana kadar zıplamaya devam eder. Top rakete değmediğinde oyun sona erer. Kullanıcı, küreğin hareketini belirlemek için sol ve sağ butonları kullanabilecektir. Oyunu sıfırlamak için kullanıcının ortadaki düğmeye basması gerekir. Koşunun süresi 7 segmentli bir ekranda kaydedilecektir. Beş seviye vardır ve seviye 5'e ulaşana kadar her on saniyede bir seviye artar, burada kullanıcı kaybedene kadar kalır. Seviyeler topun hızına göre belirlenir; bu, her on saniyede bir topun hızının arttığı ve böylece oyunun zorluğunun arttığı anlamına gelir.

Sistem mimarisi:

Aşağıdaki diyagram, sistem için temel genel üst düzey blok diyagramdır. Sistemin dört girişi vardır: R Düğmesi, L Düğmesi, Başlatma ve Sıfırlama ve Saat. Yatay ve dikey senkron çıkışları, RBG (belirli bir konumdaki pikselin rengini ifade eder) ve Skor (7 Segment ekrana otobüs görevi görür) vardır. Yukarı düğmesi başlangıç olarak kullanılacaktır. küreği ilgili yönlerde hareket ettirmek için sol ve sağ butonlar kullanılacaktır. 7 Segment Ekran, kullanıcının oyunu kaybetmeden oynadığı saniye sayısı olan skoru kaydetmek için kullanılacaktır. Sayı ondalık sayı olarak görüntülenecektir.

Devre Mimarisi: Daha küçük bir FSM içeren bir FSM kullanarak gizmomuzu oluşturacağız, alt FSM oyunun zorluğunu kontrol ederken ana FSM oyunun genel akışını kontrol edecek. Gizmomuz ayrıca, biri puan (zaman), biri ekranın yenileme hızı için ve biri DeMux'un çıktısına bağlı olan en az üç saat bölücü kullanacak, böylece oyunun ne kadar hızlı olduğunu kontrol edebiliriz. artan miktarda zorlukla ilerleyecektir. Oyun, ne kadar uzun süre oynarsanız o kadar hızlı hareket edecektir. DeMux'un kontrol girdisine sahip olacağız, böylece oyunun ne kadar süreceğini, ne kadar süre oynadığınızı kontrol edebilelim. Birkaç sayaç kullanacağız, biri ekranı yenilemek için, diğeri siz oynamaya devam ederken skoru saymak için. Bu proje, iki ana modüle ve girdi verilerini manipüle edecek bir dizi alt modüle sahiptir. İki ana alt modül, VGA Sürücüsünün yanı sıra düğme mantık modülüdür. VGA Sürücüsü, programlanabilir bellek, bir saat bölücü ve çıktıyı renk için manipüle edecek mantıktan oluşacaktır. Düğme mantığı modülü aynı zamanda bir saat bölücü ve programlanabilir bir bellekten ve ilgili saat bölücüyle birlikte 7-Segment Ekran için bir ikiliden ondalığa dönüştürücüden oluşacaktır.

2. Adım: Görüntü İşlemi

Projenin Görüntü İşlemi bölümünde top ve kürek hareketini belirleyeceğiz. Program, sol, sağ, üst ve orta butonları, mevcut durumu, bir saati, topun X ve Y pozisyonlarını, raketin sol ve sağ kenarını ve bir arızayı içeren portlara sahiptir. Mevcut durum, etkinleştirme sinyalini belirlemek için kullanılır. Kod, topun hareket edebileceği birden fazla durumu ele alır ve topun yolunu belirlemek için koşullar belirlemiştir. Bir sonraki işlem bloğu, kullanıcının hangi düğmeye bastığına bağlı olarak küreğin hareket yönünü belirler. Projenin bu bölümünün kodu, her bölümün ne yaptığını açıklayan ayrıntılı yorumlarla birlikte eklenmiştir.

3. Adım: Puan İşleyici

Puan İşleyici
Puan İşleyici

Bu bölüm, Basys3 Board üzerindeki 7 Segment Ekranda skorun saniyeler içinde görüntülenmesi ile ilgili dosyalardan oluşmaktadır. Saniyeleri saymak için kullanılan bir saat bölücü içerir, bir skor sayacı kullanıcının oynadığı saniyeleri sayar, segment sürücüsü skoru alır ve ekranda görüntülenecek anot ve katotlara dönüştürür ve ayrıca konumu belirler. numara görüntülenecektir ve son olarak, segment işleyici, ikili basamakları ekranda görüntülenecek ondalık basamaklara dönüştürür. Skor işleyici tüm parçaları bir araya getirir ve sinyalleri eşler. Beş dosyanın tümü için kod aşağıda eklenmiştir.

Saat Bölücü:

Saat bölücünün Clk(clock), CEN(etkinleştir) ve Div(bölücü) girişleri ve Clk_out çıkışı vardır. Etkinleştirme sinyali açıksa, saat yükselen kenarda sayılacaktır.

Puan Sayacı

Puan sayacı, Clk(Clock) ve RST(Reset) girdilerine ve esasen puan çıktısı olarak işlev gören Clk_Out ve Q çıktılarına sahiptir.

Segment Sürücüsü

Segment sürücüsünde D1, D10, D100, D1000 ve Clock girişleri bulunur. "D"den sonraki sayılar, 7 segmentli ekranda ondalık basamağı ifade eder. Çıkışlar anotlar ve rakamdır. Saat, sayıları ve konumunu sayar ve atar. Örneğin, binler, yüzler ve onlar basamağında "0"lar olan birler basamağında "9" görüntülenecektir. "10"a geçtiğinde artık sayı onlar basamağında "1", binler, yüzler ve birler basamağında "0" olacaktır.

Segment İşleyici

Segment işleyicisinin girdisi rakam ve çıktısı katottur. Ekranda ondalık sayıların çıktısını almak için esasen katot ekranına ikili sayılar.

Puan İşleyici

Puan İşleyici önceki dört varlıktan oluşur ve hepsini bir araya getirir ve sinyalleri eşler. Ayrıca mevcut duruma göre sayacı etkinleştirir ve devre dışı bırakır.

Adım 4: Görüntü Oluşturma

Görüntü oluşturma dört bileşenden oluşur: Animasyon, Başarısızlık Sayacı, Görüntüyü Yenile ve Başlangıç Sayacı. Bu dosyalar, görüntülerin ekran monitöründe nasıl oluşturulacağını gösterir.

Animasyon

Animasyon dosyasında Clk(Clock Signal), CEN(count enable), RST(Reset Signal), B_X(topun X pozisyonu), B_Y(Topun Y pozisyonu), P_L(sol paddle pozisyonu) ve P_R girişleri vardır. (sağ kürek konumu). Çıktılar WA(rengi yazdığımız adres) ve WD(belirlenen adreste yazılan renk). Dosyada MUX için kontrol girişi olarak kullanılacak bir sayaç olan Play_Counter, doğru yerlerde doğru renkleri çıkarabilen bir kodlayıcı ve son olarak küreğin konumuna göre doğru rengi görüntüleyen bir çoklayıcı vardır. top.

Resmi Yenile

Görüntüyü Yenile dosyası, topun ve raketin konumu değiştikçe görüntüyü yenilemek için kullanılır. Dosya, Animasyon, Başlatma Sayacı ve Arıza Sayacı dosyalarından bileşenleri içerir. Her bileşenden gelen sinyalleri eşler ve sinyalleri ve çıkış adreslerini belirlemek için durum mantığını kullanır.

Sayacı Başlat

Başlangıç Sayacı, Clk, RS ve CEN girişlerini ve WA ve WD çıkışlarını kullanır. MUX için kontrol girişini belirlemek için bir sayaç ve dönüştürme kullanır. Çoklayıcı daha sonra doğru renk adreslerini belirlemek için girişi kullanır ve bu verileri VGA sürücüsüne gönderir. Bu, kullanıcı oyuna başladığında "Pong"u göstermek için kullanılır.

Arıza Sayacı

Başarısızlık sayacı, kullanıcı oyunu kaybettiğinde "Oyun Bitti"yi göstermek için kullanılır. Clk, RST ve CEN sinyaline sahiptir. MUX için kontrol girişini belirlemek için bir sayaç ve bir dönüştürme formülü kullanır. Çoklayıcı daha sonra doğru renk adreslerini belirlemek için girişi kullanır ve bu verileri VGA sürücüsüne gönderir.

Adım 5: Pong Oyunu

Pong Oyunu
Pong Oyunu

Projenin bu bölümü, Pong Master, Sonlu Durum Makinesi (FSM), Zamanlayıcı ve Başlat Debounce dosyalarını içerir.

zamanlayıcı

Zamanlayıcının çıktıları olarak Clk(Clock) ve PS(Mevcut Durum) girişleri ve Timer ve Clk_out vardır. Zamanlayıcı, oyunun hızını yaklaşık her beş saniyede bir değiştirmek için kullanılır.

Akış FSM'si

Flow FSM'de Clk, Fail, Timer, Bttn_S(Start Button) ve Buttn_RST(Reset Button) girişleri ve Pres_S(Mevcut Durum Çıkışı) çıkışı vardır. FSM, Mevcut Durumu Sonraki Duruma güncellemek için zamanlayıcıyı kullanır ve oyun bitene kadar kaldığı 5. seviyeye ulaşana kadar Sonraki Durumu güncellemeye devam eder.

Geri Dönmeyi Başlat

Başlangıç Geri Sekmesi, topun başlangıç sıçramasıdır. S_in ve Clk girişlerine ve S_out çıkışına sahiptir.

Pong MasterBu dosya, önceki tüm bileşenleri kullanır ve tüm bileşenlerin anlık olmasını sağlar. Birlikte oluşturduğumuz önceki tüm bileşenleri bir araya getiren ana dosyadır.

Adım 6: VGA Sürücüsü

VGA(Görsel Grafik Dizisi) Sürücüsü, ekrana gönderilen komutları veya verileri kabul etmek için kullanılan bir yazılım parçasıdır. Şoförü bize hocamız verdi. Basys3 kartını monitöre bağlamak için sürücüyü ve bir VGA kablosunu kullanın.

Artık VHDL kullanarak kendi Pong Oyununuzu yapmaya hazır olmalısınız!

Önerilen: