https://vlsiweb.com/finite-state-machines-in-verilog/