Continue to Site

Welcome to EDAboard.com

Welcome to our site! EDAboard.com is an international Electronics Discussion Forum focused on EDA software, circuits, schematics, books, theory, papers, asic, pld, 8051, DSP, Network, RF, Analog Design, PCB, Service Manuals... and a whole lot more! To participate you need to register. Registration is free. Click here to register now.

Modelsim error ** Error: (vsim-3601) Iteration limit reached at time x us.

Status
Not open for further replies.

gongdori

Full Member level 2
Joined
Mar 7, 2012
Messages
133
Helped
21
Reputation
42
Reaction score
19
Trophy points
1,298
Activity points
2,035
Hi all,

I am getting a modelSim error from post translate simulation. The error says that it reached the max iteration during the simulation.
This error does not come out in the behavioral simulation, and persist even if I increase the max iteration value.
It seemed that there was a loop in the VITALBehavior process of X_LUT3, but I don't understand why.
Below is the process
Code:
  VITALBehavior           : process (ADR0_ipd, ADR1_ipd, ADR2_ipd)
    variable O_zd         : std_ulogic;
    variable O_GlitchData : VitalGlitchDataType;
    variable I_reg    : std_logic_vector(2 downto 0);
  begin

    I_reg := To_StdLogicVector(ADR2_ipd & ADR1_ipd & ADR0_ipd);

    if ((ADR2_ipd xor ADR1_ipd xor ADR0_ipd) = '1' or 
        (ADR2_ipd xor ADR1_ipd xor ADR0_ipd) = '0') then
       O_zd := INIT_reg(SLV_TO_INT(I_reg));
    else 
       O_zd :=  lut4_mux4 (('0' & '0' & lut4_mux4 ( INIT_reg(7 downto 4), I_reg(1 downto 0)) &
                lut4_mux4 ( INIT_reg(3 downto 0), I_reg(1 downto 0))), ('0' & I_reg(2)));
    end if;

    VitalPathDelay01 (
      OutSignal            => O,
      GlitchData           => O_GlitchData,
      OutSignalName        => "O",
      OutTemp              => O_zd,
      Paths                => ( 0 => (ADR0_ipd'last_event, tpd_ADR0_O, true),
                                1         => (ADR1_ipd'last_event, tpd_ADR1_O, true),
                                2         => (ADR2_ipd'last_event, tpd_ADR2_O, true)),
      Mode                 => VitalTransport,
      Xon                  => Xon,
      MsgOn                => MsgOn,
      MsgSeverity          => warning);
  end process;

It looks that what's modified in this process is O_zd. However, the process is called again and again. I don't see where the signals on the sensitivity list are modified...
Does anyone have any clue?
Thanks,

Gongdori
 

My code is as simple as this:

generate
genvar i;
for ( i = 0; i < WIDTH; i++) begin

MUX4 #(.INIT(16'hABCD)) mux (
.I0(Z_TMP),
.I1(A),
.I2(IN),
.I3(1'b0),
.O(Z_TMP)
);
end
endgenerate


I have a similar issue:

# ** Error: (vsim-3601) Iteration limit reached at time 21845 ns.
# Can't find the loop!!!

For me, there's a "can't find the loop" too. I wonder what it means.
 

INIT_reg is missing from the sensitivity list, which is probably whats causing it to pass behavioural simulation.

Also check you havent got a combinatorial loop with any of the other signals.
 

INIT_reg is missing from the sensitivity list, which is probably whats causing it to pass behavioural simulation.

Also check you havent got a combinatorial loop with any of the other signals.

Thanks for your comment. INIT_reg is a function, not a signal. All inputs of that function are on the sensitivity list. If a signal which should be in the sensitivity list is not there, it should not cause infinite loop, I think...
 

The synthesisor ignores the sensitivity list and just generates the logic as per the code in the process. Hence you can easily have a simulation/synthesis missmatch if you miss some signals from the sensitivity list.
 

Status
Not open for further replies.

Part and Inventory Search

Welcome to EDABoard.com

Sponsor

Back
Top