题解 | #状态机-重叠序列检测#
状态机-重叠序列检测
https://www.nowcoder.com/practice/10be91c03f5a412cb26f67dbd24020a9
写成了米利机,为了和答案对上,最后增加了一级寄存器输出。
`timescale 1ns/1ns
module sequence_test2(
input wire clk ,
input wire rst ,
input wire data ,
output reg flag
);
//*************code***********//
parameter IDEL=0, S0=1, S1=2, S2=3;
reg [1:0] cstate, nstate;
always@(posedge clk or negedge rst) begin
if(!rst) begin
cstate <= IDEL;
end
else begin
cstate <= nstate;
end
end
always@(*) begin
case(cstate)
IDEL: nstate = data?S0:IDEL;
S0: nstate = data?S0:S1;
S1: nstate = data?S2:IDEL;
S2: nstate = data?S0:S1;
default:nstate = IDEL;
endcase
end
reg flag_reg;
always@(posedge clk or negedge rst) begin
if(!rst) begin
{flag,flag_reg} <= 2'b00;
end
else begin
{flag,flag_reg} <= {flag_reg,(cstate==S2) & data};
end
end
//*************code***********//
endmodule

