İçindekiler:

FPGA Asteroit Oyunu: 7 Adım (Resimlerle)
FPGA Asteroit Oyunu: 7 Adım (Resimlerle)

Video: FPGA Asteroit Oyunu: 7 Adım (Resimlerle)

Video: FPGA Asteroit Oyunu: 7 Adım (Resimlerle)
Video: DÜNYA YOK ETME OYUNU 7 😂 2024, Kasım
Anonim
FPGA Asteroit Oyunu
FPGA Asteroit Oyunu

CPE 133 Final Projemiz için, iki buton anahtarı ve 7-segment ekranı kullanarak FPGA'mızda bir asteroit oyunu oluşturmaya karar verdik. Oyun, rastgele seçilen üç sıradan birinde bir asteroid ortaya çıkacak ve 7 segmentli ekranın diğer tarafında gemiye doğru hızla gelecek şekilde çalışır. Üst düğme ve alt düğme, geminizi asteroidin yolundan çıkarmak için kullanılabilir. Başarısız olunduğunda, ekranda bir an için 'BAnG' yazıyor ve ardından kullanıcının tekrar deneyebilmesi için oyunu hızla yeniden başlatıyor. Aşağıda, herhangi bir kullanıcının tasarımımızı kopyalayabilmesi veya geliştirebilmesi için projenin nasıl yapıldığına dair kısa bir açıklama yer almaktadır.

1. Adım: Genel Bakış

genel bakış
genel bakış
genel bakış
genel bakış

Proje büyük ölçüde, FPGA'yı farklı gemi ve kaya konumları değerlerini depolayan ve görüntüleyen durumlar arasında aktarmak için mantığı kullanan Sonlu Durum Makinelerinden (FSM'ler) oluşmaktadır. İki ana modül, kaya ve gemi için oyun FSM'leri ve VHDL'de çok basit bir yapısal model kullanılarak birbirine entegre edilen ikili ila 7 segmentli ekran kod çözücü FSM'dir.

Geminin konumu, kayanın konumu ve 7 segmentli kod çözücü için FSM'ler oluşturuldu. Geminin FSM'sinin amacı, oyuncu yukarı veya aşağı düğmesine bastığında geminin doğru konuma hareket edebilmesidir. FSM'ye ihtiyaç vardır, çünkü doğru konuma hareket etmek için en son hangi konumda olduğunu hatırlaması gerekir.

Kayanın FSM'sinin amacı, kayayı hangi sırada bulunduğuna ve o sıradaki son konuma göre doğru konuma taşımaktır. Ek olarak, onu gösterecek modülün konumunu takip eder ve bir sonrakinde görünmesi için sözde rasgele yeni bir satır seçer.

7 segmentli görüntü kod çözücü için FSM, yalnızca gemiyi ve kayayı görüntülemek için değil, aynı zamanda gemi konumu ve kaya konumu aynı olduğunda “BAnG” görüntülemek için de kullanıldı.

Adım 2: Malzemeler

