Gim "Life" adalah otomat seluler terkenal yang ditemukan oleh John Conway pada tahun 1970. Inti dari permainan ini adalah untuk mensimulasikan "alam semesta", dalam kasus kami, diimplementasikan pada matriks 8x8 persegi dengan tepi tertutup.
Gameplay
Dalam kasus kami, game diimplementasikan pada Altera Cyclone IV FPGA menggunakan tombol dan sakelar bawaan. Seluruh proses secara kondisional dibagi menjadi dua mode operasi - pilihan konfigurasi generasi pertama dan simulasi yang sebenarnya.
Implementasi
Gim ini diimplementasikan dalam bahasa desain Verilog dan terdiri dari empat modul dasar: modul input, output, algoritmik dan dasar, yang menghubungkan sisanya.
Algoritma transisi
Lapangan bermain dalam kode disajikan dalam bentuk register dari 64 elemen. Transisi ke generasi berikutnya dilakukan menggunakan logika sekuensial.
Fungsi transisifunction [63:0]step; input [63:0]field; reg [63:0]new_field; reg [7:0]position; reg [7:0]count; integer x; integer y; begin new_field = field; for(x = 0; x < 8; x = x + 1 ) begin: iloop for(y = 0; y < 8; y = y + 1) begin: jloop count = neighbour_count(field,x,y); position = to_1d(x,y); if (count == 3) new_field[position] = 1; else if ((count < 2) || (count > 3)) new_field[position] = 0; end end step = new_field; end endfunction function [7:0]neighbour_count; input [63:0]field; input [7:0]x; input [7:0]y; reg [7:0]count; reg [7:0]position; begin count = 0; position = to_1d(x-1,y-1); count = count + field[position]; position = to_1d(x,y-1); count = count + field[position]; position = to_1d(x + 1, y - 1); count = count + field[position]; position = to_1d(x - 1, y); count = count + field[position]; position = to_1d(x + 1, y); count = count + field[position]; position = to_1d(x - 1, y + 1); count = count + field[position]; position = to_1d(x, y + 1); count = count + field[position]; position = to_1d(x + 1, y + 1); count = count + field[position]; neighbour_count = count; end endfunction function [7:0]to_1d; input [7:0]x; input [7:0]y; begin if (x >= 8'b11111111) x = x + 8'd8; else if (x >= 8'd8) x = x - 8'd8; if (y >= 8'b11111111) y = y + 8'd8; else if (y >= 8'd8) y = y - 8'd8; to_1d = x + y * 8'd8; end endfunction
Modul input / output
Modul output bekerja dengan matriks LED 8x8 standar dengan 16 pin kontrol. Karena keterbatasan tampilan, gambar ditampilkan dalam baris dengan perubahan terus menerus dari baris yang ditampilkan.
Modul input terdiri dari tiga tombol - pembaruan layar dan sakelar mode. Dalam mode pengaturan, ketiga tombol aktif - memilih sel yang aktif, mengubah keadaan sel yang aktif dan memperbarui layar. Dalam mode simulasi, hanya tombol penyegaran layar yang aktif.
Contoh kerja
→ Kode SumberPS Artikel ini adalah salah satu persyaratan untuk penelitian siswa, kami mohon Anda tidak melempar sandal, kami tidak dapat disalahkan.