I have a two process FSM in vhdl. The error the simulator return is
FATAL_ERROR: Iteration limit 10000 is reached. Possible zero delay oscillation detected where simulation time can not advance. Please check your source code. Note that the iteration limit can be changed using switch -maxdeltaid.
Form what I understand there is a combinational loop in the FIRE_PROCESS_COMBINATIONAL process but I am unable to spot it. I also know this combinational loop is in the FIRE_ROLL state but can't figure it out. any help would be appreciated. Thanks.
FIRE_PROCESS_COMBINATIONAL : process(fire_pr_state, wfg_pps_i, do_fire_s, rolling_s, sel_9914_s)
variable count_9914 : integer range 0 to NUM_9914-1 := NUM_9914-1;
begin
timer_fire_s <= 1;
sel_9914_s <= (others=>'1');
rolling_s <= '0';
case fire_pr_state is
when FIRE_RST =>
timer_fire_s <= fire_rst_delay;
fire_nx_state <= FIRE_WAIT;
when FIRE_WAIT =>
--timer_fire_s <= fire_roll_delay;
fire_nx_state <= FIRE_WAIT;
if rising_edge(wfg_pps_i) then
if (do_fire_s = '1') then
if (rolling_s = '0') then
fire_nx_state <= FIRE_ROLL;
end if;
end if;
end if;
when FIRE_ROLL =>
if (sel_9914_s(sel_9914_s'high)='0') then
fire_nx_state <= FIRE_WAIT;
sel_9914_s <= (others=>'1');
else
--timer_fire_s <= fire_roll_delay;
fire_nx_state <= FIRE_ROLL;
rolling_s <= '1';
if ((and sel_9914_s = '1')) then
sel_9914_s <= (sel_9914_s'low=>'0', others=>'1');
else
sel_9914_s <= sel_9914_s rol 1;
end if;
end if;
when others =>
fire_nx_state <= FIRE_WAIT;
end case;
end process FIRE_PROCESS_COMBINATIONAL;
FIRE_PROCESS_SEQUENTIAL : process(sys_clk_i, sys_rst_i)
variable count_fire1_v : delay_type := 0;
begin
if (sys_rst_i = '1') then
fire_pr_state <= FIRE_RST;
elsif rising_edge(sys_clk_i) then
count_fire1_v := count_fire1_v + 1;
if (count_fire1_v >= timer_fire_s) then
fire_pr_state <= fire_nx_state;
count_fire1_v := 0;
end if;
end if;
end process FIRE_PROCESS_SEQUENTIAL;


