İçindekiler:
- 1. Adım: Genel Bakış
- Adım 2: Malzemeler
- Adım 3: Oyunu Yapmak
- Adım 4: Sonucu Görüntüleme
- Adım 5: Hepsini Bir Araya Getirmek
- Adım 6: Gelecekteki Değişiklikler
- 7. Adım: Sonuç
Video: FPGA Asteroit Oyunu: 7 Adım (Resimlerle)
2024 Yazar: John Day | [email protected]. Son düzenleme: 2024-01-30 13:21
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ış
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
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
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:
BBC Micro:bit ve Scratch - Etkileşimli Direksiyon & Sürüş Oyunu: 5 Adım (Resimlerle)
BBC Micro:bit ve Scratch - Etkileşimli Direksiyon Simidi ve Sürüş Oyunu: Bu haftaki sınıf ödevlerimden biri, yazdığımız bir Scratch programıyla arayüz oluşturmak için BBC Micro:bit'i kullanmak. Bunun, ThreadBoard'umu gömülü bir sistem oluşturmak için kullanmak için mükemmel bir fırsat olduğunu düşündüm! Scratch p için ilham kaynağım
Arduino Kullanarak 3 Boyutlu Labirent Oyunu: 8 Adım (Resimlerle)
Arduino ile 3d Labirent Oyunu: Merhaba arkadaşlar bugün ARDUINO UNO kullanarak bir labirent oyunu yapacağız.Arduino Uno en çok kullanılan tahta olduğu için onunla oyun yapmak çok güzel. Bu Eğitilebilir Kitapta, joystickler kullanılarak kontrol edilen labirent oyununu yapalım. Unutma
Executive Par 3 Golf Oyunu için Otomatik Puanlama: 12 Adım (Resimlerle)
Executive Par 3 Golf Oyunu için Otomatik Puanlama: Geçenlerde taşınabilir ve hem içeride hem de dışarıda oynanabilen eğlenceli bir oyun oynama hakkında bir Talimat yayınladım. Buna “Executive Par 3 Golf Oyunu” denir. Her oyuncunun 9 "delik" puanını kaydetmek için bir kopya puan kartı tasarladım. De olduğu gibi
Arduino Sorta Sudoku Oyunu: 3 Adım (Resimlerle)
Arduino Sorta Sudoku Oyunu: Birçok insan Sudoku oynamayı sever ve torunlar tahmin oyunlarını sever, ben de taşınabilir bir “Sorta Sudoku” oyunu yapmaya karar verdim. Benim versiyonumda oyun bir 4x4 ızgaradır ancak yalnızca bir numara verilmiştir. Buradaki fikir, inci içindeki sayıların geri kalanını tahmin etmektir
FPGA Reaksiyon Oyunu: 10 Adım
FPGA Reaksiyon Oyunu: Yaz Rutherford ve Regita Soetandar tarafından