调试VHDL Modelsim中的迭代限制错误

时间:2012-02-14 00:00:52

标签: vhdl modelsim

我在Modelsim上为d-flip-flop编写VHDL代码,当我尝试模拟它时出错:

  

错误:(vsim-3601)在400 ps时达到迭代限制。

我不确定这意味着什么,但我查看了很多错误的源代码,但没有成功。谁能猜出问题可能是什么?

6 个答案:

答案 0 :(得分:3)

此错误通常表示ModelSim陷入无限循环。在VHDL中,当信号放入灵敏度列表并且在此过程中更改此信号时,可能会发生这种情况。信号改变,触发过程,改变信号,再次触发过程,循环继续。

以下是导致无限循环的过程的简单示例:

PROCESS (count)

BEGIN

count <= not count;

END PROCESS;

答案 1 :(得分:2)

如果达到了迭代限制,则表示系统尚未稳定。最有可能的是:

a <= b;

--- and then later...

b <= a;

答案 2 :(得分:2)

我只是有一个类似的问题。

我修复它的方法仅仅是增加测试台的延迟。我将延迟时间从100ps更改为1ns,并已解决!因为FOR LOOP的延迟超过了PicoSeconds的范围。

答案 3 :(得分:1)

大多数人使用VHDL或任何其他HDL语言的一个问题是他们不明白这不是顺序代码。你在进程内部的所有事情都是并行发生的。 艾哈迈德的例子很好:

PROCESS (count)

BEGIN

count <= not count;

END PROCESS;

HDL模拟器尝试在每次模拟滴答后将计数值设置为“不计数”,并且更改将触发另一个滴答,因为计数值已更改并且一直持续直到它崩溃或给出你上面的问题。

要使HDL正常工作,您必须使用时钟形式或不用于合成的延迟来使用实际值延迟。

将上述代码更改为

PROCESS (count)
BEGIN
   count <= not count after 1 ns;
END PROCESS;

模拟将起作用,计数将每1 ns切换一次。

答案 4 :(得分:0)

您需要在代码和单步中添加断点,直到看到循环。 另一种技术,可能更高效,是一个很好的代码审查,仔细查看迭代和敏感性列表。

答案 5 :(得分:0)

如前所述,问题是信号没有稳定。虽然可能的问题是两个组合逻辑信号不断相互替换,但为了后人的缘故,还有其他一些我想强调的可能性。

正如Xilinx在Answer Record #19068中所记录的那样,它也可能是由一个改变其灵敏度列表中信号的过程引起的。

另一项检查最终解决了我的问题是确保您的模拟分辨率足够小。我的数量级太高,我的测试台上的时钟在一个模拟步骤中运行了太多次。