Suponiendo que no estás haciendo el método "teóricamente puro" de programar un FSM en VHDL, haz algo simple como esto:
fsmCount: process(clk, reset)
begin
if reset = '1' then
--Reset code here
elsif(clk'event and clk = '1') then --on the rising edge of the clock
case state is
when s0 =>
--VHDL for s0
when s1 =>
--VHDL for s0
when s2 =>
s_counter <= s_counter + 1; --increment a counting signal
if s_counter = CLOCK_DELAY_15_CONSTANT then
--do what you want here when you hit your delay
s_counter <= '0';
else
state <= s2; --if your delay isn't reached, stay in this state
end if;
end case;
end if;
end process fsmCount;
Solo estoy respondiendo al estado: parte de s2, te dejaré manejar el resto de la lógica que necesitas en el resto del FSM.
También deberá declarar algunas señales y constantes en la sección de arquitectura:
La variable "estado" es una enumeración de los diferentes estados que necesita (es decir, s0, s1, s2).
Entonces "s_counter" es una señal de algunos bits de ancho que declara.
"CLOCK_DELAY_15_CONSTANT" es un valor constante que usted decide que es necesario para su retraso deseado. Lo que parece que son solo 15 ciclos de reloj, por lo que solo son 15 en ese caso.