IEEE Std 1800.2-2020
IEEE Standard for Universal Verification Methodology Language Reference Manual
18
Copyright © 2020 IEEE. All rights reserved.
Policies—Each of UVM’s policy classes performs a specific task for uvm_object–based objects: printing,
comparing, recording, packing, and unpacking (see 5.3). They are implemented separately from uvm_object to
allow for different ways to print, compare, etc., without modifying the object class being utilized; e.g., a user
can simply apply a different printer or compare policy to change how an object is printed or compared. See
Clause 16.
Register layer—The register abstraction classes, when properly extended, abstract the read/write operations to
registers and memories in a design under test (DUT)
. See Clause 17.
Macros—UVM provides several macros to help increase user productivity. See Annex B.
Configuration and resources—These classes provide a configuration database, which is used to store and
retrieve both configuration time and run-time properties. See Annex C.
Package scope—This category defines a small list of types, variables, functions, and tasks defined in the
uvm_pkg scope. These items are accessible from any scope that imports the uvm_pkg. See Annex F.
Command line processor—This a general interface to the command line arguments that were provided for the
given simulation. See Annex G.
5. Base classes
5.1 Overview
The UVM base class library defines a set of base classes and utilities that facilitate the design of modular,
scalable, and reusable verification environments. The basic building blocks for all environments are
components and the transactions they use to communicate.
a) uvm_object—All components and transactions derive from uvm_object (see 5.3), which defines an
interface of core class-based operations: create, copy, compare, print, sprint, record, etc. It also defines
interfaces for instance identification (name, type name, unique id, etc.) and random seeding. All
derivatives of uvm_object are factory enabled, unless otherwise specified.
b) uvm_component—The uvm_component class (see 13.1) is the base class for all UVM components.
Components are quasi-static objects that exist throughout simulation. This allows them to establish
structural hierarchy much like modules and program blocks. Components participate in a phased test
flow during the course of simulation. Each phase—build, connect, run, etc.—is defined by a callback
that is executed in precise order. Finally, the uvm_component also defines any configuration,
reporting, transaction recording, and factory interfaces.
c) uvm_transaction—The uvm_transaction (see 5.4) is the root base class for UVM transactions,
which, unlike uvm_components (see 13.1), are transient in nature. It extends uvm_object (see 5.3) to
include a timing and recording interface. Simple transactions can derive directly from
uvm_transaction, while sequence-enabled transactions derive from uvm_sequence_item (see 14.1).
5.2 uvm_void
The uvm_void class is the abstract base class for all UVM classes. It is an abstract class with no data members
or functions. It allows for creation of generic containers of objects, similar to a void pointer in the C
programming language. User classes derived directly from uvm_void inherit none of the UVM functionality,
but such classes may be placed in uvm_void-typed containers along with other UVM objects.
Authorized licensed use limited to: Dalian University of Technology. Downloaded on March 27,2021 at 10:31:39 UTC from IEEE Xplore. Restrictions apply.