Isi kandungan:
- Langkah 1: Pengenalan
- Langkah 2: Bahan
- Langkah 3: Reka Bentuk Kotak Hitam Diagram Tingkat Atas
- Langkah 4: CLKDivide
- Langkah 5: Blok Proses Shift
- Langkah 6: Mesin Keadaan Terhingga
- Langkah 7: Mengawal Blok Proses Paparan Dengan Tahap
- Langkah 8: Mengawal Kelajuan LED Dengan Tahap
- Langkah 9: Pemasangan Perkakasan
- Langkah 10: Bersenang-senang
Video: Permainan Reaksi FPGA: 10 Langkah
2024 Pengarang: John Day | [email protected]. Diubah suai terakhir: 2024-01-30 11:10
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 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
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
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 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
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
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
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
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:
Ketuk Ketuk Pelangi - Permainan Reaksi Pantas 2 Pemain: 4 Langkah (dengan Gambar)
Ketuk Tap Rainbow - Permainan Reaksi Pantas 2 Pemain: 2 minggu yang lalu anak perempuan saya mempunyai idea genius untuk membuat permainan reaksi cepat dengan warna pelangi (dia pakar pelangi: D). Saya langsung menyukai idea itu dan kami mula memikirkan bagaimana kami dapat menjadikannya permainan sebenar. Ideanya adalah. Anda mempunyai pelangi di
Permainan Reaksi Pemasa 555: 5 Langkah
555 Timer Reaction Game: Target AudienceInstruksional ini ditujukan kepada orang yang berminat dengan litar (dengan sedikit latar belakang) yang mencari permainan sederhana yang boleh anda bina dengan hanya beberapa komponen yang murah. Tahap KesukaranIni akan menjadi sukar sekiranya
Permainan Reaksi Arduino Lucu: 3 Langkah
Permainan Reaksi Arduino Lucu: Permainan reaksi Arduino Lucu untuk seisi keluarga;) Berdasarkan komunikasi Bluetooth lintas platform. Anda hanya memerlukan beberapa barang Arduino, telefon pintar Android dan kotak kasut. Sekiranya anda tidak memilikinya, percayalah dengan tegas: tidak ada yang
Permainan Reaksi- Projek Kejuruteraan Komputer: 3 Langkah
Permainan Reaksi- Projek Kejuruteraan Komputer: Permainan reaksi betul-betul seperti namanya, ia menguji kelajuan reaksi anda. Anda mungkin bertanya apa faedah pelayan ini di luar hiburan, anda juga boleh menggunakannya untuk individu yang menjalani pemulihan dari pembedahan atau kemalangan. Reaksi mereka
Permainan Reaksi Arduino: 9 Langkah
Arduino Reaction Game: Saya menjadikan permainan ini sebagai tugas sekolah. Kami harus membuat sesuatu yang interaktif dengan arduino. Ini adalah projek Arduino pertama saya yang pernah dibuat, jadi agak sukar, tetapi tidak mustahil