OVM/OVM методология/Механика OVM/4.8
Содержание |
Тестирование и тестовые окружения
Благодаря правильному использованию конфигураций, для производство, и поэтапного процесса разработки, можно создать тестбенч для верификации, что позволяет подавать случайные воздействия больше, чем просто сгенерированный stimuls. Например, если тестбенч написан, чтобы количество драйверов на шине можно настраивать, то же тестбенч может быть повторно использован на нескольких тестах, каждый из которых может указать другой (возможно, случайно) число драйверов. Как вы можете видеть, гибкость OVM позволяет запускать каждую из этих различных тестов без изменения тестбенча. OVM также обеспечивает явные ovm_test классы в качестве контейнера для испытаний. Как правило, на top-level модуль будет экземпляром ovm_test, который в свою очередь настраивает и создает тестбенч. Дополнительные тесты могут быть написаны как расширения базовым тестам, которые включают новую конфигурацию и директивы factory, в результате чего сами тесты относительно короткий, четкий и простой в обслуживании. В действительности, ovm_test это просто другое расширение ovm_component. Поскольку тесты и testbenches просто компонентами, они тоже могут быть созданы и переопределены через factory.
Диаграмма UML выше иллюстрирует отношения между тестом и окружением. И тесты и окружение (ENV) компоненты. Тест содержит окружение. Среда содержит top-level компонет тестбенча и их соединений. Для определенния окружения, вы может хотите иметь несколько тестов. Кроме того, для конкретного теста, вы, возможно, пожелаете осуществлять его на твои окружения. factory позволяет менять тесты, окружения, или то и то.
4.9 Reporting
OVM предоставляет богатый набор классов и функций для генерации и фильтрации сообщений. Объекты OVM типа сообщения содержит три вида функций:
- Отображение сообщений в едином порядке по различным направлениям
- Фильтрация сообщений
- Изменение потока управления в результате сообщения в печати
4.9.1 Базовые сообщения (Basic Messaging)
function void ovm_report_info( string id, string message, int verbosity = OVM_MEDIUM, string filename = "", int line = 0); function void ovm_report_warning( string id, string message, int verbosity = OVM_MEDIUM, string filename = "", int line = 0); function void ovm_report_error( string id, string message, int verbosity = LOW, string filename = "", int line = 0); function void ovm_report_fatal( string id, string message, int verbosity = OVM_NONE, string filename = "", int line = 0);
Каждая из этих четырех функций выдает сообщение, которое имеет несколько компонентов: статус, уровень детализации, идентификатор, сообщение, имя файла и номер строки.
Статус. Статус сообщение может принимать значения OVM_INFO, OVM_WARNING, OVM_ERROR, или OVM_FATAL. Выбор тяжести меняет окончательный текст, который напечатан тексте в котором указана серьезность. Это также влияет на то, как сообщение обрабатывается. Например, вызов ovm_report_fatal заканчивает выполнения тестбенча. Другие способы, в которых статус влияет на обработку сообщений, обсуждаются в разделе 4.9.2.
Идентификатор сообщения содержит произвольную строку, которая используется для идентификации строк. Идентификатор печатается как часть текста сообщения, и это также влияет на сообщения обрабатываются.
Сообщение. Сообщение тело текстового сообщения.
Уровень детализации. Уровень детализации сообщения является произвольным числом, которое по отношению к текущей настройки детализации является порогом, после которого сообщения с уровень детализации на уровне или ниже порога будут напечатаны, а те что выше, будут игнорироваться. Это способ фильтрации сообщений. Вы можете задать свой порог для тестбенча. Функция для изменения уровня порога set_report_verbosity_level (INT уровень).
Имя файла и номер строки. Это необязательные аргументы, роль которого заключается в обеспечении файла и номер строки содержащем информацию о произошедшем событии.
4.9.2 Сообщения о событиях (Message Actions)
Message Actions ставит соответствие каждому сообщению действие, которые определяют, как именно она обрабатывается. Действие представлено битовым вектором, в котором каждый бит представляет одно из возможных действий. Вы можете задать несколько действий, включив один или более битов в векторе. Таким образом, вы не должны помнить, какой бит за что отвечает, OVM умеет выполнять действия перечисления, которое можно использовать, чтобы указать действие. В следующей таблице описываются возможные действия:
| Action | Definition |
|---|---|
| NO_ACTION | Do not execute an action. |
| OVM_DISPLAY | Display the message on the standard output device. |
| OVM_LOG | Send the message to a file. |
| OVM_COUNT | Increment quit_count. When quit_count reaches a predetermined threshold, terminate the testbench. |
| OVM_EXIT | Terminate the testbench immediately. |
| OVM_CALL_HOOK | Call the appropriate hook function. |
| OVM_STOP Call | $stop after the message has been processed. |
