Rule90
题目要求:一串数据每一位的下一个状态是其左右两位的异或,数据左端点左侧与右端点右侧的状态假设为0,load信号是同步加载数据信号。
代码如下:
module top_module(
input clk,
input load,
input [511:0] data,
output [511:0] q );
wire [513:0] q1 ;
assign q1 ={1'b0 ,q ,1'b0};
always @(posedge clk) begin
if(load) begin
q <= data ;
end
else begin
q <= q1[513:2] ^ q1[511:0] ;
end
end
endmodule
Rule110
题目要求:同上题,只是这里没有告知Center's next state与Left、Center和Right之间的关系,需要自行推导。
代码如下:
module top_module(
input clk,
input load,
input [511:0] data,
output [511:0] q
);
// wire [513:0] q1 ;
//assign q1 ={1'b0 ,q ,1'b0};
always @(posedge clk) begin
if(load) begin
q <= data ;
end
else begin
q <= (((q[511:0] ^ {q[510:0], 1'b0}) & q[511:1]) | ((q[511:0] | {q[510:0], 1'b0}) & (~q[511:1]))); ;
end
end
endmodule