Isi kandungan:

Permainan Asteroid FPGA: 7 Langkah (dengan Gambar)
Permainan Asteroid FPGA: 7 Langkah (dengan Gambar)

Video: Permainan Asteroid FPGA: 7 Langkah (dengan Gambar)

Video: Permainan Asteroid FPGA: 7 Langkah (dengan Gambar)
Video: [FPGA Tutorial] Image Processing in Verilog 2024, Oktober
Anonim
Permainan Asteroid FPGA
Permainan Asteroid FPGA

Untuk Projek Akhir CPE 133 kami, kami memutuskan untuk membuat permainan asteroid pada FPGA kami menggunakan dua suis butang tekan dan paparan 7 segmen. Permainan ini berfungsi sehingga asteroid bertelur di salah satu dari tiga baris yang dipilih secara rawak, dan meluncur ke arah kapal di sisi lain paparan 7 segmen. Butang atas dan bawah boleh digunakan untuk menggerakkan kapal anda dari asteroid. Setelah gagal melakukannya, paparan berbunyi ‘BAnG’ sebentar dan kemudian memulakan semula permainan dengan cepat sehingga pengguna dapat mencuba lagi. Yang berikut adalah penerangan ringkas mengenai bagaimana projek itu dibuat sehingga setiap pengguna dapat meniru atau memperbaiki reka bentuk kami.

Langkah 1: Gambaran keseluruhan

Gambaran keseluruhan
Gambaran keseluruhan
Gambaran keseluruhan
Gambaran keseluruhan

Projek ini sebahagian besarnya terdiri dari Mesin Keadaan Terhingga (FSM), yang menggunakan logik untuk memindahkan FPGA antara negeri-negeri yang menyimpan dan memaparkan nilai yang berbeza dari kedudukan kapal dan batu. Dua modul utama adalah permainan FSM untuk rock and ship, dan FSM decoder paparan perduaan hingga 7 segmen, yang digabungkan bersama menggunakan model struktur yang sangat sederhana dalam VHDL.

FSM dicipta untuk kedudukan kapal, kedudukan batu, dan untuk penyahkod 7 segmen. Tujuan FSM kapal adalah agar kapal dapat bergerak ke posisi yang betul ketika pemain menekan butang atas atau bawah. FSM diperlukan kerana perlu mengingat kedudukan yang terakhir untuk bergerak ke posisi yang betul.

Tujuan FSM batu adalah untuk menggerakkan batu ke kedudukan yang betul berdasarkan baris mana dan kedudukan terakhir di baris itu. Di samping itu, ia melacak posisi untuk modul yang akan memaparkannya dan secara pseudo secara rawak memilih baris baru untuk muncul di sebelah.

FSM untuk dekoder paparan 7 segmen digunakan untuk tidak hanya menampilkan kapal dan batu tetapi juga untuk menampilkan "BAnG" ketika posisi kapal dan posisi batu sama.

Langkah 2: Bahan

Bahan yang digunakan dalam projek tersebut adalah:

  • Lembaga Pembangunan Basys3 dari Digilent, Inc.
  • Vivado Design Suite
  • sseg_dec.vhd (Fail ini diberikan kepada kami di Polylearn dan ditulis oleh Bryan Mealy)
  • Clk_div.vhd (Fail ini diberikan kepada kami di Polylearn dan ditulis oleh Bryan Mealy)
  • Tiga Mesin Keadaan Terhingga (FSM)

Langkah 3: Membuat Permainan

Membuat Permainan
Membuat Permainan
Membuat Permainan
Membuat Permainan
Membuat Permainan
Membuat Permainan
Membuat Permainan
Membuat Permainan

Modul permainan dibuat dengan menggunakan model behavioral untuk menggambarkan keadaan kapal dan batu untuk FSM masing-masing. Kelebihan ini adalah bahawa jauh lebih mudah untuk memodelkan litar secara tingkah laku dengan menjelaskan apa yang dilakukannya daripada mengetahui semua komponen yang diperlukan untuk merancang perkakasan.

Keadaan batuan dilakukan dengan menggunakan penjana nombor rawak semu untuk kedudukan pertama batu. Untuk mencapai ini, kami memberikan penjana jamnya sendiri yang sangat pantas berbanding dengan kelajuan permainan. Pada setiap sisi yang meningkat, nombor tiga bit bertambah, dan semua nilainya sesuai dengan salah satu daripada tiga keadaan permulaan untuk kapal. Oleh itu, tiga nilai sesuai dengan kedudukan 3 (kanan atas), tiga sesuai dengan kedudukan 7 (tengah), dan dua sesuai dengan kedudukan 11 (kanan bawah).

