`default_nettype none module FSM( input logic a, output logic x, input logic clock, clear ); enum {S_A, S_B, S_C} currentState, nextState; always_ff @(posedge clock) if(clear) begin currentState <= S_A; end else begin currentState <= nextState; end always_comb begin nextState = currentState; unique case(currentState) S_A: nextState = a ? S_B : S_C; S_B: nextState = a ? S_A : S_B; S_C: nextState = S_A; endcase end always_comb begin x = 1'b0; unique case(currentState) S_A: x = ~a; S_B: x = 1'b1; S_C: x = 1'b0; endcase end endmodule