# DV Library Classes

# DV library classes

## Overview
The DV library classes form the base layer / framework for constructing UVM
testbenches. These classes provide features (settings, methods, hooks and other
constructs used in verification) that are generic enough to be reused across
all testbenches.

In this doc, we will capture some of the most salient / frequently used features
in extended classes. These classes are being updated frequently. So, for a more
detailed understanding, please read the class definitions directly.

The DV library classes fall into 3 categories - UVM RAL (register abstraction
layer), UVM agent, and UVM environment extensions.

### UVM RAL extensions
The RAL model generated using the [reggen](../../../../util/reggen/doc/setup_and_use.md) tool
extend from these classes. These themselves extend from the corresponding RAL
classes provided in UVM.

#### `dv_base_reg_field`
Currently, this class does not provide any additional features. One of the
features planned for future is setting exclusion tags at the field level for the
CSR suite of tests that will be extracted automatically from the Hjson-based
IP CSR specification.

#### `dv_base_reg`
This class provides the following functions to support verification:
* `gen_n_used_bits()`: This function returns the actual number of bits used in
  the CSR (sum of all available field widths).
* `get_msb_pos()`: This function returns the MSB bit position of all available
  fields. CSR either ends at this bit (`BUS_DW` - 1) or has reserved / invalid
  bits beyond this bit.

#### `dv_base_reg_block`
* ` build(uvm_reg_addr_t base_addr)`: This function is implemented as a pseudo
  pure virtual function (returns a fatal error if called directly). It is used
  for building the complete RAL model. For a polymorphic approach, the DV user
  can use this class handle to create the extended (IP specific) class instance
  and call this function to build the actual RAL model. This is exactly how it
  is done in [dv_base_env_cfg](#dv_base_env_cfg).

#### `dv_base_reg_map`
Currently, this class does not provide any additional features. Having this
extension provides an opportunity to add common features in future.

### UVM Agent extensions
TODO

### UVM Environment extensions
TODO
