HDLBits刷题记录/Conwaylife康威生命游戏
Conway’s Game of Lifeis a two-dimensional cellular automaton.
The “game” is played on a two-dimensional grid of cells, where each cell is either 1 (alive) or 0 (dead). At each time step, each cell changes state depending on how many neighbours it has:
0-1 neighbour: Cell becomes 0.
2 neighbours: Cell state does not change.
3 neighbours: Cell becomes 1.
4+ neighbours: Cell becomes 0.
The game is formulated for an infinite grid. In this circuit, we will use a 16x16 grid. To make things more interesting, we will use a 16x16 toroid, where the sides wrap around to the other side of the grid. For example, the corner cell (0,0) has 8 neighbours:(15,1),(15,0),(15,15),(0,1),(0,15),(1,1),(1,0), and(1,15). The 16x16 grid is represented by a length 256 vector, where each row of 16 cells is represented by a sub-vector: q[15:0] is row 0, q[31:16] is row 1, etc. (This tool accepts SystemVerilog, so you may use 2D vectors if you wish.)
module top_module(
input clk,
input load,
input [255:0] data,
output [255:0] q );
reg[3:0] sum;
always@(posedge clk)
begin
if(load)
q<=data;
else
begin
for(int i=0;i<=255;i++)
begin
if(i==0)
sum=q[240