En la práctica, nunca usarás explícitamente una codificación activa. Más bien, debe diseñar su archivo VHDL de modo que utilice enumeración en lugar de estados explícitos. Esto permite que las herramientas de síntesis que utiliza para generar su diseño produzcan su propia codificación preferida. En un CPLD, esto probablemente sería una codificación densa, porque las puertas son más abundantes que las chanclas. En un FPGA, este probablemente sería uno caliente, porque las chanclas son más abundantes. En otros casos aleatorios, el sintetizador podría pensar que la codificación gris, o la codificación secuencial, podría ser mejor.
Sin embargo, para responder a su pregunta, ¿cómo realiza esto una rotación? (note que estoy usando su estado original de 3 bits, aunque su pregunta se refiere a estados de 4 bits)
Considere el estado="001". Por lo tanto, el estado (1 abajo a 0)="01". Además, el estado (2) = '0'.
Por lo tanto, cuando haces el estado < = estado (1 abajo a 0) & estado (2), estás haciendo estado <="01" & '0'. Esto ahora significa estado="010"; una rotación a la izquierda por un bit.
En un lenguaje sencillo, para rotar un vector de n bits a la izquierda en un bit, tome los más bajos n-1 bits y concatene el MSB en el lado derecho. En este ejemplo, toma los bits de estado (1 a 0) y el estado de concatenación (2) en el lado derecho.
En contraste, una rotación a la derecha se representaría como estado < = estado (0) & Estado (2 abajo a 1). Esto toma el LSB, y luego concatena los bits superior n-1 en el lado derecho de este. Para state="001", esta rotación a la derecha sería como state < = '1' & "00". Esto ahora significa estado="100".