Isi kandungan:

Permainan Reaksi FPGA: 10 Langkah
Permainan Reaksi FPGA: 10 Langkah

Video: Permainan Reaksi FPGA: 10 Langkah

Video: Permainan Reaksi FPGA: 10 Langkah
Video: KECEPATAN KERETA HYPERSONIC || Omjeys ID #shorts #shorts #viral #trandingshorts 2024, November
Anonim
Permainan Reaksi FPGA
Permainan Reaksi FPGA

Oleh Summer Rutherford dan Regita Soetandar

Langkah 1: Pengenalan

Untuk projek akhir kami untuk CPE 133, kami merancang permainan reaksi di VHDL untuk papan Basys3. Permainan ini dapat dibandingkan dengan permainan arcade "Stacker" di mana pemain harus menjatuhkan blok pada waktu yang tepat. Papan Basys3 disambungkan ke papan roti, yang mempunyai LED bergantian. Lampu LED ini akan bergantian pada frekuensi tertentu, bergantung pada levelnya. Permainan ini menggunakan pembahagi jam dan paparan segmen 4 digit 7, serta mesin keadaan terhingga. Apabila pemain mengaktifkan suis yang betul ketika LED tengah menyala, pemain akan maju ke peringkat permainan seterusnya, meningkatkan frekuensi LED bergantian. Ini menjadikan setiap tahap berturut-turut lebih sukar daripada tahap sebelumnya. Apabila pemain berjaya mengalahkan tahap 7, tahap tertinggi, mesej akan dipaparkan pada paparan segmen dan semua LED akan menyala dan mati secara serentak.

Langkah 2: Bahan

Bahan
Bahan
Bahan
Bahan
Bahan
Bahan

Bahan yang anda perlukan adalah:

  • Papan Digilent Basys3 dengan kabel USB mikro
  • Papan roti
  • 5 LED
  • 5 perintang (kami menggunakan 220 ohm)
  • 11 wayar pelompat
  • Komputer dengan Vivado

Langkah 3: Reka Bentuk Kotak Hitam Diagram Tingkat Atas

Reka Bentuk Kotak Hitam Diagram Tingkat Atas
Reka Bentuk Kotak Hitam Diagram Tingkat Atas
Reka Bentuk Kotak Hitam Diagram Tingkat Atas
Reka Bentuk Kotak Hitam Diagram Tingkat Atas

Seperti yang anda lihat, gambarajah blok tingkat atas kami bermula dengan mendapatkan jam yang diperlukan dari submodule kami, ClkDivide. Jam ini merupakan input ke dalam pelbagai blok proses. Pada dasarnya, permainan harus menyedari bahawa apabila pengguna menghidupkan suis dengan betul, LED mesti mula bergantian lebih cepat dan paparan perlu naik satu tingkat. Gambarajah blok mungkin kelihatan sedikit gila, tetapi itu kerana terdapat banyak isyarat yang dibuat dalam proses tertentu dan kemudian isyarat itu menentukan isyarat lain dalam blok proses yang lain.

Pada akhirnya, satu-satunya input yang dimainkan oleh permainan adalah jam input pada papan Basys3 yang berjalan pada 100 Mhz, tujuh suis pada papan Basys3, dan butang reset. Yang dihasilkan adalah anoda untuk paparan tujuh segmen, tujuh segmen untuk paparan, dan LED.

Langkah 4: CLKDivide

CLKBahagi
CLKBahagi
CLKBahagi
CLKBahagi
CLKBahagi
CLKBahagi

Subodul pembahagi jam ini membuat jam yang lebih perlahan bergantung pada nilai yang dipetakannya dalam fail utama kami. Kami menggunakan submodul ini untuk menentukan Clk400, PushClk, dan newlck. Submodul ini memerlukan jam dan pembahagi 32 bit sebagai input. Jam yang perlahan dikeluarkan. Terdapat blok proses untuk pembahagi dan jam yang diperlahankan. Dalam prosesnya adalah pemboleh ubah sementara, yang kami sebut kiraan, yang menghitung satu setiap kali kelebihan jam yang dimasukkan dimukul. Sebaik sahaja mencapai nombor pembahagi, jam yang diperlahankan beralih dan kiraan diset semula menjadi sifar.

Langkah 5: Blok Proses Shift

Blok Proses Shift
Blok Proses Shift

Blok proses Shift mengawal gerakan dan kelajuan LED bergantian. Dalam senarai kepekaan adalah isyarat klk baru dan Berhenti. Berhenti menyebabkan kelewatan seketika apabila pengguna melepasi tahap. Sekiranya Stop tidak tinggi, maka LED bergantian seperti biasa berdasarkan kelajuan newclk. Corak seli ini dikendalikan oleh dua pemboleh ubah: Jejak dan hitung. Hitungan menentukan LED mana yang harus dihidupkan, sementara Trek menentukan apakah kiraan harus dihitung naik atau turun. Ada isyarat lain, Final, yang berlaku hanya ketika Level adalah "111," yang menunjukkan pemain telah mengalahkan permainan. Akhir bergantian antara 0 dan 1 setiap tepi jam untuk menghidupkan dan mematikan LED secara berterusan. Ini hanyalah elemen visual untuk paparan terakhir.

Proses peralihan ini adalah tempat yang tepat untuk memulakan projek ini. Sekiranya anda boleh mendapatkan LED bergantian dengan betul dan konsisten, maka dari sini anda hanya perlu menambahkan tingkah laku ketika naik level!

Langkah 6: Mesin Keadaan Terhingga

Mesin Keadaan Terhingga
Mesin Keadaan Terhingga

Kami membuat Mesin Keadaan Terhingga untuk menentukan tingkah laku ketika butang input atau tetapan semula ditekan. Setiap keadaan adalah "level" dan jika suis dihidupkan pada waktu yang salah atau reset ditekan, level kembali ke "000." Jika tidak, jika suis dihidupkan dengan betul maka level akan bergerak naik hingga mencapai keadaan akhir, "111" dan paparan akhir berlaku. FSM didasarkan pada dua blok proses sync_proc dan comb_proc. Sync_proc menggunakan jam yang kami panggil PushClk. Jam ini mengawal seberapa pantas keadaan seterusnya menjadi keadaan sekarang. Jam ini mesti cukup laju; kami memilih kelajuan yang kira-kira dua kali lebih cepat daripada kelajuan LED terpantas kami.

Kami melaksanakan kod ini menggunakan FSM untuk tahap; namun, setelah projek ini kami menyedari penggunaan FSM yang lebih efisien mungkin mempunyai keadaan hitungan, keadaan semula, atau keadaan tetap. Sekiranya tidak ada yang ditekan, ia berada dalam keadaan tinggal. Sekiranya tetapan semula ditekan atau pemain tidak kemas, ia berada dalam keadaan semula. Sekiranya ditekan dengan betul, ia berada dalam keadaan penghitungan. Terdapat banyak cara lain untuk menggunakan FSM dalam permainan ini juga!

Langkah 7: Mengawal Blok Proses Paparan Dengan Tahap

Mengawal Blok Proses Paparan Dengan Tahap
Mengawal Blok Proses Paparan Dengan Tahap

Tahap mengawal blok proses Paparan. Pemboleh ubah dalam senarai kepekaan adalah Level, Reset, dan Clk400. Paparan 7 segmen dimulakan dengan memaparkan ‘1’ untuk tingkat pertama. Ia menghitung hingga 7 setiap kali pengguna melepasi tahap untuk menunjukkan kepada pengguna tahap mana mereka berada. Setelah pengguna melepasi level 7, ia akan menampilkan "COOL" untuk menandakan bahawa pemain telah mengalahkan permainan. Paparan "COOL" ini berjalan pada jam 400 Hz yang kami panggil Clk400. Sekiranya Reset ditekan, paparan kembali ke "1."

Langkah 8: Mengawal Kelajuan LED Dengan Tahap

Mengawal Kelajuan LED Dengan Tahap
Mengawal Kelajuan LED Dengan Tahap

Akhirnya, Level mengawal kelajuan LED. Level adalah satu-satunya isyarat dalam senarai kepekaan. D1 adalah isyarat yang masuk ke proses Clock Divider untuk mendapatkan newclk. Setiap kali Tahap diubah, atau keadaan berubah, proses menyekat "Kecepatan." Proses ini menentukan nilai D1. Terdapat 8 nilai yang ditentukan dari D1 yang kami pilih berdasarkan seberapa pantas kami mahu setiap peringkat berjalan. D1 semakin kecil setiap kali tahap meningkat sehingga klk baru berjalan lebih cepat.

Langkah 9: Pemasangan Perkakasan

Pemasangan Perkakasan
Pemasangan Perkakasan

Kami menyambungkan papan roti ke Basys3 dengan salah satu penyambung pmod. Enam dari port pmod digunakan untuk memasang penyambung lelaki ke lelaki, satu untuk pembumian dan lima lagi untuk 5 LED. Kami juga meletakkan perintang untuk setiap LED. Perintang ini 220Ω dan menghalang LED daripada litar pintas dan terbakar. Walaupun setiap LED mempunyai beberapa rintangan, rintangan tidak cukup untuk menghalang voltan dari sumbernya.

Langkah 10: Bersenang-senang

Permainan ini sangat senang dimainkan. Pemain bermula pada suis paling kanan 1 papan, V17. Mereka mesti membuka suis tinggi ketika LED tengah menyala. Mereka kemudian menggerakkan satu suis ke kiri dan melakukan perkara yang sama! Sekiranya pemain berjaya sampai ke akhir, mereka akan berakhir pada suis ketujuh, W14. Sekiranya mereka mengalahkan permainan, mereka dapat melihat paparan akhir yang sangat menyeronokkan!

Sesuatu yang perlu diperhatikan ialah ketika membuat permainan ini, kecepatan sepenuhnya bergantung kepada anda! Sekiranya kelajuan yang kami pilih terlalu perlahan, jangan ragu untuk mempercepatnya dan menjadikannya lebih mencabar! Tidak ada bilangan tahap yang ditetapkan. Sekiranya anda ingin membuatnya mempunyai tahap yang lebih banyak lagi, ada pengubahsuaian yang harus dilakukan pada FSM dan blok proses ditentukan oleh Level, tetapi ini adalah perubahan yang sangat sederhana.

Kami juga memilih untuk menggunakan suis di papan sebagai input pengguna, tetapi ini juga mungkin dilakukan dengan butang di papan Basys3; butang akan menghilangkan keperluan untuk menetapkan semula suis setiap kali pengguna memulakannya semula. Pada mulanya kami menggunakan butang, namun ini menyebabkan kesalahan dalam menentukan levelnya kerana akan melonjak beberapa tahap jika dua tepi PushClk yang naik dipukul ketika butang ditahan.

Berikut adalah video yang menunjukkan cara bermain, melalui 4 peringkat pertama, dan paparan akhir akhir.

Fail utama untuk projek ini disertakan di bawah.

Sumber

Manual rujukan Basys3

Inspirasi untuk projek - permainan Arduino Stop It

Disyorkan: