İçindekiler:
- Adım 1: Giriş
- Adım 2: Malzemeler
- Adım 3: Üst Düzey Diyagram Kara Kutu Tasarımı
- Adım 4: CLKDivide
- Adım 5: İşlem Bloğunun Kaydırılması
- Adım 6: Sonlu Durum Makinesi
- Adım 7: Düzeyli Görüntü İşlem Bloğunun Kontrolü
- Adım 8: Seviye ile LED Hızını Kontrol Etme
- Adım 9: Donanım Montajı
- Adım 10: Eğlenin
Video: FPGA Reaksiyon Oyunu: 10 Adım
2024 Yazar: John Day | [email protected]. Son düzenleme: 2024-01-30 13:20
Yaz Rutherford ve Regita Soetandar tarafından
Adım 1: Giriş
CPE 133 için son projemiz için, bir Basys3 kartı için VHDL'de bir tepki oyunu tasarladık. Bu oyun, oyuncunun blokları doğru zamanda düşürmesi gereken arcade oyunu “Stacker” ile en yakından karşılaştırılabilir. Basys3 kartı, değişen LED'lere sahip bir devre tahtasına bağlıdır. Bu LED ışıklar, seviyeye bağlı olarak belirli bir frekansta değişecektir. Bu oyun, saat bölücü ve 4 haneli 7 segmentli ekranın yanı sıra sonlu durum makinesini kullanır. Oyuncu, ortadaki LED yandığında doğru anahtarı etkinleştirdiğinde, oyuncu, değişen LED'lerin frekansını artırarak oyunun bir sonraki düzeyine ilerleyecektir. Bu, birbirini izleyen her seviyeyi bir önceki seviyeden daha zor hale getirir. Oyuncu en yüksek seviye olan 7. seviyeyi başarıyla geçtiğinde, segment ekranında bir mesaj görüntülenecek ve tüm LED'ler aynı anda yanıp sönecektir.
Adım 2: Malzemeler
İhtiyacınız olacak malzemeler şunlardır:
- Mikro USB kablolu Digilent Basys3 kartı
- ekmek tahtası
- 5 LED
- 5 direnç (220 ohm kullandık)
- 11 atlama teli
- Vivado'lu bilgisayar
Adım 3: Üst Düzey Diyagram Kara Kutu Tasarımı
Gördüğünüz gibi, üst seviye blok diyagramımız, ClkDivide alt modülümüzden gerekli saatleri alarak başlıyor. Bu saatler, çeşitli işlem bloklarına girdilerdir. Temel olarak, oyun, bir kullanıcı anahtarı doğru bir şekilde açtığında, LED'lerin daha hızlı değişmeye başlaması gerektiğini ve ekranın bir seviye yukarı çıkması gerektiğini anlamalıdır. Blok diyagramı biraz çılgın görünebilir, ancak bunun nedeni belirli bir süreçte oluşturulmuş birçok sinyalin olması ve ardından bu sinyalin başka bir süreç bloğunda başka bir sinyali tanımlamasıdır.
Sonunda, oyunun aldığı tek giriş, 100 Mhz'de çalışan Basys3 kartındaki giriş saati, Basys3 kartındaki yedi anahtar ve sıfırlama düğmesidir. Çıktı, yedi segmentli ekran için anot, ekran için yedi segment ve LED'lerdir.
Adım 4: CLKDivide
Bu saat bölücü alt modülü, ana dosyamızda ona eşlediğimiz değere bağlı olarak daha yavaş bir saat yarattı. Bu alt modülü Clk400, PushClk ve newlck'i belirlemek için kullandık. Bu alt modül giriş olarak bir saat ve 32 bitlik bir bölücü alır. Yavaşlamış bir saat çıktısı alınır. Ayırıcı ve yavaşlatılmış saat için bir işlem bloğu vardır. Bu süreçte, girilen saatin yükselen kenarına her vurulduğunda bir tane sayan, sayım olarak adlandırdığımız geçici bir değişkendir. Bölen sayıya ulaştığında, yavaşlayan saat değişir ve sayım sıfırlanır.
Adım 5: İşlem Bloğunun Kaydırılması
Shift işlem bloğu, LED'lerin değişen hareketini ve hızını kontrol eder. Duyarlılık listesinde yeniclk ve Stop sinyalleri bulunur. Durdurma, kullanıcı seviyeyi geçtiğinde kısa bir gecikmeye neden olur. Stop yüksek değilse, LED'ler newclk hızına göre normal olarak değişir. Bu alternatif model iki değişken tarafından kontrol edilir: Takip et ve say. Count, hangi LED'in açık olacağını belirlerken Track, sayımın yukarı mı yoksa aşağı mı sayılacağını belirler. Yalnızca Seviye “111” olduğunda geçerli olan ve oyuncunun oyunu yendiğini gösteren başka bir sinyal olan Final vardır. Son, LED'leri sürekli olarak açıp kapatmak için her saat kenarında 0 ile 1 arasında değişir. Bu sadece son gösterim için görsel bir unsurdur.
Bu vardiya süreci, bu proje için başlamak için mükemmel bir yerdir. LED'lerinizi doğru ve tutarlı bir şekilde değiştirebiliyorsanız, buradan seviye atlarken davranışı eklemeniz yeterlidir!
Adım 6: Sonlu Durum Makinesi
Giriş anahtarına veya sıfırlama düğmesine basıldığında davranışı dikte etmek için bir Sonlu Durum Makinesi oluşturduk. Her durum bir “seviye”dir ve eğer anahtar yanlış zamanda açılırsa veya reset basılırsa seviye tekrar “000”e döner. Aksi takdirde, anahtar doğru bir şekilde açılırsa, seviye “111” son durumuna ulaşana kadar yükselir ve bitiş ekranı oluşur. FSM, sync_proc ve comb_proc olmak üzere iki işlem bloğunu temel alır. Sync_proc, PushClk adını verdiğimiz saati kullanır. Bu saat, bir sonraki durumun mevcut duruma ne kadar hızlı dönüşeceğini kontrol eder. Bu saat oldukça hızlı olmalıdır; en hızlı LED hızımızdan yaklaşık iki kat daha hızlı bir hız seçtik.
Bu kodu, seviyeler için bir FSM kullanarak uyguladık; ancak bu projeden sonra, bir FSM'nin daha verimli kullanımının bir sayım durumu, bir sıfırlama durumu veya bir bekleme durumu olabileceğini fark ettik. Hiçbir şeye basılmıyorsa, bekleme durumundadır. Sıfırlamaya basılıyorsa veya oynatıcıda hata varsa, sıfırlama durumundadır. Doğru basıldığında, yukarı sayma durumundadır. Bu oyunda da FSM kullanmanın birçok başka yolu var!
Adım 7: Düzeyli Görüntü İşlem Bloğunun Kontrolü
Seviye, Görüntüleme işlemi bloğunu kontrol eder. Duyarlılık listesindeki değişkenler Level, Reset ve Clk400'dür. 7 segmentli ekran, birinci seviye için '1' görüntülenerek başlar. Kullanıcının hangi seviyede olduğunu göstermek için kullanıcı bir seviyeyi her geçtiğinde 7'ye kadar sayar. Kullanıcı 7. seviyeyi geçtiğinde, oyuncunun oyunu yendiğini belirtmek için “COOL” görüntülenir. Bu “SOĞUK” ekran, Clk400 adını verdiğimiz 400 Hz'lik bir saatten çalışır. Sıfırla'ya basılırsa, ekran “1”e döner.
Adım 8: Seviye ile LED Hızını Kontrol Etme
Son olarak Level, LED'lerin hızını kontrol eder. Seviye, hassasiyet listesindeki tek sinyaldir. D1, yeniclk almak için Saat Bölücü işlemine giren sinyaldir. Seviye veya durum her değiştiğinde, süreç bloğu “Hız”. Bu işlem D1'in değerini belirler. Her seviyenin ne kadar hızlı çalışmasını istediğimize bağlı olarak seçtiğimiz 8 tanımlanmış D1 değeri vardır. D1 seviyesi her arttığında küçülür, böylece newclk daha hızlı çalışır.
Adım 9: Donanım Montajı
Breadboard'u pmod konektörlerinden biri ile Basys3'e bağladık. Pmod bağlantı noktalarından altısı, biri toprak için, diğer beşi 5 LED için bir erkek-erkek konektörü takmak için kullanıldı. Ayrıca her LED için bir direnç yerleştirdik. Bu dirençler 220Ω olup ledlerin kısa devre yapıp yanmasını engeller. Her LED'in bir miktar direnci olmasına rağmen, direnç kaynaktan gelen voltajı engellemeye yetmez.
Adım 10: Eğlenin
Bu oyunu oynamak çok kolaydır. Oyuncu, tahtanın en sağındaki 1 numaralı düğme olan V17'den başlar. Ortadaki LED yandığında anahtarı yukarı çevirmeleri gerekir. Daha sonra bir düğmeyi sola kaydırırlar ve aynı şeyi yaparlar! Oyuncu sona ulaşırsa, yedinci anahtar olan W14'te sona erer. Oyunu yenerlerse, gerçekten eğlenceli bir bitiş ekranı görürler!
Unutulmaması gereken bir şey, bu oyunu yaratırken hızların tamamen size kalmış olmasıdır! Seçtiğimiz hızlar çok yavaşsa, hızlandırmaktan ve daha da zorlu hale getirmekten çekinmeyin! Ayrıca belirli bir seviye sayısı yoktur. Daha da fazla level olmasını istiyorsanız FSM'de ve Level tarafından belirlenen işlem bloklarında yapılması gereken değişiklikler var ama bunlar çok basit değişiklikler.
Ayrıca kullanıcı girişi olarak kart üzerindeki anahtarları kullanmayı seçtik, ancak bu Basys3 kartındaki bir düğme ile de mümkündür; düğme, kullanıcı her yeniden başladığında anahtarları sıfırlama ihtiyacını ortadan kaldıracaktır. Başlangıçta bir düğme kullandık, ancak bu, düğme basılı tutulurken PushClk'un yükselen iki kenarına vurulursa birden çok düzeye atlayacağından seviye tanımlamada hatalara neden oldu.
Aşağıda, nasıl oynanacağını, ilk 4 seviyeden geçmeyi ve son bitiş ekranını gösteren bir video bulunmaktadır.
Bu proje için ana dosya aşağıda yer almaktadır.
Kaynaklar
Basys3 başvuru kılavuzu
Proje için ilham - Arduino Stop It oyunu
Önerilen:
Reaksiyon Test Cihazı: 13 Adım
Reaction Tester: Yavaş tepki veren insanlar, ister oyun oynarken, ister sınavlarda olsun, her yönden acı çekiyorlar, hepsinin dezavantajı var, bu yüzden reaksiyonu eğitmek için bir oyun tasarlamak istiyorum. Oyunun kuralları aşağıdadır: Önce reset butonuna basın, bekleyin
Komik Arduino Reaksiyon Oyunu: 3 Adım
Komik Arduino Reaksiyon Oyunu: Tüm aile için eğlenceli Arduino reaksiyon oyunu;) Platformlar arası Bluetooth iletişimine dayalıdır. Sadece bazı Arduino eşyalarına, bir Android akıllı telefona ve bir ayakkabı kutusuna ihtiyacınız var. Bunlardan herhangi birine sahip değilseniz, buna kesinlikle inanın: Hiçbir şey yok
Reaksiyon Eğitimi Mankeni: 9 Adım (Resimlerle)
Reaksiyon Eğitimi Mankeni: Bir sporcu arkadaşımdan reaksiyon eğitimini geliştirmek için ucuz ama etkili bir cihaz inşa etme isteği olarak bunu buldum! Buradaki fikir, kullanıcıların yakınlık algılama yoluyla devre dışı bırakmaları gereken bir dizi LED cihazı tasarlamaktı. Devre dışı bırakıldığında cihazlar rastgele
Reaksiyon Oyunu- Bilgisayar Mühendisliği Projesi: 3 Adım
Reaksiyon Oyunu- Bilgisayar Mühendisliği Projesi: Reaksiyon oyunu tam olarak adından da anlaşılacağı gibi, reaksiyon hızınızı test eder. Bu sunucunun eğlence dışında ne gibi faydaları olabileceğini soruyor olabilirsiniz, bunu ameliyattan veya kazalardan rehabilitasyonda olan kişiler için kullanabilirsiniz. Onların tepki hızı
Arduino Reaksiyon Oyunu: 9 Adım
Arduino Reaksiyon Oyunu: Bu oyunu okul ödevi olarak yaptım. Bir arduino ile etkileşimli bir şey yapmamız gerekiyordu. Bu benim yaptığım ilk Arduino projem, bu yüzden oldukça zordu ama imkansız değildi