«…лишь недалекие люди боятся конкуренции, а люди подлинного творчества ценят общение с каждым талантом…» А. Бек, Талант.

Questa SIM User's Manual/Analyzing Assertions and Cover Directives

Материал из Wiki
Перейти к: навигация, поиск

Содержание

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

Vsim Assertions window.gif
Figure 21-17. SystemVerilog Assertions in the Assertions Window

В окне Утверждения перечислены все встроенные и внешние директивы утверждений, которые были успешно скомпилированы и моделируемые в ходе текущей сессии. Знак плюс ('+') слева от поля "Name" позволяет расширить (раскрыть) иерархию утверждения, чтобы показать её элементы (свойства, последовательности, синхронизацию и HDL сигналы).

Окно Утверждения включает в себя несколько столбцов для отображения информации о утверждениях. Смотри GUI Elements of the Assertions Window для описания каждого поля.

Когда утверждения выдают сообщений об ошибке, окно Утверждения отображает имя и количество ошибок красным цветом, как во время моделирования так и в режиме пост-моделирования (рисунок 21-18).

Vsim Assertion fail red.gif
Figure 21-18. Assertion Failures Appear in Red


Вы можете использовать команду assertion count, чтобы вернуть сумму числа ошибочных утверждений для заданного набора экземляров директив утверждений. Эта команда возвращает предупреждение (warning) "No matches", если заданный путь не содержит никаких утверждений.


Assertions Window Display Options

Окно Утверждения могут отображать директивы утверждений в иерархическом (дерево) виде (рисунок 21-19) или в плоском (flattened) виде (рисунок 21-17).


Vsim Assertions hierarchy.gif
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 автоматически серым цветом. Aqua pencil.png
  • Параметр 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 директивыпокрытия (не показаны на рисунке), обозначаются светло-голубым шевроном.


Vsim Cover directives tab.gif
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. Vsim Button add selected to wave.gif
  • 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. Vsim Button add selected to wave.gif
  • 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 директивы покрытия представляются светло голубым шевроном.

Vsim Sv assert wave.gif
Figure 21-21. SystemVerilog Assert and Cover Directives in the Wave Window


На рисунке 21-22 показано окно временных диаграмм с несколькими PSL утверждениями и директивами покрытия. PSL утверждения представляются треугольниками цвета магента (magenta). PSL директивы покрытия представляются шевронами цвета магента (magenta).


Vsim Assertions wave.gif
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).

Vsim Wave antecedent.gif
Figure 21-23. Предшествующее совпадение обозначается жёлтым треугольником (Antecedent Matches Indicated by Yellow Triangle)


Таблица 21-1 суммирует графические элементы для утверждения и директив покрытия, используемые в окнах Wave и ATV (см. Viewing Assertion Threads in the ATV Window):

Table 21-1. Графические элементы для утверждения и директив покрытия
(Graphic Elements for Assertions and Cover Directives)
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.

Vsim Sv count mode.gif
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 ns
vsim_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.