Vamos a ver:
En los procesos, lo mejor es poner en la lista de sensibilidad, es decir, en los paréntesis, una señal de reloj y un reset UNICA y EXCLUSIVAMENTE. Lo digo, porque como lo tienes puesto, te va a entrar en el proceso cada vez que haya un flaco en cualquiera de las 3 señales tanto de subida como de bajada.
Lo ideal y más recomendable es esto:
Codigo:
NOMBRE_DEL_PROCESO : process(clk, rst) is
begin
if (rst="1") then
reg <= 0; -- SE ponen todas las condiciones iniciales aqui
elsif (clk"event and clk="1") then -- Cuando haya un flanco ascendente de reloj se ejecutará lo que viene a continuación
-- Aqui ya pones todos los if que quieras, siempre que no se solapen
end if;
end process NOMBRE_DEL_PROCESO;
Con esto, te evitarás muchos problemas y dolores de cabeza y harás un sistema síncrono, fiable y que se comporte como quieras.