Questa SIM User's Manual/Analyzing Assertions and Cover Directives
Содержание |
Analyzing Assertions and Cover Directives
The following tasks can be used for analyzing assertions and cover directives:
- Viewing Assertions in the Assertions Window
- Viewing Cover Directives in the Cover Directives Window
- Viewing Memory Profile Data
- Viewing Assertions and Cover Directives in the Wave Window
- Comparing Assertions
Viewing Assertions in the Assertions Window
Окна Утверждения (Assertions windows) отображают данные моделирования об утверждениях. Чтобы открыть окно Утверждения, выберите View → Coverage → Assertions из меню.
Рисунок 21-17 показывает SystemVerilog утверждения в окне Утверждения. Утверждения SV обозначены голубым треугольником. PSL утверждений (не показаны) обозначаются фиолетовым треугольником.
![]() |
---|
Figure 21-17. SystemVerilog Assertions in the Assertions Window |
В окне Утверждения перечислены все встроенные и внешние директивы утверждений, которые были успешно скомпилированы и моделируемые в ходе текущей сессии. Знак плюс ('+') слева от поля "Name" позволяет расширить (раскрыть) иерархию утверждения, чтобы показать её элементы (свойства, последовательности, синхронизацию и HDL сигналы).
Окно Утверждения включает в себя несколько столбцов для отображения информации о утверждениях. Смотри GUI Elements of the Assertions Window для описания каждого поля.
Когда утверждения выдают сообщений об ошибке, окно Утверждения отображает имя и количество ошибок красным цветом, как во время моделирования так и в режиме пост-моделирования (рисунок 21-18).
![]() |
---|
Figure 21-18. Assertion Failures Appear in Red |
Вы можете использовать команду assertion count
, чтобы вернуть сумму числа ошибочных утверждений для заданного набора экземляров директив утверждений. Эта команда возвращает предупреждение (warning) "No matches", если заданный путь не содержит никаких утверждений.
Assertions Window Display Options
Окно Утверждения могут отображать директивы утверждений в иерархическом (дерево) виде (рисунок 21-19) или в плоском (flattened) виде (рисунок 21-17).
![]() |
---|
Figure 21-19. Hierarchy Display Mode |
Режим иерархического отображения может быть включен или отключен с помощью одного из следующий действий:
- Когда окно Утверждения пристыкован (docked), выберите Assertions → Display Options → Hierarchy Mode в главном меню.
- Щелкните правой кнопкой мыши в окне Утверждения и выберите Display Options → Hierarchy Mode в всплывающем меню.
Меню Display Options также включает в себя следующие опции:
- Опция Recursive Mode отображает все утверждения на выбранном элементе иерархии и ниже, выделение (выбор элемента) берётся из окна Structure (например, закладка sim). В противном случае только показываются только те элементы, которые расположены на выбранному уровне.
- Опция Show All Contexts отображает все экземпляры в дизайне. В этом случае не учитывается, что выбрано в текущем контексте в панели Structure. Режим отображения Show All Context означает рекурсивный режим отображения как есть, так что выбор Recursive Mode автоматически серым цветом.
- Параметр Show Concurrent Asserts отображает только параллельные утверждения (concurrent assertions).
- Параметр Show Immediate Asserts отображает только непосредственные утверждения (immediate assertions).
Viewing Cover Directives in the Cover Directives Window
Окно "Cover Directives" отображает информацию о директивах покрытия. Чтобы открыть окно "Cover Directives", выберите View > Coverage > Cover Directives.
Рисунок 21-20 показывает PSL директивы покрытия в окне "Cover Directives". PSL директивы покрытия обозначаются фиолетовым шевроном. SystemVerilog директивыпокрытия (не показаны на рисунке), обозначаются светло-голубым шевроном.
![]() |
---|
Figure 21-20. PSL Cover Directives in the Cover Directives Window |
Окно "Cover Directives" отображает накопленную статистику по директивам покрытия в текущий момент моделирования, включающюю проценты и граф для каждой директивы и экземпляра (instance). Знак плюс ('+') слева от поля Name позволяет раскрыть иерархию директивы, чтобы показать его элементы (свойства, последовательности, синхросигналы и HDL сигналы). Обратитесь к GUI Элементы директив стекла крышка для описания каждого столбца.
Display Options for Cover Directives
Параметры отображения позволяют отображать директивы покрытия в Recursive Mode (рекурсивном) или в Show All Contexts (показать всё содержимое) режиме. Подробней об этом смотри Changing the Cover Directives Window Display Options.
Filtering Data in the Assertions and Cover Directives Window (фильтрация данных)
You can filter the Assertions and Cover Directives data displayed by selecting Assertions > Filter > Setup or Cover Directives > Filter > Setup, depending on which window is active. For details, see “Filtering Functional Coverage Data”.
Viewing Memory Profile Data
Команда "assertion profile" генерирует подробный отчет об использовании памяти для утверждений и директив покрытия. В результате в окне асертов и директив покрытия отображаются следующие стобцы: Memory, Peak Memory, Peak Memory Time и Cumulative Threads.
- Столбец Memory отслеживает текущее использование памяти асертом или директивой покрытия.
- В столбце Peak Memory отслеживается пиковое (максимальное) значение используемой памяти ассертом или директивой покрытия.
- В столбце Peak Memory Time показывается значение времени моделирования, при котором было наибольшее использование памяти.
- В столбце Cumulative Threads подсчитывается суммарное число потоков для ассерта.
Несмотря на то, хотя значение суммарных потоков (Cumulative Threads) не определяет затраты памяти, оно предназначено для определения тех ассертов и директив покрытия, которые запущены очень много раз, например как следующее утверждение:
assert property ((@posedge clk) a |=> b);
Если ‘a’ истинно на протяжении всего моделирования, то данное утверждение будет стартовать совершенно новую попытку каждый клок. Попытка, раз начавшись, будет действовать до следующего синхросигнала. Так что это утверждение не будет иметь аномально высокое значение ни в столбце Memory, ни в Peak Memory, но оно будет иметь большое значение в колонке Cumulative Threads.
Viewing Assertions and Cover Directives in the Wave Window
Можно наблюдать утверждения и директивы покрытия в окне временных диаграмм также как другие сигналы проекта. Используйте один из следующих методов для добавления директив на временные диаграммы:
- To add all assertions in your design to the Wave window,
- Select a single object in the Assertions window, then select Add > To Wave > Objects in Design from the main menus.
- Select all objects in the Assertions window, then select Add > To Wave > Selected Objects from the main menus
- Right-click the selected assertions, then select Add Wave > Objects in Design from the popup menu.
- Select all objects in the window, then click the Add Selected To Window button in the Standard Toolbar.
- To add all cover directives in your design to the Wave window:
- Select a single directive in the Cover Directives window, then select Add > To Wave > Functional Coverage in Design from the main menus.
- Select all directives in the Cover Directives window, then select Add > To Wave > Selected Functional Coverage from the main menus.
- Right-click the selected cover directives, then select Add Wave > Functional Coverage in Design in Design from the popup menu.
- Select all directives in the window, then click the Add Selected To Window button in the Standard Toolbar.
- To place a single assertion or cover directive in the Wave window:
- Drag the object from the its window and drop it into the Wave window, or simply drop it onto the Wave tab if it is showing.
- Select the object, then click the Add Selected To Window button in the Standard Toolbar.
- Select the object then select Add > To Wave > Selected Objects from the menu bar.
- Right-click any selected assertion and select Add Wave > Selected Objects from the popup menu; or right-click any selected cover directive and select Add Wave > Selected Functional Coverage from the popup menu.
Questa SIM представляет утверждения и директивы покрытия как сигналы или waveforms в окне Wave. На рисунке 21-21 показано окно Wave с несколькими SystemVerilog утверждениями и одной директивой покрытия. SystemVerilog утверждения представляются светло голубым треугольником в столбце имени. SystemVerilog директивы покрытия представляются светло голубым шевроном.
![]() |
---|
Figure 21-21. SystemVerilog Assert and Cover Directives in the Wave Window |
На рисунке 21-22 показано окно временных диаграмм с несколькими PSL утверждениями и директивами покрытия. PSL утверждения представляются треугольниками цвета магента (magenta). PSL директивы покрытия представляются шевронами цвета магента (magenta).
![]() |
---|
Figure 21-22. PSL Assert and Cover Directives in the Wave Window |
Имя каждого утверждения и директивы покрытия берётся из исходного кода, описывающего утверждение. Знак плюса (’+’) слева от имени обозначает, что утверждение или директива покрытия является составной трассой (trace) и может быть расширено (развёрнуто/раскрыто) для просмотра составных элементов (свойства (properties), последовательности (sequences), синхросигналы и др. HDL сигналы). Следует обратить внимание, что сигналы отображаются без иерархии.
Значение в панели значений (value pane) определяется расположением активного курсора на панели временных диаграмм (waveform pane). Значение будет одним из ACTIVE (активно), INACTIVE (неактивно), PASS (выполнено), FAIL (не выполнено/ложно), или ANTCDENT.
Временные диаграммы для утверждения или директивы покрытия представляют как текущую (непрерывную), так и мгновенную информацию.
- Текущая информация - это активна или неактивна директива или утверждение. Директива актива, если выполняется первый элемент директивы. Когда директива активна трасса (линия на диаграмме) отображается зеленым; когда неактивно, то синим.
- Мгновенная информация представляется в виде старта/начала (start), выполнения (pass), либо сбоя (fail) события. Начало события показывается голубым квадратом. Зелёный треугольник означает выполение (pass). А красный треугольник означает сбой (fail).
Желтый треугольник представляет собой предшествующее совпадение (antecedent match) (как показано на рис 21-23). Желтый треугольник отображается только если директива просматриваетя (выведена на диаграммы) и включен режим оталдки утверждений (vsim -assertdebug
). Желтый треугольник показывается для каждого потока проверки утверждения under ActiveCount в утверждении (см. Using the Assertion Active Thread Monitor). Значения сигналов, используемых в утверждении, также отражают/отображают предшествующее/предыдущее совпадение (ANTCDENT).
![]() |
---|
Figure 21-23. Предшествующее совпадение обозначается жёлтым треугольником (Antecedent Matches Indicated by Yellow Triangle) |
Таблица 21-1 суммирует графические элементы для утверждения и директив покрытия, используемые в окнах Wave и ATV (см. Viewing Assertion Threads in the ATV Window):
Graphic element | Meaning |
---|---|
голубая линия (blue line) | утверждение или директива покрытия неактивна
assertion or cover directive is inactive |
зелёная линия (green line) | утверждение или директива покрытия активна
assertion or cover directive is active |
голубой квадрат (blue square) | утверждение или директива покрытия стартовала
assertion or cover directive starts |
зелёный треугольник (green triangle) | утверждение или директива покрытия пройдена
assertion or cover directive passed |
красный треугольник (red triangle) | утверждение или директива покрытия не выполено
assertion or cover directive failed |
желтый триугольник (yellow triangle) | предшествующее совпадение произошло в утверждении
antecedent match occurred in assertion |
Отображение директив покрытия в режиме счета/счетном режиме (Count Mode)
Вы можете изменить диаграмму директивы покрытия в окне Wave, так чтобы она отображало в формате режима счета (count mode format), в котором показывается мгновенное значение в виде десятичного целого. Чтобы изменить формат на режим счёта, в меню по правой кнопке мыши на имени диаграммы покрытия и выбрать Cover Directive View > Count Mode.
![]() |
---|
Figure 21-24. Просмотр диаграмм директивы покрытия в режиме счета (Count Mode) |
Режим счета может быть полезен для замера эффективности тестовых наборов (stimulus) с течением времени. Если все счетчики директив покрытия являются статическими в течение длительного периода времени, может быть, что тестовые наборы растянуты (что может быть избыточным) и могут быть улучшены (сжаты).
Сравнение утверждений (Comparing Assertions)
Questa SIM’s compare feature allows you to compare assertions (which includes any assertion-like object such as accAssertion, accCover, accEndpoint, or accImmediateAssert.) There is no cross-compare with assertion types outside the set listed, and assertion compare is further limited to like types only. That is, both the reference and test items must be of the same type.
Questa SIM позволяет сравнить утверждения (которые включают в себя любые утверждение-подобные объект, такой как accAssertion, accCover, accEndpoint или accImmediateAssert). Нет перекрёстного сравнеия типов утверждений
Там нет кросс-сравнение с типами утверждение пределами набор в списке, и утверждение сравнить далее ограничивается как только у некоторых моделей. То есть, как опорные и тестовые элементы должны быть того же типа.
Comparing assertion signals differs from comparing normal HDL signals/ports because assertion signals have two attributes:
- The current assertion state (ACTIVE | INACTIVE)
- The current assertion event (START | PASS | FAIL | EVAL)
Assertions expand to show child signals but these child signals don't participate in the compare evaluation. Child signals are, however, visible in the compare waveforms when the you expand compare assertions.
Setting Up the Assertions Compare
You can set up and run an assertion compare using the compare commands or the menu-based Waveform Comparison Wizard. For example, a comparison using compare commands may look like the following:
add wave /top/assert_sig run 1000 ns dataset open vwim_test.wlf compare start sim vsim_test compare add sim:/top/assert_sig vsim_test:/top/assert_sig compare run
All existing compare commands are supported for comparing assertion signals. Refer to the Command Reference for syntax and command descriptions.
The Waveform Comparison Wizard will guide you through the selection of a reference dataset and a test dataset. Assertions within those datasets are compared along with other signals. You can start the Wizard is by selecting Tools > Waveform Compare > Comparison Wizard.
The Compare Signal
When two assertion signals are compared — for example, vsim_pass:/top/my_assertion_sig and vsim_fail:/top/my_assertion_sig
— a third virtual signal is created:
compare:/top/\my_assertion_sig<>my_assertion_sig\
The compare signal created is composed of the reference signal and the test signal. Differences between the reference and text assertion signals are highlighted in red in the compare signal when it is displayed in the Wave Window. Assertion differences cannot be viewed in the ATV window.
Two Types of Assertion Differences
There are two types of assertion differences:
- Instantaneous difference — When the assertion event (START | PASS | FAIL | EVAL) is different but the state of the assertion (ACTIVE | INACTIVE) is the same.
- For example, considering two datasets vsim_top and vsim_ntop with an assertion signal my_assertion_sig.
vsim_top:/top/my_assertion_sig
is PASS_INACTIVE at 20 nsvsim_ntop:/top/my_assertion_sig
is FAIL_INACTIVE at 20ns
- This is an instantaneous difference the difference will marked at time 20 ns and the width of the difference marker will be equal to the width of the PASS/FAIL symbol.
- Range difference — When there is a state change (ACTIVE->INACTIVE) or vice-versa, between the reference and test assertion, irrespective of the event on the assertions.
Child Signals
An assertion object is composed of child signals. It is the evaluation of these child signals that determine the assertion event (START/PASS/FAIL). If you choose to expand the assertion, the difference marker is propagated to the child signals as well, but this may not necessarily mean a change in value on the child signal at that specific time — the difference could have occurred earlier.
If the reference signal has child signals but the test signal does not, or vice-versa, waveform compare will still work because compare cares only about the absolute event on the assertion. If there is a difference, it will be marked.