Projede kullanılan malzemeler şunlardı:

  • Digilent, Inc.'den Basys3 Geliştirme Kurulu
  • Vivado Tasarım Süiti
  • sseg_dec.vhd (Bu dosya bize Polylearn'de sağlandı ve Bryan Mealy tarafından yazıldı)
  • Clk_div.vhd (Bu dosya bize Polylearn üzerinden sağlandı ve Bryan Mealy tarafından yazıldı)
  • Üç Sonlu Durum Makinesi (FSM)

Adım 3: Oyunu Yapmak

Oyunu Yapmak
Oyunu Yapmak
Oyunu Yapmak
Oyunu Yapmak
Oyunu Yapmak
Oyunu Yapmak
Oyunu Yapmak
Oyunu Yapmak

Oyun modülü, kendi FSM'leri için geminin ve kayanın durumlarını tanımlamak için davranışsal modelleme kullanılarak oluşturuldu. Bunun avantajı, donanımı tasarlamak için gereken tüm bileşenleri bulmaktan ziyade, devreyi ne yaptığını tanımlayarak davranışsal olarak modellemenin çok daha kolay olmasıdır.

Kaya durumları, kayanın ilk konumu için sözde rasgele sayı üreteci kullanılarak yapıldı. Bunu başarmak için jeneratöre oyunun hızına göre son derece hızlı olan kendi saatini verdik. Her yükselen kenarda, üç bitlik bir sayı artırılır ve tüm değerleri gemi için üç başlangıç durumundan birine karşılık gelir. Bu nedenle, üç değer konum 3'e (sağ üst), üç değer konum 7'ye (orta) ve iki değer konum 11'e (sağ alt) karşılık gelir.

Rastgele nesil meydana geldiğinde ve asteroide bir başlangıç durumu verildiğinde, kesintisiz olarak gemiye doğru yatay olarak akar.

0 ← 1 ← 2 ← 3

4 ← 5 ← 6 ← 7

11 ← 10 ← 9 ← 8

Kayanın sonraki durum mantığı için kullanılan saat oyunun hızını kontrol eder; 9999999'un maksimum sayısı için iyi bir değer olduğunu deneme yanılma yoluyla bulduk.

Geminin mantığı, en sol taraftaki orta konuma (konum 4) başlatılarak çalışır. Üst düğmeye veya alt düğmeye basılırsa, gemi yukarı ve aşağı, basılan düğmeye karşılık gelen 0 ve 11 pozisyonlarına hareket edecektir.

Gemi hareketini kullanıcıya iyi hissettirmek için hareketini asenkron yapmadık. Durum değişiklikleri için bir saat kullandık ve maksimum 5555555 sayısını kullandık.

Adım 4: Sonucu Görüntüleme

İkili ila 7 segmentli kod çözücü, gemi ve asteroit için 4 bitlik konum değişkenlerini alır ve uygun görüntüyü görüntüler (gemi ve kaya ya da “BAnG” mesajı).

Bunu, önce ikisinin eşit olup olmadığını kontrol ederek ve ardından kontrol doğru dönerse “BAnG” mesajını görüntüleyerek gerçekleştirir.

Eğer doğru dönmezse, kod çözücü gemiyi ve kayayı çok yüksek bir saat frekansında aralarında geçiş yaparak ve aynı anda gösteriliyormuş gibi gözü kandırarak görüntüleyecektir.

Adım 5: Hepsini Bir Araya Getirmek

Hepsini bir araya koy
Hepsini bir araya koy

Geminin ve kayanın FSM'sini, FSM ekranına bağladığımız büyük bir FSM'de topladık. Oyuna girişler, BASYS3 kartındaki yukarı ve aşağı butonları ve sistem saatidir. Çıktılar, segment ve anot vektörleri yedi segment görüntüsüdür.

Bu girdiler ve çıktılar, bağlantı noktası eşlendikleri kısıtlama dosyasında görülecektir.

Adım 6: Gelecekteki Değişiklikler

Gelecekte, projeye daha fazla gemi hareketi işlevselliği eklemek bir gelişme olacaktır. Bu, basitçe 2 düğme girişi daha vererek ve geminin 0, 4 ve 8 dışındaki pozisyonları (durumları) almasına izin vererek gerçekleştirilebilir. Bir isabet alana kadar gemiyi her ıskaladığında 1.5x, yeniden başlayıp tekrar yavaşlayacaktır. Bu, eğer uygulanırsa oyunun zorluğunu artıracak ve kullanıcı için daha eğlenceli hale getirecek ve kayanın bir sonraki durum saatinin maksimum sayısı için bir değişken yaratarak, asteroid her seferinde bu değişkeni 1,5 ile çarparak yapılabilir. vurmak ve kaya her çarptığında ilk değerine sıfırlamak.

7. Adım: Sonuç

Bu proje, sonlu durum makinelerini, saatleri ve yedi segmentli ekranlarda etkileşimli olarak görüntülemeyi daha iyi anlamamıza yardımcı oldu.

Sonlu durum makineleriyle ilgili en büyük şey, bir sonraki istenen duruma geçmek için şu anda hangi durumda olduğunuzu bilmenin (hatırlamanın) önemli olmasıdır. İronik olarak, iyi bir yaşam tavsiyesi; nereye gittiğinizi bilmek için nerede olduğunuzu bilmelisiniz.

Farklı saat örneklerini manipüle ederek, rastgele sayılar üretebildik, taşı bir sonraki konuma taşıyabildik ve geminin, taşın ve oyun sonu mesajının görüntülenmesini yönetebildik.

Birden fazla anotun aynı anda görüntülenemeyeceğini öğrendik. Bize verilen modül, insan gözünün farkı ancak belli bir frekansa kadar görebilmesinden faydalandı. Bu nedenle, daha yüksek bir anahtarlama anot frekansı seçilmiştir. Gemi ve kayanın aynı anda görülmesi aslında bir imadır, çünkü her biri ayrı ayrı, ancak çok hızlı bir şekilde gösterilir. Bu konsept, geminin, kayanın ve “BanG” mesajının hareketini göstermek için uygulandı.

Önerilen: