Mündəricat:
- Addım 1: Giriş
- Addım 2: Materiallar
- Addım 3: Üst Səviyyə Diaqramı Qara Kutu Dizaynı
- Addım 4: CLKDivide
- Addım 5: Proses Blokunu dəyişdirin
- Addım 6: Sonlu Vəziyyət Maşını
- Addım 7: Ekran Prosesi Blokunu Səviyyə ilə İdarə Edin
- Addım 8: Səviyyə ilə LED Sürətinə Nəzarət
- Addım 9: Avadanlıq Montajı
- Addım 10: Əylən
Video: FPGA Reaksiya Oyunu: 10 addım
2024 Müəllif: John Day | [email protected]. Son dəyişdirildi: 2024-01-30 07:46
Yaz Rutherford və Regita Soetandar tərəfindən
Addım 1: Giriş
CPE 133 üçün son layihəmiz üçün Basys3 lövhəsi üçün VHDL -də bir reaksiya oyunu hazırladıq. Bu oyun, oyunçunun blokları lazımi anda atmalı olduğu "Stacker" arcade oyunu ilə ən yaxından müqayisə edilə bilər. Basys3 lövhəsi alternativ LEDləri olan bir çörək taxtasına bağlıdır. Bu LED işıqlar səviyyədən asılı olaraq müəyyən bir tezlikdə dəyişəcək. Bu oyunda saat bölücü və 4 rəqəmli 7 seqmentli ekran və sonlu dövlət maşını istifadə olunur. Orta LED yanarkən oyunçu düzgün açarı işə saldıqda, oyunçu alternativ LEDlərin tezliyini artıraraq oyunun növbəti səviyyəsinə keçəcək. Bu, hər bir ardıcıl səviyyəni əvvəlki səviyyədən daha çətinləşdirir. Oyunçu ən yüksək səviyyə 7 -ni uğurla keçdikdə, seqmentin ekranında bir mesaj görünəcək və bütün LEDlər eyni anda yanıb sönəcək.
Addım 2: Materiallar
Ehtiyac duyacağınız materiallar bunlardır:
- Mikro USB kabel ilə Digilent Basys3 lövhəsi
- Çörək lövhəsi
- 5 LED
- 5 rezistor (220 ohm istifadə etdik)
- 11 keçid teli
- Vivado ilə kompüter
Addım 3: Üst Səviyyə Diaqramı Qara Kutu Dizaynı
Gördüyünüz kimi, ən yüksək səviyyəli blok diaqramımız, ClkDivide altmodulumuzdan lazımi saatları əldə etməklə başlayır. Bu saatlar müxtəlif proses bloklarına girişlərdir. Əslində, oyun bir istifadəçi açarı düzgün açdıqda, LEDlərin daha sürətli dəyişməyə başlamalı olduğunu və ekranın bir pillə yuxarı qalxması lazım olduğunu qəbul etməlidir. Blok diaqramı bir az dəli görünə bilər, amma bunun səbəbi, müəyyən bir prosesdə qurulan və sonra başqa bir blokda başqa bir siqnal təyin edən bir çox siqnalın olmasıdır.
Sonda, oyunun aldığı yeganə giriş 100 Mhz -də işləyən Basys3 lövhəsindəki giriş saatı, Basys3 lövhəsindəki yeddi açar və sıfırlama düyməsidir. Çıxarılan şey yeddi seqmentli ekran üçün anod, ekran üçün yeddi seqment və LED -lərdir.
Addım 4: CLKDivide
Bu saat bölücü alt modulu, əsas faylımızda xəritələndirdiyimiz dəyərdən asılı olaraq daha yavaş bir saat yaratdı. Bu alt moduldan Clk400, PushClk və newlck təyin etmək üçün istifadə etdik. Yavaş bir saat çıxdı. Bölücü və yavaşlatılmış saat üçün bir proses bloku var. Bu müddətdə, sayım dediyimiz müvəqqəti bir dəyişən var və bu, girilən saatın yüksələn kənarı hər vurulduqda bir dəfə sayılır. Bölücü nömrəsinə çatdıqda yavaşlayan saat dəyişdi və say sıfıra döndü.
Addım 5: Proses Blokunu dəyişdirin
Shift proses bloku LED -lərin dəyişən hərəkətini və sürətini idarə edir. Həssaslıq siyahısında newclk və Stop siqnalları var. İstifadəçi səviyyəni keçəndə Stop qısa bir gecikməyə səbəb olur. Stop yüksək deyilsə, LEDlər newclk sürətinə görə normal olaraq dəyişir. Bu dəyişən model iki dəyişən tərəfindən idarə olunur: İzlə və say. Say, hansı LED -in yandırılmalı olduğunu, Track isə sayımın yuxarı və ya aşağı sayılması lazım olduğunu təyin edir. Başqa bir siqnal var, Final, yalnız Səviyyə "111" olduqda tətbiq olunur ki, bu da oyunçunun oyunu məğlub etdiyini göstərir. LEDləri davamlı olaraq yandırmaq və söndürmək üçün hər saat kənarında 0 ilə 1 arasında dəyişir. Bu, son görüntü üçün yalnız əyani bir elementdir.
Bu dəyişmə prosesi bu layihə üçün başlamaq üçün mükəmməl bir yerdir. LED -lərinizi düzgün və ardıcıl olaraq dəyişə bilsəniz, buradan düzəldərkən davranışınızı əlavə etməlisiniz!
Addım 6: Sonlu Vəziyyət Maşını
Giriş açarı və ya sıfırlama düyməsinə basıldığında davranışı diktə etmək üçün sonlu vəziyyət maşını yaratdıq. Hər bir vəziyyət "səviyyə" dir və açar yanlış zamanda açılırsa və ya sıfırlanırsa, səviyyə "000" ə qayıdır. Əks təqdirdə, keçid düzgün açılırsa, səviyyə son vəziyyətə çatana qədər yuxarı qalxır, "111" və son ekran görünür. FSM, sync_proc və comb_proc iki proses blokuna əsaslanır. Sync_proc, PushClk adlandırdığımız saatı istifadə edir. Bu saat, sonrakı vəziyyətin indiki vəziyyətə nə qədər sürətli çıxacağını idarə edir. Bu saat olduqca sürətli olmalıdır; ən sürətli LED sürətimizdən təxminən iki qat daha sürətli bir sürət seçdik.
Səviyyələr üçün bir FSM istifadə edərək bu kodu tətbiq etdik; lakin, bu layihədən sonra, FSM-dən daha səmərəli istifadə etmə sayım vəziyyətinə, sıfırlama vəziyyətinə və ya qalma vəziyyətinə malik ola biləcəyimizi başa düşdük. Heç bir şey sıxılmırsa, qalma vəziyyətindədir. Sıfırlama sıxılırsa və ya oyunçu qarışıqdırsa, sıfırlama vəziyyətindədir. Düzgün basıldığı təqdirdə sayma vəziyyətindədir. Bu oyunda bir FSM istifadə etməyin bir çox başqa yolu var!
Addım 7: Ekran Prosesi Blokunu Səviyyə ilə İdarə Edin
Səviyyə Ekran proses blokunu idarə edir. Həssaslıq siyahısındakı dəyişənlər Level, Reset və Clk400 -dür. 7 seqmentli ekran birinci səviyyə üçün '1' göstərilməklə başlayır. İstifadəçi, istifadəçiyə hansı səviyyədə olduğunu göstərmək üçün bir səviyyədən keçəndə 7 -yə qədər sayılır. İstifadəçi 7 -ci səviyyəni keçdikdə, oyunçunun oyunu məğlub etdiyini bildirmək üçün "COOL" yazır. Bu "COOL" ekranı Clk400 adlandırdığımız 400 Hz saatla işləyir. Sıfırlama düyməsinə basarsanız, ekran "1" ə qayıdır.
Addım 8: Səviyyə ilə LED Sürətinə Nəzarət
Nəhayət, Level LED -lərin sürətinə nəzarət edir. Səviyyə həssaslıq siyahısındakı yeganə siqnaldır. D1, newclk əldə etmək üçün Saat Bölücü prosesinə gedən siqnaldır. Hər dəfə Səviyyə dəyişdirildikdə və ya vəziyyət dəyişdikdə "Sürət" proses bloku. Bu proses D1 -in dəyərini təyin edir. Hər bir səviyyənin nə qədər sürətli olmasını istədiyimizə görə seçdiyimiz D1 -in 8 müəyyən edilmiş dəyəri var. D1, səviyyəsi hər dəfə artdıqca kiçilir, belə ki, newclk daha sürətli işləyir.
Addım 9: Avadanlıq Montajı
Çörək taxtasını Basys3 -ə pmod bağlayıcılarından biri ilə bağladıq. PMod portlarının altısı, bir kişi üçün kişi konnektoru, biri torpaq üçün, digəri 5 LED üçün bağlamaq üçün istifadə edilmişdir. Hər LED üçün bir rezistor da qoyduq. Bu rezistorlar 220Ω -dir və LED -lərin qısa qapanmasını və yanmasını maneə törədir. Hər bir LED müəyyən müqavimət göstərsə də, müqavimət mənbədən gələn gərginliyi maneə törətmək üçün kifayət deyil.
Addım 10: Əylən
Bu oyunu oynamaq çox asandır. Oyunçu, lövhənin 1 sağ kənarındakı V17 düyməsindən başlayır. Orta LED yanarkən açarı yuxarı çevirməlidirlər. Sonra bir açarı sola köçürürlər və eyni şeyi edirlər! Oyunçu sona çatsa, yeddinci keçid W14 -də sona çatacaq. Oyunu məğlub etsələr, həqiqətən əyləncəli bir sonlu ekran görərlər!
Qeyd etmək lazım olan bir şey, bu oyunu yaratarkən sürətlərin tamamilə sizə aid olmasıdır! Seçdiyimiz sürətlər çox yavaşdırsa, sürətləndirin və daha da çətinləşdirin! Səviyyələrin müəyyən bir sayı da yoxdur. Daha çox səviyyəyə sahib olmaq istəyirsinizsə, FSM -də və Səviyyə tərəfindən təyin olunan proses bloklarında dəyişikliklər edilməlidir, lakin bunlar çox sadə dəyişikliklərdir.
İstifadəçi girişi olaraq lövhədəki açarları istifadə etməyi də seçdik, ancaq bu da Basys3 lövhəsindəki bir düymə ilə mümkündür; istifadəçi yenidən başladıqda düymə açarları sıfırlama ehtiyacını aradan qaldıracaq. Əvvəlcə bir düymə istifadə etdik, lakin bu, səviyyəni təyin etməkdə səhvlərə səbəb oldu, çünki düyməni basılı tutarkən PushClk -in iki yüksələn kənarı vurularsa birdən çox səviyyəyə tullanacaqdı.
Aşağıda necə oynanacağını, ilk 4 səviyyədən keçməsini və son bitən ekranı göstərən bir video var.
Bu layihənin əsas faylı aşağıda verilmişdir.
Mənbələr
Basys3 istinad təlimatı
Layihə üçün ilham - Arduino Stop It oyunu
Tövsiyə:
Tap Tap Rainbow - 2 Oyunçulu Sürətli Reaksiya Oyunu: 4 Addım (Şəkillərlə)
Tap Tap Rainbow - 2 Oyunçulu Sürətli Reaksiya Oyunu: 2 həftə əvvəl qızım göy qurşağı rəngləri ilə sürətli bir reaksiya oyunu etmək üçün dahi bir fikrə sahib idi (o göy qurşağı mütəxəssisidir: D). Fikri dərhal bəyəndim və necə gerçək bir oyuna çevirə biləcəyimizi düşünməyə başladıq. Göy qurşağınız var
555 Taymer Reaksiya Oyunu: 5 addım
555 Timer Reaction Oyunu: Hədəf Auditoriya Bu təlimat, yalnız bir neçə ucuz komponentlə qura biləcəyiniz sadə bir oyun axtaran sxemlərlə (kiçik bir fon ilə) maraqlanan insanlara yönəldilmişdir. Çətinlik Səviyyə Bu çətin olardı əgər
Gülməli Arduino Reaksiya Oyunu: 3 addım
Funny Arduino Reaction Game: Bütün ailə üçün Funny Arduino reaksiya oyunu;) Çapraz platforma Bluetooth ünsiyyətinə əsaslanır. Yalnız bir neçə Arduino əşyasına, bir Android smartfonuna və ayaqqabı qutusuna ehtiyacınız var. Əgər bunlardan heç biri yoxdursa, buna möhkəm inanın: heç bir şey yoxdur
Reaksiya Oyunu- Kompüter Mühəndisliyi Layihəsi: 3 addım
Reaksiya Oyunu- Kompüter Mühəndisliyi Layihəsi: Reaksiya oyunu, adın dediyi kimi, reaksiya sürətinizi sınayır. Bu serverin əyləncədən kənarda hansı fayda verə biləcəyini soruşa bilərsiniz, yaxşı olar ki, əməliyyatdan və ya qəzalardan reabilitasiya edən şəxslər üçün istifadə edə bilərsiniz. Onların reaksiyası
Arduino Reaksiya Oyunu: 9 addım
Arduino Reaksiya Oyunu: Bu oyunu məktəb tapşırığı olaraq etdim. Bir arduino ilə interaktiv bir şey etməliydik. Bu mənim indiyə qədər hazırladığım ilk Arduino layihəmdir, buna görə olduqca çətin idi, amma qeyri -mümkün deyildi