.. _UVM Runtime Elaboration:

UVM Runtime Elaboration
=======================


By performing the runtime elaboration of a UVM test, you can view testbench structures accurately reflecting the configuration at start of simulation.

Go to the **UVM** menu and **Select Verification Top**.

.. figure:: ../../images/common/factory-queries-menu.png

Pick a test and check **Perform UVM runtime elaboration**.

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

Alternatively, press the **T** button in the Verification Hierarchy view toolbar.
Any runtime elaboration of a test is automatically saved and you can later select it as a Verification Top.

The output of the UVM elaboration is printed in the Console View.

Double click on the left vertical bar to add / remove a breakpoint. If you set any breakpoint in the source code, you are prompted to switch to the **Debug Perspective**.
Elaboration suspends whenever a breakpoint is reached.

The **Debug View** presents all the threads and the current call stack.

.. figure:: ../../images/common/sv-uvm-elaboration-debug-view.png

The **Variables View** presents variable values in the current scope.

.. figure:: ../../images/common/sv-uvm-elaboration-variables-view.png

The **Breakpoints View** presents all the breakpoints and their enablement state.

.. figure:: ../../images/common/sv-uvm-elaboration-breakpoints-view.png

You can add **Conditional breakpoints** to suspend execution only when a specific condition is met.

.. figure:: ../../images/common/sv-uvm-elaboration-breakpoints-view-conditional-breakpoints.png

Enable **Trigger Point** to use the selected breakpoint as a trigger point. All the other breakpoints are enabled only after any of the trigger points has been hit. 

Set a **Hit Count** value to suspend the execution only when the the breakpoint is encountered for the hit_count time

You can also add printouts without altering the source code by using **tracepoints**. Right click on the left vertical bar to add a tracepoint. You can use only a **$display()** statement in the editable textbox below the breakpoints list, however its arguments may call other functions.

.. figure:: ../../images/common/sv-uvm-elaboration-breakpoints-view-tracepoint.png

**Watchpoints** tell you exactly what line of code causes a variable to change. You can add a watchpoint by double-clicking on the editor vertical bar next to a global variable declaration or a method argument.

By default, execution is suspended whenever the value of the given variable is accessed or modified. You can choose when to stop execution by configuring the Access/Modification checkboxes in Breakpoints View.

.. figure:: ../../images/common/sv-uvm-elaboration-breakpoints-view-watchpoint.png

**DPI-C Handling**

The UVM runtime elaboration involves DPI-C method calls. DVT has a built-in library of UVM DPI-C implementations. To use it simply check the corresponding box in the verification top selection dialog.

If user-defined DPI-C functions are involved in the elaboration, specify the required shared objects in the **Additional arguments** textarea using the standard - **sv_lib**, - **sv_liblist** and - **sv_root** flags, for example:
 -sv_lib /path/to/dpic.so

From the **Project** menu you can **Generate the DPI-C header stubs** required for the C compilation. Headers, C++ sources and object files are created in the **dvt.data/native.bridge/headers** directory located in the project root.

**DPI-C Troubleshooting**

This section covers several debugging directives you can use if you encounter issues when working with DPI-C methods:

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

   * - +dvtx_native_verbosity
     - The UVM Runtime Elaboration displays the name of the executed import/export DPI-C methods in the Console.
   * - +dvtx_native_trace
     - The UVM Runtime Elaboration logs debug information as part of the C/C++ native evaluation.
   * - +dvtx_native_no_gen
     - Provides the ability to edit the automatically generated DPI-C stubs.
   * - +dvtx_native_jimpl_uvm
     - Use the built-in library of UVM DPI-C implementations.
   * - +dvtx_native_runtime_dir+<path>
     - Instructs DVT to set the working directory of native runtime executable. Default value: project root


.. note:: 

  If you need any of these directives, you need to add them in the **Additional arguments** text area. 

At any time, you can set a system variable in the build configuration file to change the location of **dvt.data** as follows:
 +dvt_setenv+DVT_DATA=/path/to/dvt/data

