- //检测10010
- module test(
- input clk ,
- input rst_n ,
- input din ,
- output flag
- );
-
- parameter IDLE =4'd0;
- parameter S1 =4'd1;
- parameter S2 =4'd2;
- parameter S3 =4'd3;
- parameter S4 =4'd4;
- parameter S5 =4'd5;
-
- reg [3:0] state,next_state;
- always@(posedge clk or negedge rst_n)begin
- if(!rst_n)begin
- state <= IDLE;
- end
- else begin
- state <= next_state;
- end
- end
-
- always@(*)begin
- next_state = IDLE;
- case(state)
- IDLE:
- if(din)
- next_state = S1;
- else
- next_state = IDLE;
-
- S1:
- if(din)
- next_state = S1;
- else
- next_state = S2;
-
- S2:
- if(din)
- next_state = S1;
- else
- next_state = S3;
-
- S3:
- if(din)
- next_state = S4;
- else
- next_state = IDLE;
-
- S4:
- if(din)
- next_state = S1;
- else
- next_state = S5;
-
- S5:
- if(din)
- next_state = S1;
- else
- next_state = S3;
-
- default:next_state = IDLE;
- endcase
- end
-
- assign flag = (state == S5)?1'b1:1'b0;
-
- endmodule
|