IMO, в большинстве случаев бесконечные петли происходят с генерацией часов. Особенно, если вы настроили их для генерации переменных частот. Например, если у Вас есть часы настроить так:
`timescale 1ns/1ns
real period;
reg clk;
initial begin
period = 5.0;
clk = 1'b0;
forever begin
#(period/2) clk = !clk;
end
end
Если изменить period
то бесконечный цикл может произойти, если вы измените period
0.0 случайно.
Даже сложнее, иногда period/2
может падать за пределы вашей временной шкалы. Например, если вы установили period = 1.0
, то period/2
равно 0.5, а так как ваша точность времени равна 1ns, это будет привязано к 0, вызывая бесконечные циклы. Если я подозреваю это, я обычно ставил охранника на время, прежде чем я задерживаюсь (опять же, осторожно с точностью ...).
...
half_period_ns = period_ns/2.0;
if(half_period_ns == 0)
half_period_ns = 1;
#(half_period_ns) clk = !clk;
...
Другое дело, нужно сделать, это запустить моделирование в интерактивном режиме, так и в случайном порядке Ctrl-C, введите команду, чтобы задать симулятор, где это в (имитатор конкретно, к сожалению, но в Incisive это where
я думаю) , и возобновить сим. Сделайте это несколько раз, и вы сможете получить представление о том, что код занимает все время симулятора.
Полезно знать эту технологию, кроме того, используя функцию шага в коммерческих симуляторах. –
Спасибо за ответ, но время моделирования для меня не продвигается. После последнего #
Вы смотрите на файл VCD, пока симуляция все еще работает? – toolic