Isi kandungan:

Permainan Pong: 6 Langkah
Permainan Pong: 6 Langkah

Video: Permainan Pong: 6 Langkah

Video: Permainan Pong: 6 Langkah
Video: Permainan Pong-Pong Balong 2024, November
Anonim
Permainan Pong
Permainan Pong

Bahan:

Papan FPGA Basys3

Kabel VGA

Vivado

Tujuan pengajaran ini adalah untuk mengembangkan permainan Pong yang akan dipaparkan di monitor. Projek ini akan menggunakan VHDL untuk memprogram dan menggunakan Basys3 FPGA untuk menjalankan kod dan memindahkan gambar menggunakan antara muka VGA. Tutorial ini bertujuan untuk orang yang mempunyai sedikit pengetahuan mengenai VHDL. Tutorial akan dibahagikan kepada 6 bahagian yang berbeza: Gambaran Keseluruhan, Proses, Penangan Skor, Penjanaan Imej, Permainan Pong, dan VGA.

Langkah 1: Gambaran keseluruhan

Gambaran keseluruhan
Gambaran keseluruhan

Gambar di atas adalah reka bentuk skematik keseluruhan projek

Objektif Permainan:

Permainan ini terdiri daripada paparan dengan gelangsar yang dapat dikendalikan oleh pengguna, dan dinding tetap yang berfungsi sebagai batas atas. Ketika pengguna menekan butang mulai, yang merupakan tombol atas, bola akan mulai melambung, dan akan memantul dari dinding dan berusaha memukul dayung. Sekiranya bola memukul dayung, bola akan melambung lagi dan terus melambung sehingga terlepas dayung. Permainan berakhir apabila bola gagal memukul dayung. Pengguna akan dapat menggunakan tombol tekan kiri dan kanan untuk menentukan pergerakan dayung. Untuk menetapkan semula permainan, pengguna mesti menekan butang tengah. Masa larian akan dirakam pada paparan 7 segmen. Terdapat lima tahap, dan setiap sepuluh saat tahapnya meningkat, sehingga anda mencapai tahap 5 di mana ia kekal sehingga pengguna kalah. Tahap ditentukan oleh kelajuan bola; ini bermaksud bahawa setiap sepuluh saat, kelajuan bola meningkat, sehingga meningkatkan kesukaran permainan.

Senibina Sistem:

Gambarajah di bawah adalah gambarajah blok tingkat atas asas keseluruhan untuk sistem. Sistem ini mempunyai empat input: Butang R, Button L, Start, dan Reset, dan Jam. Ia memiliki output sinkronisasi mendatar dan menegak, RBG (yang merujuk pada warna piksel di lokasi tertentu), dan Skor (yang berfungsi sebagai bas ke paparan 7-Segmen). Butang atas akan digunakan sebagai permulaan butang, dan tombol tekan kiri dan kanan akan digunakan untuk menggerakkan dayung mengikut arah masing-masing. Paparan 7-Segmen akan digunakan untuk mencatat skor, iaitu jumlah detik yang dimainkan oleh pengguna tanpa kehilangan permainan. Nombor tersebut akan dipaparkan sebagai nombor perpuluhan.

Litar Senibina: Kami akan membina alat kami menggunakan satu FSM yang mengandungi FSM yang lebih kecil, sub-FSM akan mengawal kesukaran permainan sedangkan FSM utama akan mengawal aliran keseluruhan permainan. Alat kami juga akan menggunakan sekurang-kurangnya tiga pembahagi jam, satu untuk skor (masa), satu untuk kadar penyegaran paparan dan satu yang disambungkan ke output dari DeMux sehingga kita dapat mengawal seberapa cepat permainan akan terus bertambah dengan jumlah kesukaran. Permainan akan bergerak lebih pantas lebih lama anda bermain. Kami akan mempunyai input kawalan dari keadaan DeMux dari sub-FSM sehingga kami dapat mengawal seberapa cepat permainan akan berlangsung selama anda memainkannya. Kami akan menggunakan beberapa pembilang, satu untuk menyegarkan paparan dan satu lagi untuk menghitung skor semasa anda terus bermain. Projek ini mempunyai dua modul utama dan pelbagai submodul yang akan memanipulasi data input. Dua submodul utama adalah Pemacu VGA, serta modul logik butang. Pemacu VGA akan terdiri daripada memori yang dapat diprogramkan, pembahagi jam, dan logik yang akan memanipulasi output untuk warna. Modul logik butang juga akan terdiri daripada pembahagi jam, dan memori yang dapat diprogramkan, serta penukar binari hingga perpuluhan untuk Paparan 7-Segmen dengan pembahagi jam masing-masing.

Langkah 2: Proses Imej

Untuk bahagian Proses Imej projek, kami akan menentukan pergerakan bola dan dayung. Program ini mempunyai port yang merangkumi tombol tekan kiri, kanan, atas dan tengah, keadaan sekarang, jam, kedudukan bola X dan Y, tepi kiri dan kanan dayung dan gagal. Keadaan sekarang digunakan untuk menentukan isyarat aktif. Kod tersebut merangkumi beberapa kes yang dapat digerakkan oleh bola, dan telah menetapkan syarat untuk menentukan jalan bola. Blok proses seterusnya menentukan arah pergerakan dayung berdasarkan butang mana yang ditekan oleh pengguna. Kod untuk bahagian projek ini dilampirkan dengan komen terperinci yang menerangkan apa yang dilakukan oleh setiap bahagian.

Langkah 3: Penangan Skor

Penangan Skor
Penangan Skor

Bahagian ini terdiri daripada fail yang berkaitan dengan memaparkan skor dalam beberapa saat pada Paparan 7 Segmen di Papan Basys3. Ini termasuk pembahagi jam yang digunakan untuk menghitung detik, penghitung skor mengira detik yang dimainkan oleh pengguna, pemacu segmen mengambil skor dan mengubahnya menjadi anod dan katod untuk ditampilkan di layar dan juga menentukan kedudukan yang nombor akan dipaparkan dan terakhir, pengendali segmen menukar digit binari menjadi digit perpuluhan untuk dipaparkan di skrin. Pengendali skor mengumpulkan semua bahagian dan memetakan isyarat. Kod untuk kelima-lima fail dilampirkan di bawah.

Pembahagi Jam:

Pembahagi jam mempunyai input Clk (jam), CEN (aktifkan masuk), dan Div (pembahagi) dan output Clk_out. Sekiranya isyarat aktif dihidupkan, maka jam akan bergantung pada tepi yang naik.

Pembilang Markah

Penghitung skor mempunyai input Clk (Clock) dan RST (Reset) dan output Clk_Out dan Q yang pada dasarnya bertindak sebagai output skor.

Pemacu Segmen

Pemacu segmen mempunyai input D1, D10, D100, D1000, dan Jam. Nombor selepas "D" merujuk kepada tempat perpuluhan pada paparan 7 segmen. Keluarannya adalah anod dan digit. Jam mengira dan memberikan nombor dan kedudukannya. Sebagai contoh, "9" akan dipaparkan di tempat yang satu dengan "0" di tempat yang beribu-ribu, ratusan dan puluhan. Apabila beralih ke "10", angka sekarang akan menjadi "1" di tempat berpuluh dan "0" di tempat beribu-ribu, ratusan dan satu.

Pengendali Segmen

Pengendali segmen mempunyai digit sebagai input dan katod sebagai outputnya. Ini pada dasarnya nombor binari ke paparan katod untuk mengeluarkan nombor perpuluhan di skrin.

Penangan Skor

Pengendali Skor terdiri daripada empat entiti sebelumnya dan menggabungkan semuanya dan memetakan isyarat. Ia juga membolehkan dan mematikan kaunter berdasarkan keadaan sekarang.

Langkah 4: Penjanaan Imej

Penjanaan gambar terdiri daripada empat komponen: Animasi, Fail Counter, Refresh Image dan Start Counter. Fail-fail ini merujuk bagaimana menghasilkan gambar pada monitor paparan.

Animasi

Fail Animasi mempunyai input Clk (Clock Signal), CEN (hitung mengaktifkan), RST (Reset Signal), B_X (posisi X bola), B_Y (posisi Y bola), P_L (posisi dayung kiri), dan P_R (kedudukan dayung kanan). Keluarannya adalah WA (alamat tempat kami menuliskan warna), dan WD (warna ditulis pada alamat yang ditentukan). Fail ini mempunyai Play_Counter yang merupakan penghitung yang akan digunakan sebagai input kawalan untuk MUX, pengekod yang dapat mengeluarkan warna yang tepat di tempat yang tepat, dan terakhir multiplexer yang menampilkan warna yang betul berdasarkan kedudukan dayung dan bola.

Muat semula Imej

Fail Refresh Image digunakan untuk menyegarkan gambar apabila kedudukan bola dan dayung berubah. Fail tersebut merangkumi komponen dari fail Animasi, Start Counter dan Fail Counter. Ia memetakan isyarat dari setiap komponen dan menggunakan logik keadaan untuk menentukan isyarat dan alamat output.

Mulakan Kaunter

Kaunter Mula menggunakan input Clk, RS, dan CEN dan mengeluarkan WA dan WD. Ia menggunakan pembilang dan penukaran untuk menentukan input kawalan untuk MUX. Multiplexer kemudian menggunakan input untuk menentukan alamat warna yang betul dan menghantar data ini ke pemacu VGA. Ini digunakan untuk menampilkan "Pong" ketika pengguna memulakan permainan.

Kaunter Gagal

Kaunter gagal digunakan untuk menampilkan "Game Over" ketika pengguna kehilangan permainan. Ia mempunyai isyarat Clk, RST, dan CEN. Ia menggunakan pembilang dan formula penukaran untuk menentukan input kawalan untuk MUX. Multiplexer kemudian menggunakan input untuk menentukan alamat warna yang betul dan menghantar data ini ke pemacu VGA.

Langkah 5: Permainan Pong

Permainan Pong
Permainan Pong

Bahagian projek ini merangkumi fail Pong Master, Finite State Machine (FSM), Timer, dan Start Debounce.

Pemasa

Pemasa mempunyai input Clk (Jam) dan PS (Keadaan Sekarang) dan Pemasa dan Clk_out sebagai output. Pemasa digunakan untuk mengubah kelajuan permainan setiap lima saat.

Aliran FSM

Flow FSM mempunyai input Clk, Fail, Timer, Bttn_S (Start Button) dan Buttn_RST (Reset Button) dan output Pres_S (Present State Output). FSM menggunakan pemasa untuk mengemas kini keadaan sekarang ke keadaan seterusnya dan terus mengemas kini keadaan seterusnya sehingga permainan mencapai tahap 5 di mana ia kekal sehingga permainan selesai.

Mulakan Tolak

Mula Melantun adalah pantulan permulaan bola. Ia mempunyai input S_in dan Clk, dan output S_out.

Pong MasterFile ini menggunakan semua komponen sebelumnya dan menjadikannya semua komponen seketika. Ini adalah fail utama yang mengumpulkan semua komponen sebelumnya yang telah kita bina bersama.

Langkah 6: Pemacu VGA

Pemacu VGA (Visual Graphics Array) adalah perisian yang digunakan untuk menerima arahan atau data yang dikirim ke layar paparan. Pemandu itu diberikan kepada kami oleh profesor kami. Gunakan pemacu dan kabel VGA untuk menyambungkan papan Basys3 ke monitor.

Anda sekarang harus bersedia untuk membuat Permainan Pong anda sendiri menggunakan VHDL!

Disyorkan: