.. _UVM Browser:

UVM Browser
===========

.. rst-class:: lead

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

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

   * - 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: 20 80

   * - 
     - Description
   * - .. figure:: ../../images/icons/ovr16/outside_package.png
     - 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
     - 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

  * - 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
    - 


.. |d1| 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 |d1| 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`.

