Do not define states in a state machine with explicit values.  Unless the state bits explicitly map to output bits, it is almost always better to use an enumerated type for states.  It is more maintainable and allows the synthesis tools to figure state out the encoding which is optimal (and if it doesn't you can set an attribute to explicitly tell it how to encode if you use an enumerated type).  See InstructionAddressUnit.vhd for an example on how to define an enumerated type.  For encoding/decoding you always want to let the tools figure these things out.  A good comment that a coworker at Ixia once made to me was that you always want to write at the highest level possible where you still have enough control to specify that the code synthesizes to what you want.