Что бы я сделал, это объявил бы sec как переменную в процессе, поскольку переменные обновляются немедленно:
process(s_clk, s_load, s_enable)
variable v_sec : integer range 0 to 60;
begin
if reset = '1' then
v_sec := 0;
s_sec <= (others => '0');
s_wrap <= '0';
elsif rising_edge(s_clk) then
s_output <= std_logic_vector(to_unsigned(v_sec,6));
if s_enable = '1' then
v_sec := v_sec +1;
if v_sec = 60 then
v_sec:= 0;
s_wrap <= '1';
else
s_wrap <= '0';
end if;
else
s_wrap <= '0';
end if;
end if;
Если вы смоделируете это в modelsim, sec будет идти 0,1,2 ,.... 58,59,0,1,2, и s_wrap будет равняться 1 каждый раз, когда sec равен 0, за исключением первого раза, когда условие сброса устанавливает его равным 0.