[Rule 90](Rule90 - HDLBits (01xz.net))
module top_module(
input clk,
input load,
input [511:0] data,
output [511:0] q );
integer i;
always@(posedge clk)begin
if(load)begin
q<=data;
end
else begin
q<={1'b0,q[511:1]}^{q[510:0],1'b0};
end
end
endmodule
这一种写法挺好的 q[511:1]}^{q[510:0]
,须记住
[Rule 110](Rule110 - HDLBits (01xz.net))
module top_module(
input clk,
input load,
input [511:0] data,
output [511:0] q
);
always@(posedge clk)begin
if(load)begin
q<=data;
end
else begin
q<=(q^{1'b0,q[511:1]})|(~{q[510:0],1'b0}*q);
end
end
endmodule
上面是自己写的,但是 Modelsim 不运行,不知道为何。而且同样是按照卡诺图写的,答案不对。额,调整了卡诺图,原因是要增加一个项才行,虽然从卡诺图化简角度没有错,但是此运行不出结果
![[1686227352887.png]]
很奇怪,明明是按照卡诺图写的,但是化简的写反而运行不出来,分开写就可以
![[defdf44a295bf19358f4a81e28e3495.jpg]]
module top_module(
input clk,
input load,
input [511:0] data,
output [511:0] q
);
always @(posedge clk)begin
if(load)begin
q <= data;
end
else begin
q <= (~{1'b0,q[511:1]} & q) | (q & ~{q[510:0],1'b0}) | {~{1'b0,q[511:1]} & {q[510:0],1'b0}} | {~q & {q[510:0],1'b0}};
end
end
endmodule
[Conway's Game of Life 16 x 16](Conwaylife - HDLBits (01xz.net))
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) begin
q <= data;
end
else begin
for (integer i = 0; i < 256; i++) begin
if (i == 0)
sum = q[1]+q[16]+q[17]+q[240]+q[241]+q[15]+q[31]+q[255];
else if (i == 15)
sum = q[14]+q[16]+q[0]+q[240]+q[254]+q[30]+q[31]+q[255];
else if (i == 240)
sum = q[0]+q[15]+q[239]+q[241]+q[1]+q[224]+q[225]+q[255];
else if (i == 255)
sum = q[0]+q[15]+q[14]+q[224]+q[238]+q[240]+q[239]+q[254];
else if (i > 0 && i < 15)
sum = q[i-1]+q[i+1]+q[i+15]+q[i+16]+q[i+17]+q[i+239]+q[i+240]+q[i+241];
else if (i % 16 == 0)
sum = q[i-1]+q[i+1]+q[i+15]+q[i+16]+q[i+17]+q[i-16]+q[i-15]+q[i+31];
else if (i % 16 == 15)
sum = q[i-1]+q[i+1]+q[i+15]+q[i+16]+q[i-17]+q[i-16]+q[i-15]+q[i-31];
else if (i > 240 && i < 255)
sum = q[i-1]+q[i+1]+q[i-17]+q[i-16]+q[i-15]+q[i-239]+q[i-240]+q[i-241];
else
sum = q[i-1]+q[i+1]+q[i-17]+q[i-16]+q[i-15]+q[i+15]+q[i+16]+q[i+17];
if ((sum == 0 || sum == 1) || (sum >= 4))
q[i] <= 0;
else if (sum == 3)
q[i] <= 1;
end
end
end
endmodule
CSDN学习网站