Setelah penjanaan rawak berlaku dan asteroid diberi keadaan awal, ia mengalir secara mendatar ke arah kapal tanpa gangguan.

0 ← 1 ← 2 ← 3

4 ← 5 ← 6 ← 7

11 ← 10 ← 9 ← 8

Jam yang digunakan untuk logik keadaan rock seterusnya mengawal kelajuan permainan; kami mendapati melalui ujian dan ralat bahawa 9999999 adalah nilai yang baik untuk jumlah maksimumnya.

Logik kapal berfungsi dengan menginisialisasi ke posisi tengah (kedudukan 4) di bahagian paling kiri. Sekiranya butang atas atau butang bawah ditekan, kapal akan bergerak naik dan turun ke posisi 0 dan 11 yang sesuai dengan butang yang telah ditekan.

Agar pergerakan kapal terasa menyenangkan bagi pengguna, kami tidak menjadikan pergerakannya tidak segerak. Kami menggunakan jam untuk perubahan keadaannya, dan kami menggunakan jumlah maksimum 5555555.

Langkah 4: Memaparkan Hasilnya

Decoder perduaan hingga 7 segmen mengambil pemboleh ubah kedudukan 4-bit untuk kapal dan asteroid dan memaparkan gambar yang sesuai (sama ada kapal dan batu atau mesej "BAnG").

Ia menyelesaikannya dengan memeriksa terlebih dahulu jika keduanya sama dan kemudian memaparkan mesej "BAnG" jika cek kembali benar.

Sekiranya tidak kembali benar, penyahkod akan memaparkan kapal dan batu dengan beralih di antara mereka pada frekuensi jam yang sangat tinggi dan memperbodohkan mata untuk melihatnya seolah-olah mereka dipaparkan pada masa yang sama.

Langkah 5: Menggabungkan Semuanya

Menggabungkan Semuanya
Menggabungkan Semuanya

Kami merangkumi FSM kapal dan batu dalam satu FSM besar yang kami pasangkan ke FSM paparan. Input permainan adalah butang atas dan butang bawah di papan BASYS3 dan jam sistem. Keluarannya adalah segmen dan anod vektor tujuh paparan segmen.

Input dan output ini akan dilihat dalam fail kekangan di mana mereka dipetakan port.

Langkah 6: Pengubahsuaian Masa Depan

Di masa depan, menambahkan lebih banyak fungsi pergerakan kapal ke projek ini akan menjadi peningkatan. Ini dapat dicapai hanya dengan memberikan 2 input butang lagi dan membiarkan kapal mengambil posisi (keadaan) selain dari 0, 4, dan 8. Pengubahsuaian lain yang mungkin dapat dilakukan adalah mengawal masa keadaan asteroid seterusnya sehingga ia mulai perlahan dan meningkatkan kecepatan dengan 1.5x setiap kali terlepas kapal sehingga mendapat pukulan, di mana ia akan dimulakan semula dan menjadi perlahan lagi. Ini akan meningkatkan kesukaran permainan dan menjadikannya lebih menyenangkan bagi pengguna jika ia dilaksanakan, dan dapat dilakukan dengan membuat pemboleh ubah untuk jumlah maksimum jam keadaan rock berikutnya, mengalikan pemboleh ubah itu dengan 1.5 setiap kali asteroid tidak tekan, dan tetapkan semula ke nilai awalnya setiap kali batu memukul.

Langkah 7: Kesimpulannya

Projek ini telah membantu kami untuk lebih memahami mesin, jam, dan paparan secara interaktif pada paparan tujuh segmen.

Perkara paling besar mengenai mesin keadaan terhingga adalah penting untuk mengetahui (ingat) keadaan anda sekarang untuk bergerak ke keadaan yang diingini seterusnya. Ironinya, nasihat hidup yang baik; anda mesti tahu di mana anda hendak tahu ke mana anda pergi.

Dengan memanipulasi jam yang berlainan, kami dapat menghasilkan nombor secara rawak, memindahkan batu ke posisi seterusnya, dan menguruskan paparan kapal, batu, dan pesan akhir permainan.

Kami mengetahui bahawa lebih daripada satu anod tidak dapat dipaparkan pada masa yang sama. Modul yang diberikan kepada kami memanfaatkan bahawa mata manusia hanya dapat melihat perbezaan hingga frekuensi tertentu. Oleh itu, frekuensi pertukaran anod yang lebih tinggi dipilih. Kapal dan batu yang dilihat pada masa yang sama sebenarnya merupakan kiasan kerana masing-masing dipaparkan secara berasingan, tetapi sangat cepat. Konsep itu diterapkan untuk menampilkan pergerakan kapal, batu, dan pesan "BAnG".

Disyorkan: