Daftar Isi:

Game Reaksi FPGA: 10 Langkah
Game Reaksi FPGA: 10 Langkah

Video: Game Reaksi FPGA: 10 Langkah

Video: Game Reaksi FPGA: 10 Langkah
Video: MiSTer FPGA DE10 NANO! Setup Guide and Hardware Introduction to FPGA Gaming! 2022 Edition 2024, Juli
Anonim
Game Reaksi FPGA
Game Reaksi FPGA

Oleh Summer Rutherford dan Regita Soetandar

Langkah 1: Pendahuluan

Untuk proyek akhir kami untuk CPE 133, kami merancang permainan reaksi dalam VHDL untuk papan Basys3. Game ini paling mirip dengan game arcade "Stacker" di mana pemain harus menjatuhkan balok pada waktu yang tepat. Papan Basys3 terhubung ke papan tempat memotong roti, yang memiliki LED bergantian. Lampu LED ini akan bergantian pada frekuensi tertentu, tergantung pada levelnya. Game ini menggunakan pembagi jam dan tampilan 4 digit 7 segmen, serta mesin keadaan terbatas. Saat pemain mengaktifkan sakelar yang benar saat LED tengah menyala, pemain akan maju ke level permainan berikutnya, meningkatkan frekuensi LED bergantian. Hal ini membuat setiap tingkat berturut-turut lebih sulit dari tingkat sebelumnya. Ketika pemain berhasil mengalahkan level 7, level tertinggi, sebuah pesan akan ditampilkan pada tampilan segmen dan semua LED akan menyala dan mati secara bersamaan.

Langkah 2: Bahan

Bahan
Bahan
Bahan
Bahan
Bahan
Bahan

Bahan-bahan yang akan Anda butuhkan adalah:

  • Papan Digilent Basys3 dengan kabel micro USB
  • Papan tempat memotong roti
  • 5 LED
  • 5 resistor (kami menggunakan 220 ohm)
  • 11 kabel jumper
  • Komputer dengan Vivado

Langkah 3: Desain Kotak Hitam Diagram Tingkat Atas

Desain Kotak Hitam Diagram Tingkat Atas
Desain Kotak Hitam Diagram Tingkat Atas
Desain Kotak Hitam Diagram Tingkat Atas
Desain Kotak Hitam Diagram Tingkat Atas

Seperti yang Anda lihat, diagram blok tingkat atas kami dimulai dengan mendapatkan jam yang diperlukan dari submodul kami, ClkDivide. Jam-jam ini adalah input ke dalam berbagai blok proses. Pada dasarnya, gim harus mengenali bahwa ketika pengguna menyalakan sakelar dengan benar, LED harus mulai bergantian lebih cepat dan tampilan harus naik satu tingkat. Diagram blok mungkin terlihat sedikit gila, tetapi itu karena ada banyak sinyal yang dibuat dalam proses tertentu dan kemudian sinyal itu mendefinisikan sinyal lain di blok proses lain.

Pada akhirnya, satu-satunya input yang dibutuhkan permainan adalah jam input pada papan Basys3 yang berjalan pada 100 Mhz, tujuh sakelar pada papan Basys3, dan tombol reset. Yang keluar adalah anoda untuk tampilan tujuh segmen, tujuh segmen untuk tampilan, dan LED.

Langkah 4: CLKDbagi

CLKDbagi
CLKDbagi
CLKDbagi
CLKDbagi
CLKDbagi
CLKDbagi

Submodul pembagi jam ini membuat jam yang lebih lambat tergantung pada nilai yang kami petakan di file utama kami. Kami menggunakan submodul ini untuk menentukan Clk400, PushClk, dan newlck. Submodul ini menggunakan clock dan pembagi 32 bit sebagai input. Jam yang diperlambat dikeluarkan. Ada blok proses untuk pembagi dan jam yang diperlambat. Dalam prosesnya adalah variabel sementara, yang kami sebut count, yang menghitung satu setiap kali tepi naik dari jam yang dimasukkan dipukul. Setelah mencapai nomor pembagi, jam yang diperlambat beralih dan hitungan diatur ulang ke nol.

Langkah 5: Pergeseran Blok Proses

Pergeseran Blok Proses
Pergeseran Blok Proses

Blok proses Shift mengontrol gerakan dan kecepatan LED secara bergantian. Dalam daftar sensitivitas adalah sinyal newclk dan Stop. Berhenti menyebabkan penundaan singkat ketika pengguna melewati level. Jika Stop tidak tinggi, maka LED bergantian seperti biasa berdasarkan kecepatan newclk. Pola bolak-balik ini dikendalikan oleh dua variabel: Lacak dan hitung. Hitungan menentukan LED mana yang harus menyala, sementara Track menentukan apakah hitungan harus menghitung naik atau turun. Ada sinyal lain, Final, yang hanya berlaku ketika Level adalah “111”, yang menunjukkan bahwa pemain telah mengalahkan permainan. Final bergantian antara 0 dan 1 setiap tepi jam untuk menyalakan dan mematikan LED secara terus menerus. Ini hanyalah elemen visual untuk tampilan akhir.

Proses shift ini adalah tempat yang tepat untuk memulai proyek ini. Jika Anda bisa mendapatkan LED Anda bergantian dengan benar dan konsisten, maka dari sini Anda hanya perlu menambahkan perilaku saat naik level!

Langkah 6: Mesin Keadaan Terbatas

Mesin Keadaan Terbatas
Mesin Keadaan Terbatas

Kami membuat Finite State Machine untuk mendikte perilaku ketika sakelar input atau tombol reset ditekan. Setiap status adalah "level" dan jika sakelar dihidupkan pada waktu yang salah atau reset ditekan, level kembali ke "000." Jika tidak, jika sakelar dihidupkan dengan benar maka level akan naik hingga mencapai status akhir, "111" dan tampilan akhir terjadi. FSM didasarkan pada dua blok proses sync_proc dan comb_proc. Sync_proc menggunakan jam yang kami sebut PushClk. Jam ini mengontrol seberapa cepat keadaan berikutnya menjadi keadaan sekarang. Jam ini seharusnya cukup cepat; kami memilih kecepatan sekitar dua kali lebih cepat dari kecepatan LED tercepat kami.

Kami menerapkan kode ini menggunakan FSM untuk level; namun, setelah proyek ini, kami menyadari penggunaan FSM yang lebih efisien mungkin memiliki status penghitungan, status reset, atau status tetap. Jika tidak ada yang ditekan, itu dalam keadaan tetap. Jika reset sedang ditekan atau pemutar kacau, itu dalam keadaan reset. Jika ditekan dengan benar, itu dalam keadaan menghitung. Ada banyak cara lain untuk menggunakan FSM dalam game ini juga!

Langkah 7: Mengontrol Blok Proses Tampilan Dengan Level

Mengontrol Blok Proses Tampilan Dengan Level
Mengontrol Blok Proses Tampilan Dengan Level

Level mengontrol blok proses Tampilan. Variabel dalam daftar sensitivitas adalah Level, Reset, dan Clk400. Tampilan 7 segmen dimulai dengan menampilkan '1' untuk tingkat pertama. Ini menghitung hingga 7 setiap kali pengguna melewati level untuk menunjukkan kepada pengguna level apa mereka berada. Setelah pengguna melewati level 7, ini akan menampilkan "COOL" untuk menandakan bahwa pemain telah mengalahkan permainan. Tampilan “COOL” ini menggunakan clock 400 Hz yang kami sebut Clk400. Jika Reset ditekan, tampilan kembali ke “1”.

Langkah 8: Mengontrol Kecepatan LED Dengan Level

Mengontrol Kecepatan LED Dengan Level
Mengontrol Kecepatan LED Dengan Level

Terakhir, Level mengontrol kecepatan LED. Level adalah satu-satunya sinyal dalam daftar sensitivitas. D1 adalah sinyal yang masuk ke proses Clock Divider untuk mendapatkan newclk. Setiap kali Level diubah, atau status berubah, proses memblokir "Kecepatan." Proses ini menentukan nilai D1. Ada 8 nilai D1 yang ditentukan yang kami pilih berdasarkan seberapa cepat kami ingin setiap level dijalankan. D1 semakin kecil setiap kali level meningkat sehingga newclk berjalan lebih cepat.

Langkah 9: Perakitan Perangkat Keras

Perakitan Perangkat Keras
Perakitan Perangkat Keras

Kami menghubungkan papan tempat memotong roti ke Basys3 dengan salah satu konektor pmod. Enam dari port pmod digunakan untuk menyambungkan konektor male to male, satu untuk ground dan lima lainnya untuk 5 LED. Kami juga menempatkan resistor untuk setiap LED. Resistor ini adalah 220Ω dan mencegah LED dari hubungan pendek dan terbakar. Meskipun setiap LED memiliki beberapa resistansi, resistansi tersebut tidak cukup untuk menghalangi tegangan dari sumbernya.

Langkah 10: Bersenang-senanglah

Permainan ini sangat mudah dimainkan. Pemain memulai di sakelar paling kanan 1 papan, V17. Mereka harus membalik sakelar tinggi ketika LED tengah menyala. Mereka kemudian memindahkan satu sakelar ke kiri dan melakukan hal yang sama! Jika pemain berhasil mencapai akhir, mereka akan berakhir di sakelar ketujuh, W14. Jika mereka mengalahkan permainan, mereka akan melihat tampilan akhir yang sangat menyenangkan!

Yang perlu diperhatikan adalah saat membuat game ini, kecepatannya sepenuhnya terserah Anda! Jika kecepatan yang kita pilih terlalu lambat, jangan ragu untuk mempercepatnya dan membuatnya lebih menantang! Juga tidak ada jumlah level yang ditetapkan. Jika Anda ingin membuatnya memiliki lebih banyak level, ada modifikasi yang harus dilakukan pada FSM dan blok proses yang ditentukan oleh Level, tetapi ini adalah perubahan yang sangat sederhana.

Kami juga memilih untuk menggunakan sakelar di papan sebagai input pengguna, tetapi ini juga dimungkinkan dengan tombol di papan Basys3; tombol akan menghilangkan kebutuhan untuk mengatur ulang sakelar setiap kali pengguna memulai kembali. Kami awalnya menggunakan tombol, namun ini menyebabkan kesalahan dalam menentukan level karena akan melompat beberapa level jika dua sisi naik PushClk ditekan saat tombol ditekan.

Di bawah ini adalah video yang menunjukkan cara bermain, melewati 4 level pertama, dan tampilan akhir akhir.

File utama untuk proyek ini disertakan di bawah ini.

Sumber

Panduan referensi Basys3

Inspirasi untuk proyek - Arduino Stop It game

Direkomendasikan: