"IF" statements in a process do not work properly
Took this from allaboutfpga.com, you do not need "data" in the sensitivity list, and for synchronous reset, you do not need "reset" in the sensitivity list.

Asynchronous reset:

process(clock,Reset,data)
  if Reset = '1' then
    q &lt;= '0';
  elsif Rising_edge(clock) then
    q &lt;= data;
  end if;
end process;


Synchronous reset:

process(clock,Reset,data)
  if Rising_edge(clock) then
    if Reset = '0' then
      q &lt;= '0';
    else
      q &lt;= data;
    end if;
  end if;
end process;