blob: c9ee9ee23076a5ea59a6494571ccdbc283cbcd7d [file] [log] [blame] [edit]
`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