`timescale 1ns/1ns module sequence_test2( input wire clk , input wire rst , input wire data , output reg flag ); //*************code***********// //采用摩尔型状态机状态机 输出只和状态有关 这时就能方便检测重叠序列。 上一题可以采用米勒型状态机 reg [4:0] cur_state ; reg [4:0] nex_state ; localparam S0 = 5'b00001 , S1 = 5'b00010 , S2 = 5'b00100 , S3 = 5'b01000 , S4 = 5'b10000 ; always@(posedge clk or negedge rst)begin if(!rst) cur_state <= S0 ; else cur_state <= nex_state ; end always@(*)begin case(cur_state) S0 : nex_state = (data == 1)? S1 : S0 ; S1 : nex_state = (data == 0)? S2 : S1 ; S2 : nex_state = (data == 1)? S3 : S0 ; S3 : nex_state = (data == 1)? S4 : S2 ; S4 : nex_state = (data == 1)? S1 : S2 ; default : nex_state = S0 ; endcase end always@(posedge clk or negedge rst)begin if(!rst) flag <= 1'b0 ; else begin case(cur_state) S4: flag <= 1'b1 ; default:flag <= 1'b0 ; endcase end end //*************code***********// endmodule