İçindekiler:

İkili - Ondalık Eşleştirici Oyunu: 10 Adım
İkili - Ondalık Eşleştirici Oyunu: 10 Adım

Video: İkili - Ondalık Eşleştirici Oyunu: 10 Adım

Video: İkili - Ondalık Eşleştirici Oyunu: 10 Adım
Video: 1. Sınıf - Onluk Birlik Konu Anlatımı 2024, Temmuz
Anonim
Image
Image
Saat Bölücüyü Ayarlama
Saat Bölücüyü Ayarlama

Bu talimat, İkili - Ondalık Eşleştirme oyunumuzu oluşturmak için gereken süreci ve modülleri gösterecektir. 60 saniye içinde, kullanıcılar anahtarları değiştirerek ve bir tahmin düğmesi ile göndererek yedi segmentli ekranda rastgele oluşturulmuş ondalık sayıları çevirecek ve girecektir. Tamamlandığında, bir nihai puan görüntülenecek ve ardından tekrar oynamak için sıfırlanacaktır.

İkili ve hızlı refleksleri anlamak, iyi yapmak için faydalıdır, ancak anında tekrar denemek istemesi durumunda sıfırlama düğmesi sağlanır.

Adım 1: Saat Bölücüyü Ayarlama

Tüm bu projenin omurgası, bu gizmodaki tüm parçaların doğru senkronizasyonundan geliyor. Sonlu Durum Makinemiz dahili saati kullanır, ancak yedi segmentli ekran ve zamanlayıcı, saatin değiştirilmiş bir sürümünü kullanmalıdır.

Bu "yeni saat", her bir belirli bileşen için gereken belirli bir frekansı elde etmek için dahili saati istenen bir periyoda bölmekten gelir. Bu, önceki laboratuvarlarda yapıldı ve deneyimlerden, zamanlayıcının "bir" hanesinin 0.1 Hz'e ayarlandığını ve "onlar" hanesinin 1 Hz olduğunu biliyoruz.

Girişler: ClkIn, bölen(32 bit)

Çıkışlar: ClkOut

Adım 2: Bir Sonlu Durum Makinesi (FSM) Oluşturma

Sonlu Durum Makinesi (FSM) Oluşturma
Sonlu Durum Makinesi (FSM) Oluşturma
Sonlu Durum Makinesi (FSM) Oluşturma
Sonlu Durum Makinesi (FSM) Oluşturma
Sonlu Durum Makinesi (FSM) Oluşturma
Sonlu Durum Makinesi (FSM) Oluşturma

Sonlu Durum Makinemizde, beş giriş (başlangıç, sıfırlama, tahmin, eşit, zaman aşımı) ile beş durumun (Başlat, Görüntüle, Kontrol Et, Puan ve Bitiş) gerekli olacağına karar verdik. Durum Makinemizdeki tek çıktı, kullanıcının aşağıdaki durumlara göre hangi durumda olduğunu (000, 001, 011, 101, 100) temsil eden 3 bitlik bir sayıdır.

Bir Sonlu Durum Makinesinin aslında aşağıdaki işlevleri gerçekleştirmediğini, bunun yerine programın hangi durumda olduğunu ve ne olduğunu söylediğini unutmayın. Gerçekte ne olduğu, aşağıda açıklanan üst modül tarafından belirlenir.

Başlangıç Durumu (000)

Başlangıç Durumu, kullanıcının başlangıç girişi yüksek olana kadar başlayacağı yerdir, bu aynı zamanda sıfırlama düğmesine her basıldığında ulaşılacak durumdur.

Oyun Durumu (001)

Oyun Durumu, rastgele sayının üretildiği ve kullanıcının bir girdi oluşturmak için anahtarları değiştirdiği oyunun başlangıcıdır. Tahmin düğmesine basıldığında, oyun Kontrol Durumuna taşınır.

Durumu Kontrol Et (011)

Bu durum, kullanıcının girişinin değerlerini ve rastgele oluşturulmuş sayıyı karşılaştıracak olan karşılaştırıcının kullanıldığı yerdir. Gönderim doğruysa, eşit değer yüksektir ve FSM Puan Durumuna gider; ancak, gönderim yanlışsa, FSM, gönderim doğru olana kadar Görüntüleme Durumuna geri döner.

Bu Kontrol Durumu, diğerlerine kıyasla nispeten daha hızlı gerçekleşir, çünkü sadece kontrol düğmesine basıldığı sürece gerçekleşir.

Puan Durumu (101)

Eşit değer yüksek olduğundan, gönderim doğruydu. Bu durumda puan değeri bir artacak ve kullanıcının girmesi için yeni bir sayı oluşturulacaktır. Bu yeni numara bizi kullanıcının bir kez daha anahtarları değiştireceği Başlangıç Durumuna geri getiriyor.

Bitiş Durumu (100)

60 saniyelik zamanlayıcı dolduğunda, zaman aşımı girişi yüksek olacaktır ve kullanıcı, son puanın görüntülendiği Bitiş Durumuna ulaşır. Ardından sıfırlama girişine basılacak ve FSM yeniden Başlatma Durumunda yeniden başlayacaktır.

Girdiler: Clk, rst, start, tahmin, equal, timeout

Çıkış: durum (3 bit)

Adım 3: Yedi Segment Ekranının Eşleştirilmesi

Yedi Segment Ekranını Eşleştirme
Yedi Segment Ekranını Eşleştirme
Yedi Segment Ekranını Eşleştirme
Yedi Segment Ekranını Eşleştirme
Yedi Segment Ekranını Eşleştirme
Yedi Segment Ekranını Eşleştirme

Yedi Segment Ekran, tüm projenin önemli bir parçasıdır, çünkü ekrandaki ilk iki hane rastgele sayı üretecinin çıktısı olarak kullanılırken, son iki hane zamanlayıcıdır. Bunun bir örneğini son laboratuvarda ekranda hane olması açısından uygulamış olsak da onaltılı olarak görüntülendi. Bu sorunu çözmek için aşağıda daha ayrıntılı açıklanan bir dönüştürücü ve saat bölücü kullandık.

Ekran, FSM oyun durumuna girene kadar tüm 0'ları gösterir; ancak, son durumda, ekran yalnızca kullanıcının puanını göstermelidir.

Yedi segmentli ekranın dört basamağını da kullandığımızdan, her zaman yanıyormuş gibi algılanmak için her bir anotta 300 Hz'de yeterince hızlı geçiş yapmamız gerekiyor.

Girişler: Clk, yedi segment

Çıkışlar: katotlar(7 bit), anotlar(4 bit)

Adım 4: Karşılaştırıcıyı Oluşturma

Karşılaştırıcıyı Oluşturma
Karşılaştırıcıyı Oluşturma

Bu alt modül, Kontrol Durumunda, 7 bitlik ikili girilen tahmini gerçek ondalık değerle nasıl karşılaştırdığına göre kullanılır.

Eşit değerin yüksek veya düşük olmasına bağlı olarak hem girdileri hem de iki çıktıyı değerlendiren bir if ifademiz vardı. Bu modül ne kadar önemli olsa da, bu projede tasarlanması açık ara daha basit programlardan biridir.

Girişler: anahtarlar (8 bit), sayı (8 bit)

Çıkış: EQ

Adım 5: Bir Zamanlayıcı Ayarlama

Zamanlayıcı Ayarlama
Zamanlayıcı Ayarlama
Zamanlayıcı Ayarlama
Zamanlayıcı Ayarlama

Zamanlayıcımız esasen farklı oranlarda artan iki farklı sayaçtır. "Birin" değerinde bir sayaç (ilk yedi segmentli ekran) ve "onluk" değeri için bir sayaç (yedi segmentli ekranda ikinci basamak). Her rakam saatin yükselen kenarına bağlıdır ve sayaç 60 saniyeye ulaştığında zaman aşımı yüksek olacak ve oyun sona erecek ve başlangıç durumuna dönecektir.

Girişler: Clk, state(3 bit), start

Çıkışlar: Akım (8 bit), zaman aşımı

Adım 6: Sözde Rastgele Sayı Üreticisini Tasarlama

Sözde Rastgele Sayı Üreticisini Tasarlama
Sözde Rastgele Sayı Üreticisini Tasarlama

Özellikle bu durum için bir sayı üreteci için başka bir alternatif yöntem, bir LFSR kullanma ihtiyacını ortadan kaldıracağından, giriş yüksek olduğunda sayılan sayıyı veren 0-99 (ikili olarak) arasında yinelenen bir sayıcıya sahip olmaktır.

Sayı, dahili saatin yükselen her kenarını (10 nano-saniye) değiştirir ve bir mikrosaniyede 100 sayının tümü arasında geçiş yapar. Kullanıcı sayı üretecinden yeni bir numara istediğinde, üzerinde bulunduğu numarayı verir, Bu süreç tamamen rastgele olmasa da, bu süreçten ilgili çıktıları bulma olasılığı sözde rastgele olacak kadar düşüktür.

Girdiler: Clk, changenum, equal

Çıkışlar: sayı (8 bit)

7. Adım: Dönüştürücü Oluşturma

Dönüştürücü Oluşturma
Dönüştürücü Oluşturma

Gerekli bir bileşen, orijinal onaltılık sayı yerine yedi bölümlü ekranda ondalık sayıları görüntülemek için kullandığımız Dönüştürücüdür. Her iki sayı da 7 bitlik bir İkili sayıya dayalı olsa da, onaltılıyı ondalık sayıya dönüştürmek için tasarlanmış tam bir modül oluşturduk.

Örneğin, puan için son çıktımız 0010001 (on yedi) olsaydı, yedi segmentli ekran ondalık sayı 17 yerine onaltılık değer 11'i gösterirdi.

Giriş: Numin (8 bit)

Çıktı: Numout (8 bit)

8. Adım: Oyun Modülünde Her Şeyi Bir Araya Getirmek

Oyun Modülünde Her Şeyi Bir Araya Getirmek
Oyun Modülünde Her Şeyi Bir Araya Getirmek
Her Şeyi Oyun Modülünde Bir Araya Getirmek
Her Şeyi Oyun Modülünde Bir Araya Getirmek
Oyun Modülünde Her Şeyi Bir Araya Getirmek
Oyun Modülünde Her Şeyi Bir Araya Getirmek
Her Şeyi Oyun Modülünde Bir Araya Getirmek
Her Şeyi Oyun Modülünde Bir Araya Getirmek

Bileşenlerimiz için, kullanıcının başlatma, sıfırlama ve tahmin için kullanıcı girdileri olarak hareket etmesi için üç düğme ile kullanıcının geçiş yapması için gerekli 0-6 anahtarlarını kullandık. Yedi segmentli ekran ve saat bileşenleri de önceki laboratuvarlardan yaptığımız ancak bu projeye uyması için değiştirmek zorunda kaldığımız bileşenlerdir.

Bu projeyi yukarıda gösterilen altı modüle ayırarak tüm gizmoyu birçok çalışma parçasına ayırdık, ancak bunların bağlanma şekli oldukça karmaşıktır ve ekteki kara kutu resminden gösterilmektedir.

Oyun devam ederken, kullanıcıyı hangi kullanıma geçeceğini bildirmek için 7 LED yanıyor ve oyun bittiğinde LED'leri de yanıp sönecek şekilde programladık.

Girişler: anahtarlar (8 bit), Clk, reset, start, tahmin

Çıkışlar: katotlar (7 bit), anotlar (4 bit), LED'ler (7 bit)

9. Adım: Karşılaşılan Ekstra Sorunlar

Bu oyunda sadece yedi anahtar kullanılmasına rağmen, kod 8 bitlik bir sayı olarak ayarlamıştır. Bunu, bu 8 biti rastgele sayı üretecinden oluşturduğumuz 8 bitlik sayı ile karşılaştıracak daha uygun bir karşılaştırıcıya sahip olmak için yaptık.

Skor da ilk başta bizi biraz zorladı çünkü FSM skor durumundayken bir puan artıracak şekilde ayarladık; ancak bunun yerine olan şey, devlet var olduğu sürece puanın artmaya devam etmesi ve bize başa çıkamayacağımız makul olmayan yüksek bir puan vermesiydi. Bunu, 8. adımdaki kodda görüldüğü gibi, saatin yükselen kenarıyla senkronize edilmiş bir darbe sinyali ekleyerek düzelttik.

Son olarak, geri sayım sırasında yedi segmentli ekranımızı bozacağı için zamanlayıcının hata ayıklaması çok zaman aldı, bu yüzden 60'tan geriye saymaktan 0'dan yukarıya doğru değiştirmek zorunda kaldık.

Adım 10: Kaynak Dosyaları ve Kısıtlamalar

Kendinizinkini oluşturmak yerine kaynak dosyalarımızdan çekmeyi tercih ederseniz, işte buradalar. Ayrıca, kısıtlama dosyası dahildir.

Önerilen: