康威生命游戏:一个二维细胞自动机。
“游戏”是在一个二维细胞网格上进行的,每个细胞要么是1(活的),要么是0(死的)。判断依据和周围8个相邻有关。 使用一个16x16的圆环体,其中的边环绕到网格的另一侧。
//在这里我分情况考虑:
分三种情况,(1)中间部分 ,(2)四个角,(3)边缘行或列
module top_module(
input clk,
input load,
input [255:0] data,
output [255:0] q );
reg [3:0] n;
reg [8:0] i;
always @(posedge clk)
begin
if(load) q<=data;
else
begin
for(i=0;i<=255;i++)
begin
//分三种情况,中间部分,四个角,边缘行或列
//四个角
if(i==0) n=q[1]+q[15]+q[16]+q[17]+q[31]+q[240]+q[255]+q[241];
else if(i==15) n=q[14]+q[0]+q[16]+q[30]+q[31]+q[255]+q[240]+q[254];
else if(i==240) n=q[1]+q[15]+q[0]+q[224]+q[225]+q[239]+q[255]+q[241];
else if(i==255) n=q[14]+q[0]+q[15]+q[239]+q[224]+q[238]+q[240]+q[254];
//第一行
else if(i<15) n=q[i-1]+

该博客讨论了康威生命游戏的实现,这是一个在16x16二维细胞网格上运行的自动机。代码中详细处理了边缘和角落的情况,通过分别判断不同位置的相邻细胞状态来更新细胞的生死。作者提到了一种简化方法,即扩展为18x18的网格,使得相邻细胞的获取更为统一,从而简化代码。
3384

被折叠的 条评论
为什么被折叠?



