asychronous finite state machine , minimization and encode states
Write your FSM in correct Verilog, with proper 3 always@(...) implementation. Compile the code with all available optimizations. Get result. That's it.