module controller1(x,clk,rstn,y,z); input x; input clk; input rstn; output y; output z; parameter S0 = 4'b0000, S1 = 4'b0001, S2 = 4'b0010, S3 = 4'b0011, S4 = 4'b0100; reg [2:0] PRState, NXState; reg y; assign z = ~y; always @ (PRState) begin if (PRState == S4) y = 1'b1; else y = 1'b0; end always @ (posedge clk or negedge rstn) begin if (rstn == 1'b0) PRState = S0; else PRState = NXState; end always @ (PRState or x) begin case (PRState) S0 : if (x == 1'b0) NXState = S1; else NXState = S0; S1 : if (x == 1'b0) NXState = S2; else NXState = S1; S2 : if (x == 1'b1) NXState = S3; else NXState = S2; S3 : if (x == 1'b0) NXState = S4; else NXState = S3; S4 : NXState = S4; endcase end endmodule