.. _Views:

Views
=====

.. _Call Hierarchy View:

Call Hierarchy View
~~~~~~~~~~~~~~~~~~~



The **Call Hierarchy** view presents the call tree of a **function or task**.

Place the editor cursor on the desired element, **right-click**, and choose :menuselection:`Show --> Call Hierarchy`, or press :kbd:`Ctrl+Alt+H`.

.. figure:: ../../images/common/sv_call_hierarchy_trigger_editor.png

Using the buttons in the toolbar(see below), you can select the **Call Hierarchy Strategy** based on your needs.


The **Callee Hierarchy Strategy** shows **method calls** *in* the selected function or task. You can **expand** nodes in the tree to further inspect the hierarchy.

.. figure:: ../../images/common/sv_callee_hierarchy_general.png

.. note:: 

  Conditional (**if** / **case**) and **fork** blocks are also shown. You can hide them using the **Filters...** toolbar button.

.. note:: 

  To show labeled blocks in the view use the **Filters...** toolbar button.

.. note:: 

  When calling a virtual method on a base class handle, any of the child overrides of that method may be executed, depending on the runtime object type. In addition to the method call, you may choose to see all **calls from overrides**, using the **Filters...** toolbar button.

The **Caller Hierarchy Strategy** shows **method calls** *of* the selected function or task.

.. figure:: ../../images/common/sv_caller_hierarchy_general.png

.. note:: 

  When calling a virtual method on a base class handle, any of the child overrides of that method may be executed, depending on the runtime object type. In addition to the method call, you may choose to see all **method calls of the parent function implementation**, using the **Filters...** toolbar button.

.. note:: 

  When using the **Caller Hierarchy Strategy**, the view compacts all function/task calls from the same scope into a single node, with multiple lines specified in the line column.

If you want to see all the function calls from the same scope, you can open the **Inspect Panel** and select the node in the Call Hierarchy View.

.. figure:: ../../images/common/sv_caller_hierarchy_inspect.png

.. note:: 

  The same input appears in the **Inspect View**, if you wish to use it instead.

.. tip:: 

  When using the **Caller Hierarchy Strategy**, if the **Call Hierarchy** is triggered on a field, it shows **field references** in functions/tasks on the first level, then method calls from the second level onwards.

.. tip:: 

  **Double click** on any node to jump to the **method call**. In **Caller Hierarchy Strategy** the editor will jump to the first method call if multiple are available in the same scope.

.. tip:: 

  Use **Up and Down** arrow keys to navigate the view, **Left** to collapse and **Right** to expand.

.. tip:: 

  **Right-click** on a node to:

  -  **Remove from View**  Remove selected node from the tree.
  -  **Expand Children**  Expand all children of the selected node.
  -  **Expand Multiple Levels** Expand a custom number of levels from the selected node.
  -  **Go to First Call** Jump to the first call of a recurrent method call.
  -  **Go to Declaration**  Jump to the declaration of the selected method.

**Toolbar**

.. list-table::

   * - .. figure:: ../../images/icons/act16/ch_callers.gif
     - Caller Hierarchy
     - Switch strategy to caller. Also refreshes the view.
   * - .. figure:: ../../images/icons/act16/ch_callees.gif
     - Callee Hierarchy
     - Switch strategy to callee. Also refreshes the view.
   * - .. figure:: ../../images/icons/act16/refresh_template.png
     - Refresh View
     - Recompute the call tree if dirty (see below).
   * - .. figure:: ../../images/icons/act16/synced.png
     - Link with editor
     - Link tree selection with editor.
   * - .. figure:: ../../images/icons/act16/filter.png
     - Filters
     - Hide conditional, fork or override nodes. Changing filters requires refresh (see below).
   * - .. figure:: ../../images/icons/act16/prepend_package.png
     - Prepend Package Name
     - Show package name in labels.
   * - .. figure:: ../../images/icons/act16/expand_tree.png
     - Expand Multiple Levels
     - Expand a custom number of levels.
   * - .. figure:: ../../images/icons/act16/inspect_layout.png
     - Toggle Inspect Panel
     - Show/hide the inspect panel embedded in the view.
   * - .. figure:: ../../images/icons/act16/layers.png
     - Analyze all root method extensions
     - Analyzes root method extensions (disabled, only available for e Language).




**Icons**

.. list-table::

   * - .. figure:: ../../images/icons/obj16/conditional.png
     - Conditional block (if / case)
   * - .. figure:: ../../images/icons/obj16/fork_join_obj.png
     - fork block
   * - .. figure:: ../../images/icons/obj16/method_obj.png
     - Function call
   * - .. figure:: ../../images/icons/obj16/predefined_method_obj.png
     - Predefined function call
   * - .. figure:: ../../images/icons/obj16/CHV_static_function.png
     - Static function call
   * - .. figure:: ../../images/icons/obj16/CHV_function_override.png
     - Function override
   * - .. figure:: ../../images/icons/obj16/task_obj.png
     - Task call
   * - .. figure:: ../../images/icons/obj16/CHV_static_task.png
     - Static task call
   * - .. figure:: ../../images/icons/obj16/CHV_override_task.png
     - Task override
   * - .. figure:: ../../images/icons/obj16/field_obj.png
     - Field node
   * - .. figure:: ../../images/icons/obj16/constructor_obj.png
     - Constructor call
   * - .. figure:: ../../images/icons/obj16/predefined_constructor_obj.png
     - Predefined constructor call
   * - .. figure:: ../../images/icons/obj16/method_obj.png
     - Let call
   * - .. figure:: ../../images/icons/obj16/preproc_define.png
     - Macro call
   * - .. figure:: ../../images/icons/obj16/instance_loop_obj.png
     - Recurrent method call
   * - .. figure:: ../../images/icons/obj16/CHV_possible_function.png
     - Call to undeclared method
   * - .. figure:: ../../images/icons/obj16/always_obj.png
     - Labeled block


**Refresh**

The Call Hierarchy view is **not automatically updated** at incremental build or when modifying filters.

When you decide it's time to recompute the view contents, simply click the **Refresh** toolbar button.

.. figure:: ../../images/common/sv_call_hierarchy_needs_refresh.png

.. note:: 

  Refresh may not retain the state of the method call tree.

.. _Checks View:

Checks View
~~~~~~~~~~~



The **Checks View** presents all the **immediate, concurrent, deferred immediate assert and assume** constructs in the project.

Open the view from menu :menuselection:`Window --> Show View --> Other... --> DVT --> Checks`
**Double click** on a check and jump to the source location.

.. list-table::
   :header-rows: 0
   :widths: auto

   * - .. figure:: ../../images/icons/obj16/check_obj.png
     - immediate assert
   * - .. figure:: ../../images/icons/obj16/assert_concurrent.png
     - concurrent assert
   * - .. figure:: ../../images/icons/obj16/assert_immediate_deferred.png
     - deferred immediate assert
   * - .. figure:: ../../images/icons/obj16/assert_obj.png
     - immediate assume
   * - .. figure:: ../../images/icons/obj16/assume_obj.png
     - concurrent assume
   * - .. figure:: ../../images/icons/obj16/assume_immediate_deferred.png
     - deferred immediate assume


.. figure:: ../../images/sv_checks_view_notes.png




1. **Quick Search**. You can use :ref:`CamelCase`, :ref:`Simple Regex` or :ref:`Hierarchical Search` to locate a specific element. By default, hierarchical search will show all descendants:

.. figure:: ../../images/sv_checks_view_quick_search_all_descendants.png




2. **Check Kind Filters**. You may choose to hide immediate, concurrent assertions or assumptions - see the image below:

.. figure:: ../../images/sv_checks_view_filter_menu.png


Code Templates View
~~~~~~~~~~~~~~~~~~~

.. include:: code-templates-view-content.rst

.. _Compile Order view:

Compile Order view
~~~~~~~~~~~~~~~~~~

.. include:: compile_order.rst

.. figure:: ../../images/sv_compile_order_view.png
	:align: center

The **Compile Order View** label presents the following statistics: 

.. list-table::

   * - Total
     - The total number of compiled files (the largest compiled file index).  Note: Files compiled in optimized mode, -v and -y library files are added to this count.
   * - Unique
     - The number of unique files in Compile Order View.  If a file is compiled multiple times with multiple compile indices, it will only be counted once to determine “unique” value.
   * - Optimized
     - The number of files compiled in optimized mode (files that are \`included in the project multiple times, in the same invocation and same pre-processing context).


For projects with **multiple natures**, only the **Total** appears in the Compile Order label. Each **language node** contains information about *total*, *unique* and *optimized* for that language.

**Right click** on a file then **Go To Include** to jump to the include location.

.. note::
  
  Library files compiled using -y and -v directives are aggregated under a dedicated section in the Compile Order, and consequently there may be discontinuities in the compile index:

.. figure:: ../../images/sv_compile_order_libfiles.png
	:align: center

.. _Build Config Hierarchy:

Build Config Hierarchy
----------------------

.. include:: build_config_hierarchy.rst

.. _Quick Compile Order View:

Quick Compile Order View
------------------------

.. include:: quick_compile_order_view.rst

.. figure:: ../../images/sv_quick_compile_order_view.png
  :align: center

.. _Config DB View:

Config DB View
~~~~~~~~~~~~~~

The **Config DB View** shows all operations performed on the **UVM Configuration Database** via **uvm_config_db set** and **get** method calls.

Open the view from the **UVM** menu > **Show Config DB**. The view is populated only after setting a :ref:`runtime elaborated <UVM Runtime Elaboration>` Verification top.

.. figure:: ../../images/common/sv-config-db-view.png

By default, **set** and subsequent **get** calls for a specific configuration setting are clustered together and shown under the **Setters and Getters** section. **Setters without Getters** and **Getters without Setters** are shown in separate sections.

To see **set** and **get** calls in a flat list sorted by execution index, click the **Sort By Execution** toolbar button.

The view columns represent:

* **Call:** The configuration method, either **set** or **get**, followed by the execution index between square brackets.
* **Type:** The configuration object type.
* **Context:** The verification hierarchy path to the context component.
* **Instance name:** The verification hierarchy to which the configuration is applicable.
* **Field name:** The configuration target field name.
* **Value:** The actual value of the configuration object.

The **quick search** bar applies to any of the view's columns.

.. note::
  
  The view presents only **set** and **get** calls up to the **end of elaboration** phase.

Using the **Filters** toolbar button you can:

* Hide unassociated UVM Config DB Setters (setters without getters)
* Hide associated UVM Config DB Setters and Getters
* Hide unassociated UVM Config DB Getters (getters without setters)
* Hide UVM Config DB Setters for read only resources

.. tip::
  
  **Double-click** to go to the **set** or **get** method call.

.. tip::
  
  **Right-click** on a node to copy the content of the **Instance Name** or **Field Name** columns to the clipboard.

.. _Console View:

Console View
~~~~~~~~~~~~

.. include:: console_view.rst

.. figure:: ../../images/vlogdt-vmm-smart-log.png
  :align: center

.. _Coverage View:

Coverage View
~~~~~~~~~~~~~

.. include:: coverage_view.rst

.. figure:: ../../images/sv_coverage_view_notes.png
	:align: center

1. **Quick Search**. You can use :ref:`CamelCase`, :ref:`Simple Regex` or :ref:`Hierarchical Search` to locate a specific element. By default, hierarchical search will show all descendants:

.. figure:: ../../images/sv_coverage_view_quick_search_all_descendants.png
	:align: center


2. **Cover Group**.

3. **Cover Items**.

.. _Design Hierarchy View:

Design Hierarchy View
~~~~~~~~~~~~~~~~~~~~~

.. include:: design-hierarchy-view.rst

.. _Factory Overrides View:

Factory Overrides View
~~~~~~~~~~~~~~~~~~~~~~


The **Factory Overrides View** shows the UVM create calls affected by factory overrides.

Open the view from the **UVM** menu > **Show Factory Overrides**. The view is populated only after setting a :ref:`UVM Runtime Elaboration` Verification top.

.. figure:: ../../images/common/sv-factory-overrides-view.png
	:align: center


The view content is grouped in three categories:

-  **Direct:** Lists all the overrides applied by the UVM factory while creating components or objects during the UVM elaboration. Each entry corresponds to the application of a particular override.
-  **Chain:** Groups together all the chained factory overrides that get applied during the creation of a UVM component or object which is subject to multiple overrides.
-  **Unused:** Lists all the factory overrides which were not applied during the UVM elaboration.

.. note::

	Overrides meant to be applied after the **end of elaboration phase** will show up as **Unused**.

The view columns represent:

- **Applicable To:** The verification hierarchy to which the override is applicable.
- **Original Type:** The type to be overridden.
- **Override Type:** The type created by the factory.
- **Override Path:** The verification hierarchy path of the created object.
- **Override Chain:** The types that make up the override chain, for example if **foo** overrides **bar**, and **xyz** overrides **foo**, then the chain will show **foo > bar > xyz.**

The **quick search** bar applies to any of the view's columns.

From the **Filters** toolbar button you can toggle the visibility of each section.

Use the **Toggle Inspect Panel** toolbar button to see an Inspect Panel embedded in the view. It shows the relevant code sections for the currently selected table row, namely the **set override** calls and the corresponding **create** calls.

.. figure:: ../../images/common/sv-factory-overrides-view-inspect.png
	:align: center


.. tip::
  
  **Double click** any node to go to the create call.

.. tip::

	Use **Up and Down** arrow keys to navigate the view, **Left** to collapse and **Right** to expand.

.. tip::  
  
  **Right-click** on a node to:

  - **Open Override Call** Jump to the applied override call.
  - **Open Original Type Declaration** Jump to the original type.
  - **Open Override Type Declaration** Jump to the override type.
  - **Open Instantiation** Jump to the **create** call.
  - **Copy Hierarchy Path** Copy the content of the **Override Path** column to the clipboard.

.. _Inspect View:

Inspect View
~~~~~~~~~~~~

**Inspect View** shows detailed information about various elements in DVT.

Open the view from menu :menuselection:`Window --> Show View --> Other... --> DVT --> Inspect`.

To inspect an element, simply **select** it in a view or click on its name in the editor.

Information about the selected element will be presented in the view.

Each element shown in the Inspect View starts with an information line regarding the file and line number of the element.

The Inspect View highlights the relevant source code lines of the selected element. These lines may be surrounded with additional source code to provide a context, if necessary.

You can customize the number of lines shown by going to :menuselection:`Window --> Preferences --> DVT --> Number of context lines in Inspect View`, or by using the key mappings detailed in the **Hotkeys** chapter below.

.. figure:: ../../images/common/sv_inspect_view_standalone.png
	:align: center


.. |inspect-icon| image:: ../../images/icons/act16/inspect_layout.png
  :class: inline

For convenience, you can see the Inspect View embedded in diagrams by clicking the **Inspect Panel...** button |inspect-icon| in the toolbar.

.. figure:: ../../images/common/sv_inspect_view_diagram.png
	:align: center




**Hotkeys**

The following key mappings are available while interacting with the Inspect View.

.. list-table::
   :header-rows: 0
   :widths: auto

   * - :kbd:`CTRL+ALT+[`
     - Decrease the number of context lines shown
   * - :kbd:`CTRL+ALT+]`
     - Increase the number of context lines shown
   * - :kbd:`CTRL+K`
     - Cycle through highlighted inputs shown inside the view


WaveDrom Timing Diagrams
------------------------

.. include:: wavedrom-timing-diagrams.rst

.. _Layers View:

Layers View
~~~~~~~~~~~



For an **extern** declaration you can quickly see where it is implemented using the **Layers View**.

Position the cursor on the element's name and press :kbd:`Shift+F3` or **right click** and choose :menuselection:`Show --> Layers` from the menu.

The Layers View is automatically raised at any invocation. You can also open it from :menuselection:`Window --> Show View --> Other... --> DVT --> Layers`.

**Double click** on a layer and jump to the corresponding source location.

**Right click** on a layer to see its **Usages**.

You can use :ref:`CamelCase` or :ref:`Simple Regex` to locate a specific element.

.. figure:: ../../images/sv_layers_view_notes.png
	:align: center




#.  **Show History List** Click to see the previously inspected layers (see the image below):

.. figure:: ../../images/sv_layers_view_history.png
	:align: center

.. _Quick Layers View:

Quick Layers View
-----------------

.. include:: quick_layers_view.rst

.. figure:: ../../images/sv_quick_layers_view.png
    :align: center

.. _Macros View:

Macros View
~~~~~~~~~~~



The **Macros View** presents all the preprocessing macros in the project.

Open the view from menu :menuselection:`Window --> Show View --> Other... --> DVT --> Macros`.

**Double click** on a macro to jump to its definition.

**Right click** on a macro to view its **Usages**.

You can use :ref:`CamelCase` or :ref:`Simple Regex` to locate a specific element.

.. list-table::

   * - .. figure:: ../../images/icons/obj16/preproc_define.png
     - Preprocessing define
   * - .. figure:: ../../images/icons/obj16/preproc_undefine.png
     - Preprocessing undefine
   * - .. figure:: ../../images/icons/obj16/preproc_ifdef.png
     - Preprocessing ifdef, ifndef


.. figure:: ../../images/sv_macros_view.png
	:align: center

.. _Quick Macros View:

Quick Macros View
-----------------

.. include:: quick_macros_view.rst

.. figure:: ../../images/sv_quick_macros_view.png
	:align: center

.. _Outline View:

Outline View
~~~~~~~~~~~~

.. include:: outline_view1.rst

.. figure:: ../../images/vlogdt-outline-view-presentation.png
	:align: center

.. include:: outline_view2.rst

.. _Quick Outline View:

Quick Outline View
------------------

Press :kbd:`Ctrl+O` to open the **Quick Outline** dialog. It presents an overview of your file.

You can use :ref:`CamelCase` or :ref:`Simple Regex` to locate a specific element.

.. figure:: ../../images/vlogdt-quick-outline-view.png
	:align: center


Outline View Preferences
------------------------


You can configure the **Outline View** contents from menu :menuselection:`Window --> Preferences --> DVT --> SystemVerilog --> Outline View`.

.. figure:: ../../images/vlogdt-outline-view-preferences.png
	:align: center

.. _Power Domain View:

Power Domain View
~~~~~~~~~~~~~~~~~

.. include:: power-domain-view.rst


.. _Problems View:

Problems View
~~~~~~~~~~~~~

If a project contains errors, for example syntax errors, it will be indicated using **decorators**:

.. figure:: ../../images/vlogdt-errors-decorator.png
	:align: center


You can use the **Problems View** to inspect the errors.  Open the view from menu :menuselection:`Window --> Show View --> Other... --> General --> Problems`. **Double clicking** on some error will jump to the source location.

.. figure:: ../../images/vlogdt-errors-view.png
	:align: center


.. _Quick Query View:

Quick Query View
~~~~~~~~~~~~~~~~

Press :kbd:`Ctrl+Alt+Q` to quickly open the **Quick Query View**, which provides a filterable list of all the types, macros and compiled files in the project.

This view supports semantic search, allowing to look for a specific element. In order to do this, structure your query in the following manner: *query_key:search_pattern*.

You can use :ref:`CamelCase` or :ref:`Simple Regex` for the *search_pattern*.

.. tip::

	Use Content Assist to see all the available query keys (:kbd:`CTRL+Space`).

DVT supports the following query keys:

- checker
- class
- configuration
- covergroup
- enum
- extends
- file
- generate
- interface
- library
- macro
- module
- package
- primitive
- program
- struct
- type
- typedef
- union

.. note::

	The *extends:search_pattern* query can be used to search for classes which extend other classes that have a name matching the *search_pattern*.

.. note::

    You can use the *type:search_pattern* query in order to search for all the types (classes, structs, modules etc.) defined in your project.

Additionally, there are **UVM-specific queries** that have the following format: *uvm_class_name:search_pattern*, where *uvm_class_name* is one of the following:

- uvm_agent
- uvm_component
- uvm_driver
- uvm_env
- uvm_mem
- uvm_monitor
- uvm_object
- uvm_reg
- uvm_reg_adapter
- uvm_reg_backdoor
- uvm_reg_block
- uvm_reg_field
- uvm_reg_fifo
- uvm_reg_file
- uvm_reg_frontdoor
- uvm_reg_map
- uvm_reg_predictor
- uvm_reg_sequence
- uvm_scoreboard
- uvm_sequence
- uvm_sequence_item
- uvm_sequencer
- uvm_test

Select an element and press :kbd:`Enter` or **click** to navigate to it.

.. note::

	By default, the Quick Query View will display 100 items from each category (types, macros, files). You can customize this value by going to :menuselection:`Window --> Preferences --> DVT --> Maximum number of elements per category in Quick Query View`.


.. _Registers View:

Registers View
~~~~~~~~~~~~~~


The **Registers View** shows all the UVM registers within the register model hierarchy.

Open the view from the **UVM** menu > **Show Registers**.

.. figure:: ../../images/common/sv-registers-view-static.png
	:align: center


By default the view content is presented as a **tree** rooted in the register model and comprising of register blocks, register files, and individual registers as leaves.

For each register, the view presents its **name**, **access rights** and source code **comment**.
If setting a :ref:`UVM Runtime Elaboration` Verification top, the view also shows the **address** and associated **sequencer** for each register.

.. figure:: ../../images/common/sv-registers-view.png
	:align: center


Toggle the **Inspect Panel** to visualize the **bitfield diagram** of the currently selected register.

.. figure:: ../../images/common/sv-registers-view-inspect.png
	:align: center


.. tip::
  
  **Double click** to go to the register's **create** call.

.. tip::

	From the **Display Mode** dropdown you can switch to a flat **list** view, where the **name** represents a hierarchical path from the reg model to the reg.

.. tip::

	If setting a :ref:`UVM Runtime Elaboration` Verification top, you can choose the **Address Radix** to be **Decimal** or **Hexadecimal**.

.. tip::

	If setting a :ref:`UVM Runtime Elaboration` Verification top, by default the view is sorted alphabetically. Use the toolbar button to **Sort by address**.

.. _Tasks View:

Tasks View
~~~~~~~~~~

.. figure:: ../../images/vlogdt-reminders-CodeTasksView.png
  :align: center

You can embed reminders in your source files by adding comments prefixed by certain "keywords" called *task tags*. 

There are three predefined tags:

-  **FIXME** - high priority
-  **TODO** - normal priority
-  **XXX** - low priority

All reminders are listed in the **Tasks View**. If it is not visible, open the view from menu :menuselection:`Window --> Show View --> Other --> General --> Tasks`.

**Double click** on a task to jump to the marker definition.

You can define custom reminder tags and assign them priorities:

- Navigate to :menuselection:`Window --> Preferences --> DVT --> Task Tags` 

.. figure:: ../../images/common/tasktag-preferences.png
	:align: center




You can specify if the tags should be considered case-sensitive and if the tag name should be displayed in Tasks View.

- Click the **Add...** button on the right, enter the name of your tag and select its priority 

.. figure:: ../../images/common/reminders-new_tag.png
	:align: center



- Click **OK** in the New Task Tag and Preferences dialogs

DVT will recognize the new tag and highlight it in code comments.  

.. note::

	it is recommended to rebuild the project so that DVT rescans all files for reminders.

Trace Connections View
~~~~~~~~~~~~~~~~~~~~~~

.. include:: trace-connections.rst

.. _Types View:

Types View
~~~~~~~~~~

.. include:: types_view.rst

.. figure:: ../../images/sv_types_view.png
    :align: center


.. _Quick Types View:

Quick Types View
----------------

.. include:: quick_types_view.rst


.. figure:: ../../images/sv_quick_types_view.png
    :align: center


.. _Type Hierarchy View:

Type Hierarchy View
~~~~~~~~~~~~~~~~~~~

The **Type Hierarchy View** presents the inheritance and the members of a class or interface class.

Place the editor cursor on a class name, **right-click** and select :menuselection:`Show --> Type Hierarchy` or press :kbd:`F4`.

Select a class in the inheritance tree to view its members.

.. figure:: ../../images/sv_type_hierarchy_view.png
	:align: center




.. tip::

	To further inspect the **Type Hierarchy** or see **Usages** of a class, right-click in the inheritance tree.

.. tip::

	**Right-click** on a function or task member to **override** it. More details here: :ref:`Override Functions`

.. tip::

	You can use :ref:`CamelCase` or :ref:`Simple Regex` to find a specific element.

.. list-table::
   :header-rows: 1
   :widths: auto

   * - Hierarchy Toolbar
     -
     -
   * - .. figure:: ../../images/icons/act16/history_list.png
     - Show History List
     - See the previously inspected types.
   * - .. figure:: ../../images/icons/act16/prepend_package.png
     - Prepend Package Name
     - Prepend the enclosing package name to the name of each class.
   * - .. figure:: ../../images/icons/act16/hierarchy_co.png
     - Show Full Type Hierarchy
     - For a class, shows the super-classes and sub-classes. For an interface, shows the sub-classes and sub-interfaces (like Show Subtype Hierarchy).
   * - .. figure:: ../../images/icons/act16/super_co.png
     - Show Supertype Hierarchy
     - For both classes and interfaces, shows the super-classes and super-interfaces, with the selected class or interface at the root of the tree (the tree is "upside-down").
   * - .. figure:: ../../images/icons/act16/sub_co.png
     - Show Subtype Hierarchy
     - For a class, shows the sub-classes.For an interface, shows the sub-classes and sub-interfaces.




.. list-table::
   :header-rows: 1
   :widths: auto

   * - Members Toolbar
     -
     -
   * - .. figure:: ../../images/icons/act16/filter.png
     - Filters
     - Select what members to show (functions, tasks, fields, events etc.)
   * - .. figure:: ../../images/icons/act16/category_sort.png
     - Sort Members by Category
     - Sort by category, otherwise alphabetically.
   * - .. figure:: ../../images/icons/act16/show_public.png
     - Show Only Public Members
     - Hide local and protected members.
   * - .. figure:: ../../images/icons/act16/show_predefined.png
     - Show All Predefined Members
     - Show predefined members like pre_randomize() even if not explicitly overridden.
   * - .. figure:: ../../images/icons/act16/inher_co.png
     - Show All Inherited Members
     - Show members inherited from super-classes and super-interfaces.


.. _Quick Type Hierarchy View:

Quick Type Hierarchy View
-------------------------


You can quickly inspect and jump to a specific parent or child in the hierarchy. Press :kbd:`Ctrl+T` with the cursor positioned on the element name.

The **Quick Type Hierarchy View** will pop-up and present a filterable list with all of the selected element's hierarchy.

You can use :ref:`CamelCase` or :ref:`Simple Regex` to locate a specific element.

Select and press :kbd:`Enter` or **click** to jump to the corresponding source location.

.. tip::

	While the **Quick Type Hierarchy View** is open you can press :kbd:`Ctrl+T` to switch between **Full type** and **Supertype** hierarchy.

.. figure:: ../../images/sv_quick_type_hierarchy_view.png
	:align: center

For functions, you can also see the implementations along the hierarchy (icons are not grayed).

.. figure:: ../../images/sv_quick_type_hierarchy_view_method.png
	:align: center


.. _UVM Browser View:

UVM Browser View
~~~~~~~~~~~~~~~~



The **UVM Browser View** is an intuitive entry point for exploring all the classes of a UVM-based verification environment.

It allows you to explore UVM-based classes grouped by categories, like agents, monitors, drivers or sequences and easily inspect the UVM flow specific API, like overridden phases, class members registered to the
factory or TLM ports.

Open the view from menu :menuselection:`Window --> Show View --> Other... --> DVT --> UVM Browser`.

You can use :ref:`CamelCase` or :ref:`Simple Regex` to locate a specific element.

.. figure:: ../../images/common/sv-uvm-browser-presentation.png
	:align: center


.. list-table::
   :header-rows: 1
   :widths: auto

   * - Toolbar
     -  
     -  
   * - .. figure:: ../../images/icons/act16/prepend_package.png
     - Prepend Package Name
     - Prepend the enclosing package name to the name of each class, useful when you explore for example all agents across packages.
   * - .. figure:: ../../images/icons/obj16/package.png
     - Group By Package
     - Group classes by package. You may chose to see for example all agents across packages or to explore all categories in a specific package.

The top *UVM Types Panel* presents all the UVM-based classes defined in your verification environment. For convenience they are grouped by categories like agents or monitors.

The inheritance hierarchy between classes is shown up to the UVM base class.

.. list-table::
   :header-rows: 1
   :widths: auto

   * -  
     - Description
   * - .. figure:: ../../images/icons/ovr16/outside_package.png
         :width: 50px 

     - Class is declared under a different package than the parent package presented in the view's tree because one of its children are declared under that parent package and "Group by Package" is enabled.
   * - .. figure:: ../../images/icons/ovr16/physical_ovr.png
         :width: 50px

     - Physical sequencer or sequence. A physical sequencer is a sequencer that is connected to a driver. A physical sequence always extends uvm_sequence parameterized with a class that extends uvm_sequence_item and contains \`uvm_declare_p_sequencer macro with a physical sequencer as argument.


The categories and their corresponding base classes are the following

.. list-table::
   :header-rows: 1
   :widths: auto

   * - Categories
     - Base class
     - Notes
   * - Agents
     - uvm_agent
     -  
   * - Drivers
     - uvm_driver
     -  
   * - Envs
     - uvm_env
     -  
   * - Items
     - uvm_sequence_item
     -  
   * - Monitors
     - uvm_monitor
     -  
   * - Memories
     - uvm_mem
     -  
   * - Other Components
     - uvm_component
     - Any class deriving from uvm_component which does not fall into any other category within this table.
   * - Other Objects
     - uvm_object
     -  
   * - Ports
     - uvm_port_base, uvm_tlm_if_base,  uvm_tlm_extension_base, uvm_sqr_if_base,  uvm_tlm_req_rsp_channel, uvm_tlm_fifo_base
     -  
   * - Registers
     - uvm_reg
     -  
   * - Backdoor Registers
     - uvm_reg_backdoor
     -  
   * - Frontdoor Registers
     - uvm_reg_frontdoor
     -  
   * - Register Adapters
     - uvm_reg_adapter
     -  
   * - Register Blocks
     - uvm_reg_block
     -  
   * - Register Fields
     - uvm_reg_field
     -  
   * - Register Sequences
     - uvm_reg_sequence
     -  
   * - FIFO Registers
     - uvm_reg_fifo
     -  
   * - Register Files
     - uvm_reg_file
     -  
   * - Register Maps
     - uvm_reg_map
     -  
   * - Register Predictors
     - uvm_reg_predictor
     -  
   * - Scoreboards
     - uvm_scoreboard
     -  
   * - Sequencers
     - uvm_sequencer
     -  
   * - Sequences
     - uvm_sequence
     -  
   * - Tests
     - uvm_test
     -  

.. |uvm-btn| image:: ../../images/icons/obj16/uvm.png
  :class: inline

The bottom *Members Panel* panel displays class members. You can toggle the **UVM Members Mode** on/off using the |uvm-btn| button.

In **UVM Members Mode** it displays the following members:

-   Virtual interfaces
-   Class members registered to the factory using the *`uvm_field...* macros
-   Class members of an UVM-based type (TLM ports included)
-   Overridden functions and tasks from parent UVM base classes

When the **UVM Members Mode** is off, the *Members Panel* behaves exactly like the *Members Panel* of the :ref:`Type Hierarchy View`.

.. _UVM Sequence Tree View:

UVM Sequence Tree View
~~~~~~~~~~~~~~~~~~~~~~

The **UVM Sequence Tree View** presents the call tree of an UVM sequence. The call tree is made of all sub-sequences that are triggered by the sequence, recursively down to leaf sequence items.

To select a sequence and inspect its call tree, position the cursor on the UVM sequence class name in the editor and:

-  press :kbd:`Ctrl+Alt+Shift+S`
-  or right click and choose :menuselection:`Show --> UVM Sequence Tree`  from the menu.

The UVM Sequence Tree view is automatically raised and populated with the call tree of the selected sequence.

At any time you can open the view from :menuselection:`Window --> Show View --> Other... --> DVT --> UVM Sequence Tree`.

.. figure:: ../../images/common/sv_uvm_sequence_tree_view.png
    :align: center


.. list-table::
   :header-rows: 1
   :widths: auto

   * - Toolbar
     -  
     -  
   * - .. figure:: ../../images/icons/act16/history_list.png
     - Show History List
     - Click to see the previously inspected UVM sequence call trees.
   * - .. figure:: ../../images/icons/act16/prepend_package.png
     - Prepend Package Name
     - Prepend the enclosing package name to the name of each class.

The view label shows the current project and the sequence for which the call tree is presented.

The sequence call tree has the following node types:

.. list-table::
   :header-rows: 0
   :widths: auto

   * - .. figure:: ../../images/icons/obj16/sequence_obj.png
     - A class that inherits from uvm_sequence. A sub-sequence may be called from an \`uvm_do macro or started using the seq.start() function.
   * - .. figure:: ../../images/icons/obj16/sequence_item_obj.png
     - A class that inherits from uvm_sequence_item.
   * - .. figure:: ../../images/icons/obj16/fork_join_obj.png
     - A fork/join block in the sequence body().
   * - .. figure:: ../../images/icons/obj16/fork_join_process_obj.png
     - A process from a fork/join block.


.. figure:: ../../images/common/sv_uvm_sequence_tree_right_click_menu.png
	:align: center




*Right-click* on a sequence node in the tree and you have the following options :

-  **Show Usages (References)**  Search for the references of the selected sequence. More details :ref:`Show Usages, Readers or Writers`.
-  **Show Type Hierarchy**  Show the type hierarchy for the selected sequence. More details :ref:`Type Hierarchy View`.
-  **Show Verification Hierarchy**  Show the verification hierarchy for the selected sequence. More details :ref:`Verification Hierarchy View`.
-  **Show UVM Sequence Tree**  Show the sequence tree for the selected sequence. Practically set the selected sequence as root.
-  **Show Diagram**  Show the diagram for the selected sequence. More details :ref:`Diagrams`.
-  **Copy**  Copy the selected sequence class name to clipboard.


.. _Verification Hierarchy View:

Verification Hierarchy View
~~~~~~~~~~~~~~~~~~~~~~~~~~~


The **Verification Hierarchy View** presents the UVM object instance tree. An UVM object instance is a class member of an UVM based type that is created using an UVM factory *create* call.

To populate the view, go to the **UVM** menu and **Select Verification Top** or use the view toolbar button.

For the selected UVM test, you have the option to view a statically elaborated hierarchy or perform a :ref:`UVM Runtime Elaboration` in order to view testbench structures accurately reflecting the configuration at start of simulation.

.. figure:: ../../images/common/sv-select-verification-top.png
	:align: center


.. figure:: ../../images/common/sv-verification-hierarchy-presentation.png
	:align: center

.. |verification_hierarchy_top| image:: ../../images/icons/act16/verification_hierarchy_top.png
  :class: inline

.. |history_list| image:: ../../images/icons/act16/history_list.png
  :class: inline

.. |show_hide_ports| image:: ../../images/icons/act16/show_hide_ports.png
  :class: inline

.. |alphab_sort| image:: ../../images/icons/act16/alphab_sort.png
  :class: inline

.. |show_uvm_components| image:: ../../images/icons/obj16/xvm_component_instance_obj.png
  :class: inline

.. |prepend_package_name| image:: ../../images/icons/act16/prepend_package.png
  :class: inline


- |verification_hierarchy_top|  **Select Verification Top** select a UVM test.
- |history_list|  **History List** Click to see the previously inspected components.
- |show_hide_ports|  **Show/Hide Ports** Shows or hides the UVM ports of the selected component. You can set the ports panel to the right or below the hierarchy.
- |show_uvm_components|  **Show only UVM Components** Show only UVM component instances in the hierarchy. By default it is on which means that the UVM object instances instantiated using create are not shown.
- |prepend_package_name|  **Prepend Package Name** Prepend the enclosing package name to the name of each class, useful when you explore for example all agents across packages.
- |alphab_sort|  **Alphabetical Sort** Sort instances and ports alphabetically. By default it is off which means that the instances and the ports are presented in their declaration order from the source files.

The view label shows the current project, the current top component and the number of instances in the hierarchy. 

.. figure:: ../../images/common/sv-verification-hierarchy-info-label.png
	:align: center


You can *double-click* on any component to go to its UVM factory create call.

*Right-click* on an instance in the hierarchy and you have the following options :

.. figure:: ../../images/common/sv-verification-hierarchy-view-menu.png
	:align: center


-  **Show Usages (References)** Search for the references of the selected instance. More details :ref:`Show Usages, Readers or Writers`
-  **Show Layers** Show the layers of the selected instance. More details :ref:`Layers View`.
-  **Show Type Hierarchy** Show the type hierarchy for the selected instance type. More details :ref:`Type Hierarchy View`.
-  **Show Verification Hierarchy** Set the selected instance as the top of the hierarchy and update the view. 
-  **Show Diagram** Generate the UVM Component Diagram of the selected instance. More details :ref:`UVM Components Diagrams`.
-  **Copy**  Copy the label text of the selected instance to clipboard.
-  **Copy Hierarchy Path**  Copy the hierarchy path of the selected instance to clipboard. You can change the segment separator from **Window > Preferences > DVT**.
-  **Open Type Declaration** Go to the component declaration of the selected instance. 

You can *double-click* on any port to go to its declaration.

*Right-click* on a port and you have the options to search for its usages, its layers and for its type hierarchy, also you can copy its name and the full hierarchy path of the selected port.

.. figure:: ../../images/common/sv-verification-hierarchy-view-ports-menu.png
	:align: center


You can use the filters to locate a specific instance or port. You may use slash '/' characters to filter hierarchically one level and '//' to filter hierarchically all the levels. You may use the dot '.' character to filter instances that contain a specific port. See :ref:`Quick Search in Views` for more details.

For example, filtering hierarchically all the levels for a specific port name :

.. figure:: ../../images/common/sv-verification-hierarchy-filtering-filter-hierarchy-and-port.png
	:align: center



