HDLBits练习
Circuits-Sequential Logic-More Circuits
题1:Rule 90
module top_module(
input clk,
input load,
input [511:0] data,
output [511:0] q );
integer i;
always@(posedge clk)begin
if(load)
q<=data;
else begin
q[0]<=q[1]^1'b0;
q[511]<=q[510]^1'b0;
for(i=1;i<511;i++)begin
q[i]<=q[i+1]^q[i-1];end
end
end
endmodule
题2:
module top_module(
input clk,
input load,
input [511:0] data,
output [511:0] q
);
integer i;
always@(posedge clk)begin
if(load)
q<=data;
else begin
q[0]<=~q[1] & q[0] | q[0];
q[511]<=q[511] | q[511] & ~q[510] | ~q[511] & q[510];
for(i=1;i<511;i++)begin
q[i]<=~q[i+1] & q[i] | q[i] & ~q[i-1] | ~q[i] & q[i-1];end
end
end
endmodule
题3:Conway’s Game of Life 1616
//1616的方阵q,q[k]的索引k 按二进制,前4位为行数,后4位为列数
module top_module(
input clk,
input load,
input [255:0] data,
output [255:0] q );
integer k;
wire [3:0]i,j,i1,i2,j1,j2;
wire [2:0] add;
always@(posedge clk)begin
if(load)
q<=data;
else begin
for (k=0;k<256;k++)begin
i=k[7:4];j=k[3:0];
if(i==0)begin
i1=4'd15;
i2=4'd1;end
else if(i==15)begin
i1=4'd14;
i2=4'd0;end
else begin
i1=i-1'b1;
i2=i+1'b1;end
if(j==15)begin
j1=4'd14;
j2=4'd0;end
else if(j==0)begin
j1=4'd15;
j2=4'd1;end
else begin
j1=j-1'b1;
j2=j+1'b1;end
add=q[{i1,j1}] +q[{i1,j}] +q[{i1,j2}]+q[{i,j1}] +q[{i,j2}]+q[{i2,j1}]+q[{i2,j}]+q[{i2,j2}];
case(add)
3'd2:q[k]<=q[k];
3'd3:q[k]<=1;
default:q[k]<=0;
endcase
end
end
end
endmodule