Анализ покрытия в Verilog — 0&&0?

Я провожу несколько тестов чипа через 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 в то же время, когда я пытаюсь проверить свое текущее состояние.


person Signus    schedule 04.06.2013    source источник
comment
Это синхронный дизайн?   -  person Oliver Charlesworth    schedule 05.06.2013
comment
Убедитесь, что state_vector не задается другой строкой кода и не пропускается.   -  person Greg    schedule 05.06.2013
comment
@Greg Сейчас в процессе. Попытка изолировать, когда состояние изменяется. Я должен был отметить, что этот раздел кода находится в моем STATE2. Я также проверяю другой набор тестов.   -  person Signus    schedule 05.06.2013
comment
Возможна проблема с X? Вы уверены, что var1 и var2 «всегда» равны 0,1 (возможно, время 0, когда этот блок срабатывает до инициализации var1/2?) Что запускает этот код? Как часто?   -  person EML    schedule 05.06.2013
comment
@toolic, да, я просмотрел подробную документацию от Cadence, и один из способов отладки того покрытия, которое я показываю (вместе с тем, что Грег опубликовал ниже), состоит в том, чтобы установить прагмы для определенных состояний, если я считаю, что инструмент покрытия отображает данные, которые я не хотите или что я думаю, неточным.   -  person Signus    schedule 05.06.2013


Ответы (1)


Быстрый и грязный способ - разбросать $display("%t %m got here",$time); вокруг рассматриваемого кода и убедиться, что есть метки для начальных и конечных блоков, например:

begin : meaningful_label
  $display("%t %m got here",$time);
  ... code ...
  $display("%t %m got here too",$time);
end

Если оператор(ы) отображения вызывается, то state_vector присваивается где-то еще. В противном случае что-то что-то мешает возбуждению кода.

Для дальнейшей отладки:

  • Not display message:
    • add more display messages to higher levels.
  • Displaying messages:
    • Some waveform viewers have active drivers tracing. If your viewer does not have this feature, then add messages around all other assigning statements and watch for time-stamp when the condition should be true.
person Greg    schedule 05.06.2013
comment
Спасибо. Однозначно быстро и грязно. Я буду использовать аналогичный метод, так как код, который я анализирую, производит слишком много данных, чтобы я мог поймать отображаемое сообщение или приостановить любую операцию. Поэтому я воспользуюсь еще одним быстрым и грязным методом, чтобы он отправил мне электронное письмо с сервера (через команды оболочки), чтобы сообщить мне, когда он достигает этих состояний. Это довольно приятно, потому что мне не нужно искать результат. - person Signus; 05.06.2013
comment
@Signus Если сообщения заполняют экран, вы всегда можете добавить немного $stop(); после некоторых из $display, чтобы немного замедлить работу. Опять же, быстро и грязно. Звуки выглядят так, что в вашем инструменте-симуляторе есть функция, помогающая в отладке, это всегда плюс. - person Greg; 06.06.2013