Conwaylife

在这里插入图片描述

module top_module(
    input clk,
    input load,
    input [255:0] data,
    output [255:0] q ); 
    
    //组合逻辑计算出下一个转态
    //时序电路完成赋值
    wire [255:0] q_next;
    wire [3:0] sum [255:0]; //求和判断
    
    always @(posedge clk)
        begin
            if(load)
                q <= data;
            else
                begin
                    for (int i=0; i<=255; i=i+1)
                        case(sum[i])
                            4'b0011:q[i] <= 1'b1;
                            4'b0010:q[i]<=q[i];
                            default:q[i] <= 1'b0;
                        endcase
                end
        end
    //对中间的14X14小矩阵判断
    generate
        genvar i,j;
        for (i = 1; i <= 14; i=i+1)
            begin:my_block_1
                for(j = 1; j<=14; j=j+1)
                    begin:my_block_2
                        //(i,j)换成vector中的index --- i*16+j
                        //(i,j)邻居的坐标分别为(i-1,j-1)(i-1,j)(i-1,j+1)(i,j-1)(i,j+1)(i+1,j-1)(i+1,j)(i+1,j+1)
                        assign sum[(i*16+j)] = q[(i-1)*16+j-1]+q[(i-1)*16+j]+q[(i-1)*16+j+1]+q[i*16+j-1]+q[i*16+j+1]+q[(i+1)*16+j-1]+q[16*(i+1)+j]+q[16*(i+1)+j+1];
                    end
            end
    endgenerate
    //对于上下左右的边界(不包括边角)
    generate
        genvar k;
        for(k = 1; k<=14; k=k+1)
            begin:my_block
                //上界
                assign sum[k] = q[k-1]+q[k+1]+q[1*16+k-1]+q[1*16+k]+q[1*16+k+1]+q[15*16+k-1]+q[15*16+k]+q[15*16+k+1];
                //下界
                assign sum[15*16+k] = q[15*16+k-1]+q[15*16+k+1]+q[14*16+k-1]+q[14*16+k]+q[14*16+k+1]+q[k-1]+q[k]+q[k+1];
                //左界
                assign sum[k*16] = q[(k-1)*16]+q[(k+1)*16]+q[k*16+1]+q[(k-1)*16+1]+q[(k+1)*16+1]+q[k*16+15]+q[(k-1)*16+15]+q[(k+1)*16+15];
                //右界
                assign sum[k*16+15] = q[k*16+14]+q[(k-1)*16+14]+q[(k+1)*16+14]+q[(k-1)*16+15]+q[(k+1)*16+15]+q[k*16]+q[(k-1)*16]+q[(k+1)*16];
            end
    endgenerate
    //对于拐角
    assign sum[0] = q[1]+q[16]+q[17]+q[240]+q[241]+q[15]+q[31]+q[255];
    assign sum[15] = q[14]+q[16]+q[0]+q[240]+q[254]+q[30]+q[31]+q[255];
    assign sum[240] = q[0]+q[15]+q[239]+q[241]+q[1]+q[224]+q[225]+q[255];
    assign sum[255] = q[0]+q[15]+q[14]+q[224]+q[238]+q[240]+q[239]+q[254];
    

endmodule

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值