Могу ли я записать выходные данные симулятора на консоль в моем тестовом стенде?

У меня есть тестовый стенд для тестирования моего устройства VHDL (DUT), но часть вывода отладки DUT - это сообщение ASSERT / REPORT на консоль, которое я хотел бы проверить на правильность, но я не могу изменить DUT. Единственный способ, который я могу придумать, - это пост-обработка выходного файла журнала.

Есть ли способ записать вывод консоли в тестовом стенде, чтобы я мог напрямую проверить вывод DUT?

Вывод записывается в STDOUT и STDERR, поэтому вы можете подключить к нему любую другую программу, например, трубка. Вы также можете использовать предопределенные фреймворки, такие как VUnit, которые сделают все это за вас.

Paebbels 31.10.2018 14:24

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

Tricky 31.10.2018 14:44

Не могли бы вы немного описать среду своей цепочки инструментов? Кто такой симулятор и есть ли ограничения на ревизию VHDL? На ум пришел также Vunit, учитывая ваше ограничение не изменять DUT. Вместо этого полагаться на интерфейс процедурного уровня для генерации обратных вызовов и предоставления доступа к информационной модели проекта. Вы также можете описать, для чего вы бы использовали «правильность» утверждения утверждения в своей тестовой среде.

user1155120 01.11.2018 00:29

Спасибо за ответы. Я уже использую Vunit, но это будет пост-обработка файлов журнала в Python, что является решением на данный момент, но я пытался найти другое. Если я недостаточно прояснил, утверждения генерируются DUT и не могут быть изменены. Я использую Active-HDL, VHDL2008.

Edwin Field 01.11.2018 09:13

Я не знаю решения для этого, но если вам разрешили изменить исходные утверждения и отчеты на те, которые предоставлены VUnit, вы также можете использовать поддержку имитации VUnit для проверки вывода. Таким образом вы избегаете проверки файла журнала, который имеет формат, специфичный для симулятора. См. vunit.github.io/logging/user_guide.html для получения дополнительной информации.

lasplund 20.11.2018 09:44

Другой подход - использовать поддержку предварительной обработки VUnit для замены утверждений и отчетов на лету. При настройке тестовой среды VUnit для рабочей группы VHDL я использовал это, чтобы удалить некоторые странности в стандартных библиотеках IEEE, которые мешали надлежащему тестированию. Исходный и выпущенный код не изменяется навсегда, а только временно при тестировании. Не идеальный, но, возможно, приемлемый компромисс.

lasplund 20.11.2018 10:19
3
6
482
1

Ответы 1

Я делаю это как часть тестового стенда. Однако вместо Assert я использую оповещения, журнал и печать OSVVM. OSVVM находится как на osvvm.org, так и на github.

Вместо Assert я использую AffirmIf для самопроверки / проверки результатов. Я использую AlertIf для проверки параметров.

Шаг 1 - получить OSVVM. Получив код, скомпилируйте его с помощью сценария. В Mentor или Aldec запустите сценарий, выполнив:

vlib osvvm
vmap osvvm osvvm
do $PATH_TO_OSVVM/osvvm.do $PATH_TO_OSVVM

Используйте VHDL-2008 и включите всю OSVVM в свою программу, выполнив следующие действия:

library osvvm;
  context osvvm.OsvvmContext;

Тогда, а не:

assert Data /= expected report "..." severity error;

Делать:

AffirmIf(Data = Expected, "...") ; 

Оба assert и AffirmIf / AlertIf печатают. Однако преимущество AffirmIf / AlertIf заключается в том, что он внутренне ведет подсчет ошибок, и вы можете получить неудачный проход в конце теста, выполнив следующие действия:

ReportAlerts;

Следующее преимущество OSVVM AffirmIf / AlertIf / Log / Print заключается в том, что если вы хотите, чтобы результаты были в файле, вы просто делаете:

TranscriptOpen("./results/Test1.txt");

Если вы хотите одновременно печатать на экран и в файл, также выполните следующие действия:

SetTranscriptMirror(TRUE);

Это должно помочь вам начать. Остальное я оставлю руководству пользователя. Начните с просмотра руководства пользователя пакета AlertLog и руководства пользователя пакета стенограммы.

Не могли бы вы подробнее рассказать о том, как OSVVM можно использовать с ограничением OP, что он не может изменять тестируемое устройство? Это не ясно из списка возможностей OSVVM, документация, а также нет сообщений с применимыми заголовками, явно заметных в OSVVM форум.

user1155120 01.11.2018 00:14

@ user1155120 Где его утверждения? В тестовом стенде или в RTL-коде. Непонятно в посте. Так как они обычно присутствуют в тестовой среде, я предположил, что это то, о чем я догадывался. OTOH, допустим, я ошибаюсь. Возможно, меньшим из зол будет замена утверждений в RTL на OSVVM Alert / Log, чтобы распечатки можно было перенаправлять. В конце концов, есть ли другое решение VHDL? VUNIT - это питон, работающий в симуляторе. То, что проверяет утверждения в VUNIT, - это постобработка, следовательно, не отвечает и исходному вопросу OP. Следовательно, необходимо сделать выбор.

Jim Lewis 01.11.2018 04:58

Если бы утверждение было в тестовой среде, условие утверждения могло бы быть оценено снова или утверждение было бы сделано в процессе, позволяющем дальнейшие последовательные утверждения. Модель не делает этого, когда «выходные данные отладки DUT представляют собой сообщение ASSERT / REPORT для консоли» из утверждения DUT, а версия VHDL меньше -2008, когда внешние имена недоступны.

user1155120 01.11.2018 07:54

Извините, если я не разъяснил, но утверждения генерируются DUT и не могут быть изменены. Я думаю, это исключает OSVVM, которую я использую вместе с Vunit.

Edwin Field 01.11.2018 09:19

Я использую VHDL 2008 и задавался вопросом о внешних именах, но не уверен, что это помогает. Требуется проверить выходное сообщение ASSERT (сравнение строк). (К сожалению, не спрашивайте, почему, помимо моей зарплаты ...)

Edwin Field 01.11.2018 09:28

Другие вопросы по теме