Programmable Devices
CPLDs, FPGAs, SoC FPGAs, Configuration, and Transceivers
20644 Discussions

modelsim vsim-3601 on counter

Altera_Forum
Honored Contributor II
3,722 Views

Hi folks- 

The following code returns in modelsim a 

# ** Error: (vsim-3601) Iteration limit reached at time 0 ps. 

when I run the simulation. 

 

However, when I step through the program, I see the counter working as intended. I know 3601 often comes when there's trouble in a loop, but I'm having trouble locking down where the problem is, and confused as to why the simulation runs when single-stepped through, but otherwise fails. 

 

Any thoughts would be very helpful. Thanks! 

 

Michael  

 

entity bcdcounter is 

port ( 

clk : in std_logic;  

reset : in std_logic;  

count : out std_logic_vector(3 downto 0); 

fullcount : out std_logic 

); 

end bcdcounter; 

 

architecture rtl of bcdcounter is 

signal count_s : std_logic_vector(3 downto 0); 

begin 

count <= count_s; 

bcdcount: process(clk,reset)  

begin 

if reset='1' then 

count_s <= "0000"; 

fullcount <= '0'; 

elsif (rising_edge(clk)) then 

if count_s = "1001" then 

count_s <= "0000"; 

fullcount <='1'; 

else 

count_s <= count_s +"1"; 

fullcount <='0'; 

end if; 

end if; 

end process; 

end rtl;
0 Kudos
5 Replies
Altera_Forum
Honored Contributor II
1,177 Views

Couldn't the problem come from the testbench? I don't see anything wrong in your code...

0 Kudos
Altera_Forum
Honored Contributor II
1,177 Views

This behaviour happens with the tesbench (which just sets the clock and hits the reset at the beginning) and simply through forcing the clock/reset directly. 

 

However, perhaps this piece of the puzzle will mean something...when I single step, I do not get this error, and the counter increments, pulses the fullcount, and resets itself fine. Doesn't get stuck in any loop. But running it for any time results in the iteration error. At some (seemingly random) point, the wave stops drawing, but I still see the signals incrementing as they should. 

 

Thanks for your thoughts/help, 

Michael
0 Kudos
Altera_Forum
Honored Contributor II
1,177 Views

I saved your code in a file counter.vhd, adding the correct library calls. I then created this test bench, saved as countertb.vhd:library ieee; use ieee.std_logic_1164.all; entity TestBench is end entity; architecture bench of TestBench is component bcdcounter port ( clk : in std_logic; reset : in std_logic; count : out std_logic_vector(3 downto 0); fullcount : out std_logic ); end component; signal clk : std_logic; signal reset : std_logic; signal count : std_logic_vector(3 downto 0); signal fullcount : std_logic; signal stoptest : std_logic; begin UUT : bcdcounter port map (clk,reset,count,fullcount); ClkGen : process begin while stoptest /= '1' loop clk <= '1'; wait for 5 ns; clk <= '0'; wait for 5 ns; end loop; wait; end process; SigGen : process begin reset <= '1'; wait for 25 ns; reset <= '0'; wait until fullcount = '1'; wait for 100 ns; stoptest <= '1'; wait; end process; end architecture; And used this compile script in Modelsim:vlib lib vmap work lib vcom -O0 counter.vhd vcom -O0 countertb.vhd vsim -novopt TestBench add wave /* run -all wave zoomfullAnd it runs fine. So the problem doesn't come from your code.

0 Kudos
Altera_Forum
Honored Contributor II
1,177 Views

wangahrah - you're right look through your loops in your testbench. This sort of thing usually happens when you get a self referencing loop with no time delay in it. 

 

Taking Daixiwen's testbench, another way of writing the first process would be: 

 

clk <= not clk after 5 ns when stoptest /= '1'; 

 

(provided clk has an initial value in its declaration). 

 

if you mistyped it e.g.: 

 

clk <= not clk when stoptest /= '1'; 

 

then the concurrent statement would keep getting called to invert the clk without ever advancing simulation time (and you'd probably get the same error message that you got).
0 Kudos
Altera_Forum
Honored Contributor II
1,177 Views

Update- 

I've checked with some other folks at my location...everything runs fine for them. 

 

This appears to be a problem with my Altera Modelsim. All the simulations run fine for other people, running the same version, etc etc. 

 

I've tried reinstalling the Quartus suite + modelsim, but still run into the same problems, using their ini files and settings. 

 

If anyone has any other ideas, let me know. Otherwise, many thanks for your help and looking over the code for me. 

 

Michael
0 Kudos
Reply