Suponiendo que esté seguro de que necesita esto, su código probablemente se parecería a esto:
p_main: process(clk, reset_n)
type flowstate is (initial, gathering);
variable r_state : flowstate;
variable r_first_val : integer range 0 to c_max;
variable r_second_val : integer range 0 to c_max;
begin
if reset_n = '0' then
r_state := initial;
r_first_val := 0;
r_second_val := 0;
first_val_output_signal <= 0;
second_val_output_signal <= 0;
elsif rising_edge(clk) then
-- determine if the input is valid, depends on protocol
if inputsvalid then
case r_state is
when initial =>
r_first_val := received_input;
r_second_val := received_input;
r_state := gathering;
when gathering =>
r_second_val := received_input;
-- determine if the gathering is done, depends on protocol
if finished_gathering then
r_state := initial;
-- go back to initial state
first_val_output_signal <= r_first_val;
second_val_output_signal <= r_second_val;
end if;
end case;
end if;
end if;
end process;
Como puede ver, mucho dependería del protocolo real que utilicen los datos. Usted menciona un autobús, pero no qué tipo de autobús. La determinación de qué datos son válidos y cómo indicar a otros bloques / procesos que actualizó las señales de salida depende de su aplicación.