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
Conwaylife
最新推荐文章于 2023-10-09 20:13:07 发布