Отладка Ошибка предела итерации в VHDL Modelsim - PullRequest
2 голосов
/ 14 февраля 2012

Я пишу VHDL-код для d-триггера на Modelsim и получаю сообщение об ошибке при попытке смоделировать его:

Ошибка: (vsim-3601) Достигнут предел итерации ввремя 400 пс.

Я не уверен, что это значит, но я просмотрел большую часть моего исходного кода на наличие ошибок, но безуспешно.Кто-нибудь может догадаться, в чем может быть проблема?

Ответы [ 6 ]

3 голосов
/ 14 мая 2013

Эта ошибка обычно указывает на то, что ModelSim застрял в бесконечном цикле. В VHDL это может произойти, когда сигнал помещен в список чувствительности, и этот сигнал изменяется в процессе. Сигнал изменяется, вызывая процесс, который изменяет сигнал, который снова запускает процесс, и цикл продолжается.

Ниже приведен простой пример процесса, который вызывает бесконечный цикл:

PROCESS (count)

BEGIN

count <= not count;

END PROCESS;
2 голосов
/ 04 апреля 2019

У меня просто была похожая проблема.

То, как я ее исправил, было просто увеличить задержки в тестовом стенде.Я изменил свою задержку с 100ps на 1ns, и она была исправлена!потому что задержка FOR LOOP больше, чем в диапазоне PicoSeconds.

2 голосов
/ 14 февраля 2012

Если ваш предел итерации достигнут, это означает, что система не стабилизировалась. Скорее всего это что-то вроде:

a <= b;</p> <p>--- and then later...</p> <p>b <= a;

1 голос
/ 16 июля 2013

Одна проблема, с которой большинство людей сталкиваются с VHDL или любыми другими языками HDL, заключается в том, что они не понимают, что это не последовательный код. ВСЕ, что у вас внутри процесса, происходит параллельно. Хороший пример от Ахмеда:

PROCESS (count)

BEGIN

count <= not count;

END PROCESS;

Симулятор HDL пытается установить значение счетчика на «не считать» после каждого такта симуляции, и изменение вызовет другой тик, так как значение счетчика изменяется, и оно продолжается до тех пор, пока не произойдет сбой или сбой. Вы вышеупомянутая проблема.

Чтобы HDL работал должным образом, вы должны использовать задержки, либо в виде часов, либо, если они не для синтеза, чтобы использовать действительную задержку.

Изменив вышеуказанный код на

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

Имитация будет работать, и счетчик будет переключаться каждые 1 нс.

0 голосов
/ 22 февраля 2013

Как указано, проблема в том, что сигналы не стабилизируются.Хотя вероятная проблема заключается в двух комбинационных логических сигналах, непрерывно заменяющих друг друга, есть еще несколько возможностей, которые я хочу выделить для потомков.

Как описано Xilinx в Запись об ответе # 19068 это также может быть вызвано процессом, который изменяет сигнал в списке чувствительности.

Еще одна проверка, которая окончательно решила мою проблему, заключалась в том, чтобы убедиться, что разрешение вашего моделирования достаточно мало.У меня был слишком высокий порядок, и часы на моем испытательном стенде работали слишком много раз за один этап моделирования.

0 голосов
/ 07 июня 2012

Вам нужно добавить точки останова в вашем коде и один шаг, пока вы не увидите цикл.Еще один прием, возможно, более продуктивный, - это хороший обзор кода с тщательным рассмотрением итераций и списков чувствительности.

...