Conwaylife_HDLbits(康威生命游戏)

康威生命游戏:一个二维细胞自动机。

“游戏”是在一个二维细胞网格上进行的,每个细胞要么是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]+q[i+1]+q[i+16]+q[i+15]+q[i+17]+q[i+240]+q[i+239]+q[i+241];
//最上面(后)一行 
                            else if(i>240) n=q[i-1]+q[i+1]+q[i-16]+q[i-15]+q[i-17]+q[i-240]+q[i-239]+q[i-241];
//第一列 
                            else if(((i+1)%16)==0) n=q[i-1]+q[i-15]+q[i+16]+q[i+15]+q[i+1]+q[i-16]+q[i-31]+q[i-17];
//最右端一列 
                            else if((i%16)==0) n=q[i+1]+q[i+15]+q[i+16]+q[i+31]+q[i+17]+q[i-16]+q[i-1]+q[i-15];
                            else  n=q[i-1]+q[i+1]+q[i+16]+q[i+15]+q[i+17]+q[i-16]+q[i-15]+q[i-17];
                            if(n==3) q[i]<=1;  else if((n<2)|(n>3)) q[i]<=0; 
                                
                        end
                end
        end

endmodule

感觉是比较繁杂的写法了。看到别人的做法是把16x16扩展成18x18来做,这样就将neighbour的取法统一了。看上去简单明了多了。

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值