Guardaría el estado anterior al mismo tiempo que guarda su estado actual. Por ejemplo, defina dos señales del mismo tipo de máquina de estado:
type states is (idle, state1, ... other states);
signal current_state : state;
signal previous_state : state;
En la máquina de tu estado, cada vez que current_state
cambie a un estado diferente, establece previous_state
en current_state
.
Esto hace que previous state
siempre esté un paso por detrás de current state
.
Luego, en tu estado inicial, solo establece current_state
en previous_state
cuando quieras volver a donde estabas.
example_state_machine : process (clk, rst)
begin
if rst = '1' then
current_state <= idle;
previous_state <= state1; -- set this to the state you want to go to after first idle
elsif clk'event and clk = '1' then -- rising clock edge
case current is
when idle =>
if (something = '1') then
current_state <= previous_state;
previous_state <= current_state;
else
current_state <= idle;
end if;
when state1 =>
if (something = '1') then
current_state <= state2;
previous_state <= current_state;
elsif something_else = '1' then
current_state <= idle;
previous_state <= current_state;
else
current_state <= state1;
end if;
-- ... rest of states
when others => null;
end case;
end if;
end process;