这道题就是识别一个101的序列,但是序列可以重叠,比如10101这样的序列输出11。
这道题的坑点在于识别101111…101这样的序列,中间的1的个数是不一定的。这种就要让状态机一直停止在识别到一个1的状态就可以了,这样后面来个0也能马上转变状态。
下面是我的状态图:
下面是根据上面的状态转移图编写的代码
module top_module (
input clk,
input aresetn, // Asynchronous active-low reset
input x,
output z );
parameter START = 2'd0,MID = 2'd1,END = 2'd2;
reg [1:0] state,next_state;
always@(posedge clk or negedge aresetn)begin
if(!aresetn)begin
state <= START;
end
else begin
state <= next_state;
end
end
reg flag;
always@(*)begin
case(state)
START:begin
next_state = x?MID:START;
flag = 0;
end
MID:begin
next_state = x?MID:END;
flag = 0;
end
END:begin
next_state = x?MID:START;
if(x)begin
flag = 1;
end
else begin
flag = 0;
end
end
endcase
end
assign z = flag;
endmodule