İçindekiler:

Mayın Tarlası: 5 Adım (Resimlerle)
Mayın Tarlası: 5 Adım (Resimlerle)

Video: Mayın Tarlası: 5 Adım (Resimlerle)

Video: Mayın Tarlası: 5 Adım (Resimlerle)
Video: Grup 5 Adım - Gözleri Kara Dilber (1973) 2024, Kasım
Anonim
Mayın tarama gemisi
Mayın tarama gemisi

CPE 133 final projemiz için Chase ve ben, bir Basys-3 kartından gelen düğme ve anahtar girişinin yanı sıra VHDL kodunu kullanan bir 'Mayın Tarlası' oyunu oluşturmaya karar verdik. Oyun için daha iyi bir isim 'Rus Ruleti' olabilir, ancak daha aile dostu bir isim ile gitmek istedik. Oyun, kullanıcının bir bomba ile 'aktif' olmak üzere 16 anahtardan birini rastgele atamak için Basys panosundaki orta düğmeye basmasını içerir. Daha sonra, iki oyuncu sırayla, oyunculardan biri 'bomba' ile düğmeyi çevirene kadar anahtarları birer birer çevirir. Bu olduğunda, yedi bölümlü ekran, oyuncuları o oyuncunun oyunu kaybettiği konusunda uyarır.

1. Adım: Genel Bakış

Proje, bu çeyrek boyunca kullandığımız birçok VHDL modülünü kullandı. Anahtarlardan birini etkinleştirmek için rastgele dört bitlik bir sayıyı simüle etmek için saat kenarı ile birlikte dört bitlik bir sayaç kullanıldı. Yedi segmentli ekrana, oyuncular oyunun ortasındayken 'OYNA' ile oyunculardan biri aktif anahtarı çevirdiğinde 'KAYBET' arasında değişen farklı kelimelerin çıktısını almak için bir durum diyagramı da kullanıldı.

Adım 2: Malzemeler

  • Digilent, Inc.'den Basys3 Geliştirme Kurulu
  • Vivado Design Suite BC_DEC.vhd (Bu dosya bize Polylearn üzerinden sağlandı ve Bryan Mealy tarafından yazıldı)
  • T flip floplardan yapılmış 4 bitlik bir sayaç
  • bir FSM

Adım 3: Oyunu Yapmak

Oyunu Yapmak
Oyunu Yapmak
Oyunu Yapmak
Oyunu Yapmak

Bu oyunu yapmanın ilk adımı, kullanacağımız tüm bileşenleri içeren bir devre şeması çizmekti. Bu sistem için girişler düğme 1, 16 anahtar ve Saat idi. Çıktılar yedi segmentli ekran ve anotlardı. Devre şemasını çizdikten sonra Vivado'da her bileşen için ayrı kaynak dosyaları yazdık ve ana kaynak dosyanın altında port haritalarını kullanarak bir araya getirdik.

Oyunun tüm temeli, 16 anahtardan birini bir bomba ile aktif olacak şekilde rastgele atamak ve oyuncuların bu aktif anahtar çevrilene kadar hangi anahtarın aktif olduğunu bilmemesi etrafında döner. Çevrimiçi olarak rastgele ve sahte rasgele sayı üreteçlerine baktık, ancak sonunda 4 bitlik bir sayaç kullanmanın ve karşılık gelen anahtarı aktif olarak atamanın aradığımız şey için yeterince rastgele olduğuna karar verdik. Bu görev için çalışabilmek için önceki bir projede oluşturduğumuz 4-Bit sayacımızı yeniden kullanabildik. 0-15 arasında rastgele bir sayı oluşturmak için sayacı kullandık; daha sonra ana1 bileşeninde, tahtadaki karşılık gelen anahtarına rastgele sayının ondalık eşdeğerini atadık. Şematikte görüldüğü gibi, hem ana1 bileşeninden X çıkışı ('aktif bomba') hem de oyuncuların açtığı anahtarlar FSM1'e gidiyor. Durum makinesi, daha sonra BC_DEC1 tarafından okunan bir bitlik Z değeri verir. Kullandığımız Sonlu Durum Makinesinin iki farklı durumu vardır: A durumunda, yedi segmentli ekran 'OYNAT' verir ve makine, etkinleştirilmiş anahtarın çevrildiğini tanıyana kadar bu durumda kalır. Bu gerçekleştiğinde, FSM, yedi segmentli ekrana 'LOSE' çıkışı verdiği B durumuna gider ve 16 anahtarın tümü '0'a çevrilene kadar bu durumda kalır. Bu koşul karşılandığında, FSM bir kez daha A durumuna geçer ve oyuncuların başka bir oyuna başlamasını bekler. Bu FSM'yi anlamaya yardımcı olacak bir Moore diyagramı yukarıda gösterilmiştir.

Adım 4: Gelecekteki Değişiklikler

Oyunumuza yapmayı düşündüğümüz birkaç değişiklik, alana daha fazla bomba eklemek (muhtemelen birden üçe çıkarak), bir puan sayacı ve birden fazla tur eklemek. Daha uzun, uzatılmış bir oyun oynamanın, genellikle üç veya dört geçişten sonra sona eren bir oyundan genellikle daha gergin ve nihayetinde daha eğlenceli olduğunu bulduğumuz için, nihayetinde bu iyileştirmelere karşı karar verdik.

Adım 5: Sonuç

Bu projenin nihai sonucundan çok memnun kaldık; sadece oyunun son versiyonunu oynamak eğlenceli olduğu için değil, aynı zamanda projeyi oluşturmak ve programlamak, bu çeyrekte öğrendiklerimizin hepsini olmasa da çoğunu kullanmamızı gerektirdiği için. Flip Flop'ları, sayaçları, FSM'leri, saati, panodan kullanıcı girdisini ve yedi segmentli ekrana çıktıyı kullandık.

Ayrıca, birkaç sözdizimi hatasının programı nasıl tamamen bozabileceğini (Python veya Java gibi diğer programlama dillerinde iyi olarak kabul edilseler bile) ve yalnızca birden çok simülasyondan ve koda yüklenen ve üzerinde test edilen kodun birden çok yinelemesinden sonra öğrendik. tahta, sonunda tüm hataları kodunuzdan çıkarabilecek misiniz?

Önerilen: