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.

What does #iteration limit reached mean in Modelsim?

Status
Not open for further replies.

paradbird

Newbie level 2
Joined
Apr 10, 2003
Messages
2
Helped
0
Reputation
0
Reaction score
0
Trophy points
1,281
Activity points
35
I always meet this error when I simulate in modelsim:
# Iteration limit reached. Possible zero delay oscillation. See the manual.
what this mean and how can I do ?
Thanks.
 

iteration limit reached at time modelsim

I haven't seen that error before but it sounds like you might have a feedback loop in some of your combinatorial logic. If there's an inverter in the loop somewhere you could be creating a ring oscillator.

Radix
 

zero-delay loop modelsim

Hi,

I got that error more than a year ago in a design but I can't remember the fix. :? , this is not bad news because it means that I fixed it somehow and it wasn't big deal.

I think I first tried to reduce the resolution of modelsim to ps to see if that was the problem because of a BlockRAM or some high-speed component. But I agree with radix it sounds like you have a combinational feedback, it could be because in one of your processes the variables in sensitivity (input) list may not coincide with the assigned (output) variables.

Doesn't the compiler tell you the line/component/something where the error is caused?

I would suggest you check your combinational processes/assignments

-Maestor
 
step by step execution in modelsim

paradbird said:
I always meet this error when I simulate in modelsim:
# Iteration limit reached. Possible zero delay oscillation. See the manual.
what this mean and how can I do ?
Thanks.

A VHDL process will restarts when it reaches the 'end process' statement.

If you have a sensitivity list 'process(sig1, sig2, ...)' this is OK, because it will do a

wait on sig1, sig2, ...

at the start of the process.

However if you have a process without sensitivity list that doesn't wait explicitly either, you generate an infinite loop at some absolute simulation time.

E.g.

process
begin
report "this process will loop indefinitely at" & time'image(now);
end process;

you'll get

this process will loop indefinitely at 0 ns
this process will loop indefinitely at 0 ns
this process will loop indefinitely at 0 ns
...

After retriggering a certain process several hundreds of time without seeing simulation time (0 ns) advance Modelsim will abort and show this indefinite loop.

You can avoid this by inserting a wait statement for the signals that you want to keep track of, by adding the sensitivity list (which does basically the same since a sensitivity list gets expanded to a wait statement on the first line of the process.
Or by waiting indefinitely if you want to 'end' the process

process
begin
report "this process will print just once and then block";
wait;
end process;

This problem can also occur by feedback loops where a process keeps on triggering itself or a circular chain of processes without advancing actual simulation time.

E.g.

(concurrent statement)
Clk <= not Clk;

(equivalent to process with sequential statement:
process(Clk)
begin
Clk<=not Clk;
end process;
)

will loop indefinitely at 0 ns and produce the Modelsim error because each update of Clk retriggers the process at the same simulation time.

OK would be:

Clk <= not Clk after 1 ns;

because there there is only 1 execution of the process per simulation time step (1 ns).

Hope this helps.
 

Status
Not open for further replies.

Part and Inventory Search

Welcome to EDABoard.com

Sponsor

Back
Top