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

调试VHDL Modelsim中的迭代限制错误,vhdl,modelsim,Vhdl,Modelsim,我正在为Modelsim上的d触发器编写VHDL代码,当我尝试模拟它时,出现了一个错误: 错误:(vsim-3601)在400 ps时达到迭代限制 我不确定这意味着什么,但我已经查看了我的大部分源代码,以找出错误,但没有成功。有人能猜出问题出在哪里吗?如果你的迭代达到了极限,那意味着系统还没有稳定下来。很可能是这样的: a您需要在代码和单步中添加断点,直到看到循环为止。 另一种可能更有效的方法是仔细查看迭代和敏感度列表,进行良好的代码检查。如前所述,问题在于信号没有稳定下来。虽然可能的问题是两

我正在为Modelsim上的d触发器编写VHDL代码,当我尝试模拟它时,出现了一个错误:

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


我不确定这意味着什么,但我已经查看了我的大部分源代码,以找出错误,但没有成功。有人能猜出问题出在哪里吗?

如果你的迭代达到了极限,那意味着系统还没有稳定下来。很可能是这样的:



a您需要在代码和单步中添加断点,直到看到循环为止。
另一种可能更有效的方法是仔细查看迭代和敏感度列表,进行良好的代码检查。

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

正如Xilinx在文章中所记录的,它也可能是由改变其灵敏度列表中的信号的过程引起的


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

此错误通常表明ModelSim卡在无限循环中。在VHDL中,当一个信号被放置在灵敏度列表中并且该信号在过程中发生变化时,就会发生这种情况。信号改变,触发过程,过程改变信号,信号再次触发过程,循环继续

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

PROCESS (count)

BEGIN

count <= not count;

END PROCESS;
进程(计数)
开始

count大多数人在使用VHDL或其他HDL语言时遇到的一个问题是,他们不理解这不是顺序代码。流程中的所有内容都是并行发生的。 艾哈迈德的例子很好:

PROCESS (count)

BEGIN

count <= not count;

END PROCESS;
进程(计数)
开始

count我也有类似的问题


我修复它的方法只是增加测试台的延迟。我将延迟时间从
100ps
更改为
1ns
,并且它是固定的!因为
循环
延迟大于皮秒范围

我认为你简化的例子太简单了,不会引起问题。更像是
a,如果你发布一些代码就好了。如果你的模拟器计时分辨率大于或等于你的时钟周期,这可能是一个大问题(搜索modelsim.ini中的“分辨率”)。在我的例子中,我的modelsim.ini有“Resolution=ns”,所以即使我的1ns时钟也太快了,导致它永远卡住,增量周期增加,但从未超过0ns。
PROCESS (count)
BEGIN
   count <= not count after 1 ns;
END PROCESS;