Я провожу несколько тестов чипа через Verilog и столкнулся с небольшой проблемой, когда немного почесал голову. Я проверяю охват кода, чтобы убедиться, что все состояния происходят при рандомизированном тестировании всех параметров и т. д.
При оценке двух значений следующего типа:
case(state_vector)
STATE1:
...
STATE2:
if(!var1 && var2)
state_vector = STATE1;
else
state_vector = STATE2;
STATE3:
...
Теперь проблема заключается в том, что при анализе покрытия оператор после оператора else никогда не достигается, а это означает, что оператор if всегда оценивается как истина.
Первоначально я предполагал, что значения var1 и var2 равны 0 и 1 соответственно. После двойной проверки перед тем, как закончить свой отчет, я заметил, что это предположение было неверным, поскольку анализ формы сигнала показывает, что var1 всегда равна 1, а var2 всегда равна 0 на протяжении всего моделирования.
Теперь я проверю, чтобы убедиться, что значения меняются так, как я хочу, но мне любопытно, как это может произойти в Verilog. По сути, я соскальзываю в состояние, потому что оператор if оценивается как true для бесконечно малой единицы времени.
Любые идеи о том, как лучше оценить эту проблему? Я хотел бы убедиться, что другая функция не меняет мой state_vector в то же время, когда я пытаюсь проверить свое текущее состояние.
state_vector
не задается другой строкой кода и не пропускается. - person Greg   schedule 05.06.